aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rw-r--r--ChangeLog439
-rw-r--r--LICENSE34
-rw-r--r--Makefile.am1
-rw-r--r--README3
-rw-r--r--ReleaseNotes900
-rw-r--r--acinclude.m42
-rw-r--r--changes/122074
-rw-r--r--changes/bufferevent_compilation6
-rw-r--r--changes/bug101163
-rw-r--r--changes/bug1038-36
-rw-r--r--changes/bug11200-caching7
-rw-r--r--changes/bug113024
-rw-r--r--changes/bug116793
-rw-r--r--changes/bug116838
-rw-r--r--changes/bug117875
-rw-r--r--changes/bug1179215
-rw-r--r--changes/bug120614
-rw-r--r--changes/bug121604
-rw-r--r--changes/bug122023
-rw-r--r--changes/bug122054
-rw-r--r--changes/bug122264
-rw-r--r--changes/bug123924
-rw-r--r--changes/bug125033
-rw-r--r--changes/bug125735
-rw-r--r--changes/bug126025
-rw-r--r--changes/bug126933
-rw-r--r--changes/bug1270010
-rw-r--r--changes/bug127185
-rw-r--r--changes/bug127284
-rw-r--r--changes/bug12730-systemd-verify-config3
-rw-r--r--changes/bug12731-systemd-no-run-as-daemon9
-rw-r--r--changes/bug12751-systemd-filesystem-sandbox5
-rw-r--r--changes/bug128304
-rw-r--r--changes/bug128484
-rw-r--r--changes/bug128555
-rw-r--r--changes/bug128647
-rw-r--r--changes/bug128783
-rw-r--r--changes/bug128997
-rw-r--r--changes/bug129084
-rw-r--r--changes/bug12939-systemd-no-new-privileges4
-rw-r--r--changes/bug129488
-rw-r--r--changes/bug129965
-rw-r--r--changes/bug129973
-rw-r--r--changes/bug130007
-rw-r--r--changes/bug130606
-rw-r--r--changes/bug130643
-rw-r--r--changes/bug130713
-rw-r--r--changes/bug130813
-rw-r--r--changes/bug130853
-rw-r--r--changes/bug130964
-rw-r--r--changes/bug131003
-rw-r--r--changes/bug131022
-rw-r--r--changes/bug131044
-rw-r--r--changes/bug131248
-rw-r--r--changes/bug1312610
-rw-r--r--changes/bug13151-client13
-rw-r--r--changes/bug13196-systemd-writable-run-directory3
-rw-r--r--changes/bug132055
-rw-r--r--changes/bug132147
-rw-r--r--changes/bug132965
-rw-r--r--changes/bug133155
-rw-r--r--changes/bug1339912
-rw-r--r--changes/bug13399_part13
-rw-r--r--changes/bug134475
-rw-r--r--changes/bug136444
-rw-r--r--changes/bug136786
-rw-r--r--changes/bug136986
-rw-r--r--changes/bug137014
-rw-r--r--changes/bug137074
-rw-r--r--changes/bug137133
-rw-r--r--changes/bug42446
-rw-r--r--changes/bug74844
-rw-r--r--changes/bug7733a4
-rw-r--r--changes/bug78035
-rw-r--r--changes/bug81976
-rw-r--r--changes/bug838711
-rw-r--r--changes/bug84025
-rw-r--r--changes/bug98015
-rw-r--r--changes/bug98126
-rw-r--r--changes/check_dup_args_gencert3
-rw-r--r--changes/coverage-html5
-rw-r--r--changes/crash_handler_in_tests3
-rw-r--r--changes/curve25519-donna32-bug12
-rw-r--r--changes/doc133815
-rw-r--r--changes/feature131535
-rw-r--r--changes/feature132116
-rw-r--r--changes/feature132124
-rw-r--r--changes/feature55832
-rw-r--r--changes/feature95034
-rw-r--r--changes/further-12184-diagnostic2
-rw-r--r--changes/geoip-august20143
-rw-r--r--changes/geoip-july20143
-rw-r--r--changes/geoip-november20143
-rw-r--r--changes/geoip6-august20143
-rw-r--r--changes/geoip6-july20142
-rw-r--r--changes/geoip6-november20143
-rw-r--r--changes/no-wince4
-rw-r--r--changes/no_global_ccc3
-rw-r--r--changes/prop21516
-rw-r--r--changes/spurious-clang-warnings10
-rw-r--r--changes/test.h_msvc3
-rw-r--r--changes/threads-required12
-rw-r--r--changes/ticket-112914
-rw-r--r--changes/ticket111448
-rw-r--r--changes/ticket126886
-rw-r--r--changes/ticket126909
-rw-r--r--changes/ticket128843
-rw-r--r--changes/ticket130365
-rw-r--r--changes/ticket131724
-rw-r--r--changes/ticket_131196
-rw-r--r--changes/tickets64566
-rw-r--r--configure.ac219
-rw-r--r--contrib/win32build/tor-mingw.nsi.in2
-rw-r--r--doc/HACKING10
-rw-r--r--doc/TUNING47
-rw-r--r--doc/tor.1.txt117
-rw-r--r--scripts/coccinelle/calloc.cocci15
-rw-r--r--scripts/codegen/makedesc.py218
-rwxr-xr-xscripts/codegen/run_trunnel.sh11
-rwxr-xr-xscripts/maint/format_changelog.py296
-rwxr-xr-xscripts/test/cov-diff4
-rw-r--r--src/common/address.c19
-rw-r--r--src/common/address.h2
-rw-r--r--src/common/aes.c2
-rw-r--r--src/common/aes.h2
-rw-r--r--src/common/backtrace.c2
-rw-r--r--src/common/backtrace.h2
-rw-r--r--src/common/compat.c38
-rw-r--r--src/common/compat.h20
-rw-r--r--src/common/compat_libevent.c7
-rw-r--r--src/common/compat_libevent.h2
-rw-r--r--src/common/container.c675
-rw-r--r--src/common/container.h12
-rw-r--r--src/common/crypto.c56
-rw-r--r--src/common/crypto.h8
-rw-r--r--src/common/crypto_curve25519.c178
-rw-r--r--src/common/crypto_curve25519.h18
-rw-r--r--src/common/crypto_ed25519.c353
-rw-r--r--src/common/crypto_ed25519.h113
-rw-r--r--src/common/crypto_format.c24
-rw-r--r--src/common/crypto_pwbox.c187
-rw-r--r--src/common/crypto_pwbox.h20
-rw-r--r--src/common/crypto_s2k.c460
-rw-r--r--src/common/crypto_s2k.h73
-rw-r--r--src/common/di_ops.c2
-rw-r--r--src/common/di_ops.h2
-rw-r--r--src/common/include.am16
-rw-r--r--src/common/log.c255
-rw-r--r--src/common/memarea.c2
-rw-r--r--src/common/memarea.h2
-rw-r--r--src/common/mempool.c2
-rw-r--r--src/common/mempool.h2
-rw-r--r--src/common/procmon.c2
-rw-r--r--src/common/procmon.h2
-rw-r--r--src/common/sandbox.c23
-rw-r--r--src/common/sandbox.h4
-rw-r--r--src/common/testsupport.h2
-rw-r--r--src/common/torgzip.c4
-rw-r--r--src/common/torgzip.h2
-rw-r--r--src/common/torint.h2
-rw-r--r--src/common/torlog.h5
-rw-r--r--src/common/tortls.c59
-rw-r--r--src/common/tortls.h2
-rw-r--r--src/common/util.c226
-rw-r--r--src/common/util.h9
-rw-r--r--src/common/util_process.c2
-rw-r--r--src/common/util_process.h2
-rw-r--r--src/config/geoip20036
-rw-r--r--src/config/geoip65649
-rw-r--r--src/ext/README12
-rw-r--r--src/ext/csiphash.c2
-rw-r--r--src/ext/ed25519/ref10/Makefile41
-rw-r--r--src/ext/ed25519/ref10/README.tor23
-rw-r--r--src/ext/ed25519/ref10/api.h4
-rw-r--r--src/ext/ed25519/ref10/base.h1344
-rw-r--r--src/ext/ed25519/ref10/base.py65
-rw-r--r--src/ext/ed25519/ref10/base2.h40
-rw-r--r--src/ext/ed25519/ref10/base2.py60
-rw-r--r--src/ext/ed25519/ref10/blinding.c76
-rw-r--r--src/ext/ed25519/ref10/crypto_hash_sha512.h30
-rw-r--r--src/ext/ed25519/ref10/crypto_int32.h25
-rw-r--r--src/ext/ed25519/ref10/crypto_int64.h23
-rw-r--r--src/ext/ed25519/ref10/crypto_sign.h9
-rw-r--r--src/ext/ed25519/ref10/crypto_uint32.h3
-rw-r--r--src/ext/ed25519/ref10/crypto_uint64.h3
-rw-r--r--src/ext/ed25519/ref10/crypto_verify_32.h5
-rw-r--r--src/ext/ed25519/ref10/d.h1
-rw-r--r--src/ext/ed25519/ref10/d.py28
-rw-r--r--src/ext/ed25519/ref10/d2.h1
-rw-r--r--src/ext/ed25519/ref10/d2.py28
-rw-r--r--src/ext/ed25519/ref10/ed25519_ref10.h30
-rw-r--r--src/ext/ed25519/ref10/fe.h56
-rw-r--r--src/ext/ed25519/ref10/fe_0.c19
-rw-r--r--src/ext/ed25519/ref10/fe_1.c19
-rw-r--r--src/ext/ed25519/ref10/fe_add.c57
-rw-r--r--src/ext/ed25519/ref10/fe_cmov.c63
-rw-r--r--src/ext/ed25519/ref10/fe_copy.c29
-rw-r--r--src/ext/ed25519/ref10/fe_frombytes.c73
-rw-r--r--src/ext/ed25519/ref10/fe_invert.c14
-rw-r--r--src/ext/ed25519/ref10/fe_isnegative.c16
-rw-r--r--src/ext/ed25519/ref10/fe_isnonzero.c19
-rw-r--r--src/ext/ed25519/ref10/fe_mul.c253
-rw-r--r--src/ext/ed25519/ref10/fe_neg.c45
-rw-r--r--src/ext/ed25519/ref10/fe_pow22523.c13
-rw-r--r--src/ext/ed25519/ref10/fe_sq.c149
-rw-r--r--src/ext/ed25519/ref10/fe_sq2.c160
-rw-r--r--src/ext/ed25519/ref10/fe_sub.c57
-rw-r--r--src/ext/ed25519/ref10/fe_tobytes.c119
-rw-r--r--src/ext/ed25519/ref10/ge.h95
-rw-r--r--src/ext/ed25519/ref10/ge_add.c11
-rw-r--r--src/ext/ed25519/ref10/ge_add.h97
-rw-r--r--src/ext/ed25519/ref10/ge_add.q49
-rw-r--r--src/ext/ed25519/ref10/ge_double_scalarmult.c96
-rw-r--r--src/ext/ed25519/ref10/ge_frombytes.c50
-rw-r--r--src/ext/ed25519/ref10/ge_madd.c11
-rw-r--r--src/ext/ed25519/ref10/ge_madd.h88
-rw-r--r--src/ext/ed25519/ref10/ge_madd.q46
-rw-r--r--src/ext/ed25519/ref10/ge_msub.c11
-rw-r--r--src/ext/ed25519/ref10/ge_msub.h88
-rw-r--r--src/ext/ed25519/ref10/ge_msub.q46
-rw-r--r--src/ext/ed25519/ref10/ge_p1p1_to_p2.c12
-rw-r--r--src/ext/ed25519/ref10/ge_p1p1_to_p3.c13
-rw-r--r--src/ext/ed25519/ref10/ge_p2_0.c8
-rw-r--r--src/ext/ed25519/ref10/ge_p2_dbl.c11
-rw-r--r--src/ext/ed25519/ref10/ge_p2_dbl.h73
-rw-r--r--src/ext/ed25519/ref10/ge_p2_dbl.q41
-rw-r--r--src/ext/ed25519/ref10/ge_p3_0.c9
-rw-r--r--src/ext/ed25519/ref10/ge_p3_dbl.c12
-rw-r--r--src/ext/ed25519/ref10/ge_p3_to_cached.c17
-rw-r--r--src/ext/ed25519/ref10/ge_p3_to_p2.c12
-rw-r--r--src/ext/ed25519/ref10/ge_p3_tobytes.c14
-rw-r--r--src/ext/ed25519/ref10/ge_precomp_0.c8
-rw-r--r--src/ext/ed25519/ref10/ge_scalarmult_base.c109
-rw-r--r--src/ext/ed25519/ref10/ge_sub.c11
-rw-r--r--src/ext/ed25519/ref10/ge_sub.h97
-rw-r--r--src/ext/ed25519/ref10/ge_sub.q49
-rw-r--r--src/ext/ed25519/ref10/ge_tobytes.c14
-rw-r--r--src/ext/ed25519/ref10/keyconv.c37
-rw-r--r--src/ext/ed25519/ref10/keypair.c51
-rw-r--r--src/ext/ed25519/ref10/open.c42
-rw-r--r--src/ext/ed25519/ref10/pow22523.h161
-rw-r--r--src/ext/ed25519/ref10/pow22523.q61
-rw-r--r--src/ext/ed25519/ref10/pow225521.h161
-rw-r--r--src/ext/ed25519/ref10/pow225521.q61
-rwxr-xr-xsrc/ext/ed25519/ref10/q2h.sh4
-rw-r--r--src/ext/ed25519/ref10/randombytes.h4
-rw-r--r--src/ext/ed25519/ref10/sc.h15
-rw-r--r--src/ext/ed25519/ref10/sc_muladd.c368
-rw-r--r--src/ext/ed25519/ref10/sc_reduce.c275
-rw-r--r--src/ext/ed25519/ref10/sign.c29
-rw-r--r--src/ext/ed25519/ref10/sqrtm1.h1
-rw-r--r--src/ext/ed25519/ref10/sqrtm1.py28
-rw-r--r--src/ext/ht.h5
-rw-r--r--src/ext/include.am76
-rw-r--r--src/ext/tinytest_demo.c16
-rw-r--r--src/ext/tor_queue.h23
-rw-r--r--src/ext/trunnel/trunnel-impl.h310
-rw-r--r--src/ext/trunnel/trunnel.c247
-rw-r--r--src/ext/trunnel/trunnel.h64
-rw-r--r--src/include.am2
-rw-r--r--src/or/addressmap.c2
-rw-r--r--src/or/addressmap.h2
-rw-r--r--src/or/buffers.c49
-rw-r--r--src/or/buffers.h2
-rw-r--r--src/or/channel.c2
-rw-r--r--src/or/channel.h2
-rw-r--r--src/or/channeltls.c6
-rw-r--r--src/or/channeltls.h2
-rw-r--r--src/or/circpathbias.c2
-rw-r--r--src/or/circpathbias.h2
-rw-r--r--src/or/circuitbuild.c31
-rw-r--r--src/or/circuitbuild.h2
-rw-r--r--src/or/circuitlist.c44
-rw-r--r--src/or/circuitlist.h2
-rw-r--r--src/or/circuitmux.c2
-rw-r--r--src/or/circuitmux.h2
-rw-r--r--src/or/circuitmux_ewma.c6
-rw-r--r--src/or/circuitmux_ewma.h2
-rw-r--r--src/or/circuitstats.c24
-rw-r--r--src/or/circuitstats.h2
-rw-r--r--src/or/circuituse.c14
-rw-r--r--src/or/circuituse.h2
-rw-r--r--src/or/command.c2
-rw-r--r--src/or/command.h2
-rw-r--r--src/or/config.c387
-rw-r--r--src/or/config.h6
-rw-r--r--src/or/confparse.c2
-rw-r--r--src/or/confparse.h2
-rw-r--r--src/or/connection.c12
-rw-r--r--src/or/connection.h5
-rw-r--r--src/or/connection_edge.c2
-rw-r--r--src/or/connection_edge.h2
-rw-r--r--src/or/connection_or.c2
-rw-r--r--src/or/connection_or.h2
-rw-r--r--src/or/control.c58
-rw-r--r--src/or/control.h8
-rw-r--r--src/or/cpuworker.c4
-rw-r--r--src/or/cpuworker.h2
-rw-r--r--src/or/directory.c33
-rw-r--r--src/or/directory.h2
-rw-r--r--src/or/dirserv.c113
-rw-r--r--src/or/dirserv.h2
-rw-r--r--src/or/dirvote.c38
-rw-r--r--src/or/dirvote.h2
-rw-r--r--src/or/dns.c2
-rw-r--r--src/or/dns.h2
-rw-r--r--src/or/dnsserv.c2
-rw-r--r--src/or/dnsserv.h2
-rw-r--r--src/or/entrynodes.c19
-rw-r--r--src/or/entrynodes.h4
-rw-r--r--src/or/eventdns_tor.h2
-rw-r--r--src/or/ext_orport.h2
-rw-r--r--src/or/fp_pair.c2
-rw-r--r--src/or/fp_pair.h2
-rw-r--r--src/or/geoip.c6
-rw-r--r--src/or/geoip.h2
-rw-r--r--src/or/hibernate.c53
-rw-r--r--src/or/hibernate.h3
-rw-r--r--src/or/include.am8
-rw-r--r--src/or/main.c63
-rw-r--r--src/or/main.h6
-rw-r--r--src/or/microdesc.c76
-rw-r--r--src/or/microdesc.h4
-rw-r--r--src/or/networkstatus.c33
-rw-r--r--src/or/networkstatus.h19
-rw-r--r--src/or/nodelist.c4
-rw-r--r--src/or/nodelist.h2
-rw-r--r--src/or/ntmain.c2
-rw-r--r--src/or/ntmain.h2
-rw-r--r--src/or/onion.c24
-rw-r--r--src/or/onion.h4
-rw-r--r--src/or/onion_fast.c2
-rw-r--r--src/or/onion_fast.h2
-rw-r--r--src/or/onion_ntor.c2
-rw-r--r--src/or/onion_ntor.h5
-rw-r--r--src/or/onion_tap.c2
-rw-r--r--src/or/onion_tap.h2
-rw-r--r--src/or/or.h56
-rw-r--r--src/or/policies.c2
-rw-r--r--src/or/policies.h2
-rw-r--r--src/or/reasons.c2
-rw-r--r--src/or/reasons.h2
-rw-r--r--src/or/relay.c4
-rw-r--r--src/or/relay.h2
-rw-r--r--src/or/rendclient.c27
-rw-r--r--src/or/rendclient.h2
-rw-r--r--src/or/rendcommon.c21
-rw-r--r--src/or/rendcommon.h3
-rw-r--r--src/or/rendmid.c6
-rw-r--r--src/or/rendmid.h2
-rw-r--r--src/or/rendservice.c71
-rw-r--r--src/or/rendservice.h2
-rw-r--r--src/or/rephist.c2
-rw-r--r--src/or/rephist.h2
-rw-r--r--src/or/replaycache.c2
-rw-r--r--src/or/replaycache.h2
-rw-r--r--src/or/router.c60
-rw-r--r--src/or/router.h4
-rw-r--r--src/or/routerlist.c395
-rw-r--r--src/or/routerlist.h22
-rw-r--r--src/or/routerparse.c91
-rw-r--r--src/or/routerparse.h14
-rw-r--r--src/or/routerset.c2
-rw-r--r--src/or/routerset.h2
-rw-r--r--src/or/statefile.c2
-rw-r--r--src/or/statefile.h2
-rw-r--r--src/or/status.c8
-rw-r--r--src/or/status.h2
-rw-r--r--src/or/tor_main.c2
-rw-r--r--src/or/transports.c14
-rw-r--r--src/or/transports.h12
-rw-r--r--src/test/Makefile.nmake7
-rw-r--r--src/test/bench.c73
-rw-r--r--src/test/ed25519_exts_ref.py234
-rw-r--r--src/test/ed25519_vectors.inc150
-rw-r--r--src/test/example_extrainfo.inc192
-rw-r--r--src/test/failing_routerdescs.inc668
-rw-r--r--src/test/include.am15
-rw-r--r--src/test/slow_ed25519.py115
-rw-r--r--src/test/test-child.c2
-rwxr-xr-xsrc/test/test-network.sh17
-rw-r--r--src/test/test.c174
-rw-r--r--src/test/test.h4
-rw-r--r--src/test/test_accounting.c76
-rw-r--r--src/test/test_addr.c471
-rw-r--r--src/test/test_bt_cl.c4
-rw-r--r--src/test/test_buffers.c340
-rw-r--r--src/test/test_cell_formats.c785
-rw-r--r--src/test/test_cell_queue.c60
-rw-r--r--src/test/test_checkdir.c140
-rw-r--r--src/test/test_circuitlist.c130
-rw-r--r--src/test/test_circuitmux.c10
-rw-r--r--src/test/test_config.c317
-rw-r--r--src/test/test_containers.c393
-rw-r--r--src/test/test_controller_events.c54
-rw-r--r--src/test/test_crypto.c1064
-rw-r--r--src/test/test_data.c2
-rw-r--r--src/test/test_dir.c1149
-rw-r--r--src/test/test_entrynodes.c108
-rw-r--r--src/test/test_extorport.c189
-rw-r--r--src/test/test_hs.c20
-rw-r--r--src/test/test_introduce.c4
-rw-r--r--src/test/test_logging.c36
-rw-r--r--src/test/test_microdesc.c461
-rw-r--r--src/test/test_nodelist.c6
-rw-r--r--src/test/test_ntor_cl.c6
-rw-r--r--src/test/test_oom.c80
-rw-r--r--src/test/test_options.c8
-rw-r--r--src/test/test_policy.c42
-rw-r--r--src/test/test_pt.c74
-rw-r--r--src/test/test_relaycell.c54
-rw-r--r--src/test/test_replay.c54
-rw-r--r--src/test/test_routerkeys.c18
-rw-r--r--src/test/test_routerset.c276
-rw-r--r--src/test/test_socks.c341
-rw-r--r--src/test/test_status.c245
-rw-r--r--src/test/test_util.c2578
-rw-r--r--src/tools/tor-checkkey.c4
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.c2
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.h2
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.c2
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.h2
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.c2
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.h2
-rw-r--r--src/tools/tor-gencert.c4
-rw-r--r--src/tools/tor-resolve.c6
-rw-r--r--src/trunnel/include.am29
-rw-r--r--src/trunnel/pwbox.c515
-rw-r--r--src/trunnel/pwbox.h173
-rw-r--r--src/trunnel/pwbox.trunnel14
-rw-r--r--src/trunnel/trunnel-local.h18
-rw-r--r--src/win32/orconfig.h3
433 files changed, 39516 insertions, 12325 deletions
diff --git a/.gitignore b/.gitignore
index 8bbce20516..9ddd0c5385 100644
--- a/.gitignore
+++ b/.gitignore
@@ -138,6 +138,10 @@ cscope.*
/src/config/torrc.sample
/src/config/torrc.minimal
+# /src/ext/
+/src/ext/ed25519/ref10/libed25519_ref10.a
+/src/ext/ed25519/ref10/libed25519_ref10.lib
+
# /src/or/
/src/or/Makefile
/src/or/Makefile.in
@@ -174,6 +178,10 @@ cscope.*
/src/tools/Makefile
/src/tools/Makefile.in
+# /src/trunnel/
+/src/trunnel/libor-trunnel-testing.a
+/src/trunnel/libor-trunnel.a
+
# /src/tools/tor-fw-helper/
/src/tools/tor-fw-helper/tor-fw-helper
/src/tools/tor-fw-helper/tor-fw-helper.exe
diff --git a/ChangeLog b/ChangeLog
index df63c01bab..f40feedb84 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,441 @@
-Changes in version 0.2.6.1-alpha - 2014-??-??
+Changes in version 0.2.6.2-alpha - 2014-1?-??
+
+
+Changes in version 0.2.6.1-alpha - 2014-10-30
+ Tor 0.2.6.1-alpha is the first release in the Tor 0.2.6.x series. It
+ includes numerous code cleanups and new tests, and fixes a large
+ number of annoying bugs. Out-of-memory conditions are handled better
+ than in 0.2.5, pluggable transports have improved proxy support, and
+ clients now use optimistic data for contacting hidden services. Also,
+ we are now more robust to changes in what we consider a parseable
+ directory object, so that tightening restrictions does not have a risk
+ of introducing infinite download loops.
+
+ 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.5.x for now.
+
+ o New compiler and system requirements:
+ - Tor 0.2.6.x requires that your compiler support more of the C99
+ language standard than before. The 'configure' script now detects
+ whether your compiler supports C99 mid-block declarations and
+ designated initializers. If it does not, Tor will not compile.
+
+ We may revisit this requirement if it turns out that a significant
+ number of people need to build Tor with compilers that don't
+ bother implementing a 15-year-old standard. Closes ticket 13233.
+ - Tor no longer supports systems without threading support. When we
+ began working on Tor, there were several systems that didn't have
+ threads, or where the thread support wasn't able to run the
+ threads of a single process on multiple CPUs. That no longer
+ holds: every system where Tor needs to run well now has threading
+ support. Resolves ticket 12439.
+
+ o Removed platform support:
+ - We no longer include special code to build on Windows CE; as far
+ as we know, nobody has used Tor on Windows CE in a very long time.
+ Closes ticket 11446.
+
+ o Major features (bridges):
+ - Expose the outgoing upstream HTTP/SOCKS proxy to pluggable
+ transports if they are configured via the "TOR_PT_PROXY"
+ environment variable. Implements proposal 232. Resolves
+ ticket 8402.
+
+ o Major features (client performance, hidden services):
+ - Allow clients to use optimistic data when connecting to a hidden
+ service, which should remove a round-trip from hidden service
+ initialization. See proposal 181 for details. Implements
+ ticket 13211.
+
+ o Major features (directory system):
+ - Upon receiving an unparseable directory object, if its digest
+ matches what we expected, then don't try to download it again.
+ Previously, when we got a descriptor we didn't like, we would keep
+ trying to download it over and over. Closes ticket 11243.
+
+ o Major features (sample torrc):
+ - Add a new, infrequently-changed "torrc.minimal". This file is
+ similar to torrc.sample, but it will change as infrequently as
+ possible, for the benefit of users whose systems prompt them for
+ intervention whenever a default configuration file is changed.
+ Making this change allows us to update torrc.sample to be a more
+ generally useful "sample torrc".
+
+ o Major bugfixes (directory authorities):
+ - Do not assign the HSDir flag to relays if they are not Valid, or
+ currently hibernating. Fixes #12573. Bugfix on tor-0.2.0.10-alpha
+
+ o Major bugfixes (directory bandwidth performance):
+ - Don't flush the zlib buffer aggressively when compressing
+ directory information for clients. This should save about 7% of
+ the bandwidth currently used for compressed descriptors and
+ microdescriptors. Fixes bug 11787; bugfix on 0.1.1.23.
+
+ o Minor features (security, memory wiping):
+ - Ensure we securely wipe keys from memory after
+ crypto_digest_get_digest and init_curve25519_keypair_from_file
+ have finished using them. Resolves ticket 13477.
+
+ o Minor features (security, out-of-memory handling):
+ - When handling an out-of-memory condition, allocate less memory for
+ temporary data structures. Fixes issue 10115.
+ - When handling an out-of-memory condition, consider more types of
+ buffers, including those on directory connections, and zlib
+ buffers. Resolves ticket 11792.
+
+ o Minor features:
+ - When identity keypair is generated for first time, log a
+ congratulatory message that links to the new relay lifecycle
+ document. Implements feature 10427.
+
+ o Minor features (client):
+ - Clients are now willing to send optimistic data (before they
+ receive a 'connected' cell) to relays of any version. (Relays
+ without support for optimistic data are no longer supported on the
+ Tor network.) Resolves ticket 13153.
+
+ o Minor features (directory authorities):
+ - Don't list relays with a bandwidth estimate of 0 in the consensus.
+ Implements a feature proposed during discussion of bug 13000.
+ - In tor-gencert, report an error if the user provides the same
+ argument more than once.
+ - If a directory authority can't find a best consensus method in the
+ votes that it holds, it now falls back to its favorite consensus
+ method. Previously, it fell back to method 1. Neither of these is
+ likely to get enough signatures, but "fall back to favorite"
+ doesn't require us to maintain support an obsolete consensus
+ method. Implements part of proposal 215.
+
+ o Minor features (logging):
+ - On Unix-like systems, you can now use named pipes as the target of
+ the Log option, and other options that try to append to files.
+ Closes ticket 12061. Patch from "carlo von lynX".
+ - When opening a log file at startup, send it every log message that
+ we generated between startup and opening it. Previously, log
+ messages that were generated before opening the log file were only
+ logged to stdout. Closes ticket 6938.
+ - Add a TruncateLogFile option to overwrite logs instead of
+ appending to them. Closes ticket #5583.
+
+ o Minor features (portability, Solaris):
+ - Threads are no longer disabled by default on Solaris; we believe
+ that the versions of Solaris with broken threading support are all
+ obsolete by now. Resolves ticket 9495.
+
+ o Minor features (relay):
+ - Re-check our address after we detect a changed IP address from
+ getsockname(). This ensures that the controller command "GETINFO
+ address" will report the correct value. Resolves ticket 11582.
+ Patch from "ra".
+ - A new AccountingRule option lets Relays set whether they'd like
+ AccountingMax to be applied separately to inbound and outbound
+ traffic, or applied to the sum of inbound and outbound traffic.
+ Resolves ticket 961. Patch by "chobe".
+
+ o Minor features (testing networks):
+ - Add the TestingDirAuthVoteExit option, which lists nodes to assign
+ the "Exit" flag regardless of their uptime, bandwidth, or exit
+ policy. TestingTorNetwork must be set for this option to have any
+ effect. Previously, authorities would take up to 35 minutes to
+ give nodes the Exit flag in a test network. Partially implements
+ ticket 13161.
+
+ o Minor features (validation):
+ - Check all date/time values passed to tor_timegm and
+ parse_rfc1123_time for validity, taking leap years into account.
+ Improves HTTP header validation. Implemented with bug 13476.
+ - In correct_tm(), limit the range of values returned by system
+ localtime(_r) and gmtime(_r) to be between the years 1 and 8099.
+ This means we don't have to deal with negative or too large dates,
+ even if a clock is wrong. Otherwise we might fail to read a file
+ written by us which includes such a date. Fixes bug 13476.
+
+ o Minor bugfixes (bridge clients):
+ - When configured to use a bridge without an identity digest (not
+ recommended), avoid launching an extra channel to it when
+ bootstrapping. Fixes bug 7733; bugfix on 0.2.4.4-alpha.
+
+ o Minor bugfixes (bridges):
+ - When DisableNetwork is set, do not launch pluggable transport
+ plugins, and if any are running, terminate them. Fixes bug 13213;
+ bugfix on 0.2.3.6-alpha.
+
+ o Minor bugfixes (C correctness):
+ - Fix several instances of possible integer overflow/underflow/NaN.
+ Fixes bug 13104; bugfix on 0.2.3.1-alpha and later. Patches
+ from "teor".
+ - In circuit_build_times_calculate_timeout() in circuitstats.c,
+ avoid dividing by zero in the pareto calculations. This traps
+ under clang's "undefined-trap" sanitizer. Fixes bug 13290; bugfix
+ on tor-0.2.2.2-alpha.
+ - Fix an integer overflow in format_time_interval(). Fixes bug
+ 13393; bugfix on 0.2.0.10-alpha.
+ - Set the correct day of year value when the system's localtime(_r)
+ or gmtime(_r) functions fail to set struct tm. Not externally
+ visible. Fixes bug 13476; bugfix on 0.0.2pre14.
+ - Avoid unlikely signed integer overflow in tor_timegm on systems
+ with 32-bit time_t. Fixes bug 13476; bugfix on 0.0.2pre14.
+
+ o Minor bugfixes (client):
+ - Fix smartlist_choose_node_by_bandwidth() so that relays with the
+ BadExit flag are not considered worthy candidates. Fixes bug
+ 13066; bugfix on 0.1.2.3-alpha.
+ - Use the consensus schedule for downloading consensuses, and not
+ the generic schedule. Fixes bug 11679; bugfix on 0.2.2.6-alpha.
+ - Handle unsupported or malformed SOCKS5 requests properly by
+ responding with the appropriate error message before closing the
+ connection. Fixes bugs 12971 and 13314; bugfix on 0.0.2pre13.
+
+ o Minor bugfixes (client, torrc):
+ - Stop modifying the value of our DirReqStatistics torrc option just
+ because we're not a bridge or relay. This bug was causing Tor
+ Browser users to write "DirReqStatistics 0" in their torrc files
+ as if they had chosen to change the config. Fixes bug 4244; bugfix
+ on 0.2.3.1-alpha.
+ - When GeoIPExcludeUnkonwn is enabled, do not incorrectly decide
+ that our options have changed every time we SIGHUP. Fixes bug
+ 9801; bugfix on 0.2.4.10-alpha. Patch from "qwerty1".
+
+ o Minor bugfixes (controller):
+ - Return an error when the second or later arguments of the
+ "setevents" controller command are invalid events. Previously we
+ would return success while silently skipping invalid events. Fixes
+ bug 13205; bugfix on 0.2.3.2-alpha. Reported by "fpxnns".
+
+ o Minor bugfixes (directory system):
+ - Always believe that v3 directory authorities serve extra-info
+ documents, whether they advertise "caches-extra-info" or not.
+ Fixes part of bug 11683; bugfix on 0.2.0.1-alpha.
+ - When running as a v3 directory authority, advertise that you serve
+ extra-info documents so that clients who want them can find them
+ from you too. Fixes part of bug 11683; bugfix on 0.2.0.1-alpha.
+ - Check the BRIDGE_DIRINFO flag bitwise rather than using equality.
+ Previously, directories offering BRIDGE_DIRINFO and some other
+ flag (i.e. microdescriptors or extrainfo) would be ignored when
+ looking for bridges. Partially fixes bug 13163; bugfix
+ on 0.2.0.7-alpha.
+
+ o Minor bugfixes (networking):
+ - Check for orconns and use connection_or_close_for_error() rather
+ than connection_mark_for_close() directly in the getsockopt()
+ failure case of connection_handle_write_impl(). Fixes bug 11302;
+ bugfix on 0.2.4.4-alpha.
+
+ o Minor bugfixes (relay):
+ - When generating our family list, remove spaces from around the
+ entries. Fixes bug 12728; bugfix on 0.2.1.7-alpha.
+ - If our previous bandwidth estimate was 0 bytes, allow publishing a
+ new relay descriptor immediately. Fixes bug 13000; bugfix
+ on 0.1.1.6-alpha.
+
+ o Minor bugfixes (testing networks):
+ - Fix TestingDirAuthVoteGuard to properly give out Guard flags in a
+ testing network. Fixes bug 13064; bugfix on 0.2.5.2-alpha.
+ - Stop using the default authorities in networks which provide both
+ AlternateDirAuthority and AlternateBridgeAuthority. Partially
+ fixes bug 13163; bugfix on 0.2.0.13-alpha.
+
+ o Minor bugfixes (testing):
+ - Stop spawn test failures due to a race condition between the
+ SIGCHLD handler updating the process status, and the test reading
+ it. Fixes bug 13291; bugfix on 0.2.3.3-alpha.
+
+ o Minor bugfixes (testing, Windows):
+ - Avoid passing an extra backslash when creating a temporary
+ directory for running the unit tests on Windows. Fixes bug 12392;
+ bugfix on 0.2.2.25-alpha. Patch from Gisle Vanem.
+
+ o Minor bugfixes (windows):
+ - Remove code to special-case handling of NTE_BAD_KEYSET when
+ acquiring windows CryptoAPI context. This error can't actually
+ occur for the parameters we're providing. Fixes bug 10816; bugfix
+ on 0.0.2pre26.
+
+ o Minor bugfixes (zlib):
+ - Avoid truncating a zlib stream when trying to finalize it with an
+ empty output buffer. Fixes bug 11824; bugfix on 0.1.1.23.
+
+ o Build fixes:
+ - Allow our configure script to build correctly with autoconf 2.62
+ again. Fixes bug 12693; bugfix on 0.2.5.2-alpha.
+ - Improve the error message from ./configure to make it clear that
+ when asciidoc has not been found, the user will have to either add
+ --disable-asciidoc argument or install asciidoc. Resolves
+ ticket 13228.
+
+ o Code simplification and refactoring:
+ - Change the entry_is_live() function to take named bitfield
+ elements instead of an unnamed list of booleans. Closes
+ ticket 12202.
+ - Refactor and unit-test entry_is_time_to_retry() in entrynodes.c.
+ Resolves ticket 12205.
+ - Use calloc and reallocarray functions in preference to multiply-
+ then-malloc. This makes it less likely for us to fall victim to an
+ integer overflow attack when allocating. Resolves ticket 12855.
+ - Use the standard macro name SIZE_MAX, instead of our
+ own SIZE_T_MAX.
+ - Document usage of the NO_DIRINFO and ALL_DIRINFO flags clearly in
+ functions which take them as arguments. Replace 0 with NO_DIRINFO
+ in a function call for clarity. Seeks to prevent future issues
+ like 13163.
+ - Avoid 4 null pointer errors under clang shallow analysis by using
+ tor_assert() to prove that the pointers aren't null. Fixes
+ bug 13284.
+ - Rework the API of policies_parse_exit_policy() to use a bitmask to
+ represent parsing options, instead of a confusing mess of
+ booleans. Resolves ticket 8197.
+ - Introduce a helper function to parse ExitPolicy in
+ or_options_t structure.
+
+ o Documentation:
+ - Add a doc/TUNING document with tips for handling large numbers of
+ TCP connections when running busy Tor relay. Update the warning
+ message to point to this file when running out of sockets
+ operating system is allowing to use simultaneously. Resolves
+ ticket 9708.
+
+ o Removed code:
+ - We no longer remind the user about configuration options that have
+ been obsolete since 0.2.3.x or earlier. Patch by Adrien Bak.
+
+ o Removed features:
+ - Remove the --disable-curve25519 configure option. Relays and
+ clients now are required to support curve25519 and the
+ ntor handshake.
+ - The old "StrictEntryNodes" and "StrictExitNodes" options, which
+ used to be deprecated synonyms for "StrictNodes", are now marked
+ obsolete. Resolves ticket 12226.
+ - The "AuthDirRejectUnlisted" option no longer has any effect, as
+ the fingerprints file (approved-routers) has been deprecated.
+ - Directory authorities do not support being Naming dirauths anymore.
+ The "NamingAuthoritativeDir" config option is now obsolete.
+ - Directory authorities do not support giving out the BadDirectory
+ flag anymore.
+ - Clients don't understand the BadDirectory flag in the consensus
+ anymore, and ignore it.
+
+ o Testing:
+ - Refactor the function that chooses guard nodes so that it can more
+ easily be tested; write some tests for it.
+ - Fix and re-enable the fgets_eagain unit test. Fixes bug 12503;
+ bugfix on 0.2.3.1-alpha. Patch from "cypherpunks."
+ - Create unit tests for format_time_interval(). With bug 13393.
+ - Add unit tests for tor_timegm signed overflow, tor_timegm and
+ parse_rfc1123_time validity checks, correct_tm year clamping. Unit
+ tests (visible) fixes in bug 13476.
+ - Add a "coverage-html" make target to generate HTML-visualized
+ coverage results when building with --enable-coverage. (Requires
+ lcov.) Patch from Kevin Murray.
+ - Enable the backtrace handler (where supported) when running the
+ unit tests.
+ - Revise all unit tests that used the legacy test_* macros to
+ instead use the recommended tt_* macros. This patch was generated
+ with coccinelle, to avoid manual errors. Closes ticket 13119.
+
+ o Distribution (systemd):
+ - systemd unit file: only allow tor to write to /var/lib/tor and
+ /var/log/tor. The rest of the filesystem is accessible for reading
+ only. Patch by intrigeri; resolves ticket 12751.
+ - systemd unit file: ensure that the process and all its children
+ can never gain new privileges. Patch by intrigeri; resolves
+ ticket 12939.
+ - systemd unit file: set up /var/run/tor as writable for the Tor
+ service. Patch by intrigeri; resolves ticket 13196.
+
+ o Removed features (directory authorities):
+ - Remove code that prevented authorities from listing Tor relays
+ affected by CVE-2011-2769 as guards. These relays are already
+ rejected altogether due to the minimum version requirement of
+ 0.2.3.16-alpha. Closes ticket 13152.
+ - Directory authorities no longer advertise or support consensus
+ methods 1 through 12 inclusive. These consensus methods were
+ obsolete and/or insecure: maintaining the ability to support them
+ served no good purpose. Implements part of proposal 215; closes
+ ticket 10163.
+
+ o Testing (test-network.sh):
+ - Stop using "echo -n", as some shells' built-in echo doesn't
+ support "-n". Instead, use "/bin/echo -n". Partially fixes
+ bug 13161.
+ - Stop an apparent test-network hang when used with make -j2. Fixes
+ bug 13331.
+ - Add a --delay option to test-network.sh, which configures the
+ delay before the chutney network tests for data transmission.
+ Partially implements ticket 13161.
+
+
+Changes in version 0.2.5.10 - 2014-10-24
+ Tor 0.2.5.10 is the first stable release in the 0.2.5 series.
+
+ It adds several new security features, including improved
+ denial-of-service resistance for relays, new compiler hardening
+ options, and a system-call sandbox for hardened installations on Linux
+ (requires seccomp2). The controller protocol has several new features,
+ resolving IPv6 addresses should work better than before, and relays
+ should be a little more CPU-efficient. We've added support for more
+ OpenBSD and FreeBSD transparent proxy types. We've improved the build
+ system and testing infrastructure to allow unit testing of more parts
+ of the Tor codebase. Finally, we've addressed several nagging pluggable
+ transport usability issues, and included numerous other small bugfixes
+ and features mentioned below.
+
+ This release marks end-of-life for Tor 0.2.3.x; those Tor versions
+ have accumulated many known flaws; everyone should upgrade.
+
+ o Deprecated versions:
+ - Tor 0.2.3.x has reached end-of-life; it has received no patches or
+ attention for some while.
+
+
+Changes in version 0.2.5.9-rc - 2014-10-20
+ Tor 0.2.5.9-rc is the third release candidate for the Tor 0.2.5.x
+ series. It disables SSL3 in response to the recent "POODLE" attack
+ (even though POODLE does not affect Tor). It also works around a crash
+ bug caused by some operating systems' response to the "POODLE" attack
+ (which does affect Tor). It also contains a few miscellaneous fixes.
+
+ o Major security fixes:
+ - Disable support for SSLv3. All versions of OpenSSL in use with Tor
+ today support TLS 1.0 or later, so we can safely turn off support
+ for this old (and insecure) protocol. Fixes bug 13426.
+
+ o Major bugfixes (openssl bug workaround):
+ - Avoid crashing when using OpenSSL version 0.9.8zc, 1.0.0o, or
+ 1.0.1j, built with the 'no-ssl3' configuration option. Fixes bug
+ 13471. This is a workaround for an OpenSSL bug.
+
+ o Minor bugfixes:
+ - Disable the sandbox name resolver cache when running tor-resolve:
+ tor-resolve doesn't use the sandbox code, and turning it on was
+ breaking attempts to do tor-resolve on a non-default server on
+ Linux. Fixes bug 13295; bugfix on 0.2.5.3-alpha.
+
+ o Compilation fixes:
+ - Build and run correctly on systems like OpenBSD-current that have
+ patched OpenSSL to remove get_cipher_by_char and/or its
+ implementations. Fixes issue 13325.
+
+ o Downgraded warnings:
+ - Downgrade the severity of the 'unexpected sendme cell from client'
+ from 'warn' to 'protocol warning'. Closes ticket 8093.
+
+
+Changes in version 0.2.4.25 - 2014-10-20
+ Tor 0.2.4.25 disables SSL3 in response to the recent "POODLE" attack
+ (even though POODLE does not affect Tor). It also works around a crash
+ bug caused by some operating systems' response to the "POODLE" attack
+ (which does affect Tor).
+
+ o Major security fixes (also in 0.2.5.9-rc):
+ - Disable support for SSLv3. All versions of OpenSSL in use with Tor
+ today support TLS 1.0 or later, so we can safely turn off support
+ for this old (and insecure) protocol. Fixes bug 13426.
+
+ o Major bugfixes (openssl bug workaround, also in 0.2.5.9-rc):
+ - Avoid crashing when using OpenSSL version 0.9.8zc, 1.0.0o, or
+ 1.0.1j, built with the 'no-ssl3' configuration option. Fixes bug
+ 13471. This is a workaround for an OpenSSL bug.
Changes in version 0.2.5.8-rc - 2014-09-22
diff --git a/LICENSE b/LICENSE
index 4ebab1823f..7e5094742a 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-2013, The Tor Project, Inc.
+Copyright (c) 2007-2014, The Tor Project, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -122,6 +122,38 @@ src/ext/csiphash.c is licensed under the following license:
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.
+===============================================================================
+Trunnel is distributed under this license:
+
+Copyright 2014 The Tor Project, Inc.
+
+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 names of the copyright owners 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.
===============================================================================
src/config/geoip is licensed under the following license:
diff --git a/Makefile.am b/Makefile.am
index 910cb12005..7125c7701c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -23,7 +23,6 @@ include src/include.am
include doc/include.am
include contrib/include.am
-
EXTRA_DIST+= \
ChangeLog \
INSTALL \
diff --git a/README b/README
index e878476aa6..342376faf4 100644
--- a/README
+++ b/README
@@ -6,6 +6,9 @@ configure it properly.
To build Tor from source:
./configure && make && make install
+To build Tor from a just-cloned git repository:
+ sh autogen.sh && ./configure && make && make install
+
Home page:
https://www.torproject.org/
diff --git a/ReleaseNotes b/ReleaseNotes
index cbd6421b72..9d5b8ae88f 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -3,6 +3,906 @@ 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.5.10 - 2014-10-24
+ Tor 0.2.5.10 is the first stable release in the 0.2.5 series.
+
+ It adds several new security features, including improved
+ denial-of-service resistance for relays, new compiler hardening
+ options, and a system-call sandbox for hardened installations on Linux
+ (requires seccomp2). The controller protocol has several new features,
+ resolving IPv6 addresses should work better than before, and relays
+ should be a little more CPU-efficient. We've added support for more
+ OpenBSD and FreeBSD transparent proxy types. We've improved the build
+ system and testing infrastructure to allow unit testing of more parts
+ of the Tor codebase. Finally, we've addressed several nagging pluggable
+ transport usability issues, and included numerous other small bugfixes
+ and features mentioned below.
+
+ This release marks end-of-life for Tor 0.2.3.x; those Tor versions
+ have accumulated many known flaws; everyone should upgrade.
+
+ o Major features (security):
+ - The ntor handshake is now on-by-default, no matter what the
+ directory authorities recommend. Implements ticket 8561.
+ - 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.
+ - Warn about attempts to run hidden services and relays in the same
+ process: that's probably not a good idea. Closes ticket 12908.
+ - Disable support for SSLv3. All versions of OpenSSL in use with Tor
+ today support TLS 1.0 or later, so we can safely turn off support
+ for this old (and insecure) protocol. Fixes bug 13426.
+
+ 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.
+ - 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.
+
+ o Major features (bridges and pluggable transports):
+ - 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.
+ - 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 (controller):
+ - 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.
+
+ 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):
+ - 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. Resolves tickets 11351 and 11465.
+
+ o Major features (testing networks):
+ - 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.
+
+ o Major features (other):
+ - 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 Deprecated versions:
+ - Tor 0.2.3.x has reached end-of-life; it has received no patches or
+ attention for some while.
+
+ 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
+ constructing 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 Major bugfixes (openssl bug workaround):
+ - Avoid crashing when using OpenSSL version 0.9.8zc, 1.0.0o, or
+ 1.0.1j, built with the 'no-ssl3' configuration option. Fixes
+ bug 13471. This is a workaround for an OpenSSL bug.
+
+ o Major bugfixes (client):
+ - Perform circuit cleanup operations even when circuit
+ construction operations are disabled (because the network is
+ disabled, or because there isn't enough directory information).
+ Previously, when we were not building predictive circuits, we
+ were not closing expired circuits either. Fixes bug 8387; bugfix on
+ 0.1.1.11-alpha. This bug became visible in 0.2.4.10-alpha when we
+ became more strict about when we have "enough directory information
+ to build circuits".
+
+ o Major bugfixes (client, pluggable transports):
+ - When managing pluggable transports, use OS notification facilities
+ to learn if they have crashed, and don't attempt to kill any
+ process that has already exited. Fixes bug 8746; bugfix
+ on 0.2.3.6-alpha.
+
+ o Major bugfixes (relay denial of service):
+ - 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.
+
+ o Major bugfixes (relay):
+ - Avoid queuing or sending destroy cells for circuit ID zero when we
+ fail to send a CREATE cell. Fixes bug 12848; bugfix on 0.0.8pre1.
+ Found and fixed by "cypherpunks".
+ - Fix ORPort reachability detection on relays running behind a
+ proxy, by correctly updating the "local" mark on the controlling
+ channel when changing the address of an or_connection_t after the
+ handshake. Fixes bug 12160; bugfix on 0.2.4.4-alpha.
+ - Use a direct dirport connection when uploading non-anonymous
+ descriptors to the directory authorities. Previously, relays would
+ incorrectly use tunnel connections under a fairly wide variety of
+ circumstances. Fixes bug 11469; bugfix on 0.2.4.3-alpha.
+ - 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 bug made roughly one
+ circuit in a million non-functional. Fixes bug 12195; this is a
+ bugfix on every version of Tor.
+
+ 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.
+ - Authorities now assign the Guard flag to the fastest 25% of the
+ network (it used to be the fastest 50%). Also raise the consensus
+ weight that guarantees the Guard flag from 250 to 2000. For the
+ current network, this results in about 1100 guards, down from 2500.
+ This step paves the way for moving the number of entry guards
+ down to 1 (proposal 236) while still providing reasonable expected
+ performance for most users. Implements ticket 12690.
+
+ o Minor features (security, memory management):
+ - Memory allocation tricks (mempools and buffer freelists) are now
+ disabled by default. You can turn them back on with
+ --enable-mempools and --enable-buf-freelists respectively. We're
+ disabling these features because malloc performance is good enough
+ on most platforms, and a similar feature in OpenSSL exacerbated
+ exploitation of the Heartbleed attack. Resolves ticket 11476.
+
+ 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 (bridge):
+ - Add an ExtORPortCookieAuthFileGroupReadable option to make the
+ cookie file for the ExtORPort g+r by default.
+
+ 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.
+ - 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 (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.
+ - 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.
+ - 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 (client):
+ - 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.
+
+ 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 (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 (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.
+ - 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".
+ - Implement the TRANSPORT_LAUNCHED control port event that
+ notifies controllers about new launched pluggable
+ transports. Resolves ticket 5609.
+
+ 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 encountering an unexpected CR while writing text to a file on
+ Windows, log the name of the file. Should help diagnosing
+ bug 11233.
+ - Give more specific warnings when a client notices that an onion
+ handshake has failed. Fixes ticket 9635.
+ - Add significant new logging code to attempt to diagnose bug 12184,
+ where relays seem to run out of available circuit IDs.
+ - 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.
+ - 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.
+ - 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.
+
+ o Minor features (geoip):
+ - Update geoip and geoip6 to the August 7 2014 Maxmind GeoLite2
+ Country database.
+
+ o Minor features (interface):
+ - 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.
+
+ o Minor features (kernel API usage):
+ - Use the SOCK_NONBLOCK socket type, if supported, to open nonblocking
+ sockets in a single system call. Implements ticket 5129.
+
+ 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.
+
+ 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.
+
+ o Minor features (performance):
+ - 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.
+
+ 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 (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 (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 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.
+
+ 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.
+ - 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 (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 bugfixes (client):
+ - 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 it runs.) Fixes bug 10405; bugfix on 0.2.3.9-alpha.
+ - 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 (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 (client, logging during bootstrap):
+ - 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.
+ - 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 (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 (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 bugfixes (compilation):
+ - Compile correctly with builds and forks of OpenSSL (such as
+ LibreSSL) that disable compression. Fixes bug 12602; bugfix on
+ 0.2.1.1-alpha. Patch from "dhill".
+ - 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".
+ - In routerlist_assert_ok(), don't take the address of a
+ routerinfo's cache_info member unless that routerinfo is non-NULL.
+ Fixes bug 13096; bugfix on 0.1.1.9-alpha. Patch by "teor".
+ - Fix a large number of false positive warnings from the clang
+ analyzer static analysis tool. This should make real warnings
+ easier for clang analyzer to find. Patch from "teor". Closes
+ ticket 13036.
+ - 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.
+ - 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".
+ - Fix compilation with dmalloc. Fixes bug 11605; bugfix
+ on 0.2.4.10-alpha.
+ - Build and run correctly on systems like OpenBSD-current that have
+ patched OpenSSL to remove get_cipher_by_char and/or its
+ implementations. Fixes issue 13325.
+
+ 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".
+
+ o Minor bugfixes (directory server):
+ - 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.
+ - 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 (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 (interface):
+ - 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 (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 (logging):
+ - Downgrade "Unexpected onionskin length after decryption" warning
+ to a protocol-warn, since there's nothing relay operators can do
+ about a client that sends them a malformed create cell. Resolves
+ bug 12996; bugfix on 0.0.6rc1.
+ - Log more specific warnings when we get an ESTABLISH_RENDEZVOUS
+ cell on a cannibalized or non-OR circuit. Resolves ticket 12997.
+ - When logging information about an EXTEND2 or EXTENDED2 cell, log
+ their names correctly. Fixes part of bug 12700; bugfix
+ on 0.2.4.8-alpha.
+ - When logging information about a relay cell whose command we don't
+ recognize, log its command as an integer. Fixes part of bug 12700;
+ bugfix on 0.2.1.10-alpha.
+ - Escape all strings from the directory connection before logging
+ them. Fixes bug 13071; bugfix on 0.1.1.15. Patch from "teor".
+ - Squelch a spurious LD_BUG message "No origin circuit for
+ successful SOCKS stream" in certain hidden service failure cases;
+ fixes bug 10616.
+ - Downgrade the severity of the 'unexpected sendme cell from client'
+ from 'warn' to 'protocol warning'. Closes ticket 8093.
+
+ o Minor bugfixes (misc code correctness):
+ - 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.
+ - 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 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 (performance):
+ - Avoid a bug where every successful connection made us recompute
+ the flag telling us whether we have sufficient information to
+ build circuits. Previously, we would forget our cached value
+ whenever 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 an expensive update operation far too often.
+ Fixes bug 12170; bugfix on 0.1.2.1-alpha.
+ - 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.
+
+ o Minor bugfixes (platform-specific):
+ - 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 (pluggable transports):
+ - 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 (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 (relay, other):
+ - We now drop CREATE cells for already-existent circuit IDs and for
+ zero-valued circuit IDs, regardless of other factors that might
+ otherwise have called for DESTROY cells. Fixes bug 12191; bugfix
+ on 0.0.8pre1.
+ - When rejecting DATA cells for stream_id zero, still count them
+ against the circuit's deliver window so that we don't fail to send
+ a SENDME. Fixes bug 11246; bugfix on 0.2.4.10-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 (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.
+
+ o Minor bugfixes (testing):
+ - 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 (trivial memory leaks):
+ - Fix a small memory leak when signing a directory object. Fixes bug
+ 11275; bugfix on 0.2.4.13-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 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".
+ - 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.
+ - 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.
+ - 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.
+ - Get rid of router->address, since in all cases it was just the
+ string representation of router->addr. Resolves ticket 5528.
+
+ o Documentation:
+ - Adjust the URLs in the README to refer to the new locations of
+ several documents on the website. Fixes bug 12830. Patch from
+ Matt Pagan.
+ - Document 'reject6' and 'accept6' ExitPolicy entries. Resolves
+ ticket 12878.
+ - Update manpage to describe some of the files you can expect to
+ find in Tor's DataDirectory. Addresses ticket 9839.
+ - 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.
+ - Correct the documenation so that it lists the correct directory
+ for the stats files. (They are in a subdirectory called "stats",
+ not "status".)
+ - In the manpage, move more authority-only options into the
+ directory authority section so that operators of regular directory
+ caches don't get confused.
+ - Fix the layout of the SOCKSPort flags in the manpage. Fixes bug
+ 11061; bugfix on 0.2.4.7-alpha.
+ - Resolve warnings from Doxygen.
+ - 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 Package cleanup:
+ - The contrib directory has been sorted and tidied. Before, it was
+ an unsorted dumping ground for useful and not-so-useful things.
+ Now, it is 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 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.
+ - Remove /tor/dbg-stability.txt URL that was meant to help debug WFU
+ and MTBF calculations, but that nobody was using. Fixes bug 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.
+ - Remove all code for the long unused v1 directory protocol.
+ Resolves ticket 11070.
+ - 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.
+ - 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 Test infrastructure:
+ - 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.
+ - 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.
+ - New macros in test.h to simplify writing mock-functions for unit
+ tests. Part of ticket 11507. Patch from Dana Koch.
+ - 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.
+
+ o Testing:
+ - Complete tests for the status.c module. Resolves ticket 11507.
+ Patch from Dana Koch.
+ - 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 Distribution (systemd):
+ - 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.
+ - Verify configuration file via ExecStartPre in the systemd unit
+ file. Patch from intrigeri; resolves ticket 12730.
+ - Explicitly disable RunAsDaemon in the systemd unit file. Our
+ current systemd unit uses "Type = simple", so systemd does not
+ expect tor to fork. If the user has "RunAsDaemon 1" in their
+ torrc, then things won't work as expected. This is e.g. the case
+ on Debian (and derivatives), since there we pass "--defaults-torrc
+ /usr/share/tor/tor-service-defaults-torrc" (that contains
+ "RunAsDaemon 1") by default. Patch by intrigeri; resolves
+ ticket 12731.
+
+
+Changes in version 0.2.4.25 - 2014-10-20
+ Tor 0.2.4.25 disables SSL3 in response to the recent "POODLE" attack
+ (even though POODLE does not affect Tor). It also works around a crash
+ bug caused by some operating systems' response to the "POODLE" attack
+ (which does affect Tor).
+
+ o Major security fixes (also in 0.2.5.9-rc):
+ - Disable support for SSLv3. All versions of OpenSSL in use with Tor
+ today support TLS 1.0 or later, so we can safely turn off support
+ for this old (and insecure) protocol. Fixes bug 13426.
+
+ o Major bugfixes (openssl bug workaround, also in 0.2.5.9-rc):
+ - Avoid crashing when using OpenSSL version 0.9.8zc, 1.0.0o, or
+ 1.0.1j, built with the 'no-ssl3' configuration option. Fixes bug
+ 13471. This is a workaround for an OpenSSL bug.
+
+
Changes in version 0.2.4.24 - 2014-09-22
Tor 0.2.4.24 fixes a bug that affects consistency and speed when
connecting to hidden services, and it updates the location of one of
diff --git a/acinclude.m4 b/acinclude.m4
index 7401e0b242..06f4b19e54 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -2,7 +2,7 @@ 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-2013, The Tor Project, Inc.
+dnl Copyright (c) 2007-2014, The Tor Project, Inc.
dnl See LICENSE for licensing information
AC_DEFUN([TOR_EXTEND_CODEPATH],
diff --git a/changes/12207 b/changes/12207
deleted file mode 100644
index 53c14a4ffd..0000000000
--- a/changes/12207
+++ /dev/null
@@ -1,4 +0,0 @@
- - Testing:
- - Refactor the function that chooses guard nodes so that it can
- more easily be tested; write some tests for it.
-
diff --git a/changes/bufferevent_compilation b/changes/bufferevent_compilation
deleted file mode 100644
index 3a328731fe..0000000000
--- a/changes/bufferevent_compilation
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Fix compilation when building with bufferevents enabled. (This
- configuration is still not expected to work, however.)
- Fixes bugs 12438, 12474, 11578; bugfixes on 0.2.5.1-alpha and
- 0.2.5.3-alpha. Patches from Anthony G. Basile and Sathyanarayanan
- Gunasekaran.
diff --git a/changes/bug10116 b/changes/bug10116
deleted file mode 100644
index db7f7652ad..0000000000
--- a/changes/bug10116
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - When handling a low-memory situation, allocate less memory
- for teporary data structures. Fixes issue 10115.
diff --git a/changes/bug1038-3 b/changes/bug1038-3
deleted file mode 100644
index 5af4afa46f..0000000000
--- a/changes/bug1038-3
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Warn and drop the circuit if we receive an inbound 'relay early'
- cell. Those used to be normal to receive on hidden service circuits
- due to bug 1038, but the buggy Tor versions are long gone from
- the network so we can afford to resume watching for them. Resolves
- the rest of bug 1038; bugfix on 0.2.1.19.
diff --git a/changes/bug11200-caching b/changes/bug11200-caching
deleted file mode 100644
index e3fbaeca73..0000000000
--- a/changes/bug11200-caching
+++ /dev/null
@@ -1,7 +0,0 @@
- o Major bugfixes:
- - When Tor starts with DisabledNetwork set, it would correctly
- conclude that it shouldn't try making circuits, but it would
- mistakenly cache this conclusion and continue believing it even
- when DisableNetwork is set to 0. Fixes the bug introduced by the
- fix for bug 11200; bugfix on 0.2.5.4-alpha.
-
diff --git a/changes/bug11302 b/changes/bug11302
deleted file mode 100644
index 7416c69be6..0000000000
--- a/changes/bug11302
+++ /dev/null
@@ -1,4 +0,0 @@
- o Bugfixes:
- - Check for orconns and use connection_or_close_for_error() rather than
- connection_mark_for_close() directly in the getsockopt() failure case
- of connection_handle_write_impl(). Fixes bug #11302.
diff --git a/changes/bug11679 b/changes/bug11679
deleted file mode 100644
index 3a191ce822..0000000000
--- a/changes/bug11679
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes (client):
- - Use the consensus schedule for downloading consensuses, and not the
- generic schedule. Fixes bug 11679; bugfix on 0.2.2.6-alpha.
diff --git a/changes/bug11683 b/changes/bug11683
deleted file mode 100644
index ccbd2a5233..0000000000
--- a/changes/bug11683
+++ /dev/null
@@ -1,8 +0,0 @@
- o Minor bugfixes:
- - Always believe that v3 directory authorities serve extra-info
- documents, regardless of whether their server descriptor contains a
- "caches-extra-info" line or not. Fixes part of #11683. Bugfix on
- 0.2.0.1-alpha.
- - When running as a v3 directory authority, advertise that you serve
- extra-info documents so that clients who want them can find them from
- you too. Fixes part of bug #11683. Bugfix on 0.2.0.1-alpha.
diff --git a/changes/bug11787 b/changes/bug11787
deleted file mode 100644
index 014662d921..0000000000
--- a/changes/bug11787
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes (directory bandwidth performance):
- - Don't flush the zlib buffer aggressively when compressing
- directory information for clients. This should save about 7% of
- the bandwidth currently used for compressed descriptors and
- microdescriptors. Fixes bug 11787; bugfix on 0.1.1.23.
diff --git a/changes/bug11792 b/changes/bug11792
deleted file mode 100644
index 66f7df833c..0000000000
--- a/changes/bug11792
+++ /dev/null
@@ -1,15 +0,0 @@
- o Minor features (security, OOM):
- - When closing an edge connection because we've run out of memory,
- also count the amount of memory that any tunnelled directory
- connection attached to that connection had consumed. Part of
- ticket 11792.
-
- - When considering whether we're running low on memory, consider
- memory that was allocated as part of zlib buffers as well.
- Count that memory as reclaimed by our OOM handler. Part of
- ticket 11792.
-
- - When handling out-of-memory conditions, also look at
- non-tunnneled directory connections, and kill the ones that have
- had data sitting on them for the longest. Part of ticket 11792.
-
diff --git a/changes/bug12061 b/changes/bug12061
deleted file mode 100644
index 308417cce8..0000000000
--- a/changes/bug12061
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features:
- - On unix, you can now use named pipes as the target of the Log
- option, and other options that try to append to files. Closes
- ticket 12061. Patch from "carlo von lynX".
diff --git a/changes/bug12160 b/changes/bug12160
deleted file mode 100644
index 2a7ace3410..0000000000
--- a/changes/bug12160
+++ /dev/null
@@ -1,4 +0,0 @@
- o Bugfixes
- - Correctly update the local mark on the controlling channel when changing
- the address of an or_connection_t after the handshake. Fixes bug #12160;
- bugfix on 0.2.4.4-alpha.
diff --git a/changes/bug12202 b/changes/bug12202
deleted file mode 100644
index 566d37efda..0000000000
--- a/changes/bug12202
+++ /dev/null
@@ -1,3 +0,0 @@
- o Code simplification and refactoring:
- - Change the entry_is_live() function to take named bitfield elements
- instead of an unnamed list of booleans. Closes ticket 12202.
diff --git a/changes/bug12205 b/changes/bug12205
deleted file mode 100644
index f71ba4133c..0000000000
--- a/changes/bug12205
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor refactoring:
- - Refactoring and unit-testing entry_is_time_to_retry() in
- entrynodes.c. Resolves ticket 12205.
-
diff --git a/changes/bug12226 b/changes/bug12226
deleted file mode 100644
index 0058b838cd..0000000000
--- a/changes/bug12226
+++ /dev/null
@@ -1,4 +0,0 @@
- o Removed features:
- - The old "StrictEntryNodes" and "StrictExitNodes" options, which
- used to be deprecated synonyms for "StrictNodes", are now marked
- obsolete. Resolves ticket 12226.
diff --git a/changes/bug12392 b/changes/bug12392
deleted file mode 100644
index f096aa8801..0000000000
--- a/changes/bug12392
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes (testing, Windows):
- - Avoid passing an extra backslash when creating a temporary
- directory for running the unit tests on Windows. Fixes bug 12392;
- bugfix on 0.2.2.25-alpha. Patch from Gisle Vanem.
diff --git a/changes/bug12503 b/changes/bug12503
deleted file mode 100644
index ff96fa2cf5..0000000000
--- a/changes/bug12503
+++ /dev/null
@@ -1,3 +0,0 @@
- o Testing:
- - Fix and re-enable the fgets_eagain unit test. Fixes bug 12503;
- bugfix on 0.2.3.1-alpha. Patch from "cypherpunks."
diff --git a/changes/bug12573 b/changes/bug12573
deleted file mode 100644
index 46e3ee2fa0..0000000000
--- a/changes/bug12573
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfixes:
- - Relays should not be assigned the HSDir flag if they are
- considered invalid. Also, do not assign the HSDir flag to relays
- that are currently hibernating. Fixes #12573. Bugfix on
- tor-0.2.0.10-alpha
diff --git a/changes/bug12602 b/changes/bug12602
deleted file mode 100644
index 29fa49ac45..0000000000
--- a/changes/bug12602
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes (portability):
- - Compile correctly with builds and forks of OpenSSL (such as
- LibreSSL) that disable compression. Fixes bug 12602; bugfix on
- 0.2.1.1-alpha. Patch from "dhill".
-
diff --git a/changes/bug12693 b/changes/bug12693
deleted file mode 100644
index 11dfe78a2f..0000000000
--- a/changes/bug12693
+++ /dev/null
@@ -1,3 +0,0 @@
- o Build fixes:
- - Allow our configure script to build correctly with autoconf 2.62
- again. Fixes bug 12693; bugfix on 0.2.5.2-alpha.
diff --git a/changes/bug12700 b/changes/bug12700
deleted file mode 100644
index 1d8caeb8bd..0000000000
--- a/changes/bug12700
+++ /dev/null
@@ -1,10 +0,0 @@
- o Minor bugfixes:
- - When logging information about an EXTEND2 or EXTENDED2 cell, log
- their names correctly. Fixes part of bug 12700; bugfix on
- 0.2.4.8-alpha.
-
- o Minor bugfixes:
- - When logging information about a relay cell whose command we
- don't recognize, log its command as an integer. Fixes part of
- bug 12700; bugfix on 0.2.1.10-alpha.
-
diff --git a/changes/bug12718 b/changes/bug12718
deleted file mode 100644
index 0c5f708446..0000000000
--- a/changes/bug12718
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Correct a confusing error message when trying to extend a circuit
- via the control protocol but we don't know a descriptor or
- microdescriptor for one of the specified relays. Fixes bug 12718;
- bugfix on 0.2.3.1-alpha.
diff --git a/changes/bug12728 b/changes/bug12728
deleted file mode 100644
index ee392457b4..0000000000
--- a/changes/bug12728
+++ /dev/null
@@ -1,4 +0,0 @@
-
- o Minor bugfixes:
- - When generating our family list, remove spaces from around the
- entries there. Fixes bug 12728; bugfix on 0.2.1.7-alpha.
diff --git a/changes/bug12730-systemd-verify-config b/changes/bug12730-systemd-verify-config
deleted file mode 100644
index 221633c78e..0000000000
--- a/changes/bug12730-systemd-verify-config
+++ /dev/null
@@ -1,3 +0,0 @@
- o Distribution:
- - Verify configuration file via ExecStartPre in the systemd unit file.
- Patch from intrigeri; resolves ticket 12730.
diff --git a/changes/bug12731-systemd-no-run-as-daemon b/changes/bug12731-systemd-no-run-as-daemon
deleted file mode 100644
index f92e5aff00..0000000000
--- a/changes/bug12731-systemd-no-run-as-daemon
+++ /dev/null
@@ -1,9 +0,0 @@
- o Distribution:
- - Explicitly disable RunAsDaemon in the systemd unit file.
- Our current systemd unit uses "Type = simple", so systemd does
- not expect tor to fork. If the user has "RunAsDaemon 1" in their
- torrc, then things won't work as expected. This is e.g. the case
- on Debian (and derivatives), since there we pass
- "--defaults-torrc /usr/share/tor/tor-service-defaults-torrc"
- (that contains "RunAsDaemon 1") by default.
- Patch by intrigeri; resolves ticket 12731.
diff --git a/changes/bug12751-systemd-filesystem-sandbox b/changes/bug12751-systemd-filesystem-sandbox
deleted file mode 100644
index 0abaa4cf6f..0000000000
--- a/changes/bug12751-systemd-filesystem-sandbox
+++ /dev/null
@@ -1,5 +0,0 @@
- o Distribution:
- - systemd unit file: only allow tor to write to /var/lib/tor
- and /var/log/tor. The rest of the filesystem is accessible
- for reading only.
- Patch by intrigeri; resolves ticket 12751.
diff --git a/changes/bug12830 b/changes/bug12830
deleted file mode 100644
index 835ebe2fa7..0000000000
--- a/changes/bug12830
+++ /dev/null
@@ -1,4 +0,0 @@
- o Documentation:
- - Adjust the URLs in the README to refer to the new locations of
- several documents on the website. Patch from Matt Pagan. Fixes
- bug 12830.
diff --git a/changes/bug12848 b/changes/bug12848
deleted file mode 100644
index 7aa79c395e..0000000000
--- a/changes/bug12848
+++ /dev/null
@@ -1,4 +0,0 @@
- o Major bugfixes (relay):
- - Avoid queuing or sending destroy cells for circuit ID zero when
- we fail to send a CREATE cell. Fixes bug 12848; bugfix on
- 0.0.8pre1. Found and fixed by "cypherpunks".
diff --git a/changes/bug12855 b/changes/bug12855
deleted file mode 100644
index 8d8c10dcd5..0000000000
--- a/changes/bug12855
+++ /dev/null
@@ -1,5 +0,0 @@
- o Code simplification and refactoring
- - Use calloc and reallocarray functions in preference to
- multiply-then-malloc. This makes it less likely for us to fall
- victim to an integer overflow attack when allocating. Resolves
- ticket 12855.
diff --git a/changes/bug12864 b/changes/bug12864
deleted file mode 100644
index 79e751f427..0000000000
--- a/changes/bug12864
+++ /dev/null
@@ -1,7 +0,0 @@
- o Minor bugfixes:
- - Restore the functionality of CookieAuthFileGroupReadable. Fixes bug
- 12864; bugfix on 0.2.5.1-alpha.
-
- o Minor features:
- - Add an ExtORPortCookieAuthFileGroupReadable option to make the
- cookie file for the ExtORPort g+r by default.
diff --git a/changes/bug12878 b/changes/bug12878
deleted file mode 100644
index a05fc446b9..0000000000
--- a/changes/bug12878
+++ /dev/null
@@ -1,3 +0,0 @@
- o Documentation:
- - Document 'reject6' and 'accept6' ExitPolicy entries. Resolves
- ticket 12878.
diff --git a/changes/bug12899 b/changes/bug12899
deleted file mode 100644
index 491f3ebbe6..0000000000
--- a/changes/bug12899
+++ /dev/null
@@ -1,7 +0,0 @@
- o Removed features:
- - The "AuthDirRejectUnlisted" option no longer has any effect, as
- the fingerprints file (approved-routers) has been deprecated.
- - Directory authorities do not support being Naming dirauths
- anymore. The "NamingAuthoritativeDir" config option has been
- obsoleted.
-
diff --git a/changes/bug12908 b/changes/bug12908
deleted file mode 100644
index bd6784cbd2..0000000000
--- a/changes/bug12908
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor features:
- - Warn about attempts to run hidden services and relays in the
- same process: that's probably not a good idea. Closes ticket
- 12908.
diff --git a/changes/bug12939-systemd-no-new-privileges b/changes/bug12939-systemd-no-new-privileges
deleted file mode 100644
index d9103b7055..0000000000
--- a/changes/bug12939-systemd-no-new-privileges
+++ /dev/null
@@ -1,4 +0,0 @@
- o Distribution:
- - systemd unit file: ensures that the process and all its children
- can never gain new privileges.
- Patch by intrigeri; resolves ticket 12939.
diff --git a/changes/bug12948 b/changes/bug12948
deleted file mode 100644
index 431c0a1019..0000000000
--- a/changes/bug12948
+++ /dev/null
@@ -1,8 +0,0 @@
- o Major bugfixes:
- - Resume expanding abbreviations for command-line options. The fix
- for bug 4647 accidentally removed our hack from bug 586 that rewrote
- HashedControlPassword to __HashedControlSessionPassword when it
- appears on the commandline (which allowed the user to set her
- own HashedControlPassword in the torrc file while the controller
- generates a fresh session password for each run). Fixes bug 12948;
- bugfix on 0.2.5.1-alpha.
diff --git a/changes/bug12996 b/changes/bug12996
deleted file mode 100644
index 4b4fb0dceb..0000000000
--- a/changes/bug12996
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Downgrade "Unexpected onionskin length after decryption" warning
- to a protocol-warn, since there's nothing relay operators can do
- about a client that sends them a malformed create cell. Resolves
- bug 12996; bugfix on 0.0.6rc1.
diff --git a/changes/bug12997 b/changes/bug12997
deleted file mode 100644
index fb6e7a8459..0000000000
--- a/changes/bug12997
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Log more specific warnings when we get an ESTABLISH_RENDEZVOUS cell
- on a cannibalized or non-OR circuit. Resolves ticket 12997.
diff --git a/changes/bug13000 b/changes/bug13000
deleted file mode 100644
index 731b4d07d5..0000000000
--- a/changes/bug13000
+++ /dev/null
@@ -1,7 +0,0 @@
- o Minor bugfixes:
- - If our previous bandwidth estimate was 0 bytes, allow publishing a
- new relay descriptor immediately. Fixes bug 13000; bugfix on
- 0.1.1.6-alpha.
- o Minor features:
- - Don't list relays with a bandwidth estimate of 0 in the consensus.
- Implements a feature proposed during discussion of bug 13000.
diff --git a/changes/bug13060 b/changes/bug13060
deleted file mode 100644
index 58bd2b230b..0000000000
--- a/changes/bug13060
+++ /dev/null
@@ -1,6 +0,0 @@
- o Removed features:
- - Directory authorities do not support giving out the BadDirectory
- flag anymore.
- - Clients don't understand the BadDirectory flag in the consensus
- anymore, and ignore it.
-
diff --git a/changes/bug13064 b/changes/bug13064
deleted file mode 100644
index c35b9a82a0..0000000000
--- a/changes/bug13064
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes:
- - Fix TestingDirAuthVoteGuard to properly give out Guard flags in
- a testing network. Fixes bug 13064; bugfix on 0.2.5.2-alpha.
diff --git a/changes/bug13071 b/changes/bug13071
deleted file mode 100644
index 8212b6c049..0000000000
--- a/changes/bug13071
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes (relay):
- - Escape all strings from the directory connection before logging them.
- Fixes bug 13071; bugfix on 0.1.1.15. Patch from "teor".
diff --git a/changes/bug13081 b/changes/bug13081
deleted file mode 100644
index 154f73fb0a..0000000000
--- a/changes/bug13081
+++ /dev/null
@@ -1,3 +0,0 @@
- o Compilation fixes:
- - Make the nmake make files work again. Fixes bug 13081. Bugfix on 0.2.5.1-alpha. Patch
- from "NewEraCracker".
diff --git a/changes/bug13085 b/changes/bug13085
deleted file mode 100644
index a46457c797..0000000000
--- a/changes/bug13085
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes (controller):
- - Actually send TRANSPORT_LAUNCHED and HS_DESC events to controllers.
- Fixes bug 13085; bugfix on 0.2.5.1-alpha. Patch by "teor".
diff --git a/changes/bug13096 b/changes/bug13096
deleted file mode 100644
index 521faaf143..0000000000
--- a/changes/bug13096
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes (conformance):
- - In routerlist_assert_ok(), don't take the address of a routerinfo's
- cache_info member unless that routerinfo is non-NULL. Fixes bug
- 13096; bugfix on 0.1.1.9-alpha. Patch by "teor".
diff --git a/changes/bug13100 b/changes/bug13100
deleted file mode 100644
index bbe43e65a7..0000000000
--- a/changes/bug13100
+++ /dev/null
@@ -1,3 +0,0 @@
- o Directory authority changes:
- - Change IP address for gabelmoo (v3 directory authority).
-
diff --git a/changes/bug13102 b/changes/bug13102
deleted file mode 100644
index f66d38cd83..0000000000
--- a/changes/bug13102
+++ /dev/null
@@ -1,2 +0,0 @@
- o Code refactoring:
- - Use the standard macro name SIZE_MAX, instead of our own SIZE_T_MAX.
diff --git a/changes/bug13104 b/changes/bug13104
deleted file mode 100644
index 331db64ccc..0000000000
--- a/changes/bug13104
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - Fix several instances of possible integer overflow/underflow/NaN.
- Fixes bug 13104; bugfix on 0.2.3.1-alpha and later. Patches from
- "teor".
diff --git a/changes/bug13124 b/changes/bug13124
deleted file mode 100644
index be7df70347..0000000000
--- a/changes/bug13124
+++ /dev/null
@@ -1,8 +0,0 @@
- o Minor bugfixes:
- - Reduce the log severity of the "Pluggable transport proxy does
- not provide any needed transports and will not be launched."
- message, since Tor Browser includes several ClientTransportPlugin
- lines in its torrc-defaults file, leading every Tor Browser user
- who looks at her logs to see these notices and wonder if they're
- dangerous. Resolves bug 13124; bugfix on 0.2.5.3-alpha.
-
diff --git a/changes/bug13126 b/changes/bug13126
new file mode 100644
index 0000000000..45d22ee3f3
--- /dev/null
+++ b/changes/bug13126
@@ -0,0 +1,10 @@
+ o Code simplification and refactoring:
+
+ - Remove our old, non-weighted bandwidth-based node selection code.
+ Previously, we used it as a fallback when we couldn't perform
+ weighted bandwidth-based node selection. But that would only
+ happen in the cases where we had no consensus, or when we had a
+ consensus generated by buggy or ancient directory authorities. In
+ either case, it's better to use the more modern, better maintained
+ algorithm, with reasonable defaults for the weights. Closes
+ ticket 13126. \ No newline at end of file
diff --git a/changes/bug13151-client b/changes/bug13151-client
deleted file mode 100644
index 1218dfdfab..0000000000
--- a/changes/bug13151-client
+++ /dev/null
@@ -1,13 +0,0 @@
- o Major bugfixes:
- - Clients now send the correct address for their chosen rendezvous
- point when trying to access a hidden service. They used to send
- the wrong address, which would still work some of the time because
- they also sent the identity digest of the rendezvous point, and if
- the hidden service happened to try connecting to the rendezvous
- point from a relay that already had a connection open to it,
- the relay would reuse that connection. Now connections to hidden
- services should be more robust and faster. Also, this bug meant
- that clients were leaking to the hidden service whether they were
- on a little-endian (common) or big-endian (rare) system, which for
- some users might have reduced their anonymity. Fixes bug 13151;
- bugfix on 0.2.1.5-alpha.
diff --git a/changes/bug13196-systemd-writable-run-directory b/changes/bug13196-systemd-writable-run-directory
deleted file mode 100644
index 737c354984..0000000000
--- a/changes/bug13196-systemd-writable-run-directory
+++ /dev/null
@@ -1,3 +0,0 @@
- o Distribution:
- - systemd unit file: set up /var/run/tor as writable for the Tor service.
- Patch by intrigeri; resolves ticket 13196.
diff --git a/changes/bug13205 b/changes/bug13205
deleted file mode 100644
index 446ffcf47b..0000000000
--- a/changes/bug13205
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Return an error when the second or later arguments of the
- "setevents" controller command are invalid events. Previously we
- would return success while silently skipping invalid events. Fixes
- bug 13205; bugfix on 0.2.3.2-alpha. Reported by "fpxnns".
diff --git a/changes/bug13214 b/changes/bug13214
new file mode 100644
index 0000000000..5b9758b388
--- /dev/null
+++ b/changes/bug13214
@@ -0,0 +1,7 @@
+ o Minor bugfixes (hidden services):
+ - When fetching hidden service descriptors, check not only for
+ whether we got the hidden service we had in mind, but also
+ whether we got the particular descriptors we wanted. This
+ prevents a class of inefficient but annoying DoS attacks by
+ hidden service directories. Fixes bug 13214; bugfix on
+ 0.2.1.6-alpha. Reported by "special".
diff --git a/changes/bug13296 b/changes/bug13296
new file mode 100644
index 0000000000..d6fe038c30
--- /dev/null
+++ b/changes/bug13296
@@ -0,0 +1,5 @@
+ o Directory authority changes:
+ - Remove turtles as a directory authority.
+ - Add longclaw as a new (v3) directory authority. This implements
+ ticket 13296. This keeps the directory authority count at 9.
+
diff --git a/changes/bug13315 b/changes/bug13315
new file mode 100644
index 0000000000..c2ae5ff1f8
--- /dev/null
+++ b/changes/bug13315
@@ -0,0 +1,5 @@
+ o Minor features:
+ - Validate hostnames in SOCKS5 requests more strictly. If SafeSocks
+ is enabled, reject requests with IP addresses as hostnames. Resolves
+ ticket 13315.
+
diff --git a/changes/bug13399 b/changes/bug13399
new file mode 100644
index 0000000000..fcaf58a53c
--- /dev/null
+++ b/changes/bug13399
@@ -0,0 +1,12 @@
+ o Minor bugfixes:
+ - Use a full 256 bits of the SHA256 digest of a microdescriptor when
+ computing which microdescriptors to download. This keeps us from
+ erroneous download behavior if two microdescriptor digests ever have
+ the same first 160 bits. Fixes part of bug 13399; bugfix on
+ 0.2.3.1-alpha.
+
+ - Reset a router's status if its microdescriptor digest changes,
+ even if the first 160 bits remain the same. Fixes part of bug
+ 13399; bugfix on 0.2.3.1-alpha.
+
+
diff --git a/changes/bug13399_part1 b/changes/bug13399_part1
new file mode 100644
index 0000000000..2ad3f8d77e
--- /dev/null
+++ b/changes/bug13399_part1
@@ -0,0 +1,3 @@
+ o Code simplifications and refactoring:
+ - Refactor our generic strmap and digestmap types into a single
+ implementation, so that we can add a new digest256map type trivially.
diff --git a/changes/bug13447 b/changes/bug13447
new file mode 100644
index 0000000000..90027e8f3a
--- /dev/null
+++ b/changes/bug13447
@@ -0,0 +1,5 @@
+ o Minor feature:
+ - When re-enabling the network, don't try to build introduction circuits
+ until we have successfully built a circuit. This makes hidden services
+ come up faster when the network is re-enabled. Patch from
+ "akwizgran". Closes ticket 13447.
diff --git a/changes/bug13644 b/changes/bug13644
new file mode 100644
index 0000000000..959ce65fc9
--- /dev/null
+++ b/changes/bug13644
@@ -0,0 +1,4 @@
+ o Code simplifications and refactoring:
+ - Document all members of was_router_added_t enum and rename
+ ROUTER_WAS_NOT_NEW to ROUTER_IS_ALREADY_KNOWN to make it less
+ confusable with ROUTER_WAS_TOO_OLD. Fixes issue 13644.
diff --git a/changes/bug13678 b/changes/bug13678
new file mode 100644
index 0000000000..d71b88a003
--- /dev/null
+++ b/changes/bug13678
@@ -0,0 +1,6 @@
+
+ o Testing:
+ - In the unit tests, use 'chgrp' to change the group of the unit test
+ temporary directory to the current user, so that the sticky bit doesn't
+ interfere with tests that check directory groups. Closes 13678.
+
diff --git a/changes/bug13698 b/changes/bug13698
new file mode 100644
index 0000000000..9af22345b8
--- /dev/null
+++ b/changes/bug13698
@@ -0,0 +1,6 @@
+ o Major bugfixes:
+ - When closing an introduction circuit that was opened in
+ parallel, don't mark the introduction point as
+ unreachable. Previously, the first successful connection to an
+ introduction point would make the other uintroduction points get
+ marked as having timed out. Fixes bug 13698; bugfix on 0.0.6rc2.
diff --git a/changes/bug13701 b/changes/bug13701
new file mode 100644
index 0000000000..23a08afa47
--- /dev/null
+++ b/changes/bug13701
@@ -0,0 +1,4 @@
+ o Minor bugfixes (logging):
+ - Log the circuit identifier correctly in
+ connection_ap_handshake_attach_circuit(). Fixes bug 13701;
+ bugfix on 0.0.6.
diff --git a/changes/bug13707 b/changes/bug13707
new file mode 100644
index 0000000000..349495c9c7
--- /dev/null
+++ b/changes/bug13707
@@ -0,0 +1,4 @@
+ o Documentation:
+ - Fix typo in PredictedPortsRelevanceTime option description in
+ manpage. Resolves issue 13707.
+
diff --git a/changes/bug13713 b/changes/bug13713
new file mode 100644
index 0000000000..412b406c53
--- /dev/null
+++ b/changes/bug13713
@@ -0,0 +1,3 @@
+ o Documentation:
+ - Document the bridge-authority-only 'networkstatus-bridges'
+ file. Closes ticket 13713; patch from "tom".
diff --git a/changes/bug4244 b/changes/bug4244
deleted file mode 100644
index 2b228ddacd..0000000000
--- a/changes/bug4244
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes:
- - Stop modifying the value of our DirReqStatistics torrc option just
- because we're not a bridge or relay. This bug was causing Tor
- Browser users to write "DirReqStatistics 0" in their torrc files
- as if they had chosen to change the config. Fixes bug 4244; bugfix
- on 0.2.3.1-alpha.
diff --git a/changes/bug7484 b/changes/bug7484
new file mode 100644
index 0000000000..647992af05
--- /dev/null
+++ b/changes/bug7484
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - Stop allowing invalid address patterns containing both a wildcard
+ address and a bit prefix length. This affects all our
+ address-range parsing code. Fixes bug 7484; bugfix on 0.0.2pre14.
diff --git a/changes/bug7733a b/changes/bug7733a
deleted file mode 100644
index 183c00994e..0000000000
--- a/changes/bug7733a
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes:
- - When a bridge has been configured without an identity digest
- (not recommended), avoid launching an extra channel to it when
- bootstrapping. Fixes bug 7733; bugfix on 0.2.4.4-alpha.
diff --git a/changes/bug7803 b/changes/bug7803
new file mode 100644
index 0000000000..7a2bba70db
--- /dev/null
+++ b/changes/bug7803
@@ -0,0 +1,5 @@
+ o Removed features:
+ - Tor clients no longer support connecting to hidden services running on
+ Tor 0.2.2.x and earlier; the Support022HiddenServices option has been
+ removed. (There shouldn't be any hidden services running these
+ versions on the network.)
diff --git a/changes/bug8197 b/changes/bug8197
deleted file mode 100644
index b8e467dc38..0000000000
--- a/changes/bug8197
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor refactoring:
- - Reworking API of policies_parse_exit_policy() function to use a
- bitmask to represent parsing options instead of a confusing mess
- of booleans. Resolves ticket 8197.
- - Introducing helper function to parse ExitPolicy in or_options_t
- structure.
diff --git a/changes/bug8387 b/changes/bug8387
deleted file mode 100644
index 2ec0487bf8..0000000000
--- a/changes/bug8387
+++ /dev/null
@@ -1,11 +0,0 @@
- o Major bugfixes (client):
-
- - Perform circuit cleanup operations even when circuit
- construction operations are disabled (because the network is
- disabled, or because there isn't enough directory information).
- Previously, when we were not building predictive circuits, we
- were not closing expired circuits either.
-
- Fixes bug 8387; bugfix on 0.1.1.11-alpha. This bug became visible
- in 0.2.4.10-alpha when we became more strict about when we have
- "enough directory information to build circuits".
diff --git a/changes/bug8402 b/changes/bug8402
deleted file mode 100644
index 96a3084ecf..0000000000
--- a/changes/bug8402
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major features (bridges):
- - Expose the outgoing upstream HTTP/SOCKS proxy to pluggable
- transports if they are configured via the "TOR_PT_PROXY"
- enviorment variable. Implements proposal 232. Resolves
- ticket 8402.
diff --git a/changes/bug9801 b/changes/bug9801
deleted file mode 100644
index 6b23b71806..0000000000
--- a/changes/bug9801
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - When GeoIPExcludeUnkonwn is enabled, do not incorrectly decide
- that our options have changed every time we SIGHUP. Fixes bug
- 9801; bugfix on 0.2.4.10-alpha. Patch from "qwerty1".
-
diff --git a/changes/bug9812 b/changes/bug9812
new file mode 100644
index 0000000000..8791589faf
--- /dev/null
+++ b/changes/bug9812
@@ -0,0 +1,6 @@
+ o Minor bugfixes (logging):
+ - Downgrade warnings about RSA signature failures to info log
+ level. Emit a warning when extra info document is found
+ incompatible with a corresponding router descriptor. Fixes bug
+ 9812; bugfix on 0.0.6rc3.
+
diff --git a/changes/check_dup_args_gencert b/changes/check_dup_args_gencert
deleted file mode 100644
index d0925df600..0000000000
--- a/changes/check_dup_args_gencert
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - In tor-gencert, report an error if the user provides the same
- argument more than once.
diff --git a/changes/coverage-html b/changes/coverage-html
deleted file mode 100644
index 1c38c76fa6..0000000000
--- a/changes/coverage-html
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor features (testing):
-
- - Add a "coverage-html" make target to generate HTML-visualized
- coverage results when building with --enable-coverage. (Requires lcov.)
- Patch from Kevin Murray.
diff --git a/changes/crash_handler_in_tests b/changes/crash_handler_in_tests
deleted file mode 100644
index d2bfdde784..0000000000
--- a/changes/crash_handler_in_tests
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Enable the backtrace handler (where supported) when running the
- unit tests.
diff --git a/changes/curve25519-donna32-bug b/changes/curve25519-donna32-bug
deleted file mode 100644
index 7fccab1b0c..0000000000
--- a/changes/curve25519-donna32-bug
+++ /dev/null
@@ -1,12 +0,0 @@
- o Major bugfixes:
-
- - Fix a bug in the bounds-checking in the 32-bit curve25519-donna
- implementation that caused incorrect results on 32-bit
- implementations when certain malformed inputs were used along with
- a small class of private ntor keys. This bug does not currently
- appear to allow an attacker to learn private keys or impersonate a
- Tor server, but it could provide a means to distinguish 32-bit Tor
- implementations from 64-bit Tor implementations. Fixes bug 12694;
- bugfix on 0.2.4.8-alpha. Bug found by Robert Ransom; fix from
- Adam Langley.
-
diff --git a/changes/doc13381 b/changes/doc13381
new file mode 100644
index 0000000000..acc4bb8a0f
--- /dev/null
+++ b/changes/doc13381
@@ -0,0 +1,5 @@
+ o Documentation:
+ - Stop suggesting that users specify nodes by nickname: it isn't a
+ good idea. Also, properly cross-reference how to specify nodes
+ in all parts of the manual for options that take a list of
+ nodes. Closes ticket 13381.
diff --git a/changes/feature13153 b/changes/feature13153
deleted file mode 100644
index 15f8fe8b4f..0000000000
--- a/changes/feature13153
+++ /dev/null
@@ -1,5 +0,0 @@
- o Code simplication:
- - Clients are now willing to send optimistic circuit data (before they
- receive a 'connected' cell) to relays of any version. We used to
- only do it for relays running 0.2.3.1-alpha or later, but now all
- relays are new enough. Resolves ticket 13153.
diff --git a/changes/feature13211 b/changes/feature13211
deleted file mode 100644
index dcb01966c8..0000000000
--- a/changes/feature13211
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major features (performance):
- - Allow clients to use optimistic data when connecting to a hidden
- service, which should cut out the initial round-trip for client-side
- programs including Tor Browser. (Now that Tor 0.2.2.x is obsolete,
- all hidden services should support server-side optimistic
- data.) See proposal 181 for details. Implements ticket 13211.
diff --git a/changes/feature13212 b/changes/feature13212
new file mode 100644
index 0000000000..6f1bce7d8a
--- /dev/null
+++ b/changes/feature13212
@@ -0,0 +1,4 @@
+ o Minor features (hidden services):
+ - Inform Tor controller about nature of failure to retrieve
+ hidden service descriptor by sending reason string with HS_DESC
+ FAILED controller event. Implements feature 13212.
diff --git a/changes/feature5583 b/changes/feature5583
deleted file mode 100644
index cd5eb69281..0000000000
--- a/changes/feature5583
+++ /dev/null
@@ -1,2 +0,0 @@
- o Minor features:
- - Add an option to overwrite logs (TruncateLogFile). Closes ticket #5583.
diff --git a/changes/feature9503 b/changes/feature9503
new file mode 100644
index 0000000000..58ae67f184
--- /dev/null
+++ b/changes/feature9503
@@ -0,0 +1,4 @@
+ o Minor features (controller):
+ - Add a "SIGNAL HEARTBEAT" Tor controller command that provokes
+ writing unscheduled heartbeat message to the log. Implements
+ feature 9503.
diff --git a/changes/further-12184-diagnostic b/changes/further-12184-diagnostic
deleted file mode 100644
index 89e9f4612f..0000000000
--- a/changes/further-12184-diagnostic
+++ /dev/null
@@ -1,2 +0,0 @@
- o Minor features (diagnostic):
- - Slightly enhance the diagnostic message for bug 12184.
diff --git a/changes/geoip-august2014 b/changes/geoip-august2014
deleted file mode 100644
index 90d8ecb300..0000000000
--- a/changes/geoip-august2014
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update geoip to the August 7 2014 Maxmind GeoLite2 Country database.
-
diff --git a/changes/geoip-july2014 b/changes/geoip-july2014
deleted file mode 100644
index a0523ecac9..0000000000
--- a/changes/geoip-july2014
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update geoip to the July 10 2014 Maxmind GeoLite2 Country database.
-
diff --git a/changes/geoip-november2014 b/changes/geoip-november2014
new file mode 100644
index 0000000000..52cbeb3e41
--- /dev/null
+++ b/changes/geoip-november2014
@@ -0,0 +1,3 @@
+ o Minor features:
+ - Update geoip to the November 15 2014 Maxmind GeoLite2 Country database.
+
diff --git a/changes/geoip6-august2014 b/changes/geoip6-august2014
deleted file mode 100644
index 7e7c9a975d..0000000000
--- a/changes/geoip6-august2014
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Update geoip6 to the August 7 2014 Maxmind GeoLite2 Country database.
-
diff --git a/changes/geoip6-july2014 b/changes/geoip6-july2014
deleted file mode 100644
index 155788ef88..0000000000
--- a/changes/geoip6-july2014
+++ /dev/null
@@ -1,2 +0,0 @@
- o Minor features:
- - Update geoip6 to the July 10 2014 Maxmind GeoLite2 Country database.
diff --git a/changes/geoip6-november2014 b/changes/geoip6-november2014
new file mode 100644
index 0000000000..e91fcc0d3b
--- /dev/null
+++ b/changes/geoip6-november2014
@@ -0,0 +1,3 @@
+ o Minor features:
+ - Update geoip6 to the November 15 2014 Maxmind GeoLite2 Country database.
+
diff --git a/changes/no-wince b/changes/no-wince
deleted file mode 100644
index 833bf46630..0000000000
--- a/changes/no-wince
+++ /dev/null
@@ -1,4 +0,0 @@
- o Removed platform support:
- - We no longer include special code to build on Windows CE; as far
- as we know, nobody has used Tor on Windows CE in a very long
- time. Closes ticket 11446.
diff --git a/changes/no_global_ccc b/changes/no_global_ccc
new file mode 100644
index 0000000000..614055a845
--- /dev/null
+++ b/changes/no_global_ccc
@@ -0,0 +1,3 @@
+ o Code Simplification and Refactoring:
+ - Stop using can_complete_circuits as a global variable; access it with
+ a function instead.
diff --git a/changes/prop215 b/changes/prop215
deleted file mode 100644
index 214e5763c8..0000000000
--- a/changes/prop215
+++ /dev/null
@@ -1,16 +0,0 @@
- o Removed features (directory authorities):
-
- - Directory authorities no longer advertise or support consensus
- methods 1 through 12 inclusive. These consensus methods were
- obsolete and/or insecure: maintaining the ability to support them
- served no good purpose. Implements part of proposal 215;
- closes ticket 10163.
-
- o Minor features (directory authorities)
- - If a directory authority can't find a best consensus method in the
- votes that it holds, it now falls back to its favorite consensus
- method. Previously, it fell back to method 1. Neither of these is
- likely to get enough signatures, but "fall back to favorite"
- doesn't require us to maintain support an obsolete consensus
- method. Implements another part of proposal 215.
-
diff --git a/changes/spurious-clang-warnings b/changes/spurious-clang-warnings
new file mode 100644
index 0000000000..d039920476
--- /dev/null
+++ b/changes/spurious-clang-warnings
@@ -0,0 +1,10 @@
+ o Minor bugfixes:
+ - Silence clang warnings under --enable-expensive-hardening, including:
+ + implicit truncation of 64 bit values to 32 bit;
+ + const char assignment to self;
+ + tautological compare; and
+ + additional parentheses around equality tests. (gcc uses these to
+ silence assignment, so clang warns when they're present in an
+ equality test. But we need to use extra parentheses in macros to
+ isolate them from other code).
+ Fixes bug 13577.
diff --git a/changes/test.h_msvc b/changes/test.h_msvc
deleted file mode 100644
index 3afbc13aaa..0000000000
--- a/changes/test.h_msvc
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes (compilation):
- - Fix compilation of test.h with MSVC. Patch from Gisle Vanem;
- bugfix on 0.2.5.5-alpha.
diff --git a/changes/threads-required b/changes/threads-required
deleted file mode 100644
index a56cfe345b..0000000000
--- a/changes/threads-required
+++ /dev/null
@@ -1,12 +0,0 @@
- o Removed features:
- - Tor no longer supports systems without threading support.
- When we began working on Tor, there were several systems that didn't
- have threads, or where the thread support wasn't able to run the
- threads of a single process on multiple CPUs. That no longer holds:
- every system where Tor needs to run well now has threading support.
- Resolves ticket 12439.
-
- o Minor features:
- - Threads are no longer disabled by default on Solaris; we believe that
- the versions of Solaris with broken threading support are all obsolete
- by now. Resolves ticket 9495.
diff --git a/changes/ticket-11291 b/changes/ticket-11291
new file mode 100644
index 0000000000..4c19f3cd0e
--- /dev/null
+++ b/changes/ticket-11291
@@ -0,0 +1,4 @@
+ o Minor features (hidden services):
+ - New HiddenServiceDirGroupReadable option to cause hidden service
+ directories and hostname files to be created group-readable.
+ Patch from "anon", David Stainton, and "meejah".
diff --git a/changes/ticket11144 b/changes/ticket11144
deleted file mode 100644
index 265481b964..0000000000
--- a/changes/ticket11144
+++ /dev/null
@@ -1,8 +0,0 @@
- o New features (sample torrc):
- - Add a new, infrequently-changed "torrc.minimal". This file's
- purpose is similar to torrc.sample, but it is meant to be small
- and change as infrequently as possible, for the benefit of
- users whose systems prompt them for intervention whenever a
- default configuration file is changed. Making this change
- allows us to update torrc.sample to be a more generally useful
- "sample torrc".
diff --git a/changes/ticket12688 b/changes/ticket12688
deleted file mode 100644
index 88228e5506..0000000000
--- a/changes/ticket12688
+++ /dev/null
@@ -1,6 +0,0 @@
- Major features:
- - Make the number of entry guards configurable via a new
- NumEntryGuards consensus parameter, and the number of directory
- guards configurable via a new NumDirectoryGuards consensus
- parameter. Implements ticket 12688.
-
diff --git a/changes/ticket12690 b/changes/ticket12690
deleted file mode 100644
index 5091883602..0000000000
--- a/changes/ticket12690
+++ /dev/null
@@ -1,9 +0,0 @@
- o Minor features:
- - Authorities now assign the Guard flag to the fastest 25% of the
- network (it used to be the fastest 50%). Also raise the consensus
- weight that guarantees the Guard flag from 250 to 2000. For the
- current network, this results in about 1100 guards, down from 2500.
- This step paves the way for moving the number of entry guards
- down to 1 (proposal 236) while still providing reasonable expected
- performance for most users. Implements ticket 12690.
-
diff --git a/changes/ticket12884 b/changes/ticket12884
deleted file mode 100644
index cd7e87c085..0000000000
--- a/changes/ticket12884
+++ /dev/null
@@ -1,3 +0,0 @@
- o Removed code:
- - We no longer remind the user about obsolete configuration options
- that have been obsolete since 0.2.3.x or later. Patch by Adrien Bak.
diff --git a/changes/ticket13036 b/changes/ticket13036
deleted file mode 100644
index 1b4784358a..0000000000
--- a/changes/ticket13036
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes:
- - Fix a large number of false positive warnings from the clang
- analyzer static analysis tool. This should make real warnings
- easier for clang analyzer to find. Patch from "teor". Closes
- ticket 13036.
diff --git a/changes/ticket13172 b/changes/ticket13172
new file mode 100644
index 0000000000..a1d47fd9cf
--- /dev/null
+++ b/changes/ticket13172
@@ -0,0 +1,4 @@
+ o Code simplification and refactoring:
+ - Avoid using operators directly as macro arguments: this lets us
+ apply coccinelle transformations to our codebase more
+ directly. Closes ticket 13172. \ No newline at end of file
diff --git a/changes/ticket_13119 b/changes/ticket_13119
deleted file mode 100644
index 042106eeab..0000000000
--- a/changes/ticket_13119
+++ /dev/null
@@ -1,6 +0,0 @@
- o Code refactoring:
- - Revise all unit tests that used the legacy test_* macros to
- instead use the recommended tt_* macros. This patch was
- generated with coccinelle, to avoid manual errors. Closes
- ticket 13119.
-
diff --git a/changes/tickets6456 b/changes/tickets6456
new file mode 100644
index 0000000000..68ce2c7dd9
--- /dev/null
+++ b/changes/tickets6456
@@ -0,0 +1,6 @@
+ o Code simplification and refactoring:
+ - Combine the functions used to parse ClientTransportPlugin and
+ ServerTransportPlugin into a single function. Closes ticket 6456.
+
+ o Testing:
+ - New tests for parse_transport_line(). Part of ticket 6456.
diff --git a/configure.ac b/configure.ac
index 5aeeeb4025..e7560b2bfc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,9 +1,9 @@
dnl Copyright (c) 2001-2004, Roger Dingledine
dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
-dnl Copyright (c) 2007-2013, The Tor Project, Inc.
+dnl Copyright (c) 2007-2014, The Tor Project, Inc.
dnl See LICENSE for licensing information
-AC_INIT([tor],[0.2.6.0-alpha-dev])
+AC_INIT([tor],[0.2.6.1-alpha-dev])
AC_CONFIG_SRCDIR([src/or/main.c])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE
@@ -39,8 +39,6 @@ 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,
@@ -153,6 +151,9 @@ AC_ARG_ENABLE(tool-name-check,
AC_ARG_ENABLE(seccomp,
AS_HELP_STRING(--disable-seccomp, do not attempt to use libseccomp))
+AC_ARG_ENABLE(libscrypt,
+ AS_HELP_STRING(--disable-libscrypt, do not attempt to use libscrypt))
+
dnl check for the correct "ar" when cross-compiling
AN_MAKEVAR([AR], [AC_PROG_AR])
AN_PROGRAM([ar], [AC_PROG_AR])
@@ -191,6 +192,7 @@ AM_CONDITIONAL(USE_FW_HELPER, test x$natpmp = xtrue || test x$upnp = xtrue)
AM_CONDITIONAL(NAT_PMP, test x$natpmp = xtrue)
AM_CONDITIONAL(MINIUPNPC, test x$upnp = xtrue)
AM_PROG_CC_C_O
+AC_PROG_CC_C99
AC_ARG_VAR(PYTHON)
AC_CHECK_PROGS(PYTHON, [python python2 python2.7 python3 python3.3])
@@ -221,6 +223,28 @@ AC_C_FLEXIBLE_ARRAY_MEMBER
fi
])
+AC_CACHE_CHECK([for working C99 mid-block declaration syntax],
+ tor_cv_c_c99_decl,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([], [int x; x = 3; int y; y = 4 + x;])],
+ [tor_cv_c_c99_decl=yes],
+ [tor_cv_c_c99_decl=no] )])
+if test "$tor_cv_c_c99_decl" != "yes"; then
+ AC_MSG_ERROR([Your compiler doesn't support c99 mid-block declarations. This is required as of Tor 0.2.6.x])
+fi
+
+AC_CACHE_CHECK([for working C99 designated initializers],
+ tor_cv_c_c99_designated_init,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([struct s { int a; int b; };],
+ [[ struct s ss = { .b = 5, .a = 6 }; ]])],
+ [tor_cv_c_c99_designated_init=yes],
+ [tor_cv_c_c99_designated_init=no] )])
+
+if test "$tor_cv_c_c99_designated_init" != "yes"; then
+ AC_MSG_ERROR([Your compiler doesn't support c99 designated initializers. This is required as of Tor 0.2.6.x])
+fi
+
AC_PATH_PROG([SHA1SUM], [sha1sum], none)
AC_PATH_PROG([OPENSSL], [openssl], none)
@@ -339,6 +363,7 @@ AC_CHECK_FUNCS(
socketpair \
strlcat \
strlcpy \
+ strnlen \
strptime \
strtok_r \
strtoull \
@@ -556,6 +581,10 @@ else
fi
AC_SUBST(TOR_OPENSSL_LIBS)
+AC_CHECK_MEMBERS([struct ssl_method_st.get_cipher_by_char], , ,
+[#include <openssl/ssl.h>
+])
+
dnl ------------------------------------------------------
dnl Where do you live, zlib? And how do we call you?
@@ -723,104 +752,103 @@ if test "x$enable_seccomp" != "xno"; then
fi
dnl ============================================================
+dnl Check for libscrypt
+
+if test "x$enable_libscrypt" != "xno"; then
+ AC_CHECK_HEADERS([libscrypt.h])
+ AC_SEARCH_LIBS(libscrypt_scrypt, [scrypt])
+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
+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
-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])
@@ -831,7 +859,6 @@ if test x$use_curve25519_nacl = xyes; then
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.
@@ -1500,7 +1527,7 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
if test x$have_gcc4 = xyes ; then
# These warnings break gcc 3.3.5 and work on gcc 4.0.2
- CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement -Wold-style-definition"
+ CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wold-style-definition"
fi
if test x$have_gcc42 = xyes ; then
@@ -1565,7 +1592,9 @@ if test x$asciidoc = xtrue && test "$ASCIIDOC" = "none" ; then
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 "Building Tor has failed since manpages cannot be built.";
+ echo;
+ echo "You need asciidoc installed to be able to build the manpages.";
echo "To build without manpages, use the --disable-asciidoc argument";
echo "when calling configure.";
echo;
diff --git a/contrib/win32build/tor-mingw.nsi.in b/contrib/win32build/tor-mingw.nsi.in
index f5c02dbb84..d675c2cc09 100644
--- a/contrib/win32build/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.6.0-alpha-dev"
+!define VERSION "0.2.6.1-alpha-dev"
!define INSTALLER "tor-${VERSION}-win32.exe"
!define WEBSITE "https://www.torproject.org/"
!define LICENSE "LICENSE"
diff --git a/doc/HACKING b/doc/HACKING
index 2052a9d492..5c71b74bd1 100644
--- a/doc/HACKING
+++ b/doc/HACKING
@@ -555,10 +555,12 @@ in their approved versions list.
git tag -u <keyid> tor-0.2.x.y-status
git push origin tag tor-0.2.x.y-status
-8) scp the tarball and its sig to the website in the dist/ directory
-(i.e. /srv/www-master.torproject.org/htdocs/dist/ on vescum). Edit
-"include/versions.wmi" and "Makefile" to note the new version. From your
-website checkout, run ./publish to build and publish the website.
+8a) scp the tarball and its sig to the dist website, i.e.
+/srv/dist-master.torproject.org/htdocs/ on dist-master. When you want
+it to go live, you run "static-update-component dist.torproject.org"
+on dist-master.
+
+8b) Edit "include/versions.wmi" and "Makefile" to note the new version.
9) Email the packagers (cc'ing tor-assistants) that a new tarball is up.
diff --git a/doc/TUNING b/doc/TUNING
new file mode 100644
index 0000000000..a4bf386dd6
--- /dev/null
+++ b/doc/TUNING
@@ -0,0 +1,47 @@
+Most operating systems limit an amount of TCP sockets that can be used
+simultaneously. It is possible for a busy Tor relay to run into these
+limits, thus being unable to fully utilize the bandwidth resources it
+has at its disposal. Following system-specific tips might be helpful
+to alleviate the aforementioned problem.
+
+Linux
+-----
+
+Use 'ulimit -n' to raise an allowed number of file descriptors to be
+opened on your host at the same time.
+
+FreeBSD
+-------
+
+Tune the followind sysctl(8) variables:
+ * kern.maxfiles - maximum allowed file descriptors (for entire system)
+ * kern.maxfilesperproc - maximum file descriptors one process is allowed
+ to use
+ * kern.ipc.maxsockets - overall maximum numbers of sockets for entire
+ system
+ * kern.ipc.somaxconn - size of listen queue for incoming TCP connections
+ for entire system
+
+See also:
+ * https://www.freebsd.org/doc/handbook/configtuning-kernel-limits.html
+ * https://wiki.freebsd.org/NetworkPerformanceTuning
+
+Mac OS X
+--------
+
+Since Mac OS X is BSD-based system, most of the above hold for OS X as well.
+However, launchd(8) is known to modify kern.maxfiles and kern.maxfilesperproc
+when it launches tor service (see launchd.plist(5) manpage). Also,
+kern.ipc.maxsockets is determined dynamically by the system and thus is
+read-only on OS X.
+
+Disclaimer
+----------
+
+Do note that this document is a draft and above information may be
+technically incorrect and/or incomplete. If so, please open a ticket
+on https://trac.torproject.org or post to tor-relays mailing list.
+
+Are you running a busy Tor relay? Let us know how you are solving
+the out-of-sockets problem on your system.
+
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index d6b14329d1..e876829cf6 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -72,7 +72,7 @@ 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
+ https://www.torproject.org/docs/faq#NTService
[[opt-service]] **--service** **remove**|**start**|**stop**::
Remove, start, or stop a configured Tor Windows service.
@@ -550,7 +550,7 @@ GENERAL OPTIONS
\'info'. (Default: 0)
[[PredictedPortsRelevanceTime]] **PredictedPortsRelevanceTime** __NUM__::
- Set how long, after the client has mad an anonymized connection to a
+ Set how long, after the client has made 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)
@@ -711,10 +711,11 @@ The following options are useful only for clients (that is, if
unless ORPort, ExtORPort, or DirPort are configured.) (Default: 0)
[[ExcludeNodes]] **ExcludeNodes** __node__,__node__,__...__::
- A list of identity fingerprints, nicknames, country codes and address
- patterns of nodes to avoid when building a circuit.
+ A list of identity fingerprints, country codes, and address
+ patterns of nodes to avoid when building a circuit. Country codes must
+ be wrapped in braces; fingerprints may be preceded by a dollar sign.
(Example:
- ExcludeNodes SlowServer, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) +
+ ExcludeNodes ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) +
+
By default, this option is treated as a preference that Tor is allowed
to override in order to keep working.
@@ -734,11 +735,13 @@ The following options are useful only for clients (that is, if
[[ExcludeExitNodes]] **ExcludeExitNodes** __node__,__node__,__...__::
- A list of identity fingerprints, nicknames, country codes and address
+ A list of identity fingerprints, 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.
+ list too. See
+ the **ExcludeNodes** option for more information on how to specify
+ nodes. See also the caveats on the "ExitNodes" option below.
[[GeoIPExcludeUnknown]] **GeoIPExcludeUnknown** **0**|**1**|**auto**::
If this option is set to 'auto', then whenever any country code is set in
@@ -749,9 +752,10 @@ The following options are useful only for clients (that is, if
configured or can't be found. (Default: auto)
[[ExitNodes]] **ExitNodes** __node__,__node__,__...__::
- A list of identity fingerprints, nicknames, country codes and address
+ A list of identity fingerprints, 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. +
+ node that delivers traffic for you outside the Tor network. See
+ the **ExcludeNodes** option for more information on how to specify nodes. +
+
Note that if you list too few nodes here, or if you exclude too many exit
nodes with ExcludeExitNodes, you can degrade functionality. For example,
@@ -772,7 +776,7 @@ The following options are useful only for clients (that is, if
this option.
[[EntryNodes]] **EntryNodes** __node__,__node__,__...__::
- A list of identity fingerprints, nicknames, and country codes of nodes
+ A list of identity fingerprints and country codes of nodes
to use for the first hop in your normal circuits.
Normal circuits include all
circuits except for direct connections to directory servers. The Bridge
@@ -780,7 +784,8 @@ The following options are useful only for clients (that is, if
UseBridges is 1, the Bridges are used as your entry nodes. +
+
The ExcludeNodes option overrides this option: any node listed in both
- EntryNodes and ExcludeNodes is treated as excluded.
+ EntryNodes and ExcludeNodes is treated as excluded. See
+ the **ExcludeNodes** option for more information on how to specify nodes.
[[StrictNodes]] **StrictNodes** **0**|**1**::
If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a
@@ -929,12 +934,14 @@ The following options are useful only for clients (that is, if
but it has not yet been completely constructed. (Default: 32)
[[NodeFamily]] **NodeFamily** __node__,__node__,__...__::
- The Tor servers, defined by their identity fingerprints or nicknames,
+ The Tor servers, defined by their identity fingerprints,
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
when a server doesn't list the family itself (with MyFamily). This option
- can be used multiple times. In addition to nodes, you can also list
- IP address and ranges and country codes in {curly braces}.
+ can be used multiple times; each instance defines a separate family. In
+ addition to nodes, you can also list IP address and ranges and country
+ codes in {curly braces}. See the **ExcludeNodes** option for more
+ information on how to specify nodes.
[[EnforceDistinctSubnets]] **EnforceDistinctSubnets** **0**|**1**::
If 1, Tor will not put two servers whose IP addresses are "too close" on
@@ -964,10 +971,10 @@ The following options are useful only for clients (that is, if
(SOCKS 4, SOCKS 5, TransPort connections, NATDPort connections,
and DNSPort requests are all considered to be different protocols.)
**IsolateDestPort**;;
- Don't share circuits with streams targetting a different
+ Don't share circuits with streams targeting a different
destination port.
**IsolateDestAddr**;;
- Don't share circuits with streams targetting a different
+ Don't share circuits with streams targeting a different
destination address.
**SessionGroup=**__INT__;;
If no other isolation rules would prevent it, allow streams
@@ -1018,7 +1025,7 @@ The following options are useful only for clients (that is, if
requests via this connection.
**PreferIPv6Automap**;;
When serving a hostname lookup request on this port that
- should get automapped (according to AutomapHostsOnResove),
+ should get automapped (according to AutomapHostsOnResolve),
if we could return either an IPv4 or an IPv6 answer, prefer
an IPv6 answer. (On by default.)
**PreferSOCKSNoAuth**;;
@@ -1419,16 +1426,6 @@ The following options are useful only for clients (that is, if
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
--------------
@@ -1538,7 +1535,7 @@ is non-zero):
[[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
+ their identity fingerprints. When two servers both declare
that they are in the same \'family', Tor clients will not use them in the
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
@@ -1635,19 +1632,31 @@ is non-zero):
to 0 will disable the heartbeat. (Default: 6 hours)
[[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 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
- is preferable to setting a low bandwidth, since it provides users with a
- 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".
+ Limits the max number of bytes sent and received within a set time period
+ using a given calculation rule (see: AccountingStart, AccountingRule).
+ Useful if you need to stay under a specific bandwidth. By default, the
+ number used for calculation is the max of either the bytes sent or
+ received. For example, with 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. This can
+ be changed to use the sum of the both bytes received and sent by setting
+ the AccountingRule option to "sum" (total bandwidth in/out). When the
+ number of bytes remaining 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 is preferable to setting a low bandwidth, since
+ it provides users with a 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".
+
+[[AccountingRule]] **AccountingRule** **sum**|**max**::
+ How we determine when our AccountingMax has been reached (when we
+ should hibernate) during a time interval. Set to "max" to calculate
+ using the higher of either the sent or received bytes (this is the
+ default functionality). Set to "sum" to calculate using the sent
+ plus received bytes. (Default: max)
[[AccountingStart]] **AccountingStart** **day**|**week**|**month** [__day__] __HH:MM__::
Specify how long accounting periods last. If **month** is given, each
@@ -2020,9 +2029,10 @@ The following options are used to configure a hidden service.
[[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
+ recent HiddenServiceDir. By default, this option maps the virtual port to
the same port on 127.0.0.1 over TCP. You may override the target port,
address, or both by specifying a target of addr, port, or addr:port.
+ (You can specify an IPv6 target as [addr]:port.)
You may also have multiple lines with the same VIRTPORT: when a user
connects to that VIRTPORT, one of the TARGETs from those lines will be
chosen at random.
@@ -2054,6 +2064,12 @@ The following options are used to configure a hidden service.
service descriptors to the directory servers. This information is also
uploaded whenever it changes. (Default: 1 hour)
+[[HiddenServiceDirGroupReadable]] **HiddenServiceDirGroupReadable** **0**|**1**::
+ If this option is set to 1, allow the filesystem group to read the
+ hidden service directory and hostname file. If the option is set to 0,
+ only owner is able to read the hidden service directory. (Default: 0)
+ Has no effect on Windows.
+
TESTING NETWORK OPTIONS
-----------------------
@@ -2185,8 +2201,18 @@ The following options are used for running a testing Tor network.
Try this often to download a v3 authority certificate before giving up.
Changing this requires that **TestingTorNetwork** is set. (Default: 8)
+[[TestingDirAuthVoteExit]] **TestingDirAuthVoteExit** __node__,__node__,__...__::
+ A list of identity fingerprints, country codes, and
+ address patterns of nodes to vote Exit for regardless of their
+ uptime, bandwidth, or exit policy. 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. See the **ExcludeNodes** option for more
+ information on how to specify nodes.
+
[[TestingDirAuthVoteGuard]] **TestingDirAuthVoteGuard** __node__,__node__,__...__::
- A list of identity fingerprints, nicknames, country codes and
+ A list of identity fingerprints and 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.
@@ -2374,6 +2400,11 @@ __DataDirectory__**/stats/conn-stats**::
Only used by servers. This file is used to collect approximate connection
history (number of active connections over time).
+__DataDirectory__**/networkstatus-bridges**::
+ Only used by authoritative bridge directories. Contains information
+ about bridges that have self-reported themselves to the bridge
+ authority.
+
__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
diff --git a/scripts/coccinelle/calloc.cocci b/scripts/coccinelle/calloc.cocci
index 8a295eb4fd..fbda88e538 100644
--- a/scripts/coccinelle/calloc.cocci
+++ b/scripts/coccinelle/calloc.cocci
@@ -1,16 +1,19 @@
// Use calloc or realloc as appropriate instead of multiply-and-alloc
@malloc_to_calloc@
-expression a,b;
+identifier f =~ "(tor_malloc|tor_malloc_zero)";
+expression a;
+constant b;
@@
-- tor_malloc(a * b)
+- f(a * b)
+ tor_calloc(a, b)
-@malloc_zero_to_calloc@
-expression a, b;
+@calloc_arg_order@
+expression a;
+type t;
@@
-- tor_malloc_zero(a * b)
-+ tor_calloc(a, b)
+- tor_calloc(sizeof(t), a)
++ tor_calloc(a, sizeof(t))
@realloc_to_reallocarray@
expression a, b;
diff --git a/scripts/codegen/makedesc.py b/scripts/codegen/makedesc.py
new file mode 100644
index 0000000000..e0b2aed3f4
--- /dev/null
+++ b/scripts/codegen/makedesc.py
@@ -0,0 +1,218 @@
+#!/usr/bin/python
+# Copyright 2014, The Tor Project, Inc.
+# See LICENSE for license information
+
+# This is a kludgey python script that uses ctypes and openssl to sign
+# router descriptors and extrainfo documents and put all the keys in
+# the right places. There are examples at the end of the file.
+
+# I've used this to make inputs for unit tests. I wouldn't suggest
+# using it for anything else.
+
+import base64
+import binascii
+import ctypes
+import ctypes.util
+import hashlib
+
+crypt = ctypes.CDLL(ctypes.util.find_library('crypto'))
+BIO_s_mem = crypt.BIO_s_mem
+BIO_s_mem.argtypes = []
+BIO_s_mem.restype = ctypes.c_void_p
+
+BIO_new = crypt.BIO_new
+BIO_new.argtypes = [ctypes.c_void_p]
+BIO_new.restype = ctypes.c_void_p
+
+RSA_generate_key = crypt.RSA_generate_key
+RSA_generate_key.argtypes = [ctypes.c_int, ctypes.c_ulong, ctypes.c_void_p, ctypes.c_void_p]
+RSA_generate_key.restype = ctypes.c_void_p
+
+RSA_private_encrypt = crypt.RSA_private_encrypt
+RSA_private_encrypt.argtypes = [
+ ctypes.c_int, ctypes.c_char_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int ]
+RSA_private_encrypt.restype = ctypes.c_int
+
+i2d_RSAPublicKey = crypt.i2d_RSAPublicKey
+i2d_RSAPublicKey.argtypes = [
+ ctypes.c_void_p, ctypes.POINTER(ctypes.c_char_p)
+]
+i2d_RSAPublicKey.restype = ctypes.c_int
+
+def b64(x):
+ x = base64.b64encode(x)
+ res = []
+ for i in xrange(0, len(x), 64):
+ res.append(x[i:i+64]+"\n")
+ return "".join(res)
+
+def bio_extract(bio):
+ buf = ctypes.c_char_p()
+ length = crypt.BIO_ctrl(bio, 3, 0, ctypes.byref(buf))
+ return ctypes.string_at(buf, length)
+
+def make_key(e=65537):
+ rsa = crypt.RSA_generate_key(1024, e, None, None)
+ bio = BIO_new(BIO_s_mem())
+ crypt.PEM_write_bio_RSAPublicKey(bio, rsa)
+ pem = bio_extract(bio).rstrip()
+ crypt.BIO_free(bio)
+
+ buf = ctypes.create_string_buffer(1024)
+ pBuf = ctypes.c_char_p(ctypes.addressof(buf))
+ n = crypt.i2d_RSAPublicKey(rsa, ctypes.byref(pBuf))
+ s = buf.raw[:n]
+ digest = hashlib.sha1(s).digest()
+
+ return (rsa,pem,digest)
+
+def signdesc(body, args_out=None):
+ rsa, ident_pem, id_digest = make_key()
+ _, onion_pem, _ = make_key()
+
+ hexdigest = binascii.b2a_hex(id_digest).upper()
+ fingerprint = " ".join(hexdigest[i:i+4] for i in range(0,len(hexdigest),4))
+
+ MAGIC = "<<<<<<MAGIC>>>>>>"
+ args = {
+ "RSA-IDENTITY" : ident_pem,
+ "ONION-KEY" : onion_pem,
+ "FINGERPRINT" : fingerprint,
+ "FINGERPRINT-NOSPACE" : hexdigest,
+ "RSA-SIGNATURE" : MAGIC
+ }
+ if args_out:
+ args_out.update(args)
+ body = body.format(**args)
+
+ idx = body.rindex("\nrouter-signature")
+ end_of_sig = body.index("\n", idx+1)
+
+ signed_part = body[:end_of_sig+1]
+
+ digest = hashlib.sha1(signed_part).digest()
+ assert len(digest) == 20
+
+ buf = ctypes.create_string_buffer(1024)
+ n = RSA_private_encrypt(20, digest, buf, rsa, 1)
+ sig = buf.raw[:n]
+
+ sig = """-----BEGIN SIGNATURE-----
+%s
+-----END SIGNATURE-----""" % b64(sig).rstrip()
+ body = body.replace(MAGIC, sig)
+
+ return body.rstrip()
+
+def emit_ri(name, body, args_out=None):
+ print "const char %s[] ="%name
+ body = "\n".join(line.rstrip() for line in body.split("\n"))+"\n"
+ b = signdesc(body, args_out)
+ for line in b.split("\n"):
+ print ' "%s\\n"'%line
+ print " ;"
+
+def emit_ei(name, body):
+ args = { 'NAME' : name }
+ emit_ri(name, body, args)
+ args['key'] = "\n".join(
+ ' "%s\\n"'%line for line in args['RSA-IDENTITY'].split("\n"))
+ print """
+const char {NAME}_fp[] = "{FINGERPRINT-NOSPACE}";
+const char {NAME}_key[] =
+{key};""".format(**args)
+
+if 0:
+ emit_ri("minimal",
+ """\
+router fred 127.0.0.1 9001 0 9002
+signing-key
+{RSA-IDENTITY}
+onion-key
+{ONION-KEY}
+published 2014-10-05 12:00:00
+bandwidth 1000 1000 1000
+reject *:*
+router-signature
+{RSA-SIGNATURE}
+""")
+
+if 0:
+ emit_ri("maximal",
+ """\
+router fred 127.0.0.1 9001 0 9002
+signing-key
+{RSA-IDENTITY}
+onion-key
+{ONION-KEY}
+published 2014-10-05 12:00:00
+bandwidth 1000 1000 1000
+reject 127.0.0.1:*
+accept *:80
+reject *:*
+ipv6-policy accept 80,100,101
+ntor-onion-key s7rSohmz9SXn8WWh1EefTHIsWePthsEntQi0WL+ScVw
+uptime 1000
+hibernating 0
+unrecognized-keywords are just dandy in this format
+platform Tor 0.2.4.23 on a Banana PC Jr 6000 Series
+contact O.W.Jones
+fingerprint {FINGERPRINT}
+read-history 900 1,2,3,4
+write-history 900 1,2,3,4
+extra-info-digest AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+hidden-service-dir
+allow-single-hop-exits
+family $AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA $BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+caches-extra-info
+or-address [::1:2:3:4]:9999
+or-address 127.0.0.99:10000
+opt fred is a fine router
+router-signature
+{RSA-SIGNATURE}
+""")
+
+if 0:
+ emit_ei("maximal",
+"""\
+extra-info bob {FINGERPRINT-NOSPACE}
+published 2014-10-05 20:07:00
+opt foobarbaz
+read-history 900 1,2,3
+write-history 900 1,2,3
+dirreq-v2-ips 1
+dirreq-v3-ips 100
+dirreq-v3-reqs blahblah
+dirreq-v2-share blahblah
+dirreq-v3-share blahblah
+dirreq-v2-resp djfkdj
+dirreq-v3-resp djfkdj
+dirreq-v2-direct-dl djfkdj
+dirreq-v3-direct-dl djfkdj
+dirreq-v2-tunneled-dl djfkdj
+dirreq-v3-tunneled-dl djfkdj
+dirreq-stats-end foobar
+entry-ips jfsdfds
+entry-stats-end ksdflkjfdkf
+cell-stats-end FOO
+cell-processed-cells FOO
+cell-queued-cells FOO
+cell-time-in-queue FOO
+cell-circuits-per-decile FOO
+exit-stats-end FOO
+exit-kibibytes-written FOO
+exit-kibibytes-read FOO
+exit-streams-opened FOO
+router-signature
+{RSA-SIGNATURE}
+""")
+
+if 0:
+ emit_ei("minimal",
+"""\
+extra-info bob {FINGERPRINT-NOSPACE}
+published 2014-10-05 20:07:00
+router-signature
+{RSA-SIGNATURE}
+""")
+
diff --git a/scripts/codegen/run_trunnel.sh b/scripts/codegen/run_trunnel.sh
new file mode 100755
index 0000000000..5f694ce6c9
--- /dev/null
+++ b/scripts/codegen/run_trunnel.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if test "x$TRUNNEL_PATH" != "x"; then
+ PYTHONPATH="${TRUNNEL_PATH}:${PYTHONPATH}"
+ export PYTHONPATH
+fi
+
+python -m trunnel --require-version=1.2 ./src/trunnel/*.trunnel
+
+python -m trunnel --require-version=1.2 --write-c-files --target-dir=./src/ext/trunnel/
+
diff --git a/scripts/maint/format_changelog.py b/scripts/maint/format_changelog.py
index f67e89b602..3fe5161433 100755
--- a/scripts/maint/format_changelog.py
+++ b/scripts/maint/format_changelog.py
@@ -12,6 +12,7 @@
import os
import re
import sys
+import optparse
# ==============================
# Oh, look! It's a cruddy approximation to Knuth's elegant text wrapping
@@ -33,6 +34,9 @@ import sys
NO_HYPHENATE=set("""
pf-divert
+tor-resolve
+tor-gencert
+tor-fw-helper
""".split())
LASTLINE_UNDERFLOW_EXPONENT = 1
@@ -115,7 +119,10 @@ def wrap_graf(words, prefix_len1=0, prefix_len2=0, width=72):
return lines
-def hyphenateable(word):
+def hyphenatable(word):
+ if "--" in word:
+ return False
+
if re.match(r'^[^\d\-]\D*-', word):
stripped = re.sub(r'^\W+','',word)
stripped = re.sub(r'\W+$','',word)
@@ -128,7 +135,7 @@ def split_paragraph(s):
r = []
for word in s.split():
- if hyphenateable(word):
+ if hyphenatable(word):
while "-" in word:
a,word = word.split("-",1)
r.append(a+"\xff")
@@ -156,10 +163,13 @@ TP_SECHEAD = 3
TP_ITEMFIRST = 4
TP_ITEMBODY = 5
TP_END = 6
+TP_PREHEAD = 7
def head_parser(line):
- if re.match(r'^[A-Z]', line):
+ if re.match(r'^Changes in', line):
return TP_MAINHEAD
+ elif re.match(r'^[A-Za-z]', line):
+ return TP_PREHEAD
elif re.match(r'^ o ', line):
return TP_SECHEAD
elif re.match(r'^\s*$', line):
@@ -178,17 +188,67 @@ def body_parser(line):
return TP_BLANK
elif re.match(r'^Changes in', line):
return TP_END
+ elif re.match(r'^\s+\S', line):
+ return TP_HEADTEXT
else:
print "Weird line %r"%line
+def clean_head(head):
+ return head
+
+def head_score(s):
+ m = re.match(r'^ +o (.*)', s)
+ if not m:
+ print >>sys.stderr, "Can't score %r"%s
+ return 99999
+ lw = m.group(1).lower()
+ if lw.startswith("security") and "feature" not in lw:
+ score = -300
+ elif lw.startswith("deprecated version"):
+ score = -200
+ elif (('new' in lw and 'requirement' in lw) or
+ ('new' in lw and 'dependenc' in lw) or
+ ('build' in lw and 'requirement' in lw) or
+ ('removed' in lw and 'platform' in lw)):
+ score = -100
+ elif lw.startswith("major feature"):
+ score = 00
+ elif lw.startswith("major bug"):
+ score = 50
+ elif lw.startswith("major"):
+ score = 70
+ elif lw.startswith("minor feature"):
+ score = 200
+ elif lw.startswith("minor bug"):
+ score = 250
+ elif lw.startswith("minor"):
+ score = 270
+ else:
+ score = 1000
+
+ if 'secur' in lw:
+ score -= 2
+
+ if "(other)" in lw:
+ score += 2
+
+ if '(' not in lw:
+ score -= 1
+
+ return score
+
class ChangeLog(object):
- def __init__(self):
+ def __init__(self, wrapText=True, blogOrder=True, drupalBreak=False):
+ self.prehead = []
self.mainhead = None
self.headtext = []
self.curgraf = None
self.sections = []
self.cursection = None
self.lineno = 0
+ self.wrapText = wrapText
+ self.blogOrder = blogOrder
+ self.drupalBreak = drupalBreak
def addLine(self, tp, line):
self.lineno += 1
@@ -197,6 +257,9 @@ class ChangeLog(object):
assert not self.mainhead
self.mainhead = line
+ elif tp == TP_PREHEAD:
+ self.prehead.append(line)
+
elif tp == TP_HEADTEXT:
if self.curgraf is None:
self.curgraf = []
@@ -240,6 +303,11 @@ class ChangeLog(object):
self.lint_item(item_line, grafs, head_type)
def dumpGraf(self,par,indent1,indent2=-1):
+ if not self.wrapText:
+ for line in par:
+ print line
+ return
+
if indent2 == -1:
indent2 = indent1
text = " ".join(re.sub(r'\s+', ' ', line.strip()) for line in par)
@@ -249,38 +317,210 @@ class ChangeLog(object):
initial_indent=" "*indent1,
subsequent_indent=" "*indent2))
+ def dumpPreheader(self, graf):
+ self.dumpGraf(graf, 0)
+ print
+
+ def dumpMainhead(self, head):
+ print head
+
+ def dumpHeadGraf(self, graf):
+ self.dumpGraf(graf, 2)
+ print
+
+ def dumpSectionHeader(self, header):
+ print header
+
+ def dumpStartOfSections(self):
+ pass
+
+ def dumpEndOfSections(self):
+ pass
+
+ def dumpEndOfSection(self):
+ print
+
+ def dumpEndOfChangelog(self):
+ print
+
+ def dumpDrupalBreak(self):
+ pass
+
+ def dumpItem(self, grafs):
+ self.dumpGraf(grafs[0],4,6)
+ for par in grafs[1:]:
+ print
+ self.dumpGraf(par,6,6)
+
+ def collateAndSortSections(self):
+ heads = []
+ sectionsByHead = { }
+ for _, head, items in self.sections:
+ head = clean_head(head)
+ try:
+ s = sectionsByHead[head]
+ except KeyError:
+ s = sectionsByHead[head] = []
+ heads.append( (head_score(head), head.lower(), head, s) )
+
+ s.extend(items)
+
+ heads.sort()
+ self.sections = [ (0, head, items) for _1,_2,head,items in heads ]
+
def dump(self):
- print self.mainhead
+ if self.prehead:
+ self.dumpPreheader(self.prehead)
+
+ if not self.blogOrder:
+ self.dumpMainhead(self.mainhead)
+
for par in self.headtext:
- self.dumpGraf(par, 2)
- print
+ self.dumpHeadGraf(par)
+
+ if self.blogOrder:
+ self.dumpMainhead(self.mainhead)
+
+ drupalBreakAfter = None
+ if self.drupalBreak and len(self.sections) > 4:
+ drupalBreakAfter = self.sections[1][2]
+
+ self.dumpStartOfSections()
for _,head,items in self.sections:
if not head.endswith(':'):
print >>sys.stderr, "adding : to %r"%head
head = head + ":"
- print head
+ self.dumpSectionHeader(head)
for _,grafs in items:
- self.dumpGraf(grafs[0],4,6)
- for par in grafs[1:]:
- print
- self.dumpGraf(par,6,6)
- print
- print
+ self.dumpItem(grafs)
+ self.dumpEndOfSection()
+ if items is drupalBreakAfter:
+ self.dumpDrupalBreak()
+ self.dumpEndOfSections()
+ self.dumpEndOfChangelog()
+
+class HTMLChangeLog(ChangeLog):
+ def __init__(self, *args, **kwargs):
+ ChangeLog.__init__(self, *args, **kwargs)
+
+ def htmlText(self, graf):
+ for line in graf:
+ line = line.rstrip().replace("&","&amp;")
+ line = line.rstrip().replace("<","&lt;").replace(">","&gt;")
+ sys.stdout.write(line.strip())
+ sys.stdout.write(" ")
+
+ def htmlPar(self, graf):
+ sys.stdout.write("<p>")
+ self.htmlText(graf)
+ sys.stdout.write("</p>\n")
+
+ def dumpPreheader(self, graf):
+ self.htmlPar(graf)
+
+ def dumpMainhead(self, head):
+ sys.stdout.write("<h2>%s</h2>"%head)
+
+ def dumpHeadGraf(self, graf):
+ self.htmlPar(graf)
+
+ def dumpSectionHeader(self, header):
+ header = header.replace(" o ", "", 1).lstrip()
+ sys.stdout.write(" <li>%s\n"%header)
+ sys.stdout.write(" <ul>\n")
+
+ def dumpEndOfSection(self):
+ sys.stdout.write(" </ul>\n\n")
+
+ def dumpEndOfChangelog(self):
+ pass
-CL = ChangeLog()
-parser = head_parser
+ def dumpStartOfSections(self):
+ print "<ul>\n"
+
+ def dumpEndOfSections(self):
+ print "</ul>\n"
-if len(sys.argv) == 1:
+ def dumpDrupalBreak(self):
+ print "\n</ul>\n"
+ print "<p>&nbsp;</p>"
+ print "\n<!--break-->\n\n"
+ print "<ul>"
+
+ def dumpItem(self, grafs):
+ grafs[0][0] = grafs[0][0].replace(" - ", "", 1).lstrip()
+ sys.stdout.write(" <li>")
+ if len(grafs) > 1:
+ for par in grafs:
+ self.htmlPar(par)
+ else:
+ self.htmlText(grafs[0])
+ print
+
+op = optparse.OptionParser(usage="usage: %prog [options] [filename]")
+op.add_option('-W', '--no-wrap', action='store_false',
+ dest='wrapText', default=True,
+ help='Do not re-wrap paragraphs')
+op.add_option('-S', '--no-sort', action='store_false',
+ dest='sort', default=True,
+ help='Do not sort or collate sections')
+op.add_option('-o', '--output', dest='output',
+ default='-', metavar='FILE', help="write output to FILE")
+op.add_option('-H', '--html', action='store_true',
+ dest='html', default=False,
+ help="generate an HTML fragment")
+op.add_option('-1', '--first', action='store_true',
+ dest='firstOnly', default=False,
+ help="write only the first section")
+op.add_option('-b', '--blog-header', action='store_true',
+ dest='blogOrder', default=False,
+ help="Write the header in blog order")
+op.add_option('-B', '--blog', action='store_true',
+ dest='blogFormat', default=False,
+ help="Set all other options as appropriate for a blog post")
+op.add_option('--inplace', action='store_true',
+ dest='inplace', default=False,
+ help="Alter the ChangeLog in place")
+op.add_option('--drupal-break', action='store_true',
+ dest='drupalBreak', default=False,
+ help='Insert a drupal-friendly <!--break--> as needed')
+
+options,args = op.parse_args()
+
+if options.blogFormat:
+ options.blogOrder = True
+ options.html = True
+ options.sort = False
+ options.wrapText = False
+ options.firstOnly = True
+ options.drupalBreak = True
+
+if len(args) > 1:
+ op.error("Too many arguments")
+elif len(args) == 0:
fname = 'ChangeLog'
else:
- fname = sys.argv[1]
+ fname = args[0]
-fname_new = fname+".new"
+if options.inplace:
+ assert options.output == '-'
+ options.output = fname
-sys.stdin = open(fname, 'r')
+if fname != '-':
+ sys.stdin = open(fname, 'r')
nextline = None
+if options.html:
+ ChangeLogClass = HTMLChangeLog
+else:
+ ChangeLogClass = ChangeLog
+
+CL = ChangeLogClass(wrapText=options.wrapText,
+ blogOrder=options.blogOrder,
+ drupalBreak=options.drupalBreak)
+parser = head_parser
+
for line in sys.stdin:
line = line.rstrip()
tp = parser(line)
@@ -295,14 +535,26 @@ for line in sys.stdin:
CL.lint()
-sys.stdout = open(fname_new, 'w')
+if options.output != '-':
+ fname_new = options.output+".new"
+ fname_out = options.output
+ sys.stdout = open(fname_new, 'w')
+else:
+ fname_new = fname_out = None
+
+if options.sort:
+ CL.collateAndSortSections()
CL.dump()
+if options.firstOnly:
+ sys.exit(0)
+
if nextline is not None:
print nextline
for line in sys.stdin:
sys.stdout.write(line)
-os.rename(fname_new, fname)
+if fname_new is not None:
+ os.rename(fname_new, fname_out)
diff --git a/scripts/test/cov-diff b/scripts/test/cov-diff
index 33a54802b6..48dbec9d54 100755
--- a/scripts/test/cov-diff
+++ b/scripts/test/cov-diff
@@ -9,8 +9,8 @@ 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"
+ perl -pe 's/^\s*\d+:/ 1:/; s/^([^:]+:)[\d\s]+:/$1/; s/^ *-:(Runs|Programs):.*//;' "$A" > "$A.tmp"
+ perl -pe 's/^\s*\d+:/ 1:/; s/^([^:]+:)[\d\s]+:/$1/; s/^ *-:(Runs|Programs):.*//;' "$B" > "$B.tmp"
diff -u "$A.tmp" "$B.tmp"
rm "$A.tmp" "$B.tmp"
done
diff --git a/src/common/address.c b/src/common/address.c
index 3a78f0be55..a3b5df66bc 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -323,10 +323,9 @@ tor_addr_is_internal_(const tor_addr_t *addr, int for_listening,
{
uint32_t iph4 = 0;
uint32_t iph6[4];
- sa_family_t v_family;
tor_assert(addr);
- v_family = tor_addr_family(addr);
+ sa_family_t v_family = tor_addr_family(addr);
if (v_family == AF_INET) {
iph4 = tor_addr_to_ipv4h(addr);
@@ -472,7 +471,6 @@ tor_addr_parse_PTR_name(tor_addr_t *result, const char *address,
if (!strcasecmpend(address, ".ip6.arpa")) {
const char *cp;
- int i;
int n0, n1;
struct in6_addr in6;
@@ -480,7 +478,7 @@ tor_addr_parse_PTR_name(tor_addr_t *result, const char *address,
return -1;
cp = address;
- for (i = 0; i < 16; ++i) {
+ for (int i = 0; i < 16; ++i) {
n0 = hex_decode_digit(*cp++); /* The low-order nybble appears first. */
if (*cp++ != '.') return -1; /* Then a dot. */
n1 = hex_decode_digit(*cp++); /* The high-order nybble appears first. */
@@ -605,7 +603,7 @@ tor_addr_parse_mask_ports(const char *s,
int any_flag=0, v4map=0;
sa_family_t family;
struct in6_addr in6_tmp;
- struct in_addr in_tmp;
+ struct in_addr in_tmp = { .s_addr = 0 };
tor_assert(s);
tor_assert(addr_out);
@@ -666,7 +664,7 @@ tor_addr_parse_mask_ports(const char *s,
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 };
+ static char nil_bytes[16] = { [0]=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;
@@ -725,6 +723,11 @@ tor_addr_parse_mask_ports(const char *s,
/* XXXX_IP6 is this really what we want? */
bits = 96 + bits%32; /* map v4-mapped masks onto 96-128 bits */
}
+ if (any_flag) {
+ log_warn(LD_GENERAL,
+ "Found bit prefix with wildcard address; rejecting");
+ goto err;
+ }
} else { /* pick an appropriate mask, as none was given */
if (any_flag)
bits = 0; /* This is okay whether it's V6 or V4 (FIX V4-mapped V6!) */
@@ -885,7 +888,7 @@ 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 a tor_addr_t from <b>src</b> to <b>dest</b>, taking extra care to
* copy only the well-defined portions. Used for computing hashes of
* addresses.
*/
diff --git a/src/common/address.h b/src/common/address.h
index 42844e8ad1..e8bab223a7 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/aes.c b/src/common/aes.c
index f454a7f7b2..877dce625c 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/aes.h b/src/common/aes.h
index 8ff28a7622..f014e3a424 100644
--- a/src/common/aes.h
+++ b/src/common/aes.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Implements a minimal interface to counter-mode AES. */
diff --git a/src/common/backtrace.c b/src/common/backtrace.c
index 3a073a8ff5..e6fb8938ac 100644
--- a/src/common/backtrace.c
+++ b/src/common/backtrace.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define __USE_GNU
diff --git a/src/common/backtrace.h b/src/common/backtrace.h
index 1f4d73339f..4938745b3d 100644
--- a/src/common/backtrace.h
+++ b/src/common/backtrace.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_BACKTRACE_H
diff --git a/src/common/compat.c b/src/common/compat.c
index 4dd04455a2..8574bd04c9 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -77,6 +77,7 @@
/* Includes for the process attaching prevention */
#if defined(HAVE_SYS_PRCTL_H) && defined(__linux__)
+/* Only use the linux prctl; the IRIX prctl is totally different */
#include <sys/prctl.h>
#elif defined(__APPLE__)
#include <sys/types.h>
@@ -110,10 +111,6 @@
#ifdef HAVE_SYS_FILE_H
#include <sys/file.h>
#endif
-#if defined(HAVE_SYS_PRCTL_H) && defined(__linux__)
-/* Only use the linux prctl; the IRIX prctl is totally different */
-#include <sys/prctl.h>
-#endif
#ifdef TOR_UNIT_TESTS
#if !defined(HAVE_USLEEP) && defined(HAVE_SYS_SELECT_H)
/* as fallback implementation for tor_sleep_msec */
@@ -141,9 +138,10 @@ int
tor_open_cloexec(const char *path, int flags, unsigned mode)
{
int fd;
+ const char *p = path;
#ifdef O_CLOEXEC
- path = sandbox_intern_string(path);
- fd = open(path, flags|O_CLOEXEC, mode);
+ p = sandbox_intern_string(path);
+ fd = open(p, flags|O_CLOEXEC, mode);
if (fd >= 0)
return fd;
/* If we got an error, see if it is EINVAL. EINVAL might indicate that,
@@ -153,8 +151,8 @@ 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);
+ log_debug(LD_FS, "Opening %s with flags %x", p, flags);
+ fd = open(p, flags, mode);
#ifdef FD_CLOEXEC
if (fd >= 0) {
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
@@ -1699,7 +1697,7 @@ log_credential_status(void)
/* log supplementary groups */
sup_gids_size = 64;
- sup_gids = tor_calloc(sizeof(gid_t), 64);
+ sup_gids = tor_calloc(64, sizeof(gid_t));
while ((ngids = getgroups(sup_gids_size, sup_gids)) < 0 &&
errno == EINVAL &&
sup_gids_size < NGROUPS_MAX) {
@@ -2770,14 +2768,24 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
const char *outcome;
if (PREDICT_LIKELY(r)) {
- if (r->tm_year > 8099) { /* We can't strftime dates after 9999 CE. */
+ /* We can't strftime dates after 9999 CE, and we want to avoid dates
+ * before 1 CE (avoiding the year 0 issue and negative years). */
+ if (r->tm_year > 8099) {
r->tm_year = 8099;
r->tm_mon = 11;
r->tm_mday = 31;
- r->tm_yday = 365;
+ r->tm_yday = 364;
r->tm_hour = 23;
r->tm_min = 59;
r->tm_sec = 59;
+ } else if (r->tm_year < (1-1900)) {
+ r->tm_year = (1-1900);
+ r->tm_mon = 0;
+ r->tm_mday = 1;
+ r->tm_yday = 0;
+ r->tm_hour = 0;
+ r->tm_min = 0;
+ r->tm_sec = 0;
}
return r;
}
@@ -2791,7 +2799,7 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
r->tm_year = 70; /* 1970 CE */
r->tm_mon = 0;
r->tm_mday = 1;
- r->tm_yday = 1;
+ r->tm_yday = 0;
r->tm_hour = 0;
r->tm_min = 0 ;
r->tm_sec = 0;
@@ -2804,7 +2812,7 @@ correct_tm(int islocal, const time_t *timep, struct tm *resultbuf,
r->tm_year = 137; /* 2037 CE */
r->tm_mon = 11;
r->tm_mday = 31;
- r->tm_yday = 365;
+ r->tm_yday = 364;
r->tm_hour = 23;
r->tm_min = 59;
r->tm_sec = 59;
@@ -2873,7 +2881,7 @@ tor_localtime_r(const time_t *timep, struct tm *result)
/** @} */
/** @{ */
-/** As gmtimee_r, but defined for platforms that don't have it:
+/** As gmtime_r, but defined for platforms that don't have it:
*
* Convert *<b>timep</b> to a struct tm in UTC, and store the value in
* *<b>result</b>. Return the result on success, or NULL on failure.
diff --git a/src/common/compat.h b/src/common/compat.h
index 852a432187..7001361af3 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_COMPAT_H
@@ -203,6 +203,15 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define STMT_END } while (0)
#endif
+/* Some tools (like coccinelle) don't like to see operators as macro
+ * arguments. */
+#define OP_LT <
+#define OP_GT >
+#define OP_GE >=
+#define OP_LE <=
+#define OP_EQ ==
+#define OP_NE !=
+
/* ===== String compatibility */
#ifdef _WIN32
/* Windows names string functions differently from most other platforms. */
@@ -562,17 +571,18 @@ const char *tor_socket_strerror(int e);
#else
#define SOCK_ERRNO(e) e
#if EAGAIN == EWOULDBLOCK
-#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN)
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
+#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN || 0)
#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_EINPROGRESS(e) ((e) == EINPROGRESS || 0)
+#define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS || 0)
#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)
+#define ERRNO_IS_EADDRINUSE(e) (((e) == EADDRINUSE) || 0)
#define tor_socket_errno(sock) (errno)
#define tor_socket_strerror(e) strerror(e)
#endif
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 6b2241ad30..85ed58456e 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2013, The Tor Project, Inc. */
+/* Copyright (c) 2009-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -210,6 +210,9 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
} else {
using_iocp_bufferevents = 0;
}
+#elif defined(__COVERITY__)
+ /* Avoid a 'dead code' warning below. */
+ using_threads = ! torcfg->disable_iocp;
#endif
if (!using_threads) {
@@ -714,7 +717,7 @@ tor_gettimeofday_cached_monotonic(struct timeval *tv)
struct timeval last_tv = { 0, 0 };
tor_gettimeofday_cached(tv);
- if (timercmp(tv, &last_tv, <)) {
+ if (timercmp(tv, &last_tv, OP_LT)) {
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 45d007f9b8..57d0c4da1b 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2013, The Tor Project, Inc. */
+/* Copyright (c) 2009-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_COMPAT_LIBEVENT_H
diff --git a/src/common/container.c b/src/common/container.c
index f7dfc69c2f..ab4e22de52 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1021,6 +1021,7 @@ smartlist_uniq_digests256(smartlist_t *sl)
DEFINE_MAP_STRUCTS(strmap_t, char *key, strmap_);
DEFINE_MAP_STRUCTS(digestmap_t, char key[DIGEST_LEN], digestmap_);
+DEFINE_MAP_STRUCTS(digest256map_t, uint8_t key[DIGEST256_LEN], digest256map_);
/** Helper: compare strmap_entry_t objects by key value. */
static INLINE int
@@ -1050,6 +1051,21 @@ digestmap_entry_hash(const digestmap_entry_t *a)
return (unsigned) siphash24g(a->key, DIGEST_LEN);
}
+/** Helper: compare digestmap_entry_t objects by key value. */
+static INLINE int
+digest256map_entries_eq(const digest256map_entry_t *a,
+ const digest256map_entry_t *b)
+{
+ return tor_memeq(a->key, b->key, DIGEST256_LEN);
+}
+
+/** Helper: return a hash value for a digest_map_t. */
+static INLINE unsigned int
+digest256map_entry_hash(const digest256map_entry_t *a)
+{
+ return (unsigned) siphash24g(a->key, DIGEST256_LEN);
+}
+
HT_PROTOTYPE(strmap_impl, strmap_entry_t, node, strmap_entry_hash,
strmap_entries_eq)
HT_GENERATE2(strmap_impl, strmap_entry_t, node, strmap_entry_hash,
@@ -1060,194 +1076,278 @@ HT_PROTOTYPE(digestmap_impl, digestmap_entry_t, node, digestmap_entry_hash,
HT_GENERATE2(digestmap_impl, digestmap_entry_t, node, digestmap_entry_hash,
digestmap_entries_eq, 0.6, tor_reallocarray_, tor_free_)
-/** Constructor to create a new empty map from strings to void*'s.
- */
-MOCK_IMPL(strmap_t *,
-strmap_new,(void))
+HT_PROTOTYPE(digest256map_impl, digest256map_entry_t, node,
+ digest256map_entry_hash,
+ digest256map_entries_eq)
+HT_GENERATE2(digest256map_impl, digest256map_entry_t, node,
+ digest256map_entry_hash,
+ digest256map_entries_eq, 0.6, tor_reallocarray_, tor_free_)
+
+static INLINE void
+strmap_entry_free(strmap_entry_t *ent)
{
- strmap_t *result;
- result = tor_malloc(sizeof(strmap_t));
- HT_INIT(strmap_impl, &result->head);
- return result;
+ tor_free(ent->key);
+ tor_free(ent);
}
-
-/** Constructor to create a new empty map from digests to void*'s.
- */
-MOCK_IMPL(digestmap_t *,
-digestmap_new,(void))
+static INLINE void
+digestmap_entry_free(digestmap_entry_t *ent)
{
- digestmap_t *result;
- result = tor_malloc(sizeof(digestmap_t));
- HT_INIT(digestmap_impl, &result->head);
- return result;
+ tor_free(ent);
}
-
-/** Set the current value for <b>key</b> to <b>val</b>. Returns the previous
- * value for <b>key</b> if one was set, or NULL if one was not.
- *
- * This function makes a copy of <b>key</b> if necessary, but not of
- * <b>val</b>.
- */
-void *
-strmap_set(strmap_t *map, const char *key, void *val)
-{
- strmap_entry_t *resolve;
- strmap_entry_t search;
- void *oldval;
- tor_assert(map);
- tor_assert(key);
- tor_assert(val);
- search.key = (char*)key;
- resolve = HT_FIND(strmap_impl, &map->head, &search);
- if (resolve) {
- oldval = resolve->val;
- resolve->val = val;
- return oldval;
- } else {
- resolve = tor_malloc_zero(sizeof(strmap_entry_t));
- resolve->key = tor_strdup(key);
- resolve->val = val;
- tor_assert(!HT_FIND(strmap_impl, &map->head, resolve));
- HT_INSERT(strmap_impl, &map->head, resolve);
- return NULL;
- }
+static INLINE void
+digest256map_entry_free(digest256map_entry_t *ent)
+{
+ tor_free(ent);
}
-#define OPTIMIZED_DIGESTMAP_SET
-
-/** Like strmap_set() above but for digestmaps. */
-void *
-digestmap_set(digestmap_t *map, const char *key, void *val)
+static INLINE void
+strmap_assign_tmp_key(strmap_entry_t *ent, const char *key)
{
-#ifndef OPTIMIZED_DIGESTMAP_SET
- digestmap_entry_t *resolve;
-#endif
- digestmap_entry_t search;
- void *oldval;
- tor_assert(map);
- tor_assert(key);
- tor_assert(val);
- memcpy(&search.key, key, DIGEST_LEN);
-#ifndef OPTIMIZED_DIGESTMAP_SET
- resolve = HT_FIND(digestmap_impl, &map->head, &search);
- if (resolve) {
- oldval = resolve->val;
- resolve->val = val;
- return oldval;
- } else {
- resolve = tor_malloc_zero(sizeof(digestmap_entry_t));
- memcpy(resolve->key, key, DIGEST_LEN);
- resolve->val = val;
- HT_INSERT(digestmap_impl, &map->head, resolve);
- return NULL;
- }
-#else
- /* We spend up to 5% of our time in this function, so the code below is
- * meant to optimize the check/alloc/set cycle by avoiding the two trips to
- * the hash table that we do in the unoptimized code above. (Each of
- * HT_INSERT and HT_FIND calls HT_SET_HASH and HT_FIND_P.)
- */
- HT_FIND_OR_INSERT_(digestmap_impl, node, digestmap_entry_hash, &(map->head),
- digestmap_entry_t, &search, ptr,
- {
- /* we found an entry. */
- oldval = (*ptr)->val;
- (*ptr)->val = val;
- return oldval;
- },
- {
- /* We didn't find the entry. */
- digestmap_entry_t *newent =
- tor_malloc_zero(sizeof(digestmap_entry_t));
- memcpy(newent->key, key, DIGEST_LEN);
- newent->val = val;
- HT_FOI_INSERT_(node, &(map->head), &search, newent, ptr);
- return NULL;
- });
-#endif
+ ent->key = (char*)key;
}
-
-/** Return the current value associated with <b>key</b>, or NULL if no
- * value is set.
- */
-void *
-strmap_get(const strmap_t *map, const char *key)
-{
- strmap_entry_t *resolve;
- strmap_entry_t search;
- tor_assert(map);
- tor_assert(key);
- search.key = (char*)key;
- resolve = HT_FIND(strmap_impl, &map->head, &search);
- if (resolve) {
- return resolve->val;
- } else {
- return NULL;
- }
+static INLINE void
+digestmap_assign_tmp_key(digestmap_entry_t *ent, const char *key)
+{
+ memcpy(ent->key, key, DIGEST_LEN);
}
-
-/** Like strmap_get() above but for digestmaps. */
-void *
-digestmap_get(const digestmap_t *map, const char *key)
-{
- digestmap_entry_t *resolve;
- digestmap_entry_t search;
- tor_assert(map);
- tor_assert(key);
- memcpy(&search.key, key, DIGEST_LEN);
- resolve = HT_FIND(digestmap_impl, &map->head, &search);
- if (resolve) {
- return resolve->val;
- } else {
- return NULL;
- }
+static INLINE void
+digest256map_assign_tmp_key(digest256map_entry_t *ent, const uint8_t *key)
+{
+ memcpy(ent->key, key, DIGEST256_LEN);
+}
+static INLINE void
+strmap_assign_key(strmap_entry_t *ent, const char *key)
+{
+ ent->key = tor_strdup(key);
+}
+static INLINE void
+digestmap_assign_key(digestmap_entry_t *ent, const char *key)
+{
+ memcpy(ent->key, key, DIGEST_LEN);
+}
+static INLINE void
+digest256map_assign_key(digest256map_entry_t *ent, const uint8_t *key)
+{
+ memcpy(ent->key, key, DIGEST256_LEN);
}
-/** Remove the value currently associated with <b>key</b> from the map.
- * Return the value if one was set, or NULL if there was no entry for
- * <b>key</b>.
- *
- * Note: you must free any storage associated with the returned value.
+/**
+ * Macro: implement all the functions for a map that are declared in
+ * container.h by the DECLARE_MAP_FNS() macro. You must additionally define a
+ * prefix_entry_free_() function to free entries (and their keys), a
+ * prefix_assign_tmp_key() function to temporarily set a stack-allocated
+ * entry to hold a key, and a prefix_assign_key() function to set a
+ * heap-allocated entry to hold a key.
*/
-void *
-strmap_remove(strmap_t *map, const char *key)
-{
- strmap_entry_t *resolve;
- strmap_entry_t search;
- void *oldval;
- tor_assert(map);
- tor_assert(key);
- search.key = (char*)key;
- resolve = HT_REMOVE(strmap_impl, &map->head, &search);
- if (resolve) {
- oldval = resolve->val;
- tor_free(resolve->key);
- tor_free(resolve);
- return oldval;
- } else {
- return NULL;
+#define IMPLEMENT_MAP_FNS(maptype, keytype, prefix) \
+ /** Create and return a new empty map. */ \
+ MOCK_IMPL(maptype *, \
+ prefix##_new,(void)) \
+ { \
+ maptype *result; \
+ result = tor_malloc(sizeof(maptype)); \
+ HT_INIT(prefix##_impl, &result->head); \
+ return result; \
+ } \
+ \
+ /** Return the item from <b>map</b> whose key matches <b>key</b>, or \
+ * NULL if no such value exists. */ \
+ void * \
+ prefix##_get(const maptype *map, const keytype key) \
+ { \
+ prefix ##_entry_t *resolve; \
+ prefix ##_entry_t search; \
+ tor_assert(map); \
+ tor_assert(key); \
+ prefix ##_assign_tmp_key(&search, key); \
+ resolve = HT_FIND(prefix ##_impl, &map->head, &search); \
+ if (resolve) { \
+ return resolve->val; \
+ } else { \
+ return NULL; \
+ } \
+ } \
+ \
+ /** Add an entry to <b>map</b> mapping <b>key</b> to <b>val</b>; \
+ * return the previous value, or NULL if no such value existed. */ \
+ void * \
+ prefix##_set(maptype *map, const keytype key, void *val) \
+ { \
+ prefix##_entry_t search; \
+ void *oldval; \
+ tor_assert(map); \
+ tor_assert(key); \
+ tor_assert(val); \
+ prefix##_assign_tmp_key(&search, key); \
+ /* We a lot of our time in this function, so the code below is */ \
+ /* meant to optimize the check/alloc/set cycle by avoiding the two */\
+ /* trips to the hash table that we would do in the unoptimized */ \
+ /* version of this code. (Each of HT_INSERT and HT_FIND calls */ \
+ /* HT_SET_HASH and HT_FIND_P.) */ \
+ HT_FIND_OR_INSERT_(prefix##_impl, node, prefix##_entry_hash, \
+ &(map->head), \
+ prefix##_entry_t, &search, ptr, \
+ { \
+ /* we found an entry. */ \
+ oldval = (*ptr)->val; \
+ (*ptr)->val = val; \
+ return oldval; \
+ }, \
+ { \
+ /* We didn't find the entry. */ \
+ prefix##_entry_t *newent = \
+ tor_malloc_zero(sizeof(prefix##_entry_t)); \
+ prefix##_assign_key(newent, key); \
+ newent->val = val; \
+ HT_FOI_INSERT_(node, &(map->head), \
+ &search, newent, ptr); \
+ return NULL; \
+ }); \
+ } \
+ \
+ /** Remove the value currently associated with <b>key</b> from the map. \
+ * Return the value if one was set, or NULL if there was no entry for \
+ * <b>key</b>. \
+ * \
+ * Note: you must free any storage associated with the returned value. \
+ */ \
+ void * \
+ prefix##_remove(maptype *map, const keytype key) \
+ { \
+ prefix##_entry_t *resolve; \
+ prefix##_entry_t search; \
+ void *oldval; \
+ tor_assert(map); \
+ tor_assert(key); \
+ prefix##_assign_tmp_key(&search, key); \
+ resolve = HT_REMOVE(prefix##_impl, &map->head, &search); \
+ if (resolve) { \
+ oldval = resolve->val; \
+ prefix##_entry_free(resolve); \
+ return oldval; \
+ } else { \
+ return NULL; \
+ } \
+ } \
+ \
+ /** Return the number of elements in <b>map</b>. */ \
+ int \
+ prefix##_size(const maptype *map) \
+ { \
+ return HT_SIZE(&map->head); \
+ } \
+ \
+ /** Return true iff <b>map</b> has no entries. */ \
+ int \
+ prefix##_isempty(const maptype *map) \
+ { \
+ return HT_EMPTY(&map->head); \
+ } \
+ \
+ /** Assert that <b>map</b> is not corrupt. */ \
+ void \
+ prefix##_assert_ok(const maptype *map) \
+ { \
+ tor_assert(!prefix##_impl_HT_REP_IS_BAD_(&map->head)); \
+ } \
+ \
+ /** Remove all entries from <b>map</b>, and deallocate storage for \
+ * those entries. If free_val is provided, invoked it every value in \
+ * <b>map</b>. */ \
+ MOCK_IMPL(void, \
+ prefix##_free, (maptype *map, void (*free_val)(void*))) \
+ { \
+ prefix##_entry_t **ent, **next, *this; \
+ if (!map) \
+ return; \
+ for (ent = HT_START(prefix##_impl, &map->head); ent != NULL; \
+ ent = next) { \
+ this = *ent; \
+ next = HT_NEXT_RMV(prefix##_impl, &map->head, ent); \
+ if (free_val) \
+ free_val(this->val); \
+ prefix##_entry_free(this); \
+ } \
+ tor_assert(HT_EMPTY(&map->head)); \
+ HT_CLEAR(prefix##_impl, &map->head); \
+ tor_free(map); \
+ } \
+ \
+ /** return an <b>iterator</b> pointer to the front of a map. \
+ * \
+ * Iterator example: \
+ * \
+ * \code \
+ * // uppercase values in "map", removing empty values. \
+ * \
+ * strmap_iter_t *iter; \
+ * const char *key; \
+ * void *val; \
+ * char *cp; \
+ * \
+ * for (iter = strmap_iter_init(map); !strmap_iter_done(iter); ) { \
+ * strmap_iter_get(iter, &key, &val); \
+ * cp = (char*)val; \
+ * if (!*cp) { \
+ * iter = strmap_iter_next_rmv(map,iter); \
+ * free(val); \
+ * } else { \
+ * for (;*cp;cp++) *cp = TOR_TOUPPER(*cp); \
+ */ \
+ prefix##_iter_t * \
+ prefix##_iter_init(maptype *map) \
+ { \
+ tor_assert(map); \
+ return HT_START(prefix##_impl, &map->head); \
+ } \
+ \
+ /** Advance <b>iter</b> a single step to the next entry, and return \
+ * its new value. */ \
+ prefix##_iter_t * \
+ prefix##_iter_next(maptype *map, prefix##_iter_t *iter) \
+ { \
+ tor_assert(map); \
+ tor_assert(iter); \
+ return HT_NEXT(prefix##_impl, &map->head, iter); \
+ } \
+ /** Advance <b>iter</b> a single step to the next entry, removing the \
+ * current entry, and return its new value. */ \
+ prefix##_iter_t * \
+ prefix##_iter_next_rmv(maptype *map, prefix##_iter_t *iter) \
+ { \
+ prefix##_entry_t *rmv; \
+ tor_assert(map); \
+ tor_assert(iter); \
+ tor_assert(*iter); \
+ rmv = *iter; \
+ iter = HT_NEXT_RMV(prefix##_impl, &map->head, iter); \
+ prefix##_entry_free(rmv); \
+ return iter; \
+ } \
+ /** Set *<b>keyp</b> and *<b>valp</b> to the current entry pointed \
+ * to by iter. */ \
+ void \
+ prefix##_iter_get(prefix##_iter_t *iter, const keytype *keyp, \
+ void **valp) \
+ { \
+ tor_assert(iter); \
+ tor_assert(*iter); \
+ tor_assert(keyp); \
+ tor_assert(valp); \
+ *keyp = (*iter)->key; \
+ *valp = (*iter)->val; \
+ } \
+ /** Return true iff <b>iter</b> has advanced past the last entry of \
+ * <b>map</b>. */ \
+ int \
+ prefix##_iter_done(prefix##_iter_t *iter) \
+ { \
+ return iter == NULL; \
}
-}
-/** Like strmap_remove() above but for digestmaps. */
-void *
-digestmap_remove(digestmap_t *map, const char *key)
-{
- digestmap_entry_t *resolve;
- digestmap_entry_t search;
- void *oldval;
- tor_assert(map);
- tor_assert(key);
- memcpy(&search.key, key, DIGEST_LEN);
- resolve = HT_REMOVE(digestmap_impl, &map->head, &search);
- if (resolve) {
- oldval = resolve->val;
- tor_free(resolve);
- return oldval;
- } else {
- return NULL;
- }
-}
+IMPLEMENT_MAP_FNS(strmap_t, char *, strmap)
+IMPLEMENT_MAP_FNS(digestmap_t, char *, digestmap)
+IMPLEMENT_MAP_FNS(digest256map_t, uint8_t *, digest256map)
/** Same as strmap_set, but first converts <b>key</b> to lowercase. */
void *
@@ -1287,231 +1387,6 @@ strmap_remove_lc(strmap_t *map, const char *key)
return v;
}
-/** return an <b>iterator</b> pointer to the front of a map.
- *
- * Iterator example:
- *
- * \code
- * // uppercase values in "map", removing empty values.
- *
- * strmap_iter_t *iter;
- * const char *key;
- * void *val;
- * char *cp;
- *
- * for (iter = strmap_iter_init(map); !strmap_iter_done(iter); ) {
- * strmap_iter_get(iter, &key, &val);
- * cp = (char*)val;
- * if (!*cp) {
- * iter = strmap_iter_next_rmv(map,iter);
- * free(val);
- * } else {
- * for (;*cp;cp++) *cp = TOR_TOUPPER(*cp);
- * iter = strmap_iter_next(map,iter);
- * }
- * }
- * \endcode
- *
- */
-strmap_iter_t *
-strmap_iter_init(strmap_t *map)
-{
- tor_assert(map);
- return HT_START(strmap_impl, &map->head);
-}
-
-/** Start iterating through <b>map</b>. See strmap_iter_init() for example. */
-digestmap_iter_t *
-digestmap_iter_init(digestmap_t *map)
-{
- tor_assert(map);
- return HT_START(digestmap_impl, &map->head);
-}
-
-/** Advance the iterator <b>iter</b> for <b>map</b> a single step to the next
- * entry, and return its new value. */
-strmap_iter_t *
-strmap_iter_next(strmap_t *map, strmap_iter_t *iter)
-{
- tor_assert(map);
- tor_assert(iter);
- return HT_NEXT(strmap_impl, &map->head, iter);
-}
-
-/** Advance the iterator <b>iter</b> for map a single step to the next entry,
- * and return its new value. */
-digestmap_iter_t *
-digestmap_iter_next(digestmap_t *map, digestmap_iter_t *iter)
-{
- tor_assert(map);
- tor_assert(iter);
- return HT_NEXT(digestmap_impl, &map->head, iter);
-}
-
-/** Advance the iterator <b>iter</b> a single step to the next entry, removing
- * the current entry, and return its new value.
- */
-strmap_iter_t *
-strmap_iter_next_rmv(strmap_t *map, strmap_iter_t *iter)
-{
- strmap_entry_t *rmv;
- tor_assert(map);
- tor_assert(iter);
- tor_assert(*iter);
- rmv = *iter;
- iter = HT_NEXT_RMV(strmap_impl, &map->head, iter);
- tor_free(rmv->key);
- tor_free(rmv);
- return iter;
-}
-
-/** Advance the iterator <b>iter</b> a single step to the next entry, removing
- * the current entry, and return its new value.
- */
-digestmap_iter_t *
-digestmap_iter_next_rmv(digestmap_t *map, digestmap_iter_t *iter)
-{
- digestmap_entry_t *rmv;
- tor_assert(map);
- tor_assert(iter);
- tor_assert(*iter);
- rmv = *iter;
- iter = HT_NEXT_RMV(digestmap_impl, &map->head, iter);
- tor_free(rmv);
- return iter;
-}
-
-/** Set *<b>keyp</b> and *<b>valp</b> to the current entry pointed to by
- * iter. */
-void
-strmap_iter_get(strmap_iter_t *iter, const char **keyp, void **valp)
-{
- tor_assert(iter);
- tor_assert(*iter);
- tor_assert(keyp);
- tor_assert(valp);
- *keyp = (*iter)->key;
- *valp = (*iter)->val;
-}
-
-/** Set *<b>keyp</b> and *<b>valp</b> to the current entry pointed to by
- * iter. */
-void
-digestmap_iter_get(digestmap_iter_t *iter, const char **keyp, void **valp)
-{
- tor_assert(iter);
- tor_assert(*iter);
- tor_assert(keyp);
- tor_assert(valp);
- *keyp = (*iter)->key;
- *valp = (*iter)->val;
-}
-
-/** Return true iff <b>iter</b> has advanced past the last entry of
- * <b>map</b>. */
-int
-strmap_iter_done(strmap_iter_t *iter)
-{
- return iter == NULL;
-}
-
-/** Return true iff <b>iter</b> has advanced past the last entry of
- * <b>map</b>. */
-int
-digestmap_iter_done(digestmap_iter_t *iter)
-{
- return iter == NULL;
-}
-
-/** Remove all entries from <b>map</b>, and deallocate storage for those
- * entries. If free_val is provided, it is invoked on every value in
- * <b>map</b>.
- */
-MOCK_IMPL(void,
-strmap_free,(strmap_t *map, void (*free_val)(void*)))
-{
- strmap_entry_t **ent, **next, *this;
- if (!map)
- return;
-
- for (ent = HT_START(strmap_impl, &map->head); ent != NULL; ent = next) {
- this = *ent;
- next = HT_NEXT_RMV(strmap_impl, &map->head, ent);
- tor_free(this->key);
- if (free_val)
- free_val(this->val);
- tor_free(this);
- }
- tor_assert(HT_EMPTY(&map->head));
- HT_CLEAR(strmap_impl, &map->head);
- tor_free(map);
-}
-
-/** Remove all entries from <b>map</b>, and deallocate storage for those
- * entries. If free_val is provided, it is invoked on every value in
- * <b>map</b>.
- */
-MOCK_IMPL(void,
-digestmap_free, (digestmap_t *map, void (*free_val)(void*)))
-{
- digestmap_entry_t **ent, **next, *this;
- if (!map)
- return;
- for (ent = HT_START(digestmap_impl, &map->head); ent != NULL; ent = next) {
- this = *ent;
- next = HT_NEXT_RMV(digestmap_impl, &map->head, ent);
- if (free_val)
- free_val(this->val);
- tor_free(this);
- }
- tor_assert(HT_EMPTY(&map->head));
- HT_CLEAR(digestmap_impl, &map->head);
- tor_free(map);
-}
-
-/** Fail with an assertion error if anything has gone wrong with the internal
- * representation of <b>map</b>. */
-void
-strmap_assert_ok(const strmap_t *map)
-{
- tor_assert(!strmap_impl_HT_REP_IS_BAD_(&map->head));
-}
-/** Fail with an assertion error if anything has gone wrong with the internal
- * representation of <b>map</b>. */
-void
-digestmap_assert_ok(const digestmap_t *map)
-{
- tor_assert(!digestmap_impl_HT_REP_IS_BAD_(&map->head));
-}
-
-/** Return true iff <b>map</b> has no entries. */
-int
-strmap_isempty(const strmap_t *map)
-{
- return HT_EMPTY(&map->head);
-}
-
-/** Return true iff <b>map</b> has no entries. */
-int
-digestmap_isempty(const digestmap_t *map)
-{
- return HT_EMPTY(&map->head);
-}
-
-/** Return the number of items in <b>map</b>. */
-int
-strmap_size(const strmap_t *map)
-{
- return HT_SIZE(&map->head);
-}
-
-/** Return the number of items in <b>map</b>. */
-int
-digestmap_size(const digestmap_t *map)
-{
- return HT_SIZE(&map->head);
-}
-
/** Declare a function called <b>funcname</b> that acts as a find_nth_FOO
* function for an array of type <b>elt_t</b>*.
*
diff --git a/src/common/container.h b/src/common/container.h
index c3756c83a6..d3d20af5b2 100644
--- a/src/common/container.h
+++ b/src/common/container.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_CONTAINER_H
@@ -346,6 +346,9 @@ char *smartlist_join_strings2(smartlist_t *sl, const char *join,
DECLARE_MAP_FNS(strmap_t, const char *, strmap_);
/* Map from const char[DIGEST_LEN] to void *. Implemented with a hash table. */
DECLARE_MAP_FNS(digestmap_t, const char *, digestmap_);
+/* Map from const uint8_t[DIGEST_LEN] to void *. Implemented with a hash
+ * table. */
+DECLARE_MAP_FNS(digest256map_t, const uint8_t *, digest256map_);
#undef DECLARE_MAP_FNS
@@ -461,6 +464,13 @@ DECLARE_MAP_FNS(digestmap_t, const char *, digestmap_);
/** Used to end a DIGESTMAP_FOREACH() block. */
#define DIGESTMAP_FOREACH_END MAP_FOREACH_END
+#define DIGEST256MAP_FOREACH(map, keyvar, valtype, valvar) \
+ MAP_FOREACH(digest256map_, map, const uint8_t *, keyvar, valtype, valvar)
+#define DIGEST256MAP_FOREACH_MODIFY(map, keyvar, valtype, valvar) \
+ MAP_FOREACH_MODIFY(digest256map_, map, const uint8_t *, \
+ keyvar, valtype, valvar)
+#define DIGEST256MAP_FOREACH_END MAP_FOREACH_END
+
#define STRMAP_FOREACH(map, keyvar, valtype, valvar) \
MAP_FOREACH(strmap_, map, const char *, keyvar, valtype, valvar)
#define STRMAP_FOREACH_MODIFY(map, keyvar, valtype, valvar) \
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 014c83e850..7138ba003e 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1012,7 +1012,7 @@ crypto_pk_public_checksig(crypto_pk_t *env, char *to,
env->key, RSA_PKCS1_PADDING);
if (r<0) {
- crypto_log_errors(LOG_WARN, "checking RSA signature");
+ crypto_log_errors(LOG_INFO, "checking RSA signature");
return -1;
}
return r;
@@ -1684,7 +1684,7 @@ crypto_digest_get_digest(crypto_digest_t *digest,
log_warn(LD_BUG, "Called with unknown algorithm %d", digest->algorithm);
/* If fragile_assert is not enabled, then we should at least not
* leak anything. */
- memset(r, 0xff, sizeof(r));
+ memwipe(r, 0xff, sizeof(r));
tor_fragile_assert();
break;
}
@@ -2454,10 +2454,8 @@ crypto_strongest_rand(uint8_t *out, size_t out_len)
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 -1;
- }
+ log_warn(LD_CRYPTO, "Can't get CryptoAPI provider [1]");
+ return -1;
}
provider_set = 1;
}
@@ -3001,50 +2999,6 @@ base32_decode(char *dest, size_t destlen, const char *src, size_t srclen)
return 0;
}
-/** Implement RFC2440-style iterated-salted S2K conversion: convert the
- * <b>secret_len</b>-byte <b>secret</b> into a <b>key_out_len</b> byte
- * <b>key_out</b>. As in RFC2440, the first 8 bytes of s2k_specifier
- * are a salt; the 9th byte describes how much iteration to do.
- * Does not support <b>key_out_len</b> &gt; DIGEST_LEN.
- */
-void
-secret_to_key(char *key_out, size_t key_out_len, const char *secret,
- size_t secret_len, const char *s2k_specifier)
-{
- crypto_digest_t *d;
- uint8_t c;
- size_t count, tmplen;
- char *tmp;
- tor_assert(key_out_len < SIZE_T_CEILING);
-
-#define EXPBIAS 6
- c = s2k_specifier[8];
- count = ((uint32_t)16 + (c & 15)) << ((c >> 4) + EXPBIAS);
-#undef EXPBIAS
-
- tor_assert(key_out_len <= DIGEST_LEN);
-
- d = crypto_digest_new();
- tmplen = 8+secret_len;
- tmp = tor_malloc(tmplen);
- memcpy(tmp,s2k_specifier,8);
- memcpy(tmp+8,secret,secret_len);
- secret_len += 8;
- while (count) {
- if (count >= secret_len) {
- crypto_digest_add_bytes(d, tmp, secret_len);
- count -= secret_len;
- } else {
- crypto_digest_add_bytes(d, tmp, count);
- count = 0;
- }
- }
- crypto_digest_get_digest(d, key_out, key_out_len);
- memwipe(tmp, 0, tmplen);
- tor_free(tmp);
- crypto_digest_free(d);
-}
-
/**
* Destroy the <b>sz</b> bytes of data stored at <b>mem</b>, setting them to
* the value <b>byte</b>.
diff --git a/src/common/crypto.h b/src/common/crypto.h
index aa4271aa33..d496521849 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -280,12 +280,6 @@ int digest_from_base64(char *digest, const char *d64);
int digest256_to_base64(char *d64, const char *digest);
int digest256_from_base64(char *digest, const char *d64);
-/** Length of RFC2440-style S2K specifier: the first 8 bytes are a salt, the
- * 9th describes how much iteration to do. */
-#define S2K_SPECIFIER_LEN 9
-void secret_to_key(char *key_out, size_t key_out_len, const char *secret,
- size_t secret_len, const char *s2k_specifier);
-
/** OpenSSL-based utility functions. */
void memwipe(void *mem, uint8_t byte, size_t sz);
diff --git a/src/common/crypto_curve25519.c b/src/common/crypto_curve25519.c
index 9e83440e16..c04b715abd 100644
--- a/src/common/crypto_curve25519.c
+++ b/src/common/crypto_curve25519.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Wrapper code for a curve25519 implementation. */
@@ -8,6 +8,7 @@
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
+#include "container.h"
#include "crypto.h"
#include "crypto_curve25519.h"
#include "util.h"
@@ -63,26 +64,44 @@ 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. */
+/**
+ * Generate CURVE25519_SECKEY_LEN random bytes in <b>out</b>. 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.
+ *
+ * This function does not adjust the output of the RNG at all; the will caller
+ * will need to clear or set the appropriate bits to make curve25519 work.
+ */
int
-curve25519_secret_key_generate(curve25519_secret_key_t *key_out,
- int extra_strong)
+curve25519_rand_seckey_bytes(uint8_t *out, int extra_strong)
{
uint8_t k_tmp[CURVE25519_SECKEY_LEN];
- if (crypto_rand((char*)key_out->secret_key, CURVE25519_SECKEY_LEN) < 0)
+ if (crypto_rand((char*)out, 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);
+ crypto_hmac_sha256((char*) out,
+ (const char *)k_tmp, sizeof(k_tmp),
+ (const char *)out, CURVE25519_SECKEY_LEN);
}
memwipe(k_tmp, 0, sizeof(k_tmp));
+ return 0;
+}
+
+/** 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)
+{
+ if (curve25519_rand_seckey_bytes(key_out->secret_key, extra_strong) < 0)
+ return -1;
+
key_out->secret_key[0] &= 248;
key_out->secret_key[31] &= 127;
key_out->secret_key[31] |= 64;
@@ -109,69 +128,144 @@ curve25519_keypair_generate(curve25519_keypair_t *keypair_out,
return 0;
}
+/** Write the <b>datalen</b> bytes from <b>data</b> to the file named
+ * <b>fname</b> in the tagged-data format. This format contains a
+ * 32-byte header, followed by the data itself. The header is the
+ * NUL-padded string "== <b>typestring</b>: <b>tag</b> ==". The length
+ * of <b>typestring</b> and <b>tag</b> must therefore be no more than
+ * 24.
+ **/
int
-curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair,
- const char *fname,
- const char *tag)
+crypto_write_tagged_contents_to_file(const char *fname,
+ const char *typestring,
+ const char *tag,
+ const uint8_t *data,
+ size_t datalen)
{
- char contents[32 + CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN];
- int r;
+ char header[32];
+ smartlist_t *chunks = smartlist_new();
+ sized_chunk_t ch0, ch1;
+ int r = -1;
- 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);
+ memset(header, 0, sizeof(header));
+ if (tor_snprintf(header, sizeof(header),
+ "== %s: %s ==", typestring, tag) < 0)
+ goto end;
+ ch0.bytes = header;
+ ch0.len = 32;
+ ch1.bytes = (const char*) data;
+ ch1.len = datalen;
+ smartlist_add(chunks, &ch0);
+ smartlist_add(chunks, &ch1);
- r = write_bytes_to_file(fname, contents, sizeof(contents), 1);
+ r = write_chunks_to_file(fname, chunks, 1, 0);
- memwipe(contents, 0, sizeof(contents));
+ end:
+ smartlist_free(chunks);
return r;
}
-int
-curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
- char **tag_out,
- const char *fname)
+/** Read a tagged-data file from <b>fname</b> into the
+ * <b>data_out_len</b>-byte buffer in <b>data_out</b>. Check that the
+ * typestring matches <b>typestring</b>; store the tag into a newly allocated
+ * string in <b>tag_out</b>. Return -1 on failure, and the number of bytes of
+ * data on success. */
+ssize_t
+crypto_read_tagged_contents_from_file(const char *fname,
+ const char *typestring,
+ char **tag_out,
+ uint8_t *data_out,
+ ssize_t data_out_len)
{
char prefix[33];
- char *content;
+ char *content = NULL;
struct stat st;
- int r = -1;
+ ssize_t r = -1;
+ size_t st_size = 0;
*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)
+ if (st.st_size < 32 || st.st_size > 32 + data_out_len)
goto end;
+ st_size = (size_t)st.st_size;
memcpy(prefix, content, 32);
- prefix[32] = '\0';
- if (strcmpstart(prefix, "== c25519v1: ") ||
- strcmpend(prefix, " =="))
+ prefix[32] = 0;
+ /* Check type, extract tag. */
+ if (strcmpstart(prefix, "== ") || strcmpend(prefix, " ==") ||
+ ! tor_mem_is_zero(prefix+strlen(prefix), 32-strlen(prefix)))
+ goto end;
+
+ if (strcmpstart(prefix+3, typestring) ||
+ 3+strlen(typestring) >= 32 ||
+ strcmpstart(prefix+3+strlen(typestring), ": "))
goto end;
- *tag_out = tor_strndup(prefix+strlen("== c25519v1: "),
- strlen(prefix) - strlen("== c25519v1: =="));
+ *tag_out = tor_strndup(prefix+5+strlen(typestring),
+ strlen(prefix)-8-strlen(typestring));
+
+ memcpy(data_out, content+32, st_size-32);
+ r = st_size - 32;
+
+ end:
+ if (content)
+ memwipe(content, 0, st_size);
+ tor_free(content);
+ return r;
+}
+
+/** DOCDOC */
+int
+curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair,
+ const char *fname,
+ const char *tag)
+{
+ uint8_t contents[CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN];
+ int r;
+
+ memcpy(contents, keypair->seckey.secret_key, CURVE25519_SECKEY_LEN);
+ memcpy(contents+CURVE25519_SECKEY_LEN,
+ keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+
+ r = crypto_write_tagged_contents_to_file(fname,
+ "c25519v1",
+ tag,
+ contents,
+ sizeof(contents));
+
+ memwipe(contents, 0, sizeof(contents));
+ return r;
+}
+
+/** DOCDOC */
+int
+curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
+ char **tag_out,
+ const char *fname)
+{
+ uint8_t content[CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN];
+ ssize_t len;
+ int r = -1;
+
+ len = crypto_read_tagged_contents_from_file(fname, "c25519v1", tag_out,
+ content, sizeof(content));
+ if (len != sizeof(content))
+ goto end;
- memcpy(keypair_out->seckey.secret_key, content+32, CURVE25519_SECKEY_LEN);
+ memcpy(keypair_out->seckey.secret_key, content, 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,
+ content + CURVE25519_SECKEY_LEN,
CURVE25519_PUBKEY_LEN))
goto end;
r = 0;
end:
- if (content) {
- memwipe(content, 0, (size_t) st.st_size);
- tor_free(content);
- }
+ memwipe(content, 0, sizeof(content));
if (r != 0) {
memset(keypair_out, 0, sizeof(*keypair_out));
tor_free(*tag_out);
diff --git a/src/common/crypto_curve25519.h b/src/common/crypto_curve25519.h
index 57018ac2f5..e8f885227e 100644
--- a/src/common/crypto_curve25519.h
+++ b/src/common/crypto_curve25519.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_CRYPTO_CURVE25519_H
@@ -30,7 +30,6 @@ typedef struct curve25519_keypair_t {
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.
@@ -57,11 +56,12 @@ int curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
char **tag_out,
const char *fname);
+int curve25519_rand_seckey_bytes(uint8_t *out, int extra_strong);
+
#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
@@ -70,5 +70,17 @@ int curve25519_public_from_base64(curve25519_public_key_t *pkey,
int curve25519_public_to_base64(char *output,
const curve25519_public_key_t *pkey);
+int crypto_write_tagged_contents_to_file(const char *fname,
+ const char *typestring,
+ const char *tag,
+ const uint8_t *data,
+ size_t datalen);
+
+ssize_t crypto_read_tagged_contents_from_file(const char *fname,
+ const char *typestring,
+ char **tag_out,
+ uint8_t *data_out,
+ ssize_t data_out_len);
+
#endif
diff --git a/src/common/crypto_ed25519.c b/src/common/crypto_ed25519.c
new file mode 100644
index 0000000000..340fb4956f
--- /dev/null
+++ b/src/common/crypto_ed25519.c
@@ -0,0 +1,353 @@
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Wrapper code for an ed25519 implementation. */
+
+#include "orconfig.h"
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#include "crypto.h"
+
+#include "crypto_curve25519.h"
+#include "crypto_ed25519.h"
+#include "torlog.h"
+#include "util.h"
+
+#include "ed25519/ref10/ed25519_ref10.h"
+
+#include <openssl/sha.h>
+
+/**
+ * Initialize a new ed25519 secret key in <b>seckey_out</b>. If
+ * <b>extra_strong</b>, take the RNG inputs directly from the operating
+ * system. Return 0 on success, -1 on failure.
+ */
+int
+ed25519_secret_key_generate(ed25519_secret_key_t *seckey_out,
+ int extra_strong)
+{
+ int r;
+ uint8_t seed[32];
+ if (! extra_strong || crypto_strongest_rand(seed, sizeof(seed)) < 0)
+ crypto_rand((char*)seed, sizeof(seed));
+
+ r = ed25519_ref10_seckey_expand(seckey_out->seckey, seed);
+ memwipe(seed, 0, sizeof(seed));
+
+ return r < 0 ? -1 : 0;
+}
+
+/**
+ * Given a 32-byte random seed in <b>seed</b>, expand it into an ed25519
+ * secret key in <b>seckey_out</b>. Return 0 on success, -1 on failure.
+ */
+int
+ed25519_secret_key_from_seed(ed25519_secret_key_t *seckey_out,
+ const uint8_t *seed)
+{
+ if (ed25519_ref10_seckey_expand(seckey_out->seckey, seed) < 0)
+ return -1;
+ return 0;
+}
+
+/**
+ * Given a secret key in <b>seckey</b>, expand it into an
+ * ed25519 public key. Return 0 on success, -1 on failure.
+ */
+int
+ed25519_public_key_generate(ed25519_public_key_t *pubkey_out,
+ const ed25519_secret_key_t *seckey)
+{
+ if (ed25519_ref10_pubkey(pubkey_out->pubkey, seckey->seckey) < 0)
+ return -1;
+ return 0;
+}
+
+/** Generate a new ed25519 keypair in <b>keypair_out</b>. If
+ * <b>extra_strong</b> is set, try to mix some system entropy into the key
+ * generation process. Return 0 on success, -1 on failure. */
+int
+ed25519_keypair_generate(ed25519_keypair_t *keypair_out, int extra_strong)
+{
+ if (ed25519_secret_key_generate(&keypair_out->seckey, extra_strong) < 0)
+ return -1;
+ if (ed25519_public_key_generate(&keypair_out->pubkey,
+ &keypair_out->seckey)<0)
+ return -1;
+ return 0;
+}
+
+/**
+ * Set <b>signature_out</b> to a signature of the <b>len</b>-byte message
+ * <b>msg</b>, using the secret and public key in <b>keypair</b>.
+ */
+int
+ed25519_sign(ed25519_signature_t *signature_out,
+ const uint8_t *msg, size_t len,
+ const ed25519_keypair_t *keypair)
+{
+
+ if (ed25519_ref10_sign(signature_out->sig, msg, len,
+ keypair->seckey.seckey,
+ keypair->pubkey.pubkey) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * Check whether if <b>signature</b> is a valid signature for the
+ * <b>len</b>-byte message in <b>msg</b> made with the key <b>pubkey</b>.
+ *
+ * Return 0 if the signature is valid; -1 if it isn't.
+ */
+int
+ed25519_checksig(const ed25519_signature_t *signature,
+ const uint8_t *msg, size_t len,
+ const ed25519_public_key_t *pubkey)
+{
+ return
+ ed25519_ref10_open(signature->sig, msg, len, pubkey->pubkey) < 0 ? -1 : 0;
+}
+
+/** Validate every signature among those in <b>checkable</b>, which contains
+ * exactly <b>n_checkable</b> elements. If <b>okay_out</b> is non-NULL, set
+ * the i'th element of <b>okay_out</b> to 1 if the i'th element of
+ * <b>checkable</b> is valid, and to 0 otherwise. Return 0 if every signature
+ * was valid. Otherwise return -N, where N is the number of invalid
+ * signatures.
+ */
+int
+ed25519_checksig_batch(int *okay_out,
+ const ed25519_checkable_t *checkable,
+ int n_checkable)
+{
+ int res, i;
+
+ res = 0;
+ for (i = 0; i < n_checkable; ++i) {
+ const ed25519_checkable_t *ch = &checkable[i];
+ int r = ed25519_checksig(&ch->signature, ch->msg, ch->len, ch->pubkey);
+ if (r < 0)
+ --res;
+ if (okay_out)
+ okay_out[i] = (r == 0);
+ }
+
+#if 0
+ /* This is how we'd do it if we were using ed25519_donna. I'll keep this
+ * code around here in case we ever do that. */
+ const uint8_t **ms;
+ size_t *lens;
+ const uint8_t **pks;
+ const uint8_t **sigs;
+ int *oks;
+
+ ms = tor_malloc(sizeof(uint8_t*)*n_checkable);
+ lens = tor_malloc(sizeof(size_t)*n_checkable);
+ pks = tor_malloc(sizeof(uint8_t*)*n_checkable);
+ sigs = tor_malloc(sizeof(uint8_t*)*n_checkable);
+ oks = okay_out ? okay_out : tor_malloc(sizeof(int)*n_checkable);
+
+ for (i = 0; i < n_checkable; ++i) {
+ ms[i] = checkable[i].msg;
+ lens[i] = checkable[i].len;
+ pks[i] = checkable[i].pubkey->pubkey;
+ sigs[i] = checkable[i].signature.sig;
+ oks[i] = 0;
+ }
+
+ ed25519_sign_open_batch_donna_fb(ms, lens, pks, sigs, n_checkable, oks);
+
+ res = 0;
+ for (i = 0; i < n_checkable; ++i) {
+ if (!oks[i])
+ --res;
+ }
+
+ tor_free(ms);
+ tor_free(lens);
+ tor_free(pks);
+ if (! okay_out)
+ tor_free(oks);
+#endif
+
+ return res;
+}
+
+/**
+ * Given a curve25519 keypair in <b>inp</b>, generate a corresponding
+ * ed25519 keypair in <b>out</b>, and set <b>signbit_out</b> to the
+ * sign bit of the X coordinate of the ed25519 key.
+ *
+ * NOTE THAT IT IS PROBABLY NOT SAFE TO USE THE GENERATED KEY FOR ANYTHING
+ * OUTSIDE OF WHAT'S PRESENTED IN PROPOSAL 228. In particular, it's probably
+ * not a great idea to use it to sign attacker-supplied anything.
+ */
+int
+ed25519_keypair_from_curve25519_keypair(ed25519_keypair_t *out,
+ int *signbit_out,
+ const curve25519_keypair_t *inp)
+{
+ const char string[] = "Derive high part of ed25519 key from curve25519 key";
+ ed25519_public_key_t pubkey_check;
+ SHA512_CTX ctx;
+ uint8_t sha512_output[64];
+
+ memcpy(out->seckey.seckey, inp->seckey.secret_key, 32);
+ SHA512_Init(&ctx);
+ SHA512_Update(&ctx, out->seckey.seckey, 32);
+ SHA512_Update(&ctx, string, sizeof(string));
+ SHA512_Final(sha512_output, &ctx);
+ memcpy(out->seckey.seckey + 32, sha512_output, 32);
+
+ ed25519_public_key_generate(&out->pubkey, &out->seckey);
+
+ *signbit_out = out->pubkey.pubkey[31] >> 7;
+
+ ed25519_public_key_from_curve25519_public_key(&pubkey_check, &inp->pubkey,
+ *signbit_out);
+
+ tor_assert(fast_memeq(pubkey_check.pubkey, out->pubkey.pubkey, 32));
+
+ memwipe(&pubkey_check, 0, sizeof(pubkey_check));
+ memwipe(&ctx, 0, sizeof(ctx));
+ memwipe(sha512_output, 0, sizeof(sha512_output));
+
+ return 0;
+}
+
+/**
+ * Given a curve25519 public key and sign bit of X coordinate of the ed25519
+ * public key, generate the corresponding ed25519 public key.
+ */
+int
+ed25519_public_key_from_curve25519_public_key(ed25519_public_key_t *pubkey,
+ const curve25519_public_key_t *pubkey_in,
+ int signbit)
+{
+ return ed25519_ref10_pubkey_from_curve25519_pubkey(pubkey->pubkey,
+ pubkey_in->public_key,
+ signbit);
+}
+
+/**
+ * Given an ed25519 keypair in <b>inp</b>, generate a corresponding
+ * ed25519 keypair in <b>out</b>, blinded by the corresponding 32-byte input
+ * in 'param'.
+ *
+ * Tor uses key blinding for the "next-generation" hidden services design:
+ * service descriptors are encrypted with a key derived from the service's
+ * long-term public key, and then signed with (and stored at a position
+ * indexed by) a short-term key derived by blinding the long-term keys.
+ */
+int
+ed25519_keypair_blind(ed25519_keypair_t *out,
+ const ed25519_keypair_t *inp,
+ const uint8_t *param)
+{
+ ed25519_public_key_t pubkey_check;
+
+ ed25519_ref10_blind_secret_key(out->seckey.seckey,
+ inp->seckey.seckey, param);
+
+ ed25519_public_blind(&pubkey_check, &inp->pubkey, param);
+ ed25519_public_key_generate(&out->pubkey, &out->seckey);
+
+ tor_assert(fast_memeq(pubkey_check.pubkey, out->pubkey.pubkey, 32));
+
+ memwipe(&pubkey_check, 0, sizeof(pubkey_check));
+
+ return 0;
+}
+
+/**
+ * Given an ed25519 public key in <b>inp</b>, generate a corresponding blinded
+ * public key in <b>out</b>, blinded with the 32-byte parameter in
+ * <b>param</b>. Return 0 on sucess, -1 on railure.
+ */
+int
+ed25519_public_blind(ed25519_public_key_t *out,
+ const ed25519_public_key_t *inp,
+ const uint8_t *param)
+{
+ ed25519_ref10_blind_public_key(out->pubkey, inp->pubkey, param);
+ return 0;
+}
+
+/**
+ * Store seckey unencrypted to <b>filename</b>, marking it with <b>tag</b>.
+ * Return 0 on success, -1 on failure.
+ */
+int
+ed25519_seckey_write_to_file(const ed25519_secret_key_t *seckey,
+ const char *filename,
+ const char *tag)
+{
+ return crypto_write_tagged_contents_to_file(filename,
+ "ed25519v1-secret",
+ tag,
+ seckey->seckey,
+ sizeof(seckey->seckey));
+}
+
+/**
+ * Read seckey unencrypted from <b>filename</b>, storing it into
+ * <b>seckey_out</b>. Set *<b>tag_out</> to the tag it was marked with.
+ * Return 0 on success, -1 on failure.
+ */
+int
+ed25519_seckey_read_from_file(ed25519_secret_key_t *seckey_out,
+ char **tag_out,
+ const char *filename)
+{
+ ssize_t len;
+
+ len = crypto_read_tagged_contents_from_file(filename, "ed25519v1-secret",
+ tag_out, seckey_out->seckey,
+ sizeof(seckey_out->seckey));
+ if (len != sizeof(seckey_out->seckey))
+ return -1;
+
+ return 0;
+}
+
+/**
+ * Store pubkey unencrypted to <b>filename</b>, marking it with <b>tag</b>.
+ * Return 0 on success, -1 on failure.
+ */
+int
+ed25519_pubkey_write_to_file(const ed25519_public_key_t *pubkey,
+ const char *filename,
+ const char *tag)
+{
+ return crypto_write_tagged_contents_to_file(filename,
+ "ed25519v1-public",
+ tag,
+ pubkey->pubkey,
+ sizeof(pubkey->pubkey));
+}
+
+/**
+ * Store pubkey unencrypted to <b>filename</b>, marking it with <b>tag</b>.
+ * Return 0 on success, -1 on failure.
+ */
+int
+ed25519_pubkey_read_from_file(ed25519_public_key_t *pubkey_out,
+ char **tag_out,
+ const char *filename)
+{
+ ssize_t len;
+
+ len = crypto_read_tagged_contents_from_file(filename, "ed25519v1-public",
+ tag_out, pubkey_out->pubkey,
+ sizeof(pubkey_out->pubkey));
+ if (len != sizeof(pubkey_out->pubkey))
+ return -1;
+
+ return 0;
+}
+
diff --git a/src/common/crypto_ed25519.h b/src/common/crypto_ed25519.h
new file mode 100644
index 0000000000..8c3663e0dd
--- /dev/null
+++ b/src/common/crypto_ed25519.h
@@ -0,0 +1,113 @@
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_CRYPTO_ED25519_H
+#define TOR_CRYPTO_ED25519_H
+
+#include "testsupport.h"
+#include "torint.h"
+
+#define ED25519_PUBKEY_LEN 32
+#define ED25519_SECKEY_LEN 64
+#define ED25519_SECKEY_SEED_LEN 32
+#define ED25519_SIG_LEN 64
+
+/** An Ed25519 signature. */
+typedef struct {
+ uint8_t sig[ED25519_SIG_LEN];
+} ed25519_signature_t;
+
+/** An Ed25519 public key */
+typedef struct {
+ uint8_t pubkey[ED25519_PUBKEY_LEN];
+} ed25519_public_key_t;
+
+/** An Ed25519 secret key */
+typedef struct {
+ /** Note that we store secret keys in an expanded format that doesn't match
+ * the format from standard ed25519. Ed25519 stores a 32-byte value k and
+ * expands it into a 64-byte H(k), using the first 32 bytes for a multiplier
+ * of the base point, and second 32 bytes as an input to a hash function
+ * for deriving r. But because we implement key blinding, we need to store
+ * keys in the 64-byte expanded form. */
+ uint8_t seckey[ED25519_SECKEY_LEN];
+} ed25519_secret_key_t;
+
+/** An Ed25519 keypair. */
+typedef struct {
+ ed25519_public_key_t pubkey;
+ ed25519_secret_key_t seckey;
+} ed25519_keypair_t;
+
+int ed25519_secret_key_generate(ed25519_secret_key_t *seckey_out,
+ int extra_strong);
+int ed25519_secret_key_from_seed(ed25519_secret_key_t *seckey_out,
+ const uint8_t *seed);
+
+int ed25519_public_key_generate(ed25519_public_key_t *pubkey_out,
+ const ed25519_secret_key_t *seckey);
+int ed25519_keypair_generate(ed25519_keypair_t *keypair_out, int extra_strong);
+int ed25519_sign(ed25519_signature_t *signature_out,
+ const uint8_t *msg, size_t len,
+ const ed25519_keypair_t *key);
+int ed25519_checksig(const ed25519_signature_t *signature,
+ const uint8_t *msg, size_t len,
+ const ed25519_public_key_t *pubkey);
+
+/**
+ * A collection of information necessary to check an Ed25519 signature. Used
+ * for batch verification.
+ */
+typedef struct {
+ /** The public key that supposedly generated the signature. */
+ ed25519_public_key_t *pubkey;
+ /** The signature to check. */
+ ed25519_signature_t signature;
+ /** The message that the signature is supposed to have been applied to. */
+ const uint8_t *msg;
+ /** The length of the message. */
+ size_t len;
+} ed25519_checkable_t;
+
+int ed25519_checksig_batch(int *okay_out,
+ const ed25519_checkable_t *checkable,
+ int n_checkable);
+
+int ed25519_keypair_from_curve25519_keypair(ed25519_keypair_t *out,
+ int *signbit_out,
+ const curve25519_keypair_t *inp);
+
+int ed25519_public_key_from_curve25519_public_key(ed25519_public_key_t *pubkey,
+ const curve25519_public_key_t *pubkey_in,
+ int signbit);
+int ed25519_keypair_blind(ed25519_keypair_t *out,
+ const ed25519_keypair_t *inp,
+ const uint8_t *param);
+int ed25519_public_blind(ed25519_public_key_t *out,
+ const ed25519_public_key_t *inp,
+ const uint8_t *param);
+
+#define ED25519_BASE64_LEN 43
+
+int ed25519_public_from_base64(ed25519_public_key_t *pkey,
+ const char *input);
+int ed25519_public_to_base64(char *output,
+ const ed25519_public_key_t *pkey);
+
+/* XXXX read encrypted, write encrypted. */
+
+int ed25519_seckey_write_to_file(const ed25519_secret_key_t *seckey,
+ const char *filename,
+ const char *tag);
+int ed25519_seckey_read_from_file(ed25519_secret_key_t *seckey_out,
+ char **tag_out,
+ const char *filename);
+int ed25519_pubkey_write_to_file(const ed25519_public_key_t *pubkey,
+ const char *filename,
+ const char *tag);
+int ed25519_pubkey_read_from_file(ed25519_public_key_t *pubkey_out,
+ char **tag_out,
+ const char *filename);
+
+#endif
+
diff --git a/src/common/crypto_format.c b/src/common/crypto_format.c
index be669c8d2b..63dd391914 100644
--- a/src/common/crypto_format.c
+++ b/src/common/crypto_format.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Formatting and parsing code for crypto-related data structures. */
@@ -9,6 +9,7 @@
#endif
#include "crypto.h"
#include "crypto_curve25519.h"
+#include "crypto_ed25519.h"
#include "util.h"
#include "torlog.h"
@@ -43,3 +44,24 @@ curve25519_public_from_base64(curve25519_public_key_t *pkey,
}
}
+/** Try to decode the string <b>input</b> into an ed25519 public key. On
+ * success, store the value in <b>pkey</b> and return 0. Otherwise return
+ * -1. */
+int
+ed25519_public_from_base64(ed25519_public_key_t *pkey,
+ const char *input)
+{
+ return digest256_from_base64((char*)pkey->pubkey, input);
+}
+
+/** Encode the public key <b>pkey</b> into the buffer at <b>output</b>,
+ * which must have space for ED25519_BASE64_LEN bytes of encoded key,
+ * plus one byte for a terminating NUL. Return 0 on success, -1 on failure.
+ */
+int
+ed25519_public_to_base64(char *output,
+ const ed25519_public_key_t *pkey)
+{
+ return digest256_to_base64(output, (const char *)pkey->pubkey);
+}
+
diff --git a/src/common/crypto_pwbox.c b/src/common/crypto_pwbox.c
new file mode 100644
index 0000000000..b866c7ef39
--- /dev/null
+++ b/src/common/crypto_pwbox.c
@@ -0,0 +1,187 @@
+
+#include "crypto.h"
+#include "crypto_s2k.h"
+#include "crypto_pwbox.h"
+#include "di_ops.h"
+#include "util.h"
+#include "pwbox.h"
+
+/* 8 bytes "TORBOX00"
+ 1 byte: header len (H)
+ H bytes: header, denoting secret key algorithm.
+ 16 bytes: IV
+ Round up to multiple of 128 bytes, then encrypt:
+ 4 bytes: data len
+ data
+ zeros
+ 32 bytes: HMAC-SHA256 of all previous bytes.
+*/
+
+#define MAX_OVERHEAD (S2K_MAXLEN + 8 + 1 + 32 + CIPHER_IV_LEN)
+
+/**
+ * Make an authenticated passphrase-encrypted blob to encode the
+ * <b>input_len</b> bytes in <b>input</b> using the passphrase
+ * <b>secret</b> of <b>secret_len</b> bytes. Allocate a new chunk of memory
+ * to hold the encrypted data, and store a pointer to that memory in
+ * *<b>out</b>, and its size in <b>outlen_out</b>. Use <b>s2k_flags</b> as an
+ * argument to the passphrase-hashing function.
+ */
+int
+crypto_pwbox(uint8_t **out, size_t *outlen_out,
+ const uint8_t *input, size_t input_len,
+ const char *secret, size_t secret_len,
+ unsigned s2k_flags)
+{
+ uint8_t *result = NULL, *encrypted_portion;
+ size_t encrypted_len = 128 * CEIL_DIV(input_len+4, 128);
+ ssize_t result_len;
+ int spec_len;
+ uint8_t keys[CIPHER_KEY_LEN + DIGEST256_LEN];
+ pwbox_encoded_t *enc = NULL;
+ ssize_t enc_len;
+
+ crypto_cipher_t *cipher;
+ int rv;
+
+ enc = pwbox_encoded_new();
+
+ pwbox_encoded_setlen_skey_header(enc, S2K_MAXLEN);
+
+ spec_len = secret_to_key_make_specifier(
+ pwbox_encoded_getarray_skey_header(enc),
+ S2K_MAXLEN,
+ s2k_flags);
+ if (spec_len < 0 || spec_len > S2K_MAXLEN)
+ goto err;
+ pwbox_encoded_setlen_skey_header(enc, spec_len);
+ enc->header_len = spec_len;
+
+ crypto_rand((char*)enc->iv, sizeof(enc->iv));
+
+ pwbox_encoded_setlen_data(enc, encrypted_len);
+ encrypted_portion = pwbox_encoded_getarray_data(enc);
+
+ set_uint32(encrypted_portion, htonl((uint32_t)input_len));
+ memcpy(encrypted_portion+4, input, input_len);
+
+ /* Now that all the data is in position, derive some keys, encrypt, and
+ * digest */
+ if (secret_to_key_derivekey(keys, sizeof(keys),
+ pwbox_encoded_getarray_skey_header(enc),
+ spec_len,
+ secret, secret_len) < 0)
+ goto err;
+
+ cipher = crypto_cipher_new_with_iv((char*)keys, (char*)enc->iv);
+ crypto_cipher_crypt_inplace(cipher, (char*)encrypted_portion, encrypted_len);
+ crypto_cipher_free(cipher);
+
+ result_len = pwbox_encoded_encoded_len(enc);
+ if (result_len < 0)
+ goto err;
+ result = tor_malloc(result_len);
+ enc_len = pwbox_encoded_encode(result, result_len, enc);
+ if (enc_len < 0)
+ goto err;
+ tor_assert(enc_len == result_len);
+
+ crypto_hmac_sha256((char*) result + result_len - 32,
+ (const char*)keys + CIPHER_KEY_LEN,
+ DIGEST256_LEN,
+ (const char*)result,
+ result_len - 32);
+
+ *out = result;
+ *outlen_out = result_len;
+ rv = 0;
+ goto out;
+
+ err:
+ tor_free(result);
+ rv = -1;
+
+ out:
+ pwbox_encoded_free(enc);
+ memwipe(keys, 0, sizeof(keys));
+ return rv;
+}
+
+/**
+ * Try to decrypt the passphrase-encrypted blob of <b>input_len</b> bytes in
+ * <b>input</b> using the passphrase <b>secret</b> of <b>secret_len</b> bytes.
+ * On success, return 0 and allocate a new chunk of memory to hold the
+ * decrypted data, and store a pointer to that memory in *<b>out</b>, and its
+ * size in <b>outlen_out</b>. On failure, return UNPWBOX_BAD_SECRET if
+ * the passphrase might have been wrong, and UNPWBOX_CORRUPT if the object is
+ * definitely corrupt.
+ */
+int
+crypto_unpwbox(uint8_t **out, size_t *outlen_out,
+ const uint8_t *inp, size_t input_len,
+ const char *secret, size_t secret_len)
+{
+ uint8_t *result = NULL;
+ const uint8_t *encrypted;
+ uint8_t keys[CIPHER_KEY_LEN + DIGEST256_LEN];
+ uint8_t hmac[DIGEST256_LEN];
+ uint32_t result_len;
+ size_t encrypted_len;
+ crypto_cipher_t *cipher = NULL;
+ int rv = UNPWBOX_CORRUPTED;
+ ssize_t got_len;
+
+ pwbox_encoded_t *enc = NULL;
+
+ got_len = pwbox_encoded_parse(&enc, inp, input_len);
+ if (got_len < 0 || (size_t)got_len != input_len)
+ goto err;
+
+ /* Now derive the keys and check the hmac. */
+ if (secret_to_key_derivekey(keys, sizeof(keys),
+ pwbox_encoded_getarray_skey_header(enc),
+ pwbox_encoded_getlen_skey_header(enc),
+ secret, secret_len) < 0)
+ goto err;
+
+ crypto_hmac_sha256((char *)hmac,
+ (const char*)keys + CIPHER_KEY_LEN, DIGEST256_LEN,
+ (const char*)inp, input_len - DIGEST256_LEN);
+
+ if (tor_memneq(hmac, enc->hmac, DIGEST256_LEN)) {
+ rv = UNPWBOX_BAD_SECRET;
+ goto err;
+ }
+
+ /* How long is the plaintext? */
+ encrypted = pwbox_encoded_getarray_data(enc);
+ encrypted_len = pwbox_encoded_getlen_data(enc);
+ if (encrypted_len < 4)
+ goto err;
+
+ cipher = crypto_cipher_new_with_iv((char*)keys, (char*)enc->iv);
+ crypto_cipher_decrypt(cipher, (char*)&result_len, (char*)encrypted, 4);
+ result_len = ntohl(result_len);
+ if (encrypted_len < result_len + 4)
+ goto err;
+
+ /* Allocate a buffer and decrypt */
+ result = tor_malloc_zero(result_len);
+ crypto_cipher_decrypt(cipher, (char*)result, (char*)encrypted+4, result_len);
+
+ *out = result;
+ *outlen_out = result_len;
+
+ rv = UNPWBOX_OKAY;
+ goto out;
+
+ err:
+ tor_free(result);
+
+ out:
+ crypto_cipher_free(cipher);
+ pwbox_encoded_free(enc);
+ memwipe(keys, 0, sizeof(keys));
+ return rv;
+}
+
diff --git a/src/common/crypto_pwbox.h b/src/common/crypto_pwbox.h
new file mode 100644
index 0000000000..aadd477078
--- /dev/null
+++ b/src/common/crypto_pwbox.h
@@ -0,0 +1,20 @@
+#ifndef CRYPTO_PWBOX_H_INCLUDED_
+#define CRYPTO_PWBOX_H_INCLUDED_
+
+#include "torint.h"
+
+#define UNPWBOX_OKAY 0
+#define UNPWBOX_BAD_SECRET -1
+#define UNPWBOX_CORRUPTED -2
+
+int crypto_pwbox(uint8_t **out, size_t *outlen_out,
+ const uint8_t *inp, size_t input_len,
+ const char *secret, size_t secret_len,
+ unsigned s2k_flags);
+
+int crypto_unpwbox(uint8_t **out, size_t *outlen_out,
+ const uint8_t *inp, size_t input_len,
+ const char *secret, size_t secret_len);
+
+#endif
+
diff --git a/src/common/crypto_s2k.c b/src/common/crypto_s2k.c
new file mode 100644
index 0000000000..6d9ee497ab
--- /dev/null
+++ b/src/common/crypto_s2k.c
@@ -0,0 +1,460 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CRYPTO_S2K_PRIVATE
+
+#include "crypto.h"
+#include "util.h"
+#include "compat.h"
+#include "crypto_s2k.h"
+
+#include <openssl/evp.h>
+
+#ifdef HAVE_LIBSCRYPT_H
+#define HAVE_SCRYPT
+#include <libscrypt.h>
+#endif
+
+/* Encoded secrets take the form:
+
+ u8 type;
+ u8 salt_and_parameters[depends on type];
+ u8 key[depends on type];
+
+ As a special case, if the encoded secret is exactly 29 bytes long,
+ type 0 is understood.
+
+ Recognized types are:
+ 00 -- RFC2440. salt_and_parameters is 9 bytes. key is 20 bytes.
+ salt_and_parameters is 8 bytes random salt,
+ 1 byte iteration info.
+ 01 -- PKBDF2_SHA1. salt_and_parameters is 17 bytes. key is 20 bytes.
+ salt_and_parameters is 16 bytes random salt,
+ 1 byte iteration info.
+ 02 -- SCRYPT_SALSA208_SHA256. salt_and_parameters is 18 bytes. key is
+ 32 bytes.
+ salt_and_parameters is 18 bytes random salt, 2 bytes iteration
+ info.
+*/
+
+#define S2K_TYPE_RFC2440 0
+#define S2K_TYPE_PBKDF2 1
+#define S2K_TYPE_SCRYPT 2
+
+#define PBKDF2_SPEC_LEN 17
+#define PBKDF2_KEY_LEN 20
+
+#define SCRYPT_SPEC_LEN 18
+#define SCRYPT_KEY_LEN 32
+
+/** Given an algorithm ID (one of S2K_TYPE_*), return the length of the
+ * specifier part of it, without the prefix type byte. */
+static int
+secret_to_key_spec_len(uint8_t type)
+{
+ switch (type) {
+ case S2K_TYPE_RFC2440:
+ return S2K_RFC2440_SPECIFIER_LEN;
+ case S2K_TYPE_PBKDF2:
+ return PBKDF2_SPEC_LEN;
+ case S2K_TYPE_SCRYPT:
+ return SCRYPT_SPEC_LEN;
+ default:
+ return -1;
+ }
+}
+
+/** Given an algorithm ID (one of S2K_TYPE_*), return the length of the
+ * its preferred output. */
+static int
+secret_to_key_key_len(uint8_t type)
+{
+ switch (type) {
+ case S2K_TYPE_RFC2440:
+ return DIGEST_LEN;
+ case S2K_TYPE_PBKDF2:
+ return DIGEST_LEN;
+ case S2K_TYPE_SCRYPT:
+ return DIGEST256_LEN;
+ default:
+ return -1;
+ }
+}
+
+/** Given a specifier in <b>spec_and_key</b> of length
+ * <b>spec_and_key_len</b>, along with its prefix algorithm ID byte, and along
+ * with a key if <b>key_included</b> is true, check whether the whole
+ * specifier-and-key is of valid length, and return the algorithm type if it
+ * is. Set *<b>legacy_out</b> to 1 iff this is a legacy password hash or
+ * legacy specifier. Return an error code on failure.
+ */
+static int
+secret_to_key_get_type(const uint8_t *spec_and_key, size_t spec_and_key_len,
+ int key_included, int *legacy_out)
+{
+ size_t legacy_len = S2K_RFC2440_SPECIFIER_LEN;
+ uint8_t type;
+ int total_len;
+
+ if (key_included)
+ legacy_len += DIGEST_LEN;
+
+ if (spec_and_key_len == legacy_len) {
+ *legacy_out = 1;
+ return S2K_TYPE_RFC2440;
+ }
+
+ *legacy_out = 0;
+ if (spec_and_key_len == 0)
+ return S2K_BAD_LEN;
+
+ type = spec_and_key[0];
+ total_len = secret_to_key_spec_len(type);
+ if (total_len < 0)
+ return S2K_BAD_ALGORITHM;
+ if (key_included) {
+ int keylen = secret_to_key_key_len(type);
+ if (keylen < 0)
+ return S2K_BAD_ALGORITHM;
+ total_len += keylen;
+ }
+
+ if ((size_t)total_len + 1 == spec_and_key_len)
+ return type;
+ else
+ return S2K_BAD_LEN;
+}
+
+/**
+ * Write a new random s2k specifier of type <b>type</b>, without prefixing
+ * type byte, to <b>spec_out</b>, which must have enough room. May adjust
+ * parameter choice based on <b>flags</b>.
+ */
+static int
+make_specifier(uint8_t *spec_out, uint8_t type, unsigned flags)
+{
+ int speclen = secret_to_key_spec_len(type);
+ if (speclen < 0)
+ return S2K_BAD_ALGORITHM;
+
+ crypto_rand((char*)spec_out, speclen);
+ switch (type) {
+ case S2K_TYPE_RFC2440:
+ /* Hash 64 k of data. */
+ spec_out[S2K_RFC2440_SPECIFIER_LEN-1] = 96;
+ break;
+ case S2K_TYPE_PBKDF2:
+ /* 131 K iterations */
+ spec_out[PBKDF2_SPEC_LEN-1] = 17;
+ break;
+ case S2K_TYPE_SCRYPT:
+ if (flags & S2K_FLAG_LOW_MEM) {
+ /* N = 1<<12 */
+ spec_out[SCRYPT_SPEC_LEN-2] = 12;
+ } else {
+ /* N = 1<<15 */
+ spec_out[SCRYPT_SPEC_LEN-2] = 15;
+ }
+ /* r = 8; p = 2. */
+ spec_out[SCRYPT_SPEC_LEN-1] = (3u << 4) | (1u << 0);
+ break;
+ default:
+ tor_fragile_assert();
+ return S2K_BAD_ALGORITHM;
+ }
+
+ return speclen;
+}
+
+/** Implement RFC2440-style iterated-salted S2K conversion: convert the
+ * <b>secret_len</b>-byte <b>secret</b> into a <b>key_out_len</b> byte
+ * <b>key_out</b>. As in RFC2440, the first 8 bytes of s2k_specifier
+ * are a salt; the 9th byte describes how much iteration to do.
+ * If <b>key_out_len</b> &gt; DIGEST_LEN, use HDKF to expand the result.
+ */
+void
+secret_to_key_rfc2440(char *key_out, size_t key_out_len, const char *secret,
+ size_t secret_len, const char *s2k_specifier)
+{
+ crypto_digest_t *d;
+ uint8_t c;
+ size_t count, tmplen;
+ char *tmp;
+ uint8_t buf[DIGEST_LEN];
+ tor_assert(key_out_len < SIZE_T_CEILING);
+
+#define EXPBIAS 6
+ c = s2k_specifier[8];
+ count = ((uint32_t)16 + (c & 15)) << ((c >> 4) + EXPBIAS);
+#undef EXPBIAS
+
+ d = crypto_digest_new();
+ tmplen = 8+secret_len;
+ tmp = tor_malloc(tmplen);
+ memcpy(tmp,s2k_specifier,8);
+ memcpy(tmp+8,secret,secret_len);
+ secret_len += 8;
+ while (count) {
+ if (count >= secret_len) {
+ crypto_digest_add_bytes(d, tmp, secret_len);
+ count -= secret_len;
+ } else {
+ crypto_digest_add_bytes(d, tmp, count);
+ count = 0;
+ }
+ }
+ crypto_digest_get_digest(d, (char*)buf, sizeof(buf));
+
+ if (key_out_len <= sizeof(buf)) {
+ memcpy(key_out, buf, key_out_len);
+ } else {
+ crypto_expand_key_material_rfc5869_sha256(buf, DIGEST_LEN,
+ (const uint8_t*)s2k_specifier, 8,
+ (const uint8_t*)"EXPAND", 6,
+ (uint8_t*)key_out, key_out_len);
+ }
+ memwipe(tmp, 0, tmplen);
+ memwipe(buf, 0, sizeof(buf));
+ tor_free(tmp);
+ crypto_digest_free(d);
+}
+
+/**
+ * Helper: given a valid specifier without prefix type byte in <b>spec</b>,
+ * whose length must be correct, and given a secret passphrase <b>secret</b>
+ * of length <b>secret_len</b>, compute the key and store it into
+ * <b>key_out</b>, which must have enough room for secret_to_key_key_len(type)
+ * bytes. Return the number of bytes written on success and an error code
+ * on failure.
+ */
+STATIC int
+secret_to_key_compute_key(uint8_t *key_out, size_t key_out_len,
+ const uint8_t *spec, size_t spec_len,
+ const char *secret, size_t secret_len,
+ int type)
+{
+ int rv;
+ if (key_out_len > INT_MAX)
+ return S2K_BAD_LEN;
+
+ switch (type) {
+ case S2K_TYPE_RFC2440:
+ secret_to_key_rfc2440((char*)key_out, key_out_len, secret, secret_len,
+ (const char*)spec);
+ return (int)key_out_len;
+
+ case S2K_TYPE_PBKDF2: {
+ uint8_t log_iters;
+ if (spec_len < 1 || secret_len > INT_MAX || spec_len > INT_MAX)
+ return S2K_BAD_LEN;
+ log_iters = spec[spec_len-1];
+ if (log_iters > 31)
+ return S2K_BAD_PARAMS;
+ rv = PKCS5_PBKDF2_HMAC_SHA1(secret, (int)secret_len,
+ spec, (int)spec_len-1,
+ (1<<log_iters),
+ (int)key_out_len, key_out);
+ if (rv < 0)
+ return S2K_FAILED;
+ return (int)key_out_len;
+ }
+
+ case S2K_TYPE_SCRYPT: {
+#ifdef HAVE_SCRYPT
+ uint8_t log_N, log_r, log_p;
+ uint64_t N;
+ uint32_t r, p;
+ if (spec_len < 2)
+ return S2K_BAD_LEN;
+ log_N = spec[spec_len-2];
+ log_r = (spec[spec_len-1]) >> 4;
+ log_p = (spec[spec_len-1]) & 15;
+ if (log_N > 63)
+ return S2K_BAD_PARAMS;
+ N = ((uint64_t)1) << log_N;
+ r = 1u << log_r;
+ p = 1u << log_p;
+ rv = libscrypt_scrypt((const uint8_t*)secret, secret_len,
+ spec, spec_len-2, N, r, p, key_out, key_out_len);
+ if (rv != 0)
+ return S2K_FAILED;
+ return (int)key_out_len;
+#else
+ return S2K_NO_SCRYPT_SUPPORT;
+#endif
+ }
+ default:
+ return S2K_BAD_ALGORITHM;
+ }
+}
+
+/**
+ * Given a specifier previously constructed with secret_to_key_make_specifier
+ * in <b>spec</b> of length <b>spec_len</b>, and a secret password in
+ * <b>secret</b> of length <b>secret_len</b>, generate <b>key_out_len</b>
+ * bytes of cryptographic material in <b>key_out</b>. The native output of
+ * the secret-to-key function will be truncated if key_out_len is short, and
+ * expanded with HKDF if key_out_len is long. Returns S2K_OKAY on success,
+ * and an error code on failure.
+ */
+int
+secret_to_key_derivekey(uint8_t *key_out, size_t key_out_len,
+ const uint8_t *spec, size_t spec_len,
+ const char *secret, size_t secret_len)
+{
+ int legacy_format = 0;
+ int type = secret_to_key_get_type(spec, spec_len, 0, &legacy_format);
+ int r;
+
+ if (type < 0)
+ return type;
+#ifndef HAVE_SCRYPT
+ if (type == S2K_TYPE_SCRYPT)
+ return S2K_NO_SCRYPT_SUPPORT;
+ #endif
+
+ if (! legacy_format) {
+ ++spec;
+ --spec_len;
+ }
+
+ r = secret_to_key_compute_key(key_out, key_out_len, spec, spec_len,
+ secret, secret_len, type);
+ if (r < 0)
+ return r;
+ else
+ return S2K_OKAY;
+}
+
+/**
+ * Construct a new s2k algorithm specifier and salt in <b>buf</b>, according
+ * to the bitwise-or of some S2K_FLAG_* options in <b>flags</b>. Up to
+ * <b>buf_len</b> bytes of storage may be used in <b>buf</b>. Return the
+ * number of bytes used on success and an error code on failure.
+ */
+int
+secret_to_key_make_specifier(uint8_t *buf, size_t buf_len, unsigned flags)
+{
+ int rv;
+ int spec_len;
+#ifdef HAVE_SCRYPT
+ uint8_t type = S2K_TYPE_SCRYPT;
+#else
+ uint8_t type = S2K_TYPE_RFC2440;
+#endif
+
+ if (flags & S2K_FLAG_NO_SCRYPT)
+ type = S2K_TYPE_RFC2440;
+ if (flags & S2K_FLAG_USE_PBKDF2)
+ type = S2K_TYPE_PBKDF2;
+
+ spec_len = secret_to_key_spec_len(type);
+
+ if ((int)buf_len < spec_len + 1)
+ return S2K_TRUNCATED;
+
+ buf[0] = type;
+ rv = make_specifier(buf+1, type, flags);
+ if (rv < 0)
+ return rv;
+ else
+ return rv + 1;
+}
+
+/**
+ * Hash a passphrase from <b>secret</b> of length <b>secret_len</b>, according
+ * to the bitwise-or of some S2K_FLAG_* options in <b>flags</b>, and store the
+ * hash along with salt and hashing parameters into <b>buf</b>. Up to
+ * <b>buf_len</b> bytes of storage may be used in <b>buf</b>. Set
+ * *<b>len_out</b> to the number of bytes used and return S2K_OKAY on success;
+ * and return an error code on failure.
+ */
+int
+secret_to_key_new(uint8_t *buf,
+ size_t buf_len,
+ size_t *len_out,
+ const char *secret, size_t secret_len,
+ unsigned flags)
+{
+ int key_len;
+ int spec_len;
+ int type;
+ int rv;
+
+ spec_len = secret_to_key_make_specifier(buf, buf_len, flags);
+
+ if (spec_len < 0)
+ return spec_len;
+
+ type = buf[0];
+ key_len = secret_to_key_key_len(type);
+
+ if (key_len < 0)
+ return key_len;
+
+ if ((int)buf_len < key_len + spec_len)
+ return S2K_TRUNCATED;
+
+ rv = secret_to_key_compute_key(buf + spec_len, key_len,
+ buf + 1, spec_len-1,
+ secret, secret_len, type);
+ if (rv < 0)
+ return rv;
+
+ *len_out = spec_len + key_len;
+
+ return S2K_OKAY;
+}
+
+/**
+ * Given a hashed passphrase in <b>spec_and_key</b> of length
+ * <b>spec_and_key_len</b> as generated by secret_to_key_new(), verify whether
+ * it is a hash of the passphrase <b>secret</b> of length <b>secret_len</b>.
+ * Return S2K_OKAY on a match, S2K_BAD_SECRET on a well-formed hash that
+ * doesn't match this secret, and another error code on other errors.
+ */
+int
+secret_to_key_check(const uint8_t *spec_and_key, size_t spec_and_key_len,
+ const char *secret, size_t secret_len)
+{
+ int is_legacy = 0;
+ int type = secret_to_key_get_type(spec_and_key, spec_and_key_len,
+ 1, &is_legacy);
+ uint8_t buf[32];
+ int spec_len;
+ int key_len;
+ int rv;
+
+ if (type < 0)
+ return type;
+
+ if (! is_legacy) {
+ spec_and_key++;
+ spec_and_key_len--;
+ }
+
+ spec_len = secret_to_key_spec_len(type);
+ key_len = secret_to_key_key_len(type);
+ tor_assert(spec_len > 0);
+ tor_assert(key_len > 0);
+ tor_assert(key_len <= (int) sizeof(buf));
+ tor_assert((int)spec_and_key_len == spec_len + key_len);
+ rv = secret_to_key_compute_key(buf, key_len,
+ spec_and_key, spec_len,
+ secret, secret_len, type);
+ if (rv < 0)
+ goto done;
+
+ if (tor_memeq(buf, spec_and_key + spec_len, key_len))
+ rv = S2K_OKAY;
+ else
+ rv = S2K_BAD_SECRET;
+
+ done:
+ memwipe(buf, 0, sizeof(buf));
+ return rv;
+}
+
diff --git a/src/common/crypto_s2k.h b/src/common/crypto_s2k.h
new file mode 100644
index 0000000000..a33dc96e46
--- /dev/null
+++ b/src/common/crypto_s2k.h
@@ -0,0 +1,73 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_CRYPTO_S2K_H_INCLUDED
+#define TOR_CRYPTO_S2K_H_INCLUDED
+
+#include <stdio.h>
+#include "torint.h"
+
+/** Length of RFC2440-style S2K specifier: the first 8 bytes are a salt, the
+ * 9th describes how much iteration to do. */
+#define S2K_RFC2440_SPECIFIER_LEN 9
+void secret_to_key_rfc2440(
+ char *key_out, size_t key_out_len, const char *secret,
+ size_t secret_len, const char *s2k_specifier);
+
+/** Flag for secret-to-key function: do not use scrypt. */
+#define S2K_FLAG_NO_SCRYPT (1u<<0)
+/** Flag for secret-to-key functions: if using a memory-tuned s2k function,
+ * assume that we have limited memory. */
+#define S2K_FLAG_LOW_MEM (1u<<1)
+/** Flag for secret-to-key functions: force use of pbkdf2. Without this, we
+ * default to scrypt, then RFC2440. */
+#define S2K_FLAG_USE_PBKDF2 (1u<<2)
+
+/** Maximum possible output length from secret_to_key_new. */
+#define S2K_MAXLEN 64
+
+/** Error code from secret-to-key functions: all is well */
+#define S2K_OKAY 0
+/** Error code from secret-to-key functions: generic failure */
+#define S2K_FAILED -1
+/** Error code from secret-to-key functions: provided secret didn't match */
+#define S2K_BAD_SECRET -2
+/** Error code from secret-to-key functions: didn't recognize the algorithm */
+#define S2K_BAD_ALGORITHM -3
+/** Error code from secret-to-key functions: specifier wasn't valid */
+#define S2K_BAD_PARAMS -4
+/** Error code from secret-to-key functions: compiled without scrypt */
+#define S2K_NO_SCRYPT_SUPPORT -5
+/** Error code from secret-to-key functions: not enough space to write output.
+ */
+#define S2K_TRUNCATED -6
+/** Error code from secret-to-key functions: Wrong length for specifier. */
+#define S2K_BAD_LEN -7
+
+int secret_to_key_new(uint8_t *buf,
+ size_t buf_len,
+ size_t *len_out,
+ const char *secret, size_t secret_len,
+ unsigned flags);
+
+int secret_to_key_make_specifier(uint8_t *buf, size_t buf_len, unsigned flags);
+
+int secret_to_key_check(const uint8_t *spec_and_key, size_t spec_and_key_len,
+ const char *secret, size_t secret_len);
+
+int secret_to_key_derivekey(uint8_t *key_out, size_t key_out_len,
+ const uint8_t *spec, size_t spec_len,
+ const char *secret, size_t secret_len);
+
+#ifdef CRYPTO_S2K_PRIVATE
+STATIC int secret_to_key_compute_key(uint8_t *key_out, size_t key_out_len,
+ const uint8_t *spec, size_t spec_len,
+ const char *secret, size_t secret_len,
+ int type);
+#endif
+
+#endif
+
diff --git a/src/common/di_ops.c b/src/common/di_ops.c
index a8bfd02532..0dcd6924e7 100644
--- a/src/common/di_ops.c
+++ b/src/common/di_ops.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Tor Project, Inc. */
+/* Copyright (c) 2011-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/di_ops.h b/src/common/di_ops.h
index d93534b69b..935f93fc1a 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/include.am b/src/common/include.am
index 68e0110c26..6441596199 100644
--- a/src/common/include.am
+++ b/src/common/include.am
@@ -16,7 +16,7 @@ EXTRA_DIST+= \
src/common/Makefile.nmake
#CFLAGS = -Wall -Wpointer-arith -O2
-AM_CPPFLAGS += -I$(srcdir)/src/common -Isrc/common
+AM_CPPFLAGS += -I$(srcdir)/src/common -Isrc/common -I$(srcdir)/src/ext/trunnel -I$(srcdir)/src/trunnel
if USE_OPENBSD_MALLOC
libor_extra_source=src/ext/OpenBSD_malloc_Linux.c
@@ -52,9 +52,7 @@ LIBDONNA=
endif
endif
-if CURVE25519_ENABLED
-libcrypto_extra_source=src/common/crypto_curve25519.c
-endif
+LIBDONNA += $(LIBED25519_REF10)
LIBOR_A_SOURCES = \
src/common/address.c \
@@ -69,16 +67,21 @@ LIBOR_A_SOURCES = \
src/common/util_process.c \
src/common/sandbox.c \
src/ext/csiphash.c \
+ src/ext/trunnel/trunnel.c \
$(libor_extra_source) \
$(libor_mempool_source)
LIBOR_CRYPTO_A_SOURCES = \
src/common/aes.c \
src/common/crypto.c \
+ src/common/crypto_pwbox.c \
+ src/common/crypto_s2k.c \
src/common/crypto_format.c \
src/common/torgzip.c \
src/common/tortls.c \
- $(libcrypto_extra_source)
+ src/trunnel/pwbox.c \
+ src/common/crypto_curve25519.c \
+ src/common/crypto_ed25519.c
LIBOR_EVENT_A_SOURCES = \
src/common/compat_libevent.c \
@@ -110,6 +113,9 @@ COMMONHEADERS = \
src/common/container.h \
src/common/crypto.h \
src/common/crypto_curve25519.h \
+ src/common/crypto_ed25519.h \
+ src/common/crypto_pwbox.h \
+ src/common/crypto_s2k.h \
src/common/di_ops.h \
src/common/memarea.h \
src/common/linux_syscalls.inc \
diff --git a/src/common/log.c b/src/common/log.c
index 2e51e5c578..ad0da7da6b 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -117,15 +117,33 @@ static int syslog_count = 0;
/** Represents a log message that we are going to send to callback-driven
* loggers once we can do so in a non-reentrant way. */
-typedef struct pending_cb_message_t {
+typedef struct pending_log_message_t {
int severity; /**< The severity of the message */
log_domain_mask_t domain; /**< The domain of the message */
+ char *fullmsg; /**< The message, with all decorations */
char *msg; /**< The content of the message */
-} pending_cb_message_t;
+} pending_log_message_t;
/** Log messages waiting to be replayed onto callback-based logs */
static smartlist_t *pending_cb_messages = NULL;
+/** Log messages waiting to be replayed once the logging system is initialized.
+ */
+static smartlist_t *pending_startup_messages = NULL;
+
+/** Number of bytes of messages queued in pending_startup_messages. (This is
+ * the length of the messages, not the number of bytes used to store
+ * them.) */
+static size_t pending_startup_messages_len;
+
+/** True iff we should store messages while waiting for the logs to get
+ * configured. */
+static int queue_startup_messages = 1;
+
+/** Don't store more than this many bytes of messages while waiting for the
+ * logs to get configured. */
+#define MAX_STARTUP_MSG_LEN (1<<16)
+
/** Lock the log_mutex to prevent others from changing the logfile_t list */
#define LOCK_LOGS() STMT_BEGIN \
tor_mutex_acquire(&log_mutex); \
@@ -329,6 +347,102 @@ format_msg(char *buf, size_t buf_len,
return end_of_prefix;
}
+/* Create a new pending_log_message_t with appropriate values */
+static pending_log_message_t *
+pending_log_message_new(int severity, log_domain_mask_t domain,
+ const char *fullmsg, const char *shortmsg)
+{
+ pending_log_message_t *m = tor_malloc(sizeof(pending_log_message_t));
+ m->severity = severity;
+ m->domain = domain;
+ m->fullmsg = fullmsg ? tor_strdup(fullmsg) : NULL;
+ m->msg = tor_strdup(shortmsg);
+ return m;
+}
+
+/** Release all storage held by <b>msg</b>. */
+static void
+pending_log_message_free(pending_log_message_t *msg)
+{
+ if (!msg)
+ return;
+ tor_free(msg->msg);
+ tor_free(msg->fullmsg);
+ tor_free(msg);
+}
+
+/** Return true iff <b>lf</b> would like to receive a message with the
+ * specified <b>severity</b> in the specified <b>domain</b>.
+ */
+static INLINE int
+logfile_wants_message(const logfile_t *lf, int severity,
+ log_domain_mask_t domain)
+{
+ if (! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) {
+ return 0;
+ }
+ if (! (lf->fd >= 0 || lf->is_syslog || lf->callback)) {
+ return 0;
+ }
+ if (lf->seems_dead) {
+ return 0;
+ }
+
+ return 1;
+}
+
+/** Send a message to <b>lf</b>. The full message, with time prefix and
+ * severity, is in <b>buf</b>. The message itself is in
+ * <b>msg_after_prefix</b>. If <b>callbacks_deferred</b> points to true, then
+ * we already deferred this message for pending callbacks and don't need to do
+ * it again. Otherwise, if we need to do it, do it, and set
+ * <b>callbacks_deferred</b> to 1. */
+static INLINE void
+logfile_deliver(logfile_t *lf, const char *buf, size_t msg_len,
+ const char *msg_after_prefix, log_domain_mask_t domain,
+ int severity, int *callbacks_deferred)
+{
+
+ if (lf->is_syslog) {
+#ifdef HAVE_SYSLOG_H
+#ifdef MAXLINE
+ /* Some syslog implementations have limits on the length of what you can
+ * pass them, and some very old ones do not detect overflow so well.
+ * Regrettably, they call their maximum line length MAXLINE. */
+#if MAXLINE < 64
+#warn "MAXLINE is a very low number; it might not be from syslog.h after all"
+#endif
+ char *m = msg_after_prefix;
+ if (msg_len >= MAXLINE)
+ m = tor_strndup(msg_after_prefix, MAXLINE-1);
+ syslog(severity, "%s", m);
+ if (m != msg_after_prefix) {
+ tor_free(m);
+ }
+#else
+ /* We have syslog but not MAXLINE. That's promising! */
+ syslog(severity, "%s", msg_after_prefix);
+#endif
+#endif
+ } else if (lf->callback) {
+ if (domain & LD_NOCB) {
+ if (!*callbacks_deferred && pending_cb_messages) {
+ smartlist_add(pending_cb_messages,
+ pending_log_message_new(severity,domain,NULL,msg_after_prefix));
+ *callbacks_deferred = 1;
+ }
+ } else {
+ lf->callback(severity, domain, msg_after_prefix);
+ }
+ } else {
+ if (write_all(lf->fd, buf, msg_len, 0) < 0) { /* error */
+ /* don't log the error! mark this log entry to be blown away, and
+ * continue. */
+ lf->seems_dead = 1;
+ }
+ }
+}
+
/** Helper: sends a message to the appropriate logfiles, at loglevel
* <b>severity</b>. If provided, <b>funcname</b> is prepended to the
* message. The actual message is derived as from tor_snprintf(format,ap).
@@ -354,20 +468,21 @@ logv,(int severity, log_domain_mask_t domain, const char *funcname,
if ((! (domain & LD_NOCB)) && smartlist_len(pending_cb_messages))
flush_pending_log_callbacks();
- lf = logfiles;
- while (lf) {
- if (! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) {
- lf = lf->next;
- continue;
- }
- if (! (lf->fd >= 0 || lf->is_syslog || lf->callback)) {
- lf = lf->next;
- continue;
- }
- if (lf->seems_dead) {
- lf = lf->next;
+ if (queue_startup_messages &&
+ pending_startup_messages_len < MAX_STARTUP_MSG_LEN) {
+ end_of_prefix =
+ format_msg(buf, sizeof(buf), domain, severity, funcname, suffix,
+ format, ap, &msg_len);
+ formatted = 1;
+
+ smartlist_add(pending_startup_messages,
+ pending_log_message_new(severity,domain,buf,end_of_prefix));
+ pending_startup_messages_len += msg_len;
+ }
+
+ for (lf = logfiles; lf; lf = lf->next) {
+ if (! logfile_wants_message(lf, severity, domain))
continue;
- }
if (!formatted) {
end_of_prefix =
@@ -376,51 +491,8 @@ logv,(int severity, log_domain_mask_t domain, const char *funcname,
formatted = 1;
}
- if (lf->is_syslog) {
-#ifdef HAVE_SYSLOG_H
- char *m = end_of_prefix;
-#ifdef MAXLINE
- /* Some syslog implementations have limits on the length of what you can
- * pass them, and some very old ones do not detect overflow so well.
- * Regrettably, they call their maximum line length MAXLINE. */
-#if MAXLINE < 64
-#warn "MAXLINE is a very low number; it might not be from syslog.h after all"
-#endif
- if (msg_len >= MAXLINE)
- m = tor_strndup(end_of_prefix, MAXLINE-1);
-#endif
- syslog(severity, "%s", m);
-#ifdef MAXLINE
- if (m != end_of_prefix) {
- tor_free(m);
- }
-#endif
-#endif
- lf = lf->next;
- continue;
- } else if (lf->callback) {
- if (domain & LD_NOCB) {
- if (!callbacks_deferred && pending_cb_messages) {
- pending_cb_message_t *msg = tor_malloc(sizeof(pending_cb_message_t));
- msg->severity = severity;
- msg->domain = domain;
- msg->msg = tor_strdup(end_of_prefix);
- smartlist_add(pending_cb_messages, msg);
-
- callbacks_deferred = 1;
- }
- } else {
- lf->callback(severity, domain, end_of_prefix);
- }
- lf = lf->next;
- continue;
- }
- if (write_all(lf->fd, buf, msg_len, 0) < 0) { /* error */
- /* don't log the error! mark this log entry to be blown away, and
- * continue. */
- lf->seems_dead = 1;
- }
- lf = lf->next;
+ logfile_deliver(lf, buf, msg_len, end_of_prefix, domain, severity,
+ &callbacks_deferred);
}
UNLOCK_LOGS();
}
@@ -724,12 +796,14 @@ void
logs_free_all(void)
{
logfile_t *victim, *next;
- smartlist_t *messages;
+ smartlist_t *messages, *messages2;
LOCK_LOGS();
next = logfiles;
logfiles = NULL;
messages = pending_cb_messages;
pending_cb_messages = NULL;
+ messages2 = pending_startup_messages;
+ pending_startup_messages = NULL;
UNLOCK_LOGS();
while (next) {
victim = next;
@@ -739,12 +813,18 @@ logs_free_all(void)
}
tor_free(appname);
- SMARTLIST_FOREACH(messages, pending_cb_message_t *, msg, {
- tor_free(msg->msg);
- tor_free(msg);
+ SMARTLIST_FOREACH(messages, pending_log_message_t *, msg, {
+ pending_log_message_free(msg);
});
smartlist_free(messages);
+ if (messages2) {
+ SMARTLIST_FOREACH(messages2, pending_log_message_t *, msg, {
+ pending_log_message_free(msg);
+ });
+ smartlist_free(messages2);
+ }
+
/* We _could_ destroy the log mutex here, but that would screw up any logs
* that happened between here and the end of execution. */
}
@@ -839,7 +919,7 @@ add_stream_log(const log_severity_list_t *severity, const char *name, int fd)
/** Initialize the global logging facility */
void
-init_logging(void)
+init_logging(int disable_startup_queue)
{
if (!log_mutex_initialized) {
tor_mutex_init(&log_mutex);
@@ -847,6 +927,11 @@ init_logging(void)
}
if (pending_cb_messages == NULL)
pending_cb_messages = smartlist_new();
+ if (disable_startup_queue)
+ queue_startup_messages = 0;
+ if (pending_startup_messages == NULL && queue_startup_messages) {
+ pending_startup_messages = smartlist_new();
+ }
}
/** Set whether we report logging domains as a part of our log messages.
@@ -932,7 +1017,7 @@ flush_pending_log_callbacks(void)
messages = pending_cb_messages;
pending_cb_messages = smartlist_new();
do {
- SMARTLIST_FOREACH_BEGIN(messages, pending_cb_message_t *, msg) {
+ SMARTLIST_FOREACH_BEGIN(messages, pending_log_message_t *, msg) {
const int severity = msg->severity;
const int domain = msg->domain;
for (lf = logfiles; lf; lf = lf->next) {
@@ -942,8 +1027,7 @@ flush_pending_log_callbacks(void)
}
lf->callback(severity, domain, msg->msg);
}
- tor_free(msg->msg);
- tor_free(msg);
+ pending_log_message_free(msg);
} SMARTLIST_FOREACH_END(msg);
smartlist_clear(messages);
@@ -957,6 +1041,39 @@ flush_pending_log_callbacks(void)
UNLOCK_LOGS();
}
+/** Flush all the messages we stored from startup while waiting for log
+ * initialization.
+ */
+void
+flush_log_messages_from_startup(void)
+{
+ logfile_t *lf;
+
+ LOCK_LOGS();
+ queue_startup_messages = 0;
+ pending_startup_messages_len = 0;
+ if (! pending_startup_messages)
+ goto out;
+
+ SMARTLIST_FOREACH_BEGIN(pending_startup_messages, pending_log_message_t *,
+ msg) {
+ int callbacks_deferred = 0;
+ for (lf = logfiles; lf; lf = lf->next) {
+ if (! logfile_wants_message(lf, msg->severity, msg->domain))
+ continue;
+
+ logfile_deliver(lf, msg->fullmsg, strlen(msg->fullmsg), msg->msg,
+ msg->domain, msg->severity, &callbacks_deferred);
+ }
+ pending_log_message_free(msg);
+ } SMARTLIST_FOREACH_END(msg);
+ smartlist_free(pending_startup_messages);
+ pending_startup_messages = NULL;
+
+ out:
+ UNLOCK_LOGS();
+}
+
/** Close any log handlers added by add_temp_log() or marked by
* mark_logs_temp(). */
void
diff --git a/src/common/memarea.c b/src/common/memarea.c
index bcaea0949e..40c09bd0e6 100644
--- a/src/common/memarea.c
+++ b/src/common/memarea.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2013, The Tor Project, Inc. */
+/* Copyright (c) 2008-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/** \file memarea.c
diff --git a/src/common/memarea.h b/src/common/memarea.h
index 8b88585d35..fb261d11fa 100644
--- a/src/common/memarea.h
+++ b/src/common/memarea.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2013, The Tor Project, Inc. */
+/* Copyright (c) 2008-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Tor dependencies */
diff --git a/src/common/mempool.c b/src/common/mempool.c
index 4389888760..695a110d3d 100644
--- a/src/common/mempool.c
+++ b/src/common/mempool.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#if 1
/* Tor dependencies */
diff --git a/src/common/mempool.h b/src/common/mempool.h
index 0fc1e4c676..1e7a3121de 100644
--- a/src/common/mempool.h
+++ b/src/common/mempool.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/procmon.c b/src/common/procmon.c
index 7c9b7c3c88..ee27e97f79 100644
--- a/src/common/procmon.c
+++ b/src/common/procmon.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Tor Project, Inc. */
+/* Copyright (c) 2011-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/procmon.h b/src/common/procmon.h
index b9388e2e90..6c487648bb 100644
--- a/src/common/procmon.h
+++ b/src/common/procmon.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Tor Project, Inc. */
+/* Copyright (c) 2011-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
index c7e4dcdf55..ece56df81f 100644
--- a/src/common/sandbox.c
+++ b/src/common/sandbox.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1297,6 +1297,18 @@ HT_GENERATE2(getaddrinfo_cache, cached_getaddrinfo_item_t, node,
cached_getaddrinfo_items_eq,
0.6, tor_reallocarray_, tor_free_)
+/** If true, don't try to cache getaddrinfo results. */
+static int sandbox_getaddrinfo_cache_disabled = 0;
+
+/** Tell the sandbox layer not to try to cache getaddrinfo results. Used as in
+ * tor-resolve, when we have no intention of initializing crypto or of
+ * installing the sandbox.*/
+void
+sandbox_disable_getaddrinfo_cache(void)
+{
+ sandbox_getaddrinfo_cache_disabled = 1;
+}
+
int
sandbox_getaddrinfo(const char *name, const char *servname,
const struct addrinfo *hints,
@@ -1305,6 +1317,10 @@ sandbox_getaddrinfo(const char *name, const char *servname,
int err;
struct cached_getaddrinfo_item_t search, *item;
+ if (sandbox_getaddrinfo_cache_disabled) {
+ return getaddrinfo(name, NULL, hints, res);
+ }
+
if (servname != NULL) {
log_warn(LD_BUG, "called with non-NULL servname");
return EAI_NONAME;
@@ -1718,5 +1734,10 @@ sandbox_is_active(void)
{
return 0;
}
+
+void
+sandbox_disable_getaddrinfo_cache(void)
+{
+}
#endif
diff --git a/src/common/sandbox.h b/src/common/sandbox.h
index 095d8d47f4..ad001865a7 100644
--- a/src/common/sandbox.h
+++ b/src/common/sandbox.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -176,5 +176,7 @@ int sandbox_init(sandbox_cfg_t* cfg);
/** Return true iff the sandbox is turned on. */
int sandbox_is_active(void);
+void sandbox_disable_getaddrinfo_cache(void);
+
#endif /* SANDBOX_H_ */
diff --git a/src/common/testsupport.h b/src/common/testsupport.h
index 4a4f50b69b..2610086700 100644
--- a/src/common/testsupport.h
+++ b/src/common/testsupport.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_TESTSUPPORT_H
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index b4688bf9d8..4480e4b747 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -511,7 +511,7 @@ tor_zlib_process(tor_zlib_state_t *state,
case Z_STREAM_END:
return TOR_ZLIB_DONE;
case Z_BUF_ERROR:
- if (state->stream.avail_in == 0)
+ if (state->stream.avail_in == 0 && !finish)
return TOR_ZLIB_OK;
return TOR_ZLIB_BUF_FULL;
case Z_OK:
diff --git a/src/common/torgzip.h b/src/common/torgzip.h
index d407bf48c6..1378d55b76 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/torint.h b/src/common/torint.h
index b46f306668..d0b0ac14a0 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/torlog.h b/src/common/torlog.h
index 2ae8aa9075..483a97935f 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -123,7 +123,7 @@ typedef struct log_severity_list_t {
/** Callback type used for add_callback_log. */
typedef void (*log_callback)(int severity, uint32_t domain, const char *msg);
-void init_logging(void);
+void init_logging(int disable_startup_queue);
int parse_log_level(const char *level);
const char *log_level_to_string(int level);
int parse_log_severity_config(const char **cfg,
@@ -149,6 +149,7 @@ void mark_logs_temp(void);
void change_callback_log_severity(int loglevelMin, int loglevelMax,
log_callback cb);
void flush_pending_log_callbacks(void);
+void flush_log_messages_from_startup(void);
void log_set_application_name(const char *name);
void set_log_time_granularity(int granularity_msec);
void truncate_logs(void);
diff --git a/src/common/tortls.c b/src/common/tortls.c
index eda10bbe2e..cca2d420b6 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1170,6 +1170,9 @@ tor_tls_context_init_one(tor_tls_context_t **ppcontext,
return ((new_ctx != NULL) ? 0 : -1);
}
+/** The group we should use for ecdhe when none was selected. */
+#define NID_tor_default_ecdhe_group NID_X9_62_prime256v1
+
/** Create a new TLS context for use with Tor TLS handshakes.
* <b>identity</b> should be set to the identity key used to sign the
* certificate.
@@ -1240,10 +1243,11 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
goto error;
#endif
- /* Tell OpenSSL to use SSL3 or TLS1 but not SSL2. */
+ /* Tell OpenSSL to use TLS 1.0 or later but not SSL2 or SSL3. */
if (!(result->ctx = SSL_CTX_new(SSLv23_method())))
goto error;
SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2);
+ SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv3);
/* Prefer the server's ordering of ciphers: the client's ordering has
* historically been chosen for fingerprinting resistance. */
@@ -1282,6 +1286,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
}
#endif
+ /* XXX This block is now obsolete. */
if (
#ifdef DISABLE_SSL3_HANDSHAKE
1 ||
@@ -1363,7 +1368,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
else if (flags & TOR_TLS_CTX_USE_ECDHE_P256)
nid = NID_X9_62_prime256v1;
else
- nid = NID_X9_62_prime256v1;
+ nid = NID_tor_default_ecdhe_group;
/* Use P-256 for ECDHE. */
ec_key = EC_KEY_new_by_curve_name(nid);
if (ec_key != NULL) /*XXXX Handle errors? */
@@ -1463,6 +1468,43 @@ static uint16_t v2_cipher_list[] = {
/** Have we removed the unrecognized ciphers from v2_cipher_list yet? */
static int v2_cipher_list_pruned = 0;
+/** Return 0 if <b>m</b> does not support the cipher with ID <b>cipher</b>;
+ * return 1 if it does support it, or if we have no way to tell. */
+static int
+find_cipher_by_id(const SSL_METHOD *m, uint16_t cipher)
+{
+ const SSL_CIPHER *c;
+#ifdef HAVE_STRUCT_SSL_METHOD_ST_GET_CIPHER_BY_CHAR
+ if (m && m->get_cipher_by_char) {
+ unsigned char cipherid[3];
+ set_uint16(cipherid, htons(cipher));
+ 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. */
+ c = m->get_cipher_by_char(cipherid);
+ if (c)
+ tor_assert((c->id & 0xffff) == cipher);
+ return c != NULL;
+ } else
+#endif
+ if (m && m->get_cipher && m->num_ciphers) {
+ /* It would seem that some of the "let's-clean-up-openssl" forks have
+ * removed the get_cipher_by_char function. Okay, so now you get a
+ * quadratic search.
+ */
+ int i;
+ for (i = 0; i < m->num_ciphers(); ++i) {
+ c = m->get_cipher(i);
+ if (c && (c->id & 0xffff) == cipher) {
+ return 1;
+ }
+ }
+ return 0;
+ } else {
+ return 1; /* No way to search */
+ }
+}
+
/** 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. */
@@ -1474,16 +1516,7 @@ prune_v2_cipher_list(void)
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);
+ if (find_cipher_by_id(m, *inp)) {
*outp++ = *inp++;
} else {
inp++;
diff --git a/src/common/tortls.h b/src/common/tortls.h
index a76ba3bc7a..235d801202 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_TORTLS_H
diff --git a/src/common/util.c b/src/common/util.c
index f4d293c838..50097dac93 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -195,33 +195,40 @@ tor_malloc_zero_(size_t size DMALLOC_PARAMS)
return result;
}
+/* The square root of SIZE_MAX + 1. If a is less than this, and b is less
+ * than this, then a*b is less than SIZE_MAX. (For example, if size_t is
+ * 32 bits, then SIZE_MAX is 0xffffffff and this value is 0x10000. If a and
+ * b are less than this, then their product is at most (65535*65535) ==
+ * 0xfffe0001. */
+#define SQRT_SIZE_MAX_P1 (((size_t)1) << (sizeof(size_t)*4))
+
+/** Return non-zero if and only if the product of the arguments is exact. */
+static INLINE int
+size_mul_check(const size_t x, const size_t y)
+{
+ /* This first check is equivalent to
+ (x < SQRT_SIZE_MAX_P1 && y < SQRT_SIZE_MAX_P1)
+
+ Rationale: if either one of x or y is >= SQRT_SIZE_MAX_P1, then it
+ will have some bit set in its most significant half.
+ */
+ return ((x|y) < SQRT_SIZE_MAX_P1 ||
+ y == 0 ||
+ x <= SIZE_MAX / y);
+}
+
/** Allocate a chunk of <b>nmemb</b>*<b>size</b> bytes of memory, fill
* the memory with zero bytes, and return a pointer to the result.
* Log and terminate the process on error. (Same as
* calloc(<b>nmemb</b>,<b>size</b>), but never returns NULL.)
- *
- * XXXX This implementation probably asserts in cases where it could
- * work, because it only tries dividing SIZE_MAX by size (according to
- * the calloc(3) man page, the size of an element of the nmemb-element
- * array to be allocated), not by nmemb (which could in theory be
- * smaller than size). Don't do that then.
+ * The second argument (<b>size</b>) should preferably be non-zero
+ * and a compile-time constant.
*/
void *
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
- * we don't!" Indeed it does, but its optimizations are only a big win when
- * 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;
- size_t max_nmemb = (size == 0) ? SIZE_MAX : SIZE_MAX/size;
-
- tor_assert(nmemb < max_nmemb);
-
- result = tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS);
- return result;
+ tor_assert(size_mul_check(nmemb, size));
+ return tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS);
}
/** Change the size of the memory block pointed to by <b>ptr</b> to <b>size</b>
@@ -264,7 +271,7 @@ tor_reallocarray_(void *ptr, size_t sz1, size_t sz2 DMALLOC_PARAMS)
{
/* XXXX we can make this return 0, but we would need to check all the
* reallocarray users. */
- tor_assert(sz2 == 0 || sz1 < SIZE_T_CEILING / sz2);
+ tor_assert(size_mul_check(sz1, sz2));
return tor_realloc(ptr, (sz1 * sz2) DMALLOC_FN_ARGS);
}
@@ -957,6 +964,68 @@ string_is_key_value(int severity, const char *string)
return 1;
}
+/** Return true if <b>string</b> represents a valid IPv4 adddress in
+ * 'a.b.c.d' form.
+ */
+int
+string_is_valid_ipv4_address(const char *string)
+{
+ struct in_addr addr;
+
+ return (tor_inet_pton(AF_INET,string,&addr) == 1);
+}
+
+/** Return true if <b>string</b> represents a valid IPv6 address in
+ * a form that inet_pton() can parse.
+ */
+int
+string_is_valid_ipv6_address(const char *string)
+{
+ struct in6_addr addr;
+
+ return (tor_inet_pton(AF_INET6,string,&addr) == 1);
+}
+
+/** Return true iff <b>string</b> matches a pattern of DNS names
+ * that we allow Tor clients to connect to.
+ */
+int
+string_is_valid_hostname(const char *string)
+{
+ int result = 1;
+ smartlist_t *components;
+
+ components = smartlist_new();
+
+ smartlist_split_string(components,string,".",0,0);
+
+ SMARTLIST_FOREACH_BEGIN(components, char *, c) {
+ if (c[0] == '-') {
+ result = 0;
+ break;
+ }
+
+ do {
+ if ((*c >= 'a' && *c <= 'z') ||
+ (*c >= 'A' && *c <= 'Z') ||
+ (*c >= '0' && *c <= '9') ||
+ (*c == '-'))
+ c++;
+ else
+ result = 0;
+ } while (result && *c);
+
+ } SMARTLIST_FOREACH_END(c);
+
+ SMARTLIST_FOREACH_BEGIN(components, char *, c) {
+ tor_free(c);
+ } SMARTLIST_FOREACH_END(c);
+
+ smartlist_free(components);
+
+ return result;
+}
+
/** Return true iff the DIGEST256_LEN bytes in digest are all zero. */
int
tor_digest256_is_zero(const char *digest)
@@ -1376,7 +1445,8 @@ n_leapdays(int y1, int y2)
--y2;
return (y2/4 - y1/4) - (y2/100 - y1/100) + (y2/400 - y1/400);
}
-/** Number of days per month in non-leap year; used by tor_timegm. */
+/** Number of days per month in non-leap year; used by tor_timegm and
+ * parse_rfc1123_time. */
static const int days_per_month[] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
@@ -1390,10 +1460,32 @@ tor_timegm(const struct tm *tm, time_t *time_out)
* It's way more brute-force than fiddling with tzset().
*/
time_t year, days, hours, minutes, seconds;
- int i;
- year = tm->tm_year + 1900;
- if (year < 1970 || tm->tm_mon < 0 || tm->tm_mon > 11 ||
- tm->tm_year >= INT32_MAX-1900) {
+ int i, invalid_year, dpm;
+ /* avoid int overflow on addition */
+ if (tm->tm_year < INT32_MAX-1900) {
+ year = tm->tm_year + 1900;
+ } else {
+ /* clamp year */
+ year = INT32_MAX;
+ }
+ invalid_year = (year < 1970 || tm->tm_year >= INT32_MAX-1900);
+
+ if (tm->tm_mon >= 0 && tm->tm_mon <= 11) {
+ dpm = days_per_month[tm->tm_mon];
+ if (tm->tm_mon == 1 && !invalid_year && IS_LEAPYEAR(tm->tm_year)) {
+ dpm = 29;
+ }
+ } else {
+ /* invalid month - default to 0 days per month */
+ dpm = 0;
+ }
+
+ if (invalid_year ||
+ tm->tm_mon < 0 || tm->tm_mon > 11 ||
+ tm->tm_mday < 1 || tm->tm_mday > dpm ||
+ tm->tm_hour < 0 || tm->tm_hour > 23 ||
+ tm->tm_min < 0 || tm->tm_min > 59 ||
+ tm->tm_sec < 0 || tm->tm_sec > 60) {
log_warn(LD_BUG, "Out-of-range argument to tor_timegm");
return -1;
}
@@ -1457,8 +1549,9 @@ parse_rfc1123_time(const char *buf, time_t *t)
struct tm tm;
char month[4];
char weekday[4];
- int i, m;
+ int i, m, invalid_year;
unsigned tm_mday, tm_year, tm_hour, tm_min, tm_sec;
+ unsigned dpm;
if (strlen(buf) != RFC1123_TIME_LEN)
return -1;
@@ -1471,18 +1564,6 @@ parse_rfc1123_time(const char *buf, time_t *t)
tor_free(esc);
return -1;
}
- if (tm_mday < 1 || tm_mday > 31 || tm_hour > 23 || tm_min > 59 ||
- tm_sec > 60 || tm_year >= INT32_MAX || tm_year < 1970) {
- char *esc = esc_for_log(buf);
- log_warn(LD_GENERAL, "Got invalid RFC1123 time %s", esc);
- tor_free(esc);
- return -1;
- }
- tm.tm_mday = (int)tm_mday;
- tm.tm_year = (int)tm_year;
- tm.tm_hour = (int)tm_hour;
- tm.tm_min = (int)tm_min;
- tm.tm_sec = (int)tm_sec;
m = -1;
for (i = 0; i < 12; ++i) {
@@ -1499,6 +1580,26 @@ parse_rfc1123_time(const char *buf, time_t *t)
}
tm.tm_mon = m;
+ invalid_year = (tm_year >= INT32_MAX || tm_year < 1970);
+ tor_assert(m >= 0 && m <= 11);
+ dpm = days_per_month[m];
+ if (m == 1 && !invalid_year && IS_LEAPYEAR(tm_year)) {
+ dpm = 29;
+ }
+
+ if (invalid_year || tm_mday < 1 || tm_mday > dpm ||
+ tm_hour > 23 || tm_min > 59 || tm_sec > 60) {
+ char *esc = esc_for_log(buf);
+ log_warn(LD_GENERAL, "Got invalid RFC1123 time %s", esc);
+ tor_free(esc);
+ return -1;
+ }
+ tm.tm_mday = (int)tm_mday;
+ tm.tm_year = (int)tm_year;
+ tm.tm_hour = (int)tm_hour;
+ tm.tm_min = (int)tm_min;
+ tm.tm_sec = (int)tm_sec;
+
if (tm.tm_year < 1970) {
char *esc = esc_for_log(buf);
log_warn(LD_GENERAL,
@@ -1670,7 +1771,11 @@ format_time_interval(char *out, size_t out_len, long interval)
{
/* We only report seconds if there's no hours. */
long sec = 0, min = 0, hour = 0, day = 0;
- if (interval < 0)
+
+ /* -LONG_MIN is LONG_MAX + 1, which causes signed overflow */
+ if (interval < -LONG_MAX)
+ interval = LONG_MAX;
+ else if (interval < 0)
interval = -interval;
if (interval >= 86400) {
@@ -1890,8 +1995,12 @@ file_status(const char *fname)
* <b>check</b>&CPD_CHECK, and we think we can create it, return 0. Else
* return -1. If CPD_GROUP_OK is set, then it's okay if the directory
* is group-readable, but in all cases we create the directory mode 0700.
- * If CPD_CHECK_MODE_ONLY is set, then we don't alter the directory permissions
- * if they are too permissive: we just return -1.
+ * If CPD_GROUP_READ is set, existing directory behaves as CPD_GROUP_OK and
+ * if the directory is created it will use mode 0750 with group read
+ * permission. Group read privileges also assume execute permission
+ * as norm for directories. If CPD_CHECK_MODE_ONLY is set, then we don't
+ * alter the directory permissions if they are too permissive:
+ * we just return -1.
* When effective_user is not NULL, check permissions against the given user
* and its primary group.
*/
@@ -1903,7 +2012,7 @@ check_private_dir(const char *dirname, cpd_check_t check,
struct stat st;
char *f;
#ifndef _WIN32
- int mask;
+ unsigned unwanted_bits = 0;
const struct passwd *pw = NULL;
uid_t running_uid;
gid_t running_gid;
@@ -1928,7 +2037,11 @@ check_private_dir(const char *dirname, cpd_check_t check,
#if defined (_WIN32)
r = mkdir(dirname);
#else
- r = mkdir(dirname, 0700);
+ if (check & CPD_GROUP_READ) {
+ r = mkdir(dirname, 0750);
+ } else {
+ r = mkdir(dirname, 0700);
+ }
#endif
if (r) {
log_warn(LD_FS, "Error creating directory %s: %s", dirname,
@@ -1981,7 +2094,8 @@ check_private_dir(const char *dirname, cpd_check_t check,
tor_free(process_ownername);
return -1;
}
- if ((check & CPD_GROUP_OK) && st.st_gid != running_gid) {
+ if ( (check & (CPD_GROUP_OK|CPD_GROUP_READ))
+ && (st.st_gid != running_gid) ) {
struct group *gr;
char *process_groupname = NULL;
gr = getgrgid(running_gid);
@@ -1996,12 +2110,12 @@ check_private_dir(const char *dirname, cpd_check_t check,
tor_free(process_groupname);
return -1;
}
- if (check & CPD_GROUP_OK) {
- mask = 0027;
+ if (check & (CPD_GROUP_OK|CPD_GROUP_READ)) {
+ unwanted_bits = 0027;
} else {
- mask = 0077;
+ unwanted_bits = 0077;
}
- if (st.st_mode & mask) {
+ if ((st.st_mode & unwanted_bits) != 0) {
unsigned new_mode;
if (check & CPD_CHECK_MODE_ONLY) {
log_warn(LD_FS, "Permissions on directory %s are too permissive.",
@@ -2011,10 +2125,13 @@ check_private_dir(const char *dirname, cpd_check_t check,
log_warn(LD_FS, "Fixing permissions on directory %s", dirname);
new_mode = st.st_mode;
new_mode |= 0700; /* Owner should have rwx */
- new_mode &= ~mask; /* Clear the other bits that we didn't want set...*/
+ if (check & CPD_GROUP_READ) {
+ new_mode |= 0050; /* Group should have rx */
+ }
+ new_mode &= ~unwanted_bits; /* Clear the bits that we didn't want set...*/
if (chmod(dirname, new_mode)) {
log_warn(LD_FS, "Could not chmod directory %s: %s", dirname,
- strerror(errno));
+ strerror(errno));
return -1;
} else {
return 0;
@@ -3422,8 +3539,9 @@ format_win_cmdline_argument(const char *arg)
smartlist_add(arg_chars, (void*)&backslash);
/* Allocate space for argument, quotes (if needed), and terminator */
- formatted_arg = tor_calloc(sizeof(char),
- (smartlist_len(arg_chars) + (need_quotes ? 2 : 0) + 1));
+ const size_t formatted_arg_len = smartlist_len(arg_chars) +
+ (need_quotes ? 2 : 0) + 1;
+ formatted_arg = tor_malloc_zero(formatted_arg_len);
/* Add leading quote */
i=0;
@@ -5061,7 +5179,7 @@ tor_check_port_forwarding(const char *filename,
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_calloc(sizeof(char *), args_n);
+ argv = tor_calloc(args_n, sizeof(char *));
argv[argv_index++] = filename;
SMARTLIST_FOREACH_BEGIN(ports_to_forward, const char *, port) {
diff --git a/src/common/util.h b/src/common/util.h
index 61bb05f016..921dd79da0 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -227,6 +227,9 @@ 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 string_is_valid_hostname(const char *string);
+int string_is_valid_ipv4_address(const char *string);
+int string_is_valid_ipv6_address(const char *string);
int tor_mem_is_zero(const char *mem, size_t len);
int tor_digest_is_zero(const char *digest);
@@ -344,9 +347,11 @@ typedef unsigned int cpd_check_t;
#define CPD_CREATE 1
#define CPD_CHECK 2
#define CPD_GROUP_OK 4
-#define CPD_CHECK_MODE_ONLY 8
+#define CPD_GROUP_READ 8
+#define CPD_CHECK_MODE_ONLY 16
int check_private_dir(const char *dirname, cpd_check_t check,
const char *effective_user);
+
#define OPEN_FLAGS_REPLACE (O_WRONLY|O_CREAT|O_TRUNC)
#define OPEN_FLAGS_APPEND (O_WRONLY|O_CREAT|O_APPEND)
#define OPEN_FLAGS_DONT_REPLACE (O_CREAT|O_EXCL|O_APPEND|O_WRONLY)
diff --git a/src/common/util_process.c b/src/common/util_process.c
index a6a2a9dcd9..1924c19509 100644
--- a/src/common/util_process.c
+++ b/src/common/util_process.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/util_process.h b/src/common/util_process.h
index 0b268b85d3..e7c55ed33d 100644
--- a/src/common/util_process.h
+++ b/src/common/util_process.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Tor Project, Inc. */
+/* Copyright (c) 2011-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/config/geoip b/src/config/geoip
index 28cb59ecb7..6fc1a4a753 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on August 7 2014 Maxmind GeoLite2 Country
+# Last updated based on November 15 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
@@ -16,7 +16,7 @@
16859136,16875519,JP
16875520,16908287,TH
16908288,16909055,CN
-16909056,16909311,AU
+16909056,16909311,US
16909312,16941055,CN
16941056,16973823,TH
16973824,17039359,CN
@@ -71,7 +71,7 @@
29949952,30015487,KR
30015488,30408703,CN
30408704,33554431,KR
-33554432,33554432,DE
+33554432,33554432,RU
33554433,34603007,FR
34604544,34605055,DE
34612224,34612735,IL
@@ -131,9 +131,7 @@
36700160,36962303,AE
36962304,37224447,IL
37486592,37748735,RU
-37748736,38258687,SE
-38258688,38258943,DK
-38258944,38273023,SE
+37748736,38273023,SE
38273024,38797311,KZ
38797312,39059455,PT
39059456,39321599,GR
@@ -166,9 +164,9 @@
57083941,57083941,BE
57083942,68305407,US
68305408,68305919,MX
-68305920,69094399,US
-69094400,69094655,AU
-69094656,71020543,US
+68305920,68973055,US
+68973056,68973311,CA
+68973312,71020543,US
71020544,71020799,CA
71020800,71571339,US
71571340,71571340,DE
@@ -207,7 +205,9 @@
83961856,83963903,CY
83963904,83965951,RU
83965952,83967999,CZ
-83968000,83976191,DE
+83968000,83972863,DE
+83972864,83973119,GB
+83973120,83976191,DE
83976192,83978239,CH
83978240,83980287,IQ
83980288,83982335,CH
@@ -223,9 +223,7 @@
84049920,84082687,RO
84082688,84148223,RU
84148224,84410367,DE
-84410368,84418559,RU
-84418560,84420607,GB
-84420608,84434943,RU
+84410368,84434943,RU
84434944,84443135,IT
84443136,84451327,LB
84451328,84457471,RU
@@ -237,101 +235,8 @@
84545536,84549631,GB
84549632,84551679,GE
84551680,84557823,DE
-84557824,84557824,NL
-84557825,84557825,US
-84557826,84558063,NL
-84558064,84558071,US
-84558072,84558879,NL
-84558880,84558887,US
-84558888,84560635,NL
-84560636,84560639,US
-84560640,84561063,NL
-84561064,84561071,US
-84561072,84561215,NL
-84561216,84561247,US
-84561248,84561351,NL
-84561352,84561359,MY
-84561360,84561639,NL
-84561640,84561647,ES
-84561648,84561655,AF
-84561656,84561727,NL
-84561728,84561791,US
-84561792,84562383,NL
-84562384,84562391,US
-84562392,84562511,NL
-84562512,84562527,US
-84562528,84563647,NL
-84563648,84563655,US
-84563656,84563691,NL
-84563692,84563695,GB
-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,84566303,NL
-84566304,84566319,US
-84566320,84566383,NL
-84566384,84566415,US
-84566416,84566420,NL
-84566421,84566421,US
-84566422,84566495,NL
-84566496,84566527,US
-84566528,84566567,NL
-84566568,84566583,US
-84566584,84566591,NL
-84566592,84566687,US
-84566688,84566719,NL
-84566720,84566743,US
-84566744,84567039,NL
-84567040,84567055,US
-84567056,84567071,NL
-84567072,84567103,US
-84567104,84567119,NL
-84567120,84567135,US
-84567136,84567199,NL
-84567200,84567231,US
-84567232,84567375,NL
-84567376,84567391,US
-84567392,84567535,NL
-84567536,84567551,US
-84567552,84567599,NL
-84567600,84567615,US
-84567616,84567647,NL
-84567648,84567679,US
-84567680,84567903,NL
-84567904,84567919,US
-84567920,84567999,NL
-84568000,84568015,US
-84568016,84568223,NL
-84568224,84568239,US
-84568240,84568255,GB
-84568256,84568287,NL
-84568288,84568303,US
-84568304,84568351,NL
-84568352,84568399,US
-84568400,84568591,NL
-84568592,84568607,GB
-84568608,84568847,NL
-84568848,84568863,US
-84568864,84568927,NL
-84568928,84568943,GB
-84568944,84568991,NL
-84568992,84569023,GB
-84569024,84569119,NL
-84569120,84569135,US
-84569136,84569183,NL
-84569184,84569199,US
-84569200,84570127,NL
-84570128,84570143,US
-84570144,84574207,NL
+84557824,84566015,NL
+84566016,84574207,GB
84574208,84576255,FR
84576256,84582399,GB
84582400,84590591,DE
@@ -430,11 +335,22 @@
86245376,86376447,OM
86376448,86409215,AE
86409216,86441983,HU
-86441984,86442495,FR
+86441984,86442255,FR
+86442256,86442271,GB
+86442272,86442359,FR
+86442360,86442367,BE
+86442368,86442399,ES
+86442400,86442415,FR
+86442416,86442431,GB
+86442432,86442495,FR
86442496,86442499,ES
86442500,86442507,FR
86442508,86442511,ES
-86442512,86442687,FR
+86442512,86442583,FR
+86442584,86442591,ES
+86442592,86442599,IT
+86442600,86442603,ES
+86442604,86442687,FR
86442688,86442691,ES
86442692,86442699,FR
86442700,86442700,ES
@@ -448,158 +364,535 @@
86442752,86443007,GB
86443008,86443047,FR
86443048,86443051,ES
-86443052,86443451,FR
+86443052,86443055,GB
+86443056,86443103,FR
+86443104,86443135,GB
+86443136,86443183,FR
+86443184,86443199,PL
+86443200,86443295,FR
+86443296,86443311,ES
+86443312,86443363,FR
+86443364,86443367,IT
+86443368,86443423,FR
+86443424,86443427,IT
+86443428,86443431,IE
+86443432,86443451,FR
86443452,86443455,ES
-86443456,86443535,FR
+86443456,86443487,NL
+86443488,86443503,ES
+86443504,86443507,IT
+86443508,86443535,FR
86443536,86443539,ES
-86443540,86444119,FR
+86443540,86443567,FR
+86443568,86443575,IE
+86443576,86443823,FR
+86443824,86443839,PT
+86443840,86443887,FR
+86443888,86443903,DE
+86443904,86443995,FR
+86443996,86443999,PT
+86444000,86444079,FR
+86444080,86444095,GB
+86444096,86444119,FR
86444120,86444123,ES
-86444124,86444287,FR
+86444124,86444127,FR
+86444128,86444143,BE
+86444144,86444287,FR
86444288,86444291,NL
-86444292,86444315,FR
+86444292,86444303,FR
+86444304,86444307,DE
+86444308,86444311,PL
+86444312,86444315,FR
86444316,86444323,ES
-86444324,86444387,FR
+86444324,86444351,FR
+86444352,86444367,NL
+86444368,86444387,FR
86444388,86444391,NL
-86444392,86444519,FR
+86444392,86444395,FR
+86444396,86444399,GB
+86444400,86444447,FR
+86444448,86444479,ES
+86444480,86444519,FR
86444520,86444523,ES
-86444524,86444563,FR
+86444524,86444527,FR
+86444528,86444543,ES
+86444544,86444555,FR
+86444556,86444559,PL
+86444560,86444563,FR
86444564,86444567,NL
86444568,86444575,FR
86444576,86444579,ES
-86444580,86444687,FR
+86444580,86444587,FR
+86444588,86444599,IT
+86444600,86444607,FR
+86444608,86444623,IT
+86444624,86444639,FR
+86444640,86444655,GB
+86444656,86444687,FR
86444688,86444691,ES
-86444692,86444835,FR
+86444692,86444703,FR
+86444704,86444719,ES
+86444720,86444799,FR
+86444800,86444815,PL
+86444816,86444835,FR
86444836,86444839,NL
86444840,86444843,ES
-86444844,86444879,FR
+86444844,86444875,FR
+86444876,86444879,CH
86444880,86444883,NL
86444884,86444895,FR
86444896,86444903,NL
-86444904,86445059,FR
+86444904,86444959,FR
+86444960,86444967,GB
+86444968,86445059,FR
86445060,86445063,NL
-86445064,86445111,FR
+86445064,86445071,FR
+86445072,86445087,PL
+86445088,86445111,FR
86445112,86445115,NL
-86445116,86445251,FR
+86445116,86445119,FR
+86445120,86445151,ES
+86445152,86445215,FR
+86445216,86445231,CH
+86445232,86445235,IT
+86445236,86445251,FR
86445252,86445255,NL
-86445256,86445559,FR
+86445256,86445291,FR
+86445292,86445295,DE
+86445296,86445343,FR
+86445344,86445351,FI
+86445352,86445423,FR
+86445424,86445431,GB
+86445432,86445519,FR
+86445520,86445527,ES
+86445528,86445559,FR
86445560,86445563,NL
-86445564,86446407,FR
+86445564,86445711,FR
+86445712,86445727,PL
+86445728,86445743,FR
+86445744,86445759,DE
+86445760,86445891,FR
+86445892,86445895,ES
+86445896,86445939,FR
+86445940,86445943,NL
+86445944,86445983,FR
+86445984,86445999,IT
+86446000,86446027,FR
+86446028,86446031,IT
+86446032,86446039,FR
+86446040,86446043,IE
+86446044,86446063,FR
+86446064,86446079,IT
+86446080,86446143,FR
+86446144,86446175,NL
+86446176,86446335,FR
+86446336,86446367,IE
+86446368,86446399,GB
+86446400,86446407,FR
86446408,86446408,DE
86446409,86446411,FR
86446412,86446412,DE
86446413,86446427,FR
86446428,86446431,DE
-86446432,86446619,FR
+86446432,86446463,FR
+86446464,86446495,ES
+86446496,86446527,CH
+86446528,86446551,FR
+86446552,86446555,NL
+86446556,86446611,FR
+86446612,86446615,ES
+86446616,86446619,FR
86446620,86446620,DE
-86446621,86446679,FR
+86446621,86446655,FR
+86446656,86446671,GB
+86446672,86446675,FR
+86446676,86446679,BE
86446680,86446683,ES
-86446684,86446719,FR
+86446684,86446711,FR
+86446712,86446719,DE
86446720,86446727,NL
-86446728,86446983,FR
+86446728,86446735,FR
+86446736,86446743,ES
+86446744,86446779,FR
+86446780,86446783,PL
+86446784,86446887,FR
+86446888,86446895,IT
+86446896,86446983,FR
86446984,86446991,IT
-86446992,86447095,FR
+86446992,86447011,FR
+86447012,86447015,ES
+86447016,86447023,FR
+86447024,86447027,IE
+86447028,86447031,FR
+86447032,86447039,ES
+86447040,86447047,PT
+86447048,86447071,FR
+86447072,86447087,DE
+86447088,86447095,FR
86447096,86447103,ES
-86447104,86447255,FR
+86447104,86447147,FR
+86447148,86447151,ES
+86447152,86447231,FR
+86447232,86447239,PL
+86447240,86447255,FR
86447256,86447263,PL
-86447264,86447279,FR
+86447264,86447267,FR
+86447268,86447271,IE
+86447272,86447279,FR
86447280,86447280,DE
86447281,86447287,FR
86447288,86447288,DE
-86447289,86448803,FR
+86447289,86447339,FR
+86447340,86447343,IT
+86447344,86447355,FR
+86447356,86447359,CH
+86447360,86447847,FR
+86447848,86447855,ES
+86447856,86448287,FR
+86448288,86448319,GB
+86448320,86448351,ES
+86448352,86448487,FR
+86448488,86448495,GB
+86448496,86448511,FR
+86448512,86448527,IT
+86448528,86448671,FR
+86448672,86448687,DE
+86448688,86448803,FR
86448804,86448807,FI
86448808,86448851,FR
86448852,86448855,IT
86448856,86448859,PT
-86448860,86449363,FR
+86448860,86449167,FR
+86449168,86449183,ES
+86449184,86449291,FR
+86449292,86449295,PL
+86449296,86449311,FR
+86449312,86449343,ES
+86449344,86449363,FR
86449364,86449367,DE
-86449368,86449499,FR
+86449368,86449375,FR
+86449376,86449379,PL
+86449380,86449383,FR
+86449384,86449387,DE
+86449388,86449471,FR
+86449472,86449475,GB
+86449476,86449499,FR
86449500,86449503,ES
-86449504,86449883,FR
+86449504,86449563,FR
+86449564,86449567,PL
+86449568,86449599,FR
+86449600,86449631,ES
+86449632,86449867,FR
+86449868,86449871,DE
+86449872,86449883,FR
86449884,86449884,DE
-86449885,86450235,FR
+86449885,86450019,FR
+86450020,86450023,IT
+86450024,86450047,FR
+86450048,86450079,IT
+86450080,86450111,FR
+86450112,86450115,IT
+86450116,86450119,FR
+86450120,86450127,IT
+86450128,86450143,FR
+86450144,86450159,ES
+86450160,86450167,FR
+86450168,86450171,DE
+86450172,86450235,FR
86450236,86450239,GB
-86450240,86451167,FR
+86450240,86450339,FR
+86450340,86450343,NL
+86450344,86450351,DE
+86450352,86450371,FR
+86450372,86450375,BE
+86450376,86450439,FR
+86450440,86450447,ES
+86450448,86450527,FR
+86450528,86450559,PT
+86450560,86450591,BE
+86450592,86450607,FR
+86450608,86450615,CZ
+86450616,86450671,FR
+86450672,86450687,GB
+86450688,86450847,FR
+86450848,86450863,PT
+86450864,86450867,FR
+86450868,86450871,ES
+86450872,86450943,FR
+86450944,86450975,IT
+86450976,86451167,FR
86451168,86451175,NL
-86451176,86452067,FR
+86451176,86451183,PL
+86451184,86451199,ES
+86451200,86451259,FR
+86451260,86451263,IT
+86451264,86451359,FR
+86451360,86451363,ES
+86451364,86451375,FR
+86451376,86451391,LT
+86451392,86451407,IT
+86451408,86451411,IE
+86451412,86451463,FR
+86451464,86451467,CH
+86451468,86451663,FR
+86451664,86451667,DE
+86451668,86451675,FR
+86451676,86451687,PL
+86451688,86451695,DE
+86451696,86451887,FR
+86451888,86451895,ES
+86451896,86451903,FR
+86451904,86451967,NL
+86451968,86452055,FR
+86452056,86452059,NL
+86452060,86452067,FR
86452068,86452071,ES
-86452072,86452299,FR
+86452072,86452215,FR
+86452216,86452223,IT
+86452224,86452263,FR
+86452264,86452267,ES
+86452268,86452279,FR
+86452280,86452283,ES
+86452284,86452287,DE
+86452288,86452291,IT
+86452292,86452299,FR
86452300,86452303,IT
-86452304,86452671,FR
+86452304,86452399,FR
+86452400,86452415,GB
+86452416,86452671,FR
86452672,86452735,GB
-86452736,86453199,FR
+86452736,86452943,FR
+86452944,86452959,GB
+86452960,86453031,FR
+86453032,86453039,ES
+86453040,86453135,FR
+86453136,86453151,PT
+86453152,86453199,FR
86453200,86453203,ES
-86453204,86453311,FR
+86453204,86453215,FR
+86453216,86453231,BE
+86453232,86453247,FR
+86453248,86453251,IT
+86453252,86453311,FR
86453312,86453315,ES
-86453316,86453836,FR
+86453316,86453379,FR
+86453380,86453383,ES
+86453384,86453391,FR
+86453392,86453399,GB
+86453400,86453503,FR
+86453504,86453631,GB
+86453632,86453791,FR
+86453792,86453807,FI
+86453808,86453823,FR
+86453824,86453836,IT
86453837,86453838,PT
-86453839,86454187,FR
+86453839,86453839,IT
+86453840,86453847,FR
+86453848,86453851,ES
+86453852,86454015,FR
+86454016,86454047,PL
+86454048,86454119,FR
+86454120,86454123,DE
+86454124,86454187,FR
86454188,86454191,IT
-86454192,86454279,FR
+86454192,86454271,FR
+86454272,86454279,GB
86454280,86454287,ES
86454288,86454295,IT
-86454296,86454335,FR
+86454296,86454299,FR
+86454300,86454303,DE
+86454304,86454335,FR
86454336,86454343,DE
-86454344,86454615,FR
+86454344,86454351,FR
+86454352,86454367,CH
+86454368,86454559,FR
+86454560,86454591,CZ
+86454592,86454607,PT
+86454608,86454611,NL
+86454612,86454615,PL
86454616,86454619,ES
-86454620,86454823,FR
+86454620,86454655,FR
+86454656,86454671,IT
+86454672,86454703,FR
+86454704,86454707,PL
+86454708,86454715,FR
+86454716,86454719,CZ
+86454720,86454823,FR
86454824,86454831,ES
-86454832,86455623,FR
+86454832,86454863,FR
+86454864,86454867,DE
+86454868,86454927,FR
+86454928,86454943,GB
+86454944,86454959,ES
+86454960,86455103,FR
+86455104,86455135,DE
+86455136,86455167,FR
+86455168,86455199,GB
+86455200,86455231,ES
+86455232,86455263,GB
+86455264,86455439,FR
+86455440,86455455,CH
+86455456,86455519,FR
+86455520,86455551,BE
+86455552,86455591,FR
+86455592,86455595,NL
+86455596,86455623,FR
86455624,86455624,DE
-86455625,86456195,FR
-86456196,86456211,DE
-86456212,86456351,FR
+86455625,86455839,FR
+86455840,86455871,DE
+86455872,86455967,FR
+86455968,86455999,PL
+86456000,86456015,FI
+86456016,86456087,FR
+86456088,86456091,CZ
+86456092,86456127,FR
+86456128,86456143,GB
+86456144,86456159,FR
+86456160,86456191,NL
+86456192,86456195,FR
+86456196,86456215,DE
+86456216,86456279,FR
+86456280,86456283,DE
+86456284,86456335,FR
+86456336,86456351,IE
86456352,86456367,CH
86456368,86456371,FR
86456372,86456375,ES
-86456376,86457059,FR
+86456376,86456575,FR
+86456576,86456831,DE
+86456832,86457055,FR
+86457056,86457059,NL
86457060,86457060,DE
86457061,86457087,FR
86457088,86457091,DE
86457092,86457111,FR
86457112,86457112,DE
-86457113,86457187,FR
+86457113,86457175,FR
+86457176,86457179,GB
+86457180,86457187,FR
86457188,86457191,ES
-86457192,86457403,FR
+86457192,86457231,FR
+86457232,86457235,PT
+86457236,86457239,PL
+86457240,86457243,DE
+86457244,86457311,FR
+86457312,86457327,CH
+86457328,86457391,FR
+86457392,86457395,BE
+86457396,86457403,FR
86457404,86457407,ES
86457408,86457455,FR
86457456,86457456,DE
-86457457,86457799,FR
+86457457,86457615,FR
+86457616,86457623,IE
+86457624,86457631,FR
+86457632,86457647,ES
+86457648,86457711,FR
+86457712,86457727,ES
+86457728,86457799,FR
86457800,86457803,ES
-86457804,86466839,FR
+86457804,86457807,FR
+86457808,86457811,ES
+86457812,86458159,FR
+86458160,86458175,DE
+86458176,86466603,FR
+86466604,86466607,ES
+86466608,86466623,FR
+86466624,86466639,ES
+86466640,86466839,FR
86466840,86466847,NL
-86466848,86467320,FR
+86466848,86466879,FR
+86466880,86466943,GB
+86466944,86466959,DE
+86466960,86467039,FR
+86467040,86467055,IT
+86467056,86467059,GB
+86467060,86467219,FR
+86467220,86467223,DE
+86467224,86467291,FR
+86467292,86467295,LT
+86467296,86467320,FR
86467321,86467321,FI
-86467322,86467999,FR
+86467322,86467455,FR
+86467456,86467487,GB
+86467488,86467551,FR
+86467552,86467583,PT
+86467584,86467903,FR
+86467904,86467935,GB
+86467936,86467999,FR
86468000,86468003,PL
-86468004,86468055,FR
+86468004,86468043,FR
+86468044,86468047,DE
+86468048,86468055,FR
86468056,86468056,DE
86468057,86468447,FR
86468448,86468479,CZ
86468480,86468587,FR
86468588,86468591,ES
-86468592,86469183,FR
+86468592,86468759,FR
+86468760,86468763,IT
+86468764,86469183,FR
86469184,86469247,GB
-86469248,86469691,FR
+86469248,86469375,FR
+86469376,86469631,BE
+86469632,86469691,FR
86469692,86469695,DE
86469696,86469779,FR
86469780,86469783,IT
-86469784,86470731,FR
+86469784,86469863,FR
+86469864,86469867,GB
+86469868,86469919,FR
+86469920,86469935,PT
+86469936,86470207,FR
+86470208,86470239,FI
+86470240,86470271,GB
+86470272,86470279,FR
+86470280,86470287,PL
+86470288,86470351,FR
+86470352,86470359,IT
+86470360,86470731,FR
86470732,86470735,BE
-86470736,86471179,FR
+86470736,86470959,FR
+86470960,86470967,IT
+86470968,86471095,FR
+86471096,86471099,ES
+86471100,86471179,FR
86471180,86471180,DE
-86471181,86473087,FR
+86471181,86471807,FR
+86471808,86471839,CH
+86471840,86471871,GB
+86471872,86471935,ES
+86471936,86471995,FR
+86471996,86471999,DE
+86472000,86472095,FR
+86472096,86472127,GB
+86472128,86472291,FR
+86472292,86472295,GB
+86472296,86472415,FR
+86472416,86472431,ES
+86472432,86472479,FR
+86472480,86472495,PL
+86472496,86473087,FR
86473088,86473151,PT
-86473152,86473359,FR
+86473152,86473215,FR
+86473216,86473247,DE
+86473248,86473359,FR
86473360,86473363,IT
86473364,86473423,FR
86473424,86473427,NL
-86473428,86474307,FR
-86474308,86474311,DE
+86473428,86473983,FR
+86473984,86474047,IT
+86474048,86474143,FR
+86474144,86474151,GB
+86474152,86474303,FR
+86474304,86474311,DE
86474312,86474475,FR
86474476,86474479,DE
86474480,86474527,FR
86474528,86474531,DE
-86474532,86474751,FR
+86474532,86474743,FR
+86474744,86474747,LT
+86474748,86474751,FR
86474752,86482943,HR
86482944,86484991,RU
86484992,86487039,NL
@@ -615,10 +908,9 @@
86507520,86573055,ES
86573056,86638591,RO
86638592,86671359,RU
-86671360,86671615,JE
-86671616,86671871,GB
-86671872,86672895,JE
-86672896,86673407,GB
+86671360,86672895,JE
+86672896,86673151,GB
+86673152,86673407,JE
86673408,86675455,DE
86675456,86677503,IT
86677504,86687743,FR
@@ -717,23 +1009,15 @@
87638016,87640063,UA
87640064,87642111,RS
87642112,87646207,GB
-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
+87646208,87647999,FR
+87648000,87648255,RE
+87648256,87651839,FR
+87651840,87652095,RE
+87652096,87652351,FR
+87652352,87652863,RE
+87652864,87653375,FR
+87653376,87653887,RE
+87653888,87654399,FR
87654400,87670783,PL
87670784,87672831,DE
87672832,87674879,CH
@@ -797,9 +1081,7 @@
88940544,88948735,GB
88948736,88965119,IT
88965120,88997887,AM
-88997888,89028607,DE
-89028608,89031167,US
-89031168,89063423,DE
+88997888,89063423,DE
89063424,89079807,GB
89079808,89096191,NL
89096192,89128959,RU
@@ -843,12 +1125,15 @@
90544128,90546175,RU
90546176,90548223,DE
90548224,90550271,GB
-90550272,90570751,RU
+90550272,90554367,EE
+90554368,90570751,RU
90570752,90578943,IT
90578944,90583039,IR
90583040,90587135,CZ
90587136,90589183,PL
-90589184,90591231,FR
+90589184,90589439,FR
+90589440,90589695,RE
+90589696,90591231,FR
90591232,90595327,GB
90595328,90603519,PS
90603520,90605567,ES
@@ -891,7 +1176,8 @@
90764800,90765311,IL
90765312,90767359,PL
90767360,90832895,UA
-90832896,90963967,RO
+90832896,90898431,IR
+90898432,90963967,AE
90963968,91226111,SA
91226112,92274687,IR
92274688,92536831,RU
@@ -929,15 +1215,50 @@
92721152,92723199,PL
92723200,92725247,RU
92725248,92733439,SY
-92733440,92734515,FR
+92733440,92733503,FR
+92733504,92733535,PL
+92733536,92733743,FR
+92733744,92733751,IT
+92733752,92733775,FR
+92733776,92733783,DE
+92733784,92733791,FR
+92733792,92733807,PT
+92733808,92733927,FR
+92733928,92733931,BE
+92733932,92734255,FR
+92734256,92734271,DE
+92734272,92734307,FR
+92734308,92734311,ES
+92734312,92734515,FR
92734516,92734519,IT
-92734520,92734735,FR
+92734520,92734639,FR
+92734640,92734655,ES
+92734656,92734671,FR
+92734672,92734687,IT
+92734688,92734735,FR
92734736,92734739,DE
-92734740,92735615,FR
+92734740,92734879,FR
+92734880,92734895,IT
+92734896,92734943,FR
+92734944,92734975,BE
+92734976,92735263,FR
+92735264,92735295,CZ
+92735296,92735343,FR
+92735344,92735347,GB
+92735348,92735439,FR
+92735440,92735455,ES
+92735456,92735471,FR
+92735472,92735479,IT
+92735480,92735535,FR
+92735536,92735543,PL
+92735544,92735583,FR
+92735584,92735615,FI
92735616,92735616,DE
92735617,92735619,FR
92735620,92735623,ES
-92735624,92735823,FR
+92735624,92735679,FR
+92735680,92735711,NL
+92735712,92735823,FR
92735824,92735827,ES
92735828,92735875,FR
92735876,92735876,DE
@@ -945,73 +1266,632 @@
92736000,92736255,GB
92736256,92736479,FR
92736480,92736480,DE
-92736481,92738663,FR
+92736481,92736571,FR
+92736572,92736575,NL
+92736576,92736863,FR
+92736864,92736895,PL
+92736896,92737247,FR
+92737248,92737279,NL
+92737280,92737343,FR
+92737344,92737375,ES
+92737376,92737407,FR
+92737408,92737439,CH
+92737440,92737471,FR
+92737472,92737503,ES
+92737504,92737631,FR
+92737632,92737647,NL
+92737648,92738479,FR
+92738480,92738487,IT
+92738488,92738511,FR
+92738512,92738515,ES
+92738516,92738559,FR
+92738560,92738591,DE
+92738592,92738611,FR
+92738612,92738615,FI
+92738616,92738663,FR
92738664,92738679,ES
-92738680,92738719,FR
-92738720,92738727,GB
-92738728,92740447,FR
+92738680,92739355,FR
+92739356,92739359,ES
+92739360,92739503,FR
+92739504,92739507,IT
+92739508,92739839,FR
+92739840,92739903,PT
+92739904,92739967,FR
+92739968,92740031,PL
+92740032,92740095,FR
+92740096,92740127,PL
+92740128,92740287,FR
+92740288,92740351,IE
+92740352,92740447,FR
92740448,92740455,IT
-92740456,92741203,FR
+92740456,92740639,FR
+92740640,92740671,CZ
+92740672,92740767,FR
+92740768,92740815,PL
+92740816,92740831,FR
+92740832,92740847,ES
+92740848,92741203,FR
92741204,92741207,IT
-92741208,92741387,FR
+92741208,92741343,FR
+92741344,92741351,IT
+92741352,92741387,FR
92741388,92741395,IT
-92741396,92742347,FR
+92741396,92741431,FR
+92741432,92741439,IE
+92741440,92741471,FR
+92741472,92741503,CZ
+92741504,92741791,FR
+92741792,92741823,IT
+92741824,92742207,FR
+92742208,92742247,GB
+92742248,92742347,FR
92742348,92742351,IT
-92742352,92742415,FR
+92742352,92742367,FR
+92742368,92742399,GB
+92742400,92742415,BE
92742416,92742419,IT
-92742420,92742487,FR
+92742420,92742431,FR
+92742432,92742463,PT
+92742464,92742487,FR
92742488,92742491,IT
-92742492,92742691,FR
+92742492,92742527,FR
+92742528,92742543,IT
+92742544,92742687,FR
+92742688,92742691,IE
92742692,92742695,IT
-92742696,92742815,FR
+92742696,92742703,ES
+92742704,92742815,FR
92742816,92742819,ES
-92742820,92743243,FR
+92742820,92743215,FR
+92743216,92743231,BE
+92743232,92743243,FR
92743244,92743247,IT
-92743248,92743303,FR
-92743304,92743307,IT
+92743248,92743263,FR
+92743264,92743279,GB
+92743280,92743295,ES
+92743296,92743307,IT
92743308,92743311,FR
92743312,92743315,IT
92743316,92743355,FR
92743356,92743359,IT
-92743360,92743611,FR
+92743360,92743503,FR
+92743504,92743519,IT
+92743520,92743535,FR
+92743536,92743551,ES
+92743552,92743611,FR
92743612,92743615,IT
-92743616,92743955,FR
+92743616,92743631,FR
+92743632,92743639,IT
+92743640,92743643,ES
+92743644,92743663,FR
+92743664,92743671,IT
+92743672,92743955,FR
92743956,92743959,IT
-92743960,92744243,FR
+92743960,92744111,FR
+92744112,92744119,PL
+92744120,92744123,FR
+92744124,92744127,GB
+92744128,92744159,IT
+92744160,92744175,FR
+92744176,92744191,DE
+92744192,92744223,FR
+92744224,92744227,DE
+92744228,92744243,FR
92744244,92744247,NL
92744248,92744263,FR
92744264,92744267,NL
92744268,92744283,FR
92744284,92744291,NL
-92744292,92744555,FR
+92744292,92744295,ES
+92744296,92744351,FR
+92744352,92744367,BE
+92744368,92744479,FR
+92744480,92744511,GB
+92744512,92744543,FR
+92744544,92744547,BE
+92744548,92744551,FR
+92744552,92744555,ES
92744556,92744559,IT
-92744560,92747711,FR
+92744560,92744719,FR
+92744720,92744735,BE
+92744736,92744743,GB
+92744744,92744767,FR
+92744768,92744799,NL
+92744800,92744895,FR
+92744896,92744927,IT
+92744928,92744935,CZ
+92744936,92744943,CH
+92744944,92744959,FR
+92744960,92744975,PL
+92744976,92745071,FR
+92745072,92745087,ES
+92745088,92745375,FR
+92745376,92745391,IT
+92745392,92745399,FR
+92745400,92745407,ES
+92745408,92745439,IE
+92745440,92745471,NL
+92745472,92745503,FR
+92745504,92745535,DE
+92745536,92745663,FR
+92745664,92745695,IT
+92745696,92745807,FR
+92745808,92745823,NL
+92745824,92745871,FR
+92745872,92745887,IT
+92745888,92746303,FR
+92746304,92746335,GB
+92746336,92746383,FR
+92746384,92746399,CZ
+92746400,92746415,FR
+92746416,92746431,ES
+92746432,92746559,FR
+92746560,92746623,GB
+92746624,92746639,BE
+92746640,92747199,FR
+92747200,92747231,GB
+92747232,92747255,FR
+92747256,92747263,PL
+92747264,92747267,NL
+92747268,92747327,FR
+92747328,92747335,BE
+92747336,92747343,FR
+92747344,92747347,ES
+92747348,92747539,FR
+92747540,92747543,CH
+92747544,92747547,FR
+92747548,92747551,ES
+92747552,92747567,FR
+92747568,92747583,BE
+92747584,92747687,FR
+92747688,92747691,NL
+92747692,92747699,FR
+92747700,92747703,FI
+92747704,92747711,FR
92747712,92747775,GB
-92747776,92748773,FR
+92747776,92748303,FR
+92748304,92748319,CH
+92748320,92748511,FR
+92748512,92748543,IE
+92748544,92748773,FR
92748774,92748774,PT
-92748775,92749067,FR
+92748775,92748847,FR
+92748848,92748851,BE
+92748852,92748863,FR
+92748864,92748879,ES
+92748880,92749067,FR
92749068,92749071,GB
-92749072,92749747,FR
+92749072,92749183,FR
+92749184,92749215,IT
+92749216,92749439,FR
+92749440,92749471,DE
+92749472,92749531,FR
+92749532,92749535,ES
+92749536,92749747,FR
92749748,92749751,ES
-92749752,92751711,FR
+92749752,92750255,FR
+92750256,92750271,PL
+92750272,92750603,FR
+92750604,92750607,LT
+92750608,92750655,FR
+92750656,92750719,GB
+92750720,92750751,FR
+92750752,92750783,ES
+92750784,92750815,GB
+92750816,92750839,FR
+92750840,92750843,PL
+92750844,92750879,FR
+92750880,92750887,CZ
+92750888,92750975,FR
+92750976,92751039,PT
+92751040,92751071,FR
+92751072,92751103,GB
+92751104,92751679,FR
+92751680,92751711,IT
92751712,92751712,DE
-92751713,92753547,FR
+92751713,92752127,FR
+92752128,92752143,IT
+92752144,92752359,FR
+92752360,92752363,NL
+92752364,92752431,FR
+92752432,92752447,GB
+92752448,92752543,FR
+92752544,92752575,DE
+92752576,92752591,NL
+92752592,92752607,FR
+92752608,92752611,IT
+92752612,92752687,FR
+92752688,92752703,ES
+92752704,92752735,FR
+92752736,92752751,ES
+92752752,92752767,IT
+92752768,92752831,FR
+92752832,92752847,IT
+92752848,92752863,FR
+92752864,92752895,IT
+92752896,92753079,FR
+92753080,92753087,ES
+92753088,92753095,IT
+92753096,92753183,FR
+92753184,92753215,GB
+92753216,92753279,FR
+92753280,92753311,CH
+92753312,92753343,BE
+92753344,92753547,FR
92753548,92753551,IT
-92753552,92754579,FR
+92753552,92753567,FR
+92753568,92753599,BE
+92753600,92753823,FR
+92753824,92753855,DE
+92753856,92754095,FR
+92754096,92754111,GB
+92754112,92754447,FR
+92754448,92754463,GB
+92754464,92754479,FR
+92754480,92754503,ES
+92754504,92754527,FR
+92754528,92754543,PT
+92754544,92754579,FR
92754580,92754583,ES
-92754584,92757311,FR
+92754584,92754623,FR
+92754624,92754639,PL
+92754640,92754655,FR
+92754656,92754671,IT
+92754672,92755199,FR
+92755200,92755231,NL
+92755232,92755279,FR
+92755280,92755287,DE
+92755288,92755335,FR
+92755336,92755343,ES
+92755344,92755375,FR
+92755376,92755423,GB
+92755424,92755455,FR
+92755456,92755487,CH
+92755488,92755583,FR
+92755584,92755615,CZ
+92755616,92755871,FR
+92755872,92755887,GB
+92755888,92755903,ES
+92755904,92756095,FR
+92756096,92756127,DE
+92756128,92756175,FR
+92756176,92756191,PL
+92756192,92756479,FR
+92756480,92756495,GB
+92756496,92757199,FR
+92757200,92757215,GB
+92757216,92757311,FR
92757312,92757375,ES
-92757376,92762127,FR
+92757376,92758127,FR
+92758128,92758143,GB
+92758144,92758223,FR
+92758224,92758239,CH
+92758240,92758271,FR
+92758272,92758287,ES
+92758288,92758399,FR
+92758400,92758415,PL
+92758416,92758655,FR
+92758656,92758687,DE
+92758688,92758799,FR
+92758800,92758803,DE
+92758804,92758807,ES
+92758808,92758811,FR
+92758812,92758815,DE
+92758816,92758863,FR
+92758864,92758879,PL
+92758880,92759031,FR
+92759032,92759039,GB
+92759040,92759119,FR
+92759120,92759135,NL
+92759136,92759167,FR
+92759168,92759183,GB
+92759184,92760495,FR
+92760496,92760511,ES
+92760512,92760559,FR
+92760560,92760575,ES
+92760576,92760715,FR
+92760716,92760719,ES
+92760720,92761215,FR
+92761216,92761343,DE
+92761344,92761759,FR
+92761760,92761763,IT
+92761764,92761939,FR
+92761940,92761943,GB
+92761944,92762127,FR
92762128,92762135,ES
-92762136,92782687,FR
+92762136,92762319,FR
+92762320,92762335,DE
+92762336,92762383,FR
+92762384,92762391,ES
+92762392,92762655,FR
+92762656,92762687,IT
+92762688,92762839,FR
+92762840,92762847,ES
+92762848,92762879,FR
+92762880,92762911,CH
+92762912,92763311,FR
+92763312,92763327,DE
+92763328,92763331,FR
+92763332,92763339,ES
+92763340,92763391,FR
+92763392,92763519,IE
+92763520,92763647,FR
+92763648,92763679,FI
+92763680,92763711,ES
+92763712,92763775,NL
+92763776,92763839,FR
+92763840,92763903,NL
+92763904,92764287,FR
+92764288,92764303,IE
+92764304,92764431,FR
+92764432,92764447,PL
+92764448,92764463,FR
+92764464,92764479,GB
+92764480,92764511,FR
+92764512,92764543,DE
+92764544,92764595,FR
+92764596,92764599,ES
+92764600,92764799,FR
+92764800,92764807,DE
+92764808,92764863,FR
+92764864,92764911,GB
+92764912,92765295,FR
+92765296,92765311,IT
+92765312,92765351,FR
+92765352,92765359,BE
+92765360,92765391,FR
+92765392,92765395,IT
+92765396,92766015,FR
+92766016,92766047,NL
+92766048,92766079,FR
+92766080,92766143,PT
+92766144,92782687,FR
92782688,92782719,ES
-92782720,92783543,FR
+92782720,92782731,FR
+92782732,92782735,ES
+92782736,92782811,FR
+92782812,92782815,CH
+92782816,92782847,FR
+92782848,92782879,NL
+92782880,92782943,FR
+92782944,92782975,IT
+92782976,92783291,FR
+92783292,92783295,DE
+92783296,92783543,FR
92783544,92783547,ES
-92783548,92786827,FR
+92783548,92783715,FR
+92783716,92783719,NL
+92783720,92783723,IT
+92783724,92783727,FR
+92783728,92783731,ES
+92783732,92783735,IT
+92783736,92783911,FR
+92783912,92783919,PT
+92783920,92783999,FR
+92784000,92784031,IT
+92784032,92784159,FR
+92784160,92784191,CH
+92784192,92784223,FR
+92784224,92784239,PL
+92784240,92784255,FR
+92784256,92784263,NL
+92784264,92784291,FR
+92784292,92784295,PL
+92784296,92784299,FR
+92784300,92784303,DE
+92784304,92784467,FR
+92784468,92784471,NL
+92784472,92784479,FR
+92784480,92784511,ES
+92784512,92784639,GB
+92784640,92784671,FR
+92784672,92784703,GB
+92784704,92784807,FR
+92784808,92784815,LT
+92784816,92785363,FR
+92785364,92785367,PT
+92785368,92785407,FR
+92785408,92785439,CH
+92785440,92785599,FR
+92785600,92785607,GB
+92785608,92785615,FR
+92785616,92785631,IT
+92785632,92785663,FR
+92785664,92785679,BE
+92785680,92785687,ES
+92785688,92785695,DE
+92785696,92785791,FR
+92785792,92785823,IT
+92785824,92785871,FR
+92785872,92785887,IT
+92785888,92786183,FR
+92786184,92786187,ES
+92786188,92786191,PT
+92786192,92786199,FR
+92786200,92786207,BE
+92786208,92786239,FR
+92786240,92786255,FI
+92786256,92786311,FR
+92786312,92786319,CZ
+92786320,92786631,FR
+92786632,92786639,BE
+92786640,92786743,FR
+92786744,92786751,DE
+92786752,92786827,FR
92786828,92786831,IT
-92786832,92795123,FR
+92786832,92786855,FR
+92786856,92786859,PL
+92786860,92786879,FR
+92786880,92786911,DE
+92786912,92786927,GB
+92786928,92786943,ES
+92786944,92786975,FR
+92786976,92786979,GB
+92786980,92786991,FR
+92786992,92786999,IT
+92787000,92787111,FR
+92787112,92787119,IT
+92787120,92787391,FR
+92787392,92787407,BE
+92787408,92787423,FR
+92787424,92787503,ES
+92787504,92787639,FR
+92787640,92787647,DE
+92787648,92787967,FR
+92787968,92788031,ES
+92788032,92788095,FR
+92788096,92788127,PL
+92788128,92788171,FR
+92788172,92788175,ES
+92788176,92788255,FR
+92788256,92788259,PT
+92788260,92788263,FR
+92788264,92788271,GB
+92788272,92788383,FR
+92788384,92788415,CZ
+92788416,92788479,FR
+92788480,92788511,IE
+92788512,92788607,FR
+92788608,92788639,NL
+92788640,92788687,FR
+92788688,92788703,ES
+92788704,92788735,BE
+92788736,92788967,FR
+92788968,92788975,DE
+92788976,92789055,FR
+92789056,92789071,ES
+92789072,92789079,FR
+92789080,92789083,IT
+92789084,92789223,FR
+92789224,92789231,NL
+92789232,92789335,FR
+92789336,92789339,CH
+92789340,92789343,CZ
+92789344,92789383,FR
+92789384,92789387,NL
+92789388,92789391,FR
+92789392,92789395,IT
+92789396,92789399,DE
+92789400,92789423,FR
+92789424,92789427,ES
+92789428,92789475,FR
+92789476,92789479,IT
+92789480,92789499,FR
+92789500,92789503,IT
+92789504,92789743,FR
+92789744,92789759,PL
+92789760,92789919,FR
+92789920,92789951,PL
+92789952,92790239,FR
+92790240,92790271,IE
+92790272,92790283,FR
+92790284,92790287,PL
+92790288,92790367,FR
+92790368,92790371,PT
+92790372,92790463,FR
+92790464,92790495,GB
+92790496,92790511,FR
+92790512,92790527,GB
+92790528,92790575,FR
+92790576,92790591,PT
+92790592,92790703,FR
+92790704,92790719,IT
+92790720,92790799,FR
+92790800,92790803,BE
+92790804,92790815,FR
+92790816,92790847,LT
+92790848,92790863,FI
+92790864,92790959,FR
+92790960,92790975,DE
+92790976,92791039,FR
+92791040,92791167,ES
+92791168,92791183,BE
+92791184,92791215,FR
+92791216,92791223,IT
+92791224,92791231,ES
+92791232,92791263,FR
+92791264,92791279,FI
+92791280,92791283,FR
+92791284,92791295,DE
+92791296,92791327,ES
+92791328,92791359,FR
+92791360,92791391,ES
+92791392,92791423,FR
+92791424,92791455,GB
+92791456,92791487,BE
+92791488,92792319,FR
+92792320,92792383,ES
+92792384,92792415,FR
+92792416,92792431,ES
+92792432,92792511,FR
+92792512,92792575,PT
+92792576,92792703,FR
+92792704,92792767,PL
+92792768,92792799,FR
+92792800,92792831,PT
+92792832,92792959,GB
+92792960,92793023,FR
+92793024,92793055,GB
+92793056,92793087,ES
+92793088,92793215,FR
+92793216,92793247,IT
+92793248,92793263,FR
+92793264,92793279,ES
+92793280,92793887,FR
+92793888,92793919,IT
+92793920,92794143,FR
+92794144,92794159,DE
+92794160,92794175,FR
+92794176,92794207,NL
+92794208,92794367,FR
+92794368,92794399,GB
+92794400,92794503,FR
+92794504,92794511,ES
+92794512,92794879,FR
+92794880,92794895,ES
+92794896,92794943,FR
+92794944,92794975,BE
+92794976,92795103,FR
+92795104,92795111,ES
+92795112,92795123,FR
92795124,92795127,IT
-92795128,92798975,FR
+92795128,92795171,FR
+92795172,92795175,BE
+92795176,92795179,PL
+92795180,92795619,FR
+92795620,92795623,PL
+92795624,92796463,FR
+92796464,92796479,CZ
+92796480,92796511,FR
+92796512,92796543,DE
+92796544,92796583,FR
+92796584,92796587,PL
+92796588,92796671,FR
+92796672,92796687,GB
+92796688,92796695,FR
+92796696,92796703,BE
+92796704,92796711,PL
+92796712,92796727,FR
+92796728,92796735,IT
+92796736,92797567,FR
+92797568,92797759,PT
+92797760,92797903,FR
+92797904,92797911,NL
+92797912,92797983,FR
+92797984,92797987,GB
+92797988,92798015,FR
+92798016,92798047,ES
+92798048,92798175,FR
+92798176,92798191,IT
+92798192,92798223,FR
+92798224,92798231,CZ
+92798232,92798255,FR
+92798256,92798271,PL
+92798272,92798431,FR
+92798432,92798439,PL
+92798440,92798591,FR
+92798592,92798623,IE
+92798624,92798975,FR
92798976,93323263,RU
93323264,93335551,CH
93335552,93339647,IL
@@ -1056,9 +1936,7 @@
93693952,93695999,IE
93696000,93700095,FR
93700096,93702143,PL
-93702144,93705983,RU
-93705984,93706239,UA
-93706240,93708287,RU
+93702144,93708287,RU
93708288,93712383,DE
93712384,93714431,HU
93714432,93716479,NL
@@ -1071,7 +1949,9 @@
93782016,93833983,GB
93833984,93834239,NL
93834240,93835263,GB
-93835264,93835519,NL
+93835264,93835407,NL
+93835408,93835415,GB
+93835416,93835519,NL
93835520,93836287,GB
93836288,93836799,NL
93836800,93842351,GB
@@ -1088,11 +1968,15 @@
93906944,93908991,BA
93908992,93911039,IT
93911040,93913087,AE
-93913088,93914319,NL
+93913088,93913727,NL
+93913728,93913735,US
+93913736,93914319,NL
93914320,93914323,AZ
93914324,93914357,NL
93914358,93914358,GB
-93914359,93914710,NL
+93914359,93914671,NL
+93914672,93914679,US
+93914680,93914710,NL
93914711,93914711,GB
93914712,93914951,NL
93914952,93914959,US
@@ -1109,11 +1993,17 @@
93916528,93916543,US
93916544,93916591,NL
93916592,93916599,US
-93916600,93916971,NL
+93916600,93916791,NL
+93916792,93916799,US
+93916800,93916971,NL
93916972,93916975,US
-93916976,93918103,NL
+93916976,93917871,NL
+93917872,93917879,US
+93917880,93918103,NL
93918104,93918111,US
-93918112,93918215,NL
+93918112,93918199,NL
+93918200,93918207,US
+93918208,93918215,NL
93918216,93918223,US
93918224,93918555,NL
93918556,93918559,US
@@ -1122,38 +2012,34 @@
93918600,93918655,NL
93918656,93918687,US
93918688,93919263,NL
-93919264,93919279,US
-93919280,93919391,NL
+93919264,93919287,US
+93919288,93919391,NL
93919392,93919395,US
-93919396,93919951,NL
+93919396,93919727,NL
+93919728,93919735,US
+93919736,93919951,NL
93919952,93919959,US
93919960,93920059,NL
93920060,93920063,US
93920064,93920163,NL
93920164,93920167,US
-93920168,93920223,NL
-93920224,93920231,US
-93920232,93920575,NL
+93920168,93920575,NL
93920576,93920639,US
93920640,93920855,NL
93920856,93920863,US
-93920864,93920967,NL
-93920968,93920975,US
-93920976,93921055,NL
+93920864,93921055,NL
93921056,93921059,US
-93921060,93921063,NL
-93921064,93921071,GB
-93921072,93923551,NL
-93923552,93923559,US
-93923560,93923567,NL
+93921060,93921119,NL
+93921120,93921127,US
+93921128,93923095,NL
+93923096,93923103,US
+93923104,93923567,NL
93923568,93923575,US
93923576,93923855,NL
93923856,93923863,US
93923864,93924407,NL
93924408,93924415,JP
-93924416,93924591,NL
-93924592,93924599,US
-93924600,93925807,NL
+93924416,93925807,NL
93925808,93925815,KE
93925816,93927143,NL
93927144,93927151,JP
@@ -1177,7 +2063,9 @@
93974528,93976575,CH
93976576,93978623,GB
93978624,94011391,ES
-94011392,94175231,RO
+94011392,94044159,RO
+94044160,94109695,SY
+94109696,94175231,RO
94175232,94178303,SE
94178304,94178559,NO
94178560,94179071,SE
@@ -1192,7 +2080,9 @@
94184960,94185471,IT
94185472,94186495,LU
94186496,94187263,DE
-94187264,94188287,AT
+94187264,94187519,AT
+94187520,94187775,SE
+94187776,94188287,AT
94188288,94189311,SE
94189312,94189567,LI
94189568,94191615,SE
@@ -1264,22 +2154,35 @@
95388928,95389183,AU
95389184,95389695,DE
95389696,95390207,GB
-95390208,95393151,DE
+95390208,95393023,DE
+95393024,95393151,GB
95393152,95393279,RS
-95393280,95393407,DE
+95393280,95393407,GB
95393408,95393535,AE
95393536,95393663,DE
95393664,95393791,QA
95393792,95394047,GB
95394048,95395327,AU
-95395328,95395839,GB
+95395328,95395455,GB
+95395456,95395583,DE
+95395584,95395839,GB
95395840,95398399,DE
95398400,95398655,GB
-95398656,95400447,DE
+95398656,95399679,DE
+95399680,95399807,US
+95399808,95399935,DE
+95399936,95400063,CA
+95400064,95400191,DE
+95400192,95400319,CA
+95400320,95400447,DE
95400448,95400703,GB
-95400704,95401471,DE
+95400704,95400831,US
+95400832,95400959,DE
+95400960,95401087,US
+95401088,95401471,DE
95401472,95401727,GB
-95401728,95401903,DE
+95401728,95401855,US
+95401856,95401903,DE
95401904,95401911,AT
95401912,95401983,DE
95401984,95402111,GB
@@ -1290,15 +2193,22 @@
95402696,95402703,HR
95402704,95402719,DE
95402720,95402751,US
-95402752,95403183,DE
+95402752,95403007,DE
+95403008,95403135,US
+95403136,95403183,DE
95403184,95403191,BE
-95403192,95403519,DE
+95403192,95403263,DE
+95403264,95403391,US
+95403392,95403519,DE
95403520,95403775,GB
95403776,95404799,DE
95404800,95405055,GB
-95405056,95405567,DE
+95405056,95405311,DE
+95405312,95405439,US
+95405440,95405567,DE
95405568,95405823,GB
-95405824,95406335,DE
+95405824,95405951,US
+95405952,95406335,DE
95406336,95407359,GB
95407360,95407871,US
95407872,95408639,DE
@@ -1308,8 +2218,8 @@
95409920,95410175,DE
95410176,95410431,AU
95410432,95410447,CH
-95410448,95410687,DE
-95410688,95410943,GB
+95410448,95410559,DE
+95410560,95410943,GB
95410944,95411199,DE
95411200,95411215,NL
95411216,95420415,DE
@@ -1348,17 +2258,14 @@
96153600,96155647,PL
96155648,96157695,CH
96157696,96165887,RU
-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
+96165888,96166399,FR
+96166400,96166655,GP
+96166656,96168703,FR
+96168704,96168959,MQ
+96168960,96171775,FR
+96171776,96172031,GF
+96172032,96172799,FR
+96172800,96173055,GP
96173056,96173311,MQ
96173312,96174079,FR
96174080,96206847,HU
@@ -1367,8 +2274,61 @@
96321536,96337919,RU
96337920,96403455,IR
96403456,96468991,AZ
-96468992,96731135,RO
-96731136,96796671,DE
+96468992,96731135,AE
+96731136,96739479,FR
+96739480,96739483,DE
+96739484,96739583,FR
+96739584,96739587,PT
+96739588,96740223,FR
+96740224,96740351,IT
+96740352,96742407,FR
+96742408,96742415,NL
+96742416,96742427,FR
+96742428,96742431,NL
+96742432,96742679,FR
+96742680,96742687,DE
+96742688,96744607,FR
+96744608,96744611,IT
+96744612,96744831,FR
+96744832,96744839,GB
+96744840,96747291,FR
+96747292,96747295,PT
+96747296,96756427,FR
+96756428,96756431,ES
+96756432,96756447,DE
+96756448,96756743,FR
+96756744,96756751,NL
+96756752,96757639,FR
+96757640,96757643,CH
+96757644,96757883,FR
+96757884,96757887,ES
+96757888,96759767,FR
+96759768,96759775,IT
+96759776,96760403,FR
+96760404,96760407,IT
+96760408,96761855,FR
+96761856,96761871,BE
+96761872,96762943,FR
+96762944,96763007,ES
+96763008,96763551,FR
+96763552,96763555,GB
+96763556,96764375,FR
+96764376,96764383,IT
+96764384,96764559,FR
+96764560,96764575,NL
+96764576,96767031,FR
+96767032,96767035,GB
+96767036,96767823,FR
+96767824,96767839,BE
+96767840,96768151,FR
+96768152,96768155,FI
+96768156,96770651,FR
+96770652,96770655,PL
+96770656,96773119,FR
+96773120,96773375,ES
+96773376,96778867,FR
+96778868,96778871,BE
+96778872,96796671,FR
96796672,96862207,AZ
96862208,96894975,GB
96894976,96897023,CZ
@@ -1417,7 +2377,9 @@
98734080,98736127,CH
98736128,98738175,RU
98738176,98740223,NO
-98740224,98741503,DE
+98740224,98740479,DE
+98740480,98740735,US
+98740736,98741503,DE
98741504,98741759,US
98741760,98742271,DE
98742272,98744319,GB
@@ -1427,11 +2389,13 @@
98893824,98959359,TR
98959360,99024895,DE
99024896,99025167,GB
-99025168,99025407,IT
+99025168,99025279,DE
+99025280,99025407,US
99025408,99025663,NL
99025664,99025919,DE
99025920,99025935,FI
-99025936,99026175,SE
+99025936,99026047,DE
+99026048,99026175,US
99026176,99026943,DE
99026944,99027199,GB
99027200,99027215,HR
@@ -1439,23 +2403,29 @@
99027456,99027711,PL
99027712,99027967,DE
99027968,99027983,ES
-99027984,99028223,DE
+99027984,99028095,DE
+99028096,99028223,US
99028224,99028239,GB
-99028240,99028735,DE
+99028240,99028351,DE
+99028352,99028479,US
+99028480,99028735,DE
99028736,99028751,SE
-99028752,99028991,EG
-99028992,99029247,GB
-99029248,99029503,DE
+99028752,99028863,DE
+99028864,99028991,US
+99028992,99029503,GB
99029504,99029519,IE
-99029520,99029759,TR
-99029760,99031295,DE
+99029520,99031295,DE
99031296,99031551,GB
-99031552,99031807,DE
+99031552,99031679,DE
+99031680,99031807,US
99031808,99031823,GB
-99031824,99032063,FR
+99031824,99031935,DE
+99031936,99032063,US
99032064,99043839,DE
99043840,99043847,AT
-99043848,99044351,DE
+99043848,99044095,DE
+99044096,99044223,US
+99044224,99044351,DE
99044352,99044359,BE
99044360,99044607,DE
99044608,99044615,HR
@@ -1500,12 +2470,12 @@
100560896,100560959,GB
100560960,100561023,RO
100561024,100561151,GB
-100561152,100564991,RO
+100561152,100561599,RO
+100561600,100561663,US
+100561664,100564991,RO
100564992,100569087,SE
100569088,100569343,FR
-100569344,100569599,SE
-100569600,100569855,FR
-100569856,100573183,SE
+100569344,100573183,SE
100573184,100575231,GB
100575232,100577279,DK
100577280,100579327,RU
@@ -1520,7 +2490,8 @@
100636672,100638719,NL
100638720,100646911,UA
100646912,100663295,RU
-100663296,134874866,US
+100663296,100663296,CN
+100663297,134874866,US
134874867,134874867,DO
134874868,135192575,US
135192576,135200767,MX
@@ -1532,13 +2503,13 @@
135607040,135607295,CA
135607296,135776255,US
135776256,135776511,GU
-135776512,135790591,US
-135790592,135790847,CA
-135790848,135791103,US
+135776512,135791103,US
135791104,135791615,CA
-135791616,135792639,US
-135792640,135794687,CA
-135794688,136237055,US
+135791616,135792383,US
+135792384,135794687,CA
+135794688,135926527,US
+135926528,135926783,VI
+135926784,136237055,US
136237056,136239103,CA
136239104,136404991,US
136404992,136407039,CA
@@ -1546,18 +2517,14 @@
136413184,136415231,CA
136415232,136415665,US
136415666,136415666,FR
-136415667,136689919,US
-136689920,136690175,CA
-136690176,139954241,US
+136415667,139954241,US
139954242,139954242,ES
139954243,152305663,US
152305664,152338431,GB
152338432,167772159,US
184549376,201897983,US
201897984,201898239,PR
-201898240,202182143,US
-202182144,202182399,GB
-202182400,202385407,US
+201898240,202385407,US
202385408,202385919,PR
202385920,202706431,US
202706432,202706943,PR
@@ -1565,9 +2532,11 @@
202935552,202935807,PR
202935808,203272959,US
203272960,203273215,GB
-203273216,203659007,US
-203659008,203659263,VI
-203659264,204047871,US
+203273216,203658975,US
+203658976,203658991,VI
+203658992,204047359,US
+204047360,204047615,VI
+204047616,204047871,US
204047872,204047999,PR
204048000,204048031,US
204048032,204048047,PR
@@ -1577,9 +2546,7 @@
211126784,211126911,PR
211126912,211263999,US
211264000,211264255,SA
-211264256,211597311,US
-211597312,211597567,VI
-211597568,211597719,US
+211264256,211597719,US
211597720,211597727,VI
211597728,212787199,US
212787200,212788223,PR
@@ -1595,25 +2562,39 @@
212793088,212793343,PR
212793344,212794575,US
212794576,212794583,VI
-212794584,214698239,US
+212794584,213799167,US
+213799168,213799423,CA
+213799424,214617343,US
+214617344,214617599,CA
+214617600,214698239,US
214698240,214698255,VI
214698256,214698303,US
214698304,214698311,VI
214698312,214699519,US
214699520,214699647,PR
214699648,214699775,VI
-214699776,214778367,US
-214778368,214778623,PR
-214778624,217709055,US
-217709056,217709311,PR
-217709312,219512063,US
+214699776,214779135,US
+214779136,214779391,PR
+214779392,219249919,US
+219249920,219250175,GB
+219250176,219512063,US
219512064,219512319,GB
219512320,234881023,US
234881024,234883071,CN
234883072,234884095,JP
234884096,234885119,CN
234885120,234889215,VN
-234889216,234913791,KR
+234889216,234893311,JP
+234893312,234895359,KR
+234895360,234895615,TW
+234895616,234895871,MY
+234895872,234896127,TH
+234896128,234896383,MN
+234896384,234896639,IN
+234896640,234896895,AE
+234896896,234897151,PH
+234897152,234897407,TW
+234897408,234913791,KR
234913792,234946559,HK
234946560,234947583,CN
234947584,234950655,JP
@@ -1652,7 +2633,9 @@
243400704,243531775,CN
243531776,243662847,JP
243662848,243793919,CN
-243793920,243859455,HK
+243793920,243858687,HK
+243858688,243858943,GB
+243858944,243859455,HK
243859456,243916799,AU
243916800,243924991,JP
243924992,243990527,KR
@@ -1704,7 +2687,9 @@
265023488,265027583,GB
265027584,265060351,US
265060352,265093119,FR
-265093120,266062079,US
+265093120,265533695,US
+265533696,265533951,JP
+265533952,266062079,US
266062080,266062335,IN
266062336,266070271,US
266070272,266070527,AU
@@ -1834,7 +2819,9 @@
344260608,344260863,GB
344260864,344262655,US
344262656,344262911,GB
-344262912,344588543,US
+344262912,344270847,US
+344270848,344270911,GB
+344270912,344588543,US
344588544,344589055,GB
344589056,344592895,US
344592896,344592945,GB
@@ -1880,7 +2867,8 @@
386842624,386846719,NL
386846720,386862079,US
386862080,386862335,JP
-386862336,386875391,US
+386862336,386862591,KR
+386862592,386875391,US
386875392,386879487,NL
386879488,386887679,US
386887680,386891775,NL
@@ -2075,6 +3063,8 @@
392765440,392765695,GB
392765696,394264575,US
394264576,394264831,CA
+394270720,394271231,NL
+394296320,394296831,NL
398458880,398635007,US
398635008,398643199,NL
398643200,398647295,US
@@ -2109,7 +3099,9 @@
399458304,399466495,NL
399466496,399601663,US
399601664,399618047,NL
-399618048,399630335,US
+399618048,399619839,US
+399619840,399620095,AU
+399620096,399630335,US
399630336,399638527,NL
399638528,399818751,US
399818752,399831039,NL
@@ -2160,7 +3152,19 @@
401130496,401130751,DE
401130752,401137151,US
401137152,401137663,GB
-401137664,401145855,US
+401137664,401142783,US
+401142784,401143039,PE
+401143040,401143295,BZ
+401143296,401143551,NG
+401143552,401143807,IM
+401143808,401144063,SA
+401144064,401144319,VE
+401144320,401144575,BS
+401144576,401144831,MA
+401144832,401145087,OM
+401145088,401145343,CO
+401145344,401145599,SC
+401145600,401145855,YE
401145856,401211391,CA
401211392,401293311,US
401293312,401297407,CA
@@ -2175,7 +3179,15 @@
401547264,401555455,CA
401555456,402096639,US
402096640,402096895,FR
-402096896,402105087,US
+402096896,402097151,US
+402097152,402097407,AR
+402097408,402097663,KE
+402097664,402097919,SY
+402097920,402098175,MX
+402098176,402098431,BN
+402098432,402098687,BH
+402098688,402098943,AW
+402098944,402105087,US
402105088,402105343,GB
402105344,402107391,US
402107392,402107647,IT
@@ -2203,7 +3215,9 @@
402374656,402399231,US
402399232,402403327,CA
402403328,402415615,US
-402415616,402417663,CA
+402415616,402416639,CA
+402416640,402416895,US
+402416896,402417663,CA
402417664,402550015,US
402550016,402550271,CA
402550272,402550783,GB
@@ -2234,9 +3248,9 @@
406061056,406110207,US
406110208,406142975,CA
406142976,406147071,US
-406147072,406151167,CA
+406147072,406159359,CA
406159360,406175743,US
-406183936,406208511,CA
+406175744,406208511,CA
406216704,406241279,US
406241280,406257663,PR
406257664,406274047,US
@@ -2247,10 +3261,8 @@
406323200,406388735,US
406388736,406454271,CA
406454272,406683647,US
-406683648,406683775,CA
-406683776,406683903,US
-406683904,406684159,CA
-406684160,406838783,US
+406683648,406684031,CA
+406684032,406838783,US
406838784,406839295,CA
406839296,406847487,US
406847488,407408639,CA
@@ -2278,6 +3290,7 @@
410189824,410648575,US
410648576,410714111,CA
410714112,411156479,US
+411156480,411160575,CA
411164672,411168767,CA
411168768,411303935,US
411303936,411369471,NL
@@ -2288,7 +3301,9 @@
411639808,411664383,CA
411664384,411680767,US
411680768,411688959,CA
-411688960,411697151,PR
+411688960,411691519,PR
+411691520,411692031,US
+411692032,411697151,PR
411697152,411746303,CA
411746304,411762687,PR
411762688,411770879,CA
@@ -2318,7 +3333,9 @@
412958720,413007871,CA
413007872,413908991,US
413908992,413925375,PR
-413925376,415760383,US
+413925376,414502655,US
+414502656,414502783,CA
+414502784,415760383,US
415760384,416022527,CA
416022528,416059391,US
416059392,416088063,CA
@@ -2334,7 +3351,9 @@
416743424,416776191,CA
416776192,417202175,US
417202176,417267711,CA
-417267712,417366015,US
+417267712,417335807,US
+417335808,417335935,VI
+417335936,417366015,US
417366016,417398783,CA
417398784,417431551,US
417431552,417529855,CA
@@ -2346,9 +3365,7 @@
417796096,417800191,US
417800192,417808383,BS
417808384,417816575,CA
-417820672,417832191,US
-417832192,417832447,VI
-417832448,417857535,US
+417820672,417857535,US
417857536,417923071,AR
417923072,418062335,US
418062336,418070527,CA
@@ -2541,7 +3558,8 @@
460983296,460984319,HK
460984320,460988415,PG
460988416,460994559,JP
-460994560,460995583,MY
+460994560,460995327,MY
+460995328,460995583,SG
460996608,461008895,JP
461008896,461012991,AU
461012992,461045759,KR
@@ -2554,9 +3572,9 @@
461056000,461058047,AU
461058048,461062143,HK
461062144,461078527,IN
-461078528,461078783,FJ
-461078784,461079039,AU
-461079040,461094911,FJ
+461078528,461088767,FJ
+461088768,461089023,AU
+461089024,461094911,FJ
461094912,461096959,HK
461096960,461099007,TW
461099008,461100031,JP
@@ -2662,22 +3680,26 @@
520491648,520491775,IS
520491776,520492031,IE
520492032,520493055,GB
-520493056,520494079,IT
+520493056,520493311,BE
+520493312,520494079,IT
520494080,520494335,FR
-520494336,520494591,IT
+520494336,520494591,CZ
520494592,520494847,CH
520494848,520495103,DK
-520495104,520495871,IT
+520495104,520495359,SE
+520495360,520495615,BE
+520495616,520495871,SE
520495872,520496383,DE
-520496384,520496895,IT
+520496384,520496639,TR
+520496640,520496767,CZ
+520496768,520496895,TR
520496896,520497151,ES
520497152,520497407,FR
520497408,520497919,IT
520497920,520498175,FR
520498176,520498431,CH
520498432,520498687,SE
-520498688,520498943,IT
-520498944,520499199,FR
+520498688,520499199,FR
520499200,520500223,IT
520500224,520500479,LU
520500480,520500735,DE
@@ -2733,18 +3755,22 @@
520949760,520951807,RU
520951808,520953855,IE
520953856,520962047,RU
-520962048,520978431,IE
+520962048,520963407,IE
+520963408,520963408,US
+520963409,520978431,IE
520978432,520980479,RU
520980480,520982527,IT
520982528,520984575,RU
-520984576,520986623,GB
+520984576,520986623,NG
520986624,520988671,PS
520988672,520990719,DE
520990720,520992767,RU
520994816,521011199,BG
521011200,521020415,RO
521020416,521021439,MD
-521021440,521057279,RO
+521021440,521039871,RO
+521039872,521043967,IR
+521043968,521057279,RO
521057280,521058303,MD
521058304,521076735,RO
521076736,521078783,ES
@@ -2849,13 +3875,7 @@
521953280,521961471,RU
521961472,521969663,CZ
521969664,521977855,UA
-521977856,521986303,RU
-521986304,521986559,UA
-521986560,521989631,RU
-521989632,521989887,UA
-521989888,521991679,RU
-521991680,521991935,UA
-521991936,521994239,RU
+521977856,521994239,RU
521994240,522002431,KG
522002432,522010623,IR
522010624,522018815,AE
@@ -2863,7 +3883,9 @@
522027008,522059775,RU
522059776,522125311,CZ
522125312,522133503,MD
-522133504,522135551,NL
+522133504,522134783,NL
+522134784,522134911,US
+522134912,522135551,NL
522135552,522137599,IT
522137600,522141695,CH
522141696,522143743,RU
@@ -3061,11 +4083,14 @@
529596416,529661951,TR
529661952,529727487,GE
529727488,529793023,HR
-529793024,529793337,CZ
-529793338,529793338,RU
-529793339,529793535,CZ
-529793536,529794303,RU
-529794304,529818623,CZ
+529793024,529793279,CZ
+529793280,529794303,RU
+529794304,529795071,CZ
+529795072,529796095,RU
+529796096,529797119,UA
+529797120,529805311,CZ
+529805312,529817599,RU
+529817600,529818623,CZ
529818624,529826303,RU
529826304,529826815,CZ
529826816,529827839,RU
@@ -3160,8 +4185,8 @@
531372544,531372799,DE
531372800,531380223,CH
531380224,531390463,DE
-531390464,531394559,CH
-531394560,531398655,DE
+531390464,531392511,CH
+531392512,531398655,DE
531398656,531400703,RU
531400704,531402751,UA
531402752,531404799,LU
@@ -3193,15 +4218,15 @@
531429408,531429415,IT
531429416,531429599,GB
531429600,531429607,IT
-531429608,531430319,GB
+531429608,531429855,GB
+531429856,531429863,IT
+531429864,531430319,GB
531430320,531430327,IT
531430328,531430823,GB
531430824,531430831,IT
531430832,531430847,GB
531430848,531430855,IT
-531430856,531430927,GB
-531430928,531430935,IT
-531430936,531431423,GB
+531430856,531431423,GB
531431424,531496959,RO
531496960,531628031,PL
531628032,531660799,TR
@@ -3243,7 +4268,9 @@
532246528,532250623,BA
532250624,532283391,GB
532283392,532291583,TR
-532291584,532293631,IE
+532291584,532292351,IE
+532292352,532292607,GB
+532292608,532293631,IE
532293632,532295679,IT
532295680,532297727,KG
532297728,532303871,RU
@@ -3283,8 +4310,7 @@
532381696,532414463,NL
532414464,532676607,IT
532676608,532692991,GE
-532692992,532700927,CZ
-532700928,532701183,SK
+532692992,532701183,CZ
532701184,532703231,GB
532703232,532705279,RU
532705280,532709375,NL
@@ -3324,9 +4350,7 @@
532805632,532807679,SE
532807680,533200895,IT
533200896,533233663,TR
-533233664,533236991,IE
-533236992,533237247,GB
-533237248,533250047,IE
+533233664,533250047,IE
533250048,533254143,RU
533254144,533256191,NL
533256192,533262335,RU
@@ -3336,7 +4360,9 @@
533331968,533397503,UA
533397504,533463039,KW
533463040,533479423,RU
-533479424,533481471,DE
+533479424,533479519,DE
+533479520,533479551,FI
+533479552,533481471,DE
533481472,533483519,NO
533483520,533485567,FR
533485568,533487615,LU
@@ -3385,9 +4411,7 @@
533895168,533897215,TR
533897216,533899263,DE
533899264,533901311,RU
-533901312,533904383,IL
-533904384,533904639,FR
-533904640,533905407,IL
+533901312,533905407,IL
533905408,533913599,RU
533913600,533915647,ES
533915648,533919743,GB
@@ -3402,7 +4426,7 @@
533987328,534118399,DE
534118400,534151167,KW
534151168,534183935,DE
-534183936,534249471,RO
+534183936,534249471,AE
534249472,534253567,GB
534253568,534257663,FR
534257664,534259711,SE
@@ -3430,7 +4454,6 @@
534372352,534374399,KW
534374400,534376447,FR
534376448,534378495,IE
-534378496,534380543,FR
534380544,534511615,AE
534511616,534512639,BZ
534512640,534512895,NL
@@ -3439,10 +4462,12 @@
534513216,534513279,VG
534513280,534513407,NL
534513408,534513663,SE
-534513664,534515455,US
-534515456,534515711,DE
+534513664,534514687,US
+534514688,534515711,DE
534515712,534515967,GB
-534515968,534517759,US
+534515968,534516735,US
+534516736,534516991,GB
+534516992,534517759,US
534517760,534518783,NL
534518784,534519039,DE
534519040,534519167,NL
@@ -3461,9 +4486,7 @@
534519552,534519807,NL
534519808,534521855,US
534521856,534522367,DE
-534522368,534522879,NL
-534522880,534523135,DE
-534523136,534523391,NL
+534522368,534523391,NL
534523392,534523903,DE
534523904,534530047,US
534530048,534544383,DE
@@ -3471,7 +4494,9 @@
534546432,534548479,DE
534548480,534550527,PL
534550528,534560767,RU
-534560768,534609919,GB
+534560768,534573823,GB
+534573824,534574079,NL
+534574080,534609919,GB
534609920,534642687,ES
534642688,534645759,CZ
534645760,534646271,PL
@@ -3533,12 +4558,18 @@
540737758,540737758,BR
540737759,540803071,BZ
540803072,540811263,US
-540811264,540814335,SG
+540811264,540814085,SG
+540814086,540814086,TH
+540814087,540814327,SG
+540814328,540814328,IN
+540814329,540814335,SG
540814336,540814591,US
540814592,540819455,SG
540819456,540820959,US
540820960,540820975,CA
-540820976,540826383,US
+540820976,540825347,US
+540825348,540825348,CA
+540825349,540826383,US
540826384,540826399,CA
540826400,543690751,US
543690752,543691007,AR
@@ -3640,15 +4671,15 @@
543881728,543883263,GB
543883264,544436771,US
544436772,544436775,CA
-544436776,586972927,US
+544436776,545858303,US
+545858304,545858559,PR
+545858560,586972927,US
586972928,586973183,CA
586973184,586977023,US
586977024,586977279,AU
586977280,587006719,US
587006720,587006975,GB
-587006976,587039487,US
-587039488,587039743,NO
-587039744,603979775,US
+587006976,603979775,US
603979776,603980799,CN
603980800,603981823,NP
603981824,604110847,CN
@@ -3749,7 +4780,9 @@
621445120,621805567,ES
621805568,621813759,NL
621813760,621821951,SA
-621821952,621823999,DE
+621821952,621823567,DE
+621823568,621823583,US
+621823584,621823999,DE
621824000,621826047,FR
621826048,621828095,RU
621830144,621838335,FI
@@ -3771,12 +4804,9 @@
621939712,621940479,RU
621940480,621942527,GB
621942528,621969407,RU
-621971456,621971711,IM
-621971712,621971967,GB
-621971968,621972223,IM
-621972224,621972479,GB
-621972480,621972991,IM
-621972992,621973503,GB
+621971456,621972991,IM
+621972992,621973247,GB
+621973248,621973503,IM
621973504,621975551,IE
621975552,621977599,RU
621977600,621981695,FR
@@ -3830,18 +4860,13 @@
622510080,622512127,PL
622512128,622514175,DE
622514176,622518271,NO
-622518272,622519295,NL
+622518272,622518527,GB
+622518528,622519295,NL
622519296,622520319,FR
622520320,622522367,RU
622522368,622524415,FR
622524416,622526463,ES
-622526464,622553087,DE
-622553088,622555135,US
-622555136,622559743,DE
-622559744,622561791,AT
-622561792,622582271,DE
-622582272,622583295,AT
-622583296,622591999,DE
+622526464,622591999,DE
622592000,622624767,OM
622624768,622626815,NO
622626816,622630911,DK
@@ -3896,7 +4921,7 @@
623077856,623077857,WS
623077858,623077861,NZ
623077862,623083519,CH
-623083520,623116287,RO
+623083520,623116287,ES
623116288,623378431,KW
623378432,623509503,OM
623509504,623640575,RO
@@ -3922,9 +4947,9 @@
623794176,623796223,ES
623796224,623798271,GB
623798272,623800319,GE
-623800320,623801087,SE
-623801088,623801599,US
-623801600,623801855,SE
+623800320,623800831,SE
+623800832,623801087,NL
+623801088,623801855,US
623801856,623802367,NL
623802368,623802879,SE
623802880,623804148,NL
@@ -3967,9 +4992,17 @@
624566272,624568319,RU
624568320,624570367,BE
624570368,624574463,DE
-624574464,624574715,NL
+624574464,624574535,NL
+624574536,624574543,US
+624574544,624574559,NL
+624574560,624574567,US
+624574568,624574715,NL
624574716,624574719,US
-624574720,624575063,NL
+624574720,624574855,NL
+624574856,624574863,US
+624574864,624575039,NL
+624575040,624575047,US
+624575048,624575063,NL
624575064,624575071,US
624575072,624575135,NL
624575136,624575143,US
@@ -3977,35 +5010,35 @@
624575400,624575403,US
624575404,624575679,NL
624575680,624575743,US
-624575744,624575871,NL
-624575872,624575879,US
-624575880,624576031,NL
-624576032,624576039,US
-624576040,624576127,NL
+624575744,624575759,NL
+624575760,624575767,BE
+624575768,624575895,NL
+624575896,624575903,US
+624575904,624576111,NL
+624576112,624576119,US
+624576120,624576127,NL
624576128,624576131,US
-624576132,624576471,NL
+624576132,624576287,NL
+624576288,624576295,US
+624576296,624576471,NL
624576472,624576479,US
-624576480,624576887,NL
+624576480,624576487,NL
+624576488,624576495,CA
+624576496,624576887,NL
624576888,624576895,GB
-624576896,624577135,NL
-624577136,624577139,GB
-624577140,624577151,NL
+624576896,624577151,NL
624577152,624577215,GB
624577216,624577307,NL
624577308,624577311,US
624577312,624577483,NL
624577484,624577487,US
-624577488,624577863,NL
-624577864,624577871,DK
-624577872,624578415,NL
-624578416,624578423,US
-624578424,624578719,NL
-624578720,624578723,GB
-624578724,624578887,NL
+624577488,624578887,NL
624578888,624578895,US
624578896,624578951,NL
624578952,624578955,US
-624578956,624579075,NL
+624578956,624579039,NL
+624579040,624579047,US
+624579048,624579075,NL
624579076,624579079,US
624579080,624579423,NL
624579424,624579455,US
@@ -4017,17 +5050,31 @@
624579624,624579627,US
624579628,624580132,NL
624580133,624580133,GB
-624580134,624580151,NL
+624580134,624580135,NL
+624580136,624580143,US
+624580144,624580151,NL
624580152,624580159,ES
-624580160,624581071,NL
+624580160,624580231,NL
+624580232,624580239,US
+624580240,624580263,NL
+624580264,624580271,US
+624580272,624580495,NL
+624580496,624580503,US
+624580504,624580559,NL
+624580560,624580567,US
+624580568,624581071,NL
624581072,624581087,US
624581088,624581135,NL
624581136,624581139,US
624581140,624581199,NL
624581200,624581207,GB
-624581208,624581599,NL
+624581208,624581535,NL
+624581536,624581543,US
+624581544,624581599,NL
624581600,624581631,US
-624581632,624582123,NL
+624581632,624581927,NL
+624581928,624581935,US
+624581936,624582123,NL
624582124,624582127,US
624582128,624582139,NL
624582140,624582147,US
@@ -4035,7 +5082,15 @@
624582288,624582295,US
624582296,624582399,NL
624582400,624582403,US
-624582404,624584111,NL
+624582404,624582615,NL
+624582616,624582623,US
+624582624,624582631,NL
+624582632,624582639,US
+624582640,624582759,NL
+624582760,624582767,GB
+624582768,624583239,NL
+624583240,624583247,GB
+624583248,624584111,NL
624584112,624584119,US
624584120,624584159,NL
624584160,624584175,US
@@ -4043,13 +5098,19 @@
624584384,624584391,US
624584392,624584415,NL
624584416,624584423,US
-624584424,624586279,NL
+624584424,624586183,NL
+624586184,624586191,US
+624586192,624586279,NL
624586280,624586287,US
-624586288,624587583,NL
+624586288,624587111,NL
+624587112,624587119,US
+624587120,624587583,NL
624587584,624587599,US
624587600,624587871,NL
624587872,624587903,US
-624587904,624588383,NL
+624587904,624587935,NL
+624587936,624587943,US
+624587944,624588383,NL
624588384,624588391,US
624588392,624588399,GB
624588400,624588927,NL
@@ -4058,173 +5119,792 @@
624589160,624589167,IT
624589168,624589199,NL
624589200,624589215,KE
-624589216,624589223,NL
-624589224,624589231,US
-624589232,624589719,NL
+624589216,624589375,NL
+624589376,624589383,US
+624589384,624589719,NL
624589720,624589727,US
-624589728,624589967,NL
+624589728,624589783,NL
+624589784,624589791,US
+624589792,624589967,NL
624589968,624589975,US
624589976,624590847,NL
624590848,624640527,FR
624640528,624640543,GB
-624640544,624640759,FR
+624640544,624640551,FR
+624640552,624640559,IE
+624640560,624640575,BE
+624640576,624640735,FR
+624640736,624640739,GB
+624640740,624640759,FR
624640760,624640767,NL
-624640768,624640951,FR
+624640768,624640775,ES
+624640776,624640847,FR
+624640848,624640851,ES
+624640852,624640903,FR
+624640904,624640907,CZ
+624640908,624640927,FR
+624640928,624640931,ES
+624640932,624640935,FR
+624640936,624640939,FI
+624640940,624640943,FR
+624640944,624640951,ES
624640952,624640959,PT
-624640960,624643019,FR
+624640960,624640967,NL
+624640968,624640991,FR
+624640992,624640999,CH
+624641000,624641023,FR
+624641024,624641055,GB
+624641056,624641063,FR
+624641064,624641067,GB
+624641068,624641119,FR
+624641120,624641127,PL
+624641128,624641195,FR
+624641196,624641199,PL
+624641200,624641207,DE
+624641208,624641223,FR
+624641224,624641231,PT
+624641232,624641311,FR
+624641312,624641319,BE
+624641320,624641323,ES
+624641324,624641367,FR
+624641368,624641371,DE
+624641372,624642055,FR
+624642056,624642063,PL
+624642064,624642079,BE
+624642080,624642127,FR
+624642128,624642159,GB
+624642160,624642231,FR
+624642232,624642235,ES
+624642236,624642255,FR
+624642256,624642271,IT
+624642272,624642379,FR
+624642380,624642383,FI
+624642384,624642495,FR
+624642496,624642511,ES
+624642512,624642591,FR
+624642592,624642623,DE
+624642624,624642679,FR
+624642680,624642683,IT
+624642684,624642719,FR
+624642720,624642723,IT
+624642724,624642743,FR
+624642744,624642751,GB
+624642752,624642767,FR
+624642768,624642783,GB
+624642784,624642879,FR
+624642880,624642883,IT
+624642884,624643019,FR
624643020,624643023,IT
-624643024,624645147,FR
+624643024,624643039,FR
+624643040,624643055,GB
+624643056,624643071,FR
+624643072,624643087,GB
+624643088,624643095,FR
+624643096,624643103,IT
+624643104,624643187,FR
+624643188,624643191,GB
+624643192,624643343,FR
+624643344,624643351,DE
+624643352,624643359,FR
+624643360,624643367,DE
+624643368,624643503,FR
+624643504,624643519,DE
+624643520,624643631,FR
+624643632,624643647,PL
+624643648,624643775,FR
+624643776,624643783,IT
+624643784,624644063,FR
+624644064,624644095,CH
+624644096,624644275,FR
+624644276,624644279,GB
+624644280,624644615,FR
+624644616,624644619,DE
+624644620,624644631,FR
+624644632,624644635,DE
+624644636,624644639,PL
+624644640,624644675,FR
+624644676,624644679,DE
+624644680,624644723,FR
+624644724,624644727,NL
+624644728,624644815,FR
+624644816,624644819,DE
+624644820,624645127,FR
+624645128,624645131,DE
+624645132,624645147,FR
624645148,624645151,IT
-624645152,624646343,FR
+624645152,624645279,FR
+624645280,624645295,CH
+624645296,624645619,FR
+624645620,624645623,NL
+624645624,624645759,FR
+624645760,624645823,DE
+624645824,624646095,FR
+624646096,624646099,GB
+624646100,624646143,FR
+624646144,624646159,ES
+624646160,624646235,FR
+624646236,624646239,CZ
+624646240,624646255,FR
+624646256,624646263,DE
+624646264,624646343,FR
624646344,624646347,NL
-624646348,624646583,FR
+624646348,624646351,FR
+624646352,624646367,DE
+624646368,624646495,FR
+624646496,624646527,ES
+624646528,624646535,CH
+624646536,624646583,FR
624646584,624646591,NL
-624646592,624647171,FR
+624646592,624646639,FR
+624646640,624646643,IE
+624646644,624646975,FR
+624646976,624646983,PL
+624646984,624647055,FR
+624647056,624647063,DE
+624647064,624647171,FR
624647172,624647183,ES
-624647184,624648139,FR
+624647184,624647247,FR
+624647248,624647263,GB
+624647264,624647295,FR
+624647296,624647327,ES
+624647328,624647359,FR
+624647360,624647375,PL
+624647376,624647391,FR
+624647392,624647399,PL
+624647400,624647455,FR
+624647456,624647471,ES
+624647472,624647487,FR
+624647488,624647503,PT
+624647504,624647615,FR
+624647616,624647623,PL
+624647624,624647631,ES
+624647632,624648079,FR
+624648080,624648095,ES
+624648096,624648111,FR
+624648112,624648115,IT
+624648116,624648127,FR
+624648128,624648135,DE
+624648136,624648139,FR
624648140,624648143,ES
-624648144,624657711,FR
-624657712,624657715,ES
-624657716,624657883,FR
+624648144,624653311,FR
+624653312,624653823,GB
+624653824,624656415,FR
+624656416,624656447,IT
+624656448,624656479,PL
+624656480,624656511,NL
+624656512,624656543,FR
+624656544,624656575,PL
+624656576,624656607,FR
+624656608,624656639,IT
+624656640,624656739,FR
+624656740,624656743,CZ
+624656744,624656767,FR
+624656768,624656799,NL
+624656800,624656975,FR
+624656976,624656979,PT
+624656980,624657147,FR
+624657148,624657155,ES
+624657156,624657183,FR
+624657184,624657199,IE
+624657200,624657279,FR
+624657280,624657295,IT
+624657296,624657299,DE
+624657300,624657307,FR
+624657308,624657311,PT
+624657312,624657343,FR
+624657344,624657359,ES
+624657360,624657475,FR
+624657476,624657479,DE
+624657480,624657487,FR
+624657488,624657491,PT
+624657492,624657663,FR
+624657664,624657667,ES
+624657668,624657671,FI
+624657672,624657675,PL
+624657676,624657707,FR
+624657708,624657715,ES
+624657716,624657779,FR
+624657780,624657783,GB
+624657784,624657799,FR
+624657800,624657803,IE
+624657804,624657815,FR
+624657816,624657819,ES
+624657820,624657823,GB
+624657824,624657883,FR
624657884,624657887,ES
-624657888,624658323,FR
-624658324,624658327,IE
-624658328,624658479,FR
+624657888,624657967,FR
+624657968,624657975,GB
+624657976,624658015,FR
+624658016,624658031,IT
+624658032,624658087,FR
+624658088,624658095,NL
+624658096,624658175,FR
+624658176,624658179,BE
+624658180,624658183,ES
+624658184,624658319,FR
+624658320,624658335,IE
+624658336,624658431,FR
+624658432,624658447,IT
+624658448,624658479,FR
624658480,624658483,DE
-624658484,624659031,FR
+624658484,624658671,FR
+624658672,624658675,IT
+624658676,624658799,FR
+624658800,624658803,PT
+624658804,624658843,FR
+624658844,624658847,ES
+624658848,624659031,FR
624659032,624659039,IT
-624659040,624660827,FR
+624659040,624659055,ES
+624659056,624659071,FR
+624659072,624659135,ES
+624659136,624659199,FR
+624659200,624659215,DE
+624659216,624659279,FR
+624659280,624659295,NL
+624659296,624659307,FR
+624659308,624659311,DE
+624659312,624659315,GB
+624659316,624659391,FR
+624659392,624659407,IT
+624659408,624659455,FR
+624659456,624659487,PL
+624659488,624659647,FR
+624659648,624659663,PL
+624659664,624659799,FR
+624659800,624659803,ES
+624659804,624659871,FR
+624659872,624659903,ES
+624659904,624659935,FR
+624659936,624659951,BE
+624659952,624659967,FR
+624659968,624659975,GB
+624659976,624660503,FR
+624660504,624660511,IT
+624660512,624660563,FR
+624660564,624660567,NL
+624660568,624660607,FR
+624660608,624660639,GB
+624660640,624660827,FR
624660828,624660831,ES
-624660832,624661247,FR
+624660832,624660883,FR
+624660884,624660887,DE
+624660888,624660911,FR
+624660912,624660915,PL
+624660916,624660919,IT
+624660920,624661247,FR
624661248,624661251,ES
-624661252,624661787,FR
+624661252,624661279,FR
+624661280,624661283,CZ
+624661284,624661787,FR
624661788,624661788,RO
-624661789,624661955,FR
+624661789,624661791,FR
+624661792,624661823,DE
+624661824,624661955,FR
624661956,624661959,PL
-624661960,624663951,FR
+624661960,624661967,ES
+624661968,624661975,FI
+624661976,624662455,FR
+624662456,624662459,ES
+624662460,624662543,FR
+624662544,624662559,ES
+624662560,624662623,FR
+624662624,624662627,DE
+624662628,624662751,FR
+624662752,624662755,CZ
+624662756,624662759,FR
+624662760,624662763,CH
+624662764,624662911,FR
+624662912,624663039,GB
+624663040,624663327,FR
+624663328,624663359,DE
+624663360,624663391,PT
+624663392,624663667,FR
+624663668,624663671,ES
+624663672,624663695,FR
+624663696,624663711,IT
+624663712,624663851,FR
+624663852,624663855,GB
+624663856,624663863,FR
+624663864,624663867,DE
+624663868,624663871,ES
+624663872,624663951,FR
624663952,624663955,ES
-624663956,624664527,FR
+624663956,624663971,FR
+624663972,624663975,IT
+624663976,624664255,FR
+624664256,624664287,GB
+624664288,624664319,ES
+624664320,624664351,FR
+624664352,624664367,ES
+624664368,624664479,FR
+624664480,624664483,IT
+624664484,624664527,FR
624664528,624664531,ES
-624664532,624664615,FR
-624664616,624664619,IT
-624664620,624664676,FR
+624664532,624664611,FR
+624664612,624664619,IT
+624664620,624664635,FR
+624664636,624664639,PL
+624664640,624664655,FR
+624664656,624664663,LT
+624664664,624664667,FI
+624664668,624664671,NL
+624664672,624664676,FR
624664677,624664677,IE
-624664678,624665587,FR
+624664678,624664863,FR
+624664864,624664895,ES
+624664896,624664959,NL
+624664960,624665247,FR
+624665248,624665263,PL
+624665264,624665391,FR
+624665392,624665407,PT
+624665408,624665551,FR
+624665552,624665555,LT
+624665556,624665567,FR
+624665568,624665583,GB
+624665584,624665587,FR
624665588,624665591,DE
-624665592,624665803,FR
+624665592,624665607,FR
+624665608,624665611,ES
+624665612,624665727,FR
+624665728,624665759,GB
+624665760,624665775,FR
+624665776,624665779,GB
+624665780,624665783,NL
+624665784,624665787,FR
+624665788,624665791,ES
+624665792,624665803,FR
624665804,624665807,NL
-624665808,624665951,FR
+624665808,624665811,CH
+624665812,624665859,FR
+624665860,624665863,PT
+624665864,624665951,FR
624665952,624665955,NL
-624665956,624667471,FR
+624665956,624665999,FR
+624666000,624666015,BE
+624666016,624666031,FR
+624666032,624666047,PL
+624666048,624666371,FR
+624666372,624666375,BE
+624666376,624666391,FR
+624666392,624666399,DE
+624666400,624666431,FR
+624666432,624666495,IT
+624666496,624666727,FR
+624666728,624666731,PL
+624666732,624666735,BE
+624666736,624666739,IT
+624666740,624666879,FR
+624666880,624666883,IT
+624666884,624666887,GB
+624666888,624666907,FR
+624666908,624666911,GB
+624666912,624666927,FR
+624666928,624666943,BE
+624666944,624666959,IE
+624666960,624666995,FR
+624666996,624666999,NL
+624667000,624667087,FR
+624667088,624667103,ES
+624667104,624667167,FR
+624667168,624667199,GB
+624667200,624667327,FR
+624667328,624667391,NL
+624667392,624667439,FR
+624667440,624667455,GB
+624667456,624667471,FR
624667472,624667475,IT
-624667476,624668063,FR
+624667476,624667599,FR
+624667600,624667603,IT
+624667604,624667827,FR
+624667828,624667831,ES
+624667832,624668063,FR
624668064,624668079,BE
-624668080,624668639,FR
+624668080,624668511,FR
+624668512,624668543,DE
+624668544,624668607,FR
+624668608,624668639,PT
624668640,624668643,NL
-624668644,624669795,FR
+624668644,624668715,FR
+624668716,624668735,ES
+624668736,624668751,FR
+624668752,624668767,GB
+624668768,624668815,FR
+624668816,624668831,ES
+624668832,624668863,FR
+624668864,624668879,ES
+624668880,624669011,FR
+624669012,624669015,DE
+624669016,624669247,FR
+624669248,624669255,DE
+624669256,624669311,FR
+624669312,624669327,ES
+624669328,624669359,FR
+624669360,624669367,IT
+624669368,624669439,FR
+624669440,624669455,NL
+624669456,624669499,FR
+624669500,624669503,DE
+624669504,624669583,FR
+624669584,624669591,IT
+624669592,624669727,FR
+624669728,624669743,GB
+624669744,624669795,FR
624669796,624669799,ES
-624669800,624671455,FR
+624669800,624669871,FR
+624669872,624669879,NL
+624669880,624669887,ES
+624669888,624669963,FR
+624669964,624669967,LT
+624669968,624669983,FR
+624669984,624669987,IT
+624669988,624670147,FR
+624670148,624670151,CZ
+624670152,624670195,FR
+624670196,624670199,LT
+624670200,624670391,FR
+624670392,624670395,NL
+624670396,624670399,GB
+624670400,624670403,FR
+624670404,624670407,ES
+624670408,624670443,FR
+624670444,624670447,ES
+624670448,624670799,FR
+624670800,624670803,GB
+624670804,624670895,FR
+624670896,624670903,DE
+624670904,624670915,FR
+624670916,624670919,ES
+624670920,624671263,FR
+624671264,624671279,ES
+624671280,624671407,FR
+624671408,624671423,GB
+624671424,624671439,FR
+624671440,624671455,IT
624671456,624671471,ES
-624671472,624672547,FR
+624671472,624671855,FR
+624671856,624671871,GB
+624671872,624671935,FR
+624671936,624671943,NL
+624671944,624672067,FR
+624672068,624672071,DE
+624672072,624672095,FR
+624672096,624672127,CZ
+624672128,624672131,FR
+624672132,624672135,BE
+624672136,624672175,FR
+624672176,624672179,IT
+624672180,624672511,FR
+624672512,624672515,LT
+624672516,624672519,IT
+624672520,624672523,FR
+624672524,624672527,GB
+624672528,624672547,FR
624672548,624672551,ES
-624672552,624672559,FR
+624672552,624672555,FI
+624672556,624672559,FR
624672560,624672563,IT
-624672564,624673287,FR
+624672564,624672607,FR
+624672608,624672615,NL
+624672616,624672671,FR
+624672672,624672703,PL
+624672704,624673279,FR
+624673280,624673283,CH
+624673284,624673287,FR
624673288,624673295,DE
-624673296,624673451,FR
+624673296,624673303,FR
+624673304,624673307,GB
+624673308,624673311,FR
+624673312,624673343,CH
+624673344,624673435,FR
+624673436,624673439,DE
+624673440,624673451,FR
624673452,624673455,ES
624673456,624673535,FR
624673536,624673791,ES
-624673792,624673803,FR
+624673792,624673795,PL
+624673796,624673799,DE
+624673800,624673803,FR
624673804,624673807,NL
-624673808,624673903,FR
+624673808,624673823,PL
+624673824,624673871,FR
+624673872,624673879,PL
+624673880,624673883,FR
+624673884,624673887,PL
+624673888,624673891,FI
+624673892,624673895,DE
+624673896,624673903,FR
624673904,624673919,ES
-624673920,624675691,FR
+624673920,624673955,FR
+624673956,624673959,IT
+624673960,624674079,FR
+624674080,624674111,PT
+624674112,624674339,FR
+624674340,624674343,NL
+624674344,624674459,FR
+624674460,624674463,PL
+624674464,624674495,FR
+624674496,624674503,GB
+624674504,624674527,FR
+624674528,624674559,DE
+624674560,624674735,FR
+624674736,624674739,ES
+624674740,624674783,FR
+624674784,624674815,GB
+624674816,624675055,FR
+624675056,624675059,DE
+624675060,624675691,FR
624675692,624675695,ES
-624675696,624675775,FR
+624675696,624675719,FR
+624675720,624675727,NL
+624675728,624675775,FR
624675776,624675779,ES
-624675780,624676003,FR
+624675780,624675803,FR
+624675804,624675807,ES
+624675808,624675839,GB
+624675840,624676003,FR
624676004,624676007,DE
-624676008,624676087,FR
+624676008,624676019,FR
+624676020,624676023,DE
+624676024,624676087,FR
624676088,624676091,DE
-624676092,624676715,FR
+624676092,624676183,FR
+624676184,624676191,GB
+624676192,624676495,FR
+624676496,624676511,BE
+624676512,624676715,FR
624676716,624676719,ES
-624676720,624677463,FR
+624676720,624676799,FR
+624676800,624676863,IT
+624676864,624676939,FR
+624676940,624676943,ES
+624676944,624677055,FR
+624677056,624677087,IT
+624677088,624677119,PL
+624677120,624677247,FR
+624677248,624677263,GB
+624677264,624677279,FI
+624677280,624677407,FR
+624677408,624677439,ES
+624677440,624677463,FR
624677464,624677467,ES
624677468,624677683,FR
624677684,624677687,NL
-624677688,624677767,FR
+624677688,624677727,FR
+624677728,624677731,IT
+624677732,624677767,FR
624677768,624677775,NL
-624677776,624678391,FR
+624677776,624677983,FR
+624677984,624678015,GB
+624678016,624678187,FR
+624678188,624678191,DE
+624678192,624678363,FR
+624678364,624678367,ES
+624678368,624678391,FR
624678392,624678399,NL
-624678400,624678487,FR
+624678400,624678415,FR
+624678416,624678431,GB
+624678432,624678463,FR
+624678464,624678479,PL
+624678480,624678487,FR
624678488,624678495,NL
-624678496,624679175,FR
+624678496,624678527,FR
+624678528,624678543,CH
+624678544,624678591,FR
+624678592,624678655,PT
+624678656,624679175,FR
624679176,624679183,NL
624679184,624679199,FR
624679200,624679203,ES
-624679204,624679679,FR
+624679204,624679311,FR
+624679312,624679327,DE
+624679328,624679391,FR
+624679392,624679407,GB
+624679408,624679679,FR
624679680,624679687,NL
-624679688,624679843,FR
+624679688,624679695,PL
+624679696,624679775,FR
+624679776,624679791,GB
+624679792,624679795,IT
+624679796,624679843,FR
624679844,624679847,ES
-624679848,624680931,FR
+624679848,624680191,FR
+624680192,624680255,IT
+624680256,624680511,FR
+624680512,624680527,IT
+624680528,624680735,FR
+624680736,624680743,IT
+624680744,624680747,NL
+624680748,624680895,FR
+624680896,624680927,ES
+624680928,624680931,FR
624680932,624680935,NL
-624680936,624681351,FR
+624680936,624681095,FR
+624681096,624681103,NL
+624681104,624681279,FR
+624681280,624681295,GB
+624681296,624681327,FR
+624681328,624681331,CH
+624681332,624681335,PL
+624681336,624681351,FR
624681352,624681359,NL
-624681360,624681807,FR
+624681360,624681439,FR
+624681440,624681447,CH
+624681448,624681451,DE
+624681452,624681807,FR
624681808,624681823,BE
-624681824,624683775,FR
+624681824,624681967,FR
+624681968,624681983,ES
+624681984,624681999,IT
+624682000,624682111,FR
+624682112,624682127,IT
+624682128,624682795,FR
+624682796,624682799,NL
+624682800,624683067,FR
+624683068,624683071,GB
+624683072,624683199,FR
+624683200,624683215,ES
+624683216,624683231,DE
+624683232,624683295,FR
+624683296,624683311,ES
+624683312,624683519,FR
+624683520,624683583,GB
+624683584,624683679,FR
+624683680,624683687,GB
+624683688,624683775,FR
624683776,624683779,DE
624683780,624683783,FR
624683784,624683787,DE
-624683788,624683975,FR
+624683788,624683791,PL
+624683792,624683815,FR
+624683816,624683823,PL
+624683824,624683887,FR
+624683888,624683903,GB
+624683904,624683935,FR
+624683936,624683943,DE
+624683944,624683975,FR
624683976,624683983,GB
-624683984,624684183,FR
+624683984,624683991,FR
+624683992,624683999,IT
+624684000,624684103,FR
+624684104,624684111,FI
+624684112,624684175,FR
+624684176,624684183,GB
624684184,624684191,IT
624684192,624684199,FR
624684200,624684203,IT
624684204,624684207,FR
624684208,624684211,ES
-624684212,624684799,FR
+624684212,624684287,FR
+624684288,624684303,IT
+624684304,624684511,FR
+624684512,624684543,NL
+624684544,624684671,FR
+624684672,624684679,DE
+624684680,624684735,FR
+624684736,624684767,GB
+624684768,624684775,ES
+624684776,624684799,FR
624684800,624684803,DE
-624684804,624685711,FR
+624684804,624684831,FR
+624684832,624684847,DE
+624684848,624685055,FR
+624685056,624685059,GB
+624685060,624685063,FI
+624685064,624685215,FR
+624685216,624685219,GB
+624685220,624685263,FR
+624685264,624685279,BE
+624685280,624685311,DE
+624685312,624685503,FR
+624685504,624685535,BE
+624685536,624685539,PT
+624685540,624685559,FR
+624685560,624685567,PT
+624685568,624685711,FR
624685712,624685715,ES
-624685716,624685799,FR
+624685716,624685775,FR
+624685776,624685791,DE
+624685792,624685799,FR
624685800,624685803,ES
624685804,624685919,FR
624685920,624685923,ES
624685924,624685943,FR
624685944,624685947,IT
-624685948,624686627,FR
+624685948,624685951,GB
+624685952,624685983,FR
+624685984,624685987,IT
+624685988,624686207,FR
+624686208,624686239,GB
+624686240,624686271,FR
+624686272,624686303,GB
+624686304,624686335,IE
+624686336,624686627,FR
624686628,624686631,ES
624686632,624686667,FR
624686668,624686671,ES
-624686672,624686711,FR
+624686672,624686687,GB
+624686688,624686711,FR
624686712,624686715,ES
-624686716,624687343,FR
+624686716,624686719,FR
+624686720,624686735,NL
+624686736,624686911,FR
+624686912,624686975,GB
+624686976,624687055,FR
+624687056,624687071,IE
+624687072,624687343,FR
624687344,624687346,CZ
624687347,624687347,ES
-624687348,624687827,FR
+624687348,624687615,FR
+624687616,624687619,BE
+624687620,624687623,FR
+624687624,624687627,GB
+624687628,624687827,FR
624687828,624687831,ES
-624687832,624688007,FR
+624687832,624687967,FR
+624687968,624687983,IT
+624687984,624688007,FR
624688008,624688015,ES
-624688016,624688307,FR
+624688016,624688127,FR
+624688128,624688143,PT
+624688144,624688287,FR
+624688288,624688303,PL
+624688304,624688307,FR
624688308,624688311,ES
-624688312,624688487,FR
+624688312,624688319,FR
+624688320,624688327,FI
+624688328,624688335,PL
+624688336,624688487,FR
624688488,624688491,ES
624688492,624688639,FR
624688640,624688643,ES
-624688644,624688691,FR
+624688644,624688671,FR
+624688672,624688687,PL
+624688688,624688691,FR
624688692,624688695,ES
-624688696,624688779,FR
+624688696,624688723,FR
+624688724,624688727,CH
+624688728,624688779,FR
624688780,624688783,ES
624688784,624688791,FR
624688792,624688795,ES
624688796,624688831,FR
624688832,624688835,ES
-624688836,624689076,FR
+624688836,624688839,FR
+624688840,624688847,ES
+624688848,624688863,FR
+624688864,624688895,ES
+624688896,624688999,FR
+624689000,624689007,ES
+624689008,624689055,FR
+624689056,624689063,ES
+624689064,624689075,FR
+624689076,624689076,ES
624689077,624689078,BE
-624689079,624689151,FR
+624689079,624689079,ES
+624689080,624689119,FR
+624689120,624689123,GB
+624689124,624689151,FR
624689152,624691199,DE
624691200,624693247,FR
624693248,624695295,RU
@@ -4244,7 +5924,7 @@
624738304,624740351,NL
624740352,624742399,DE
624742400,624746495,RU
-624746496,624754687,RO
+624746496,624754687,BG
624754688,624787455,AZ
624787456,624791551,DE
624791552,624795647,ES
@@ -4271,7 +5951,8 @@
625506304,625508351,PL
625508352,625512447,AZ
625512448,625514495,DE
-625514496,625515263,GB
+625514496,625514751,GG
+625514752,625515263,GB
625515264,625516031,GG
625516032,625516543,GB
625516544,625518591,BE
@@ -4284,9 +5965,7 @@
625524480,625524735,SE
625524736,625541119,FR
625541120,625606655,UA
-625606656,625621667,NL
-625621668,625621671,DE
-625621672,625672191,NL
+625606656,625672191,NL
625672192,625674239,RU
625674240,625676287,TR
625676288,625680383,MD
@@ -4332,7 +6011,9 @@
625868800,625999871,RU
625999872,627048447,DE
627048448,627113983,DK
-627113984,627145727,RO
+627113984,627138559,RO
+627138560,627142655,FR
+627142656,627145727,RO
627145728,627146751,ES
627146752,627179519,NL
627179520,627212287,IR
@@ -4344,6 +6025,7 @@
627230720,627232767,IR
627232768,627236863,PL
627236864,627238911,IQ
+627240804,627240804,US
627240960,627245055,RU
627245056,627277823,KZ
627277824,627294207,SA
@@ -4371,8 +6053,7 @@
628246528,628248575,MT
628248576,628250623,FI
628250624,628252671,NL
-628252672,628259071,DE
-628259072,628260863,SC
+628252672,628260863,DE
628260864,628277247,AZ
628277248,628293631,IR
628293632,628359167,UA
@@ -4429,8 +6110,7 @@
629196800,629198847,AZ
629198848,629202943,DK
629202944,629207039,RO
-629207040,629211135,IR
-629211136,629276671,RO
+629207040,629276671,IR
629276672,629293055,PL
629293056,629309439,TR
629309440,629313535,DE
@@ -4483,7 +6163,9 @@
629985280,629987327,TR
629987328,629989375,SE
629989376,629991423,FR
-629991424,629993471,NL
+629991424,629991935,US
+629991936,629992447,NL
+629992448,629993471,US
629993472,629997567,JO
629997568,630063103,SA
630063104,630128639,IL
@@ -4551,7 +6233,8 @@
630980608,630981631,MD
630981632,630982655,RO
630982656,630984703,MD
-630984704,630998271,RO
+630984704,630988799,IR
+630988800,630998271,RO
630998272,630998783,MD
630998784,631001087,RO
631001088,631005183,MD
@@ -4592,7 +6275,25 @@
632946688,632963071,AT
632963072,632979455,AM
632979456,633012223,IT
-633012224,633063679,FR
+633012224,633059583,FR
+633059584,633059615,ES
+633059616,633059647,DE
+633059648,633059839,FR
+633059840,633059871,IT
+633059872,633059983,FR
+633059984,633059987,GB
+633059988,633060031,FR
+633060032,633060159,IT
+633060160,633060223,FR
+633060224,633060287,GB
+633060288,633060511,FR
+633060512,633060543,DE
+633060544,633060607,BE
+633060608,633061119,FR
+633061120,633061247,IT
+633061248,633061311,NL
+633061312,633061375,DE
+633061376,633063679,FR
633063680,633063935,PL
633063936,633064191,FR
633064192,633064447,GB
@@ -4713,15 +6414,11 @@
635195392,635197439,RU
635197440,635199591,GB
635199592,635199599,IT
-635199600,635199647,GB
-635199648,635199655,IT
-635199656,635199775,GB
+635199600,635199775,GB
635199776,635199783,IT
635199784,635200167,GB
635200168,635200175,IT
-635200176,635200199,GB
-635200200,635200207,IT
-635200208,635200263,GB
+635200176,635200263,GB
635200264,635200271,IT
635200272,635200335,GB
635200336,635200343,IT
@@ -4737,15 +6434,11 @@
635200960,635200967,IT
635200968,635200991,GB
635200992,635200999,IT
-635201000,635201023,GB
-635201024,635201031,IT
-635201032,635201087,GB
+635201000,635201087,GB
635201088,635201095,IT
635201096,635201159,GB
635201160,635201167,IT
-635201168,635201255,GB
-635201256,635201263,IT
-635201264,635201455,GB
+635201168,635201455,GB
635201456,635201463,IT
635201464,635203583,GB
635203584,635207679,JO
@@ -4843,8 +6536,7 @@
636966656,636966911,IT
636966912,636967167,DE
636967168,636967935,FR
-636967936,636968191,IT
-636968192,636968447,ES
+636967936,636968447,DE
636968448,636968703,BE
636968704,636968959,DE
636968960,636974079,TR
@@ -4898,15 +6590,11 @@
637337088,637337599,RU
637337600,637403135,NO
637403136,637534207,IR
-637534208,641736959,US
-641736960,641737215,CA
-641737216,641737471,US
-641737472,641737727,CA
-641737728,641761535,US
+637534208,641761535,US
641761536,641761791,CA
641761792,641763071,US
-641763072,641763583,CA
-641763584,641765375,US
+641763072,641763327,CA
+641763328,641765375,US
641765376,641765887,CA
641765888,641766399,US
641766400,641767423,CA
@@ -4915,92 +6603,104 @@
641768960,641769727,US
641769728,641769983,CA
641769984,641771519,US
-641771520,641771775,CA
-641771776,641773055,US
+641771520,641772287,CA
+641772288,641773055,US
641773056,641773311,CA
-641773312,642093055,US
-642093056,642094591,CA
-642094592,642388479,US
+641773312,641828351,US
+641828352,641828607,MX
+641828608,641829057,US
+641829058,641829058,MX
+641829059,642089215,US
+642089216,642089471,CA
+642089472,642093055,US
+642093056,642093311,CA
+642093312,642093567,US
+642093568,642094079,CA
+642094080,642094335,US
+642094336,642094591,CA
+642094592,642387967,US
+642387968,642388223,CA
+642388224,642388479,US
642388480,642388735,CA
642388736,642793471,US
642793472,642793983,CA
-642793984,642925055,US
-642925056,642925311,MX
-642925312,642926335,US
+642793984,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
+643219528,643295231,US
643295232,643295487,PR
643295488,643295743,US
-643295744,643296127,PR
-643296128,643296767,US
+643295744,643296383,PR
+643296384,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
+643318016,643318271,US
+643318272,643318527,CA
+643318528,643318847,US
+643318848,643318911,CA
+643318912,643346431,US
+643346432,643346943,CA
+643346944,644055039,US
+644055040,644055295,CA
+644055296,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
+644056832,644057343,US
+644057344,644057599,CA
+644057600,644058367,US
+644058368,644058879,CA
+644058880,644060671,US
+644060672,644060927,CA
+644060928,644060989,US
+644060990,644060990,CA
+644060991,644061439,US
+644061440,644061631,CA
+644061632,644061663,US
+644061664,644061695,CA
+644061696,644063231,US
+644063232,644063487,CA
+644063488,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
+644065280,644067327,US
+644067328,644067583,CA
+644067584,644069631,US
+644069632,644069887,CA
+644069888,644070143,US
+644070144,644070399,CA
+644070400,644082687,US
+644082688,644082943,PR
+644082944,644268543,US
+644268544,644268569,CA
+644268570,644268570,US
+644268571,644268613,CA
+644268614,644268614,US
+644268615,644268799,CA
+644268800,644323391,US
644323392,644323407,CA
-644323408,644323583,US
-644323584,644323839,CA
-644323840,644389631,US
-644389632,644390911,CA
-644390912,644403199,US
+644323408,644389887,US
+644389888,644390399,CA
+644390400,644403199,US
644403200,644403455,CA
-644403456,644408063,US
-644408064,644408319,CA
-644408320,644414207,US
+644403456,644414207,US
644414208,644414463,CA
644414464,644422911,US
644422912,644423423,JP
644423424,644569087,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
+644570112,644570367,PR
+644570368,644570879,US
+644570880,644571135,PR
+644571136,644628735,US
644628736,644628991,CA
644628992,644634367,US
644634368,644634623,CA
@@ -5008,71 +6708,47 @@
644718848,644719103,CA
644719104,644760575,US
644760576,644760831,CA
-644760832,644761343,US
-644761344,644761599,CA
-644761600,644762879,US
-644762880,644763135,CA
-644763136,644765439,US
+644760832,644761439,US
+644761440,644761455,CA
+644761456,644763903,US
+644763904,644764159,CA
+644764160,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
+644765696,644767743,US
+644767744,644768767,CA
+644768768,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
+644838656,644840959,CA
+644840960,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
+644901888,644981759,US
+644981760,644982015,CA
+644982016,645185535,US
645185536,645185791,CA
-645185792,645188095,US
-645188096,645188351,CA
-645188352,645221631,US
+645185792,645187071,US
+645187072,645187583,CA
+645187584,645221631,US
645221632,645222399,CA
-645222400,645223423,US
-645223424,645223679,CA
-645223680,645225471,US
+645222400,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
+645228288,645482511,US
+645482512,645482519,CA
+645482520,645526783,US
645526784,645527039,CA
-645527040,645527551,US
-645527552,645527807,CA
-645527808,645528063,US
-645528064,645529343,CA
-645529344,645540351,US
+645527040,645527807,US
+645527808,645528319,CA
+645528320,645540351,US
645540352,645540607,CA
-645540608,645547007,US
-645547008,645547263,CA
-645547264,645576703,US
+645540608,645576703,US
645576704,645576997,CA
645576998,645576998,US
645576999,645577215,CA
@@ -5083,16 +6759,18 @@
645645056,645646591,US
645646592,645646847,MX
645646848,645704447,US
-645704448,645704703,MX
-645704704,645705215,US
+645704448,645704959,MX
+645704960,645705215,US
645705216,645705471,MX
645705472,645737983,US
645737984,645738239,PR
645738240,645873663,US
-645873664,645874175,CA
-645874176,645875711,US
-645875712,645876735,CA
-645876736,645989450,US
+645873664,645874431,CA
+645874432,645875967,US
+645875968,645876735,CA
+645876736,645984255,US
+645984256,645988351,CA
+645988352,645989450,US
645989451,645989451,CA
645989452,654311423,US
654311424,654311679,CN
@@ -5105,7 +6783,8 @@
655360000,656408575,KR
656408576,658505727,PK
658505728,660602879,CN
-660602880,661651455,HK
+660602880,661520383,HK
+661520384,661651455,JP
661651456,662700031,KR
662700032,666894335,CN
666894336,671088639,ID
@@ -5136,7 +6815,9 @@
692207616,692240383,ZA
692240384,692256767,GH
692256768,692260863,SD
-692260864,692261887,UG
+692260864,692260865,UG
+692260866,692260866,SD
+692260867,692261887,UG
692261888,692273151,SD
692273152,692289535,EG
692289536,692305919,NG
@@ -5147,10 +6828,14 @@
692518912,692551679,ZA
692551680,692584447,NG
692584448,692600831,AO
-692600832,692609023,EG
+692600832,692608255,EG
+692608256,692608767,AO
+692608768,692609023,EG
692609024,692617215,ZM
692617216,692625407,ZA
-692625408,692641791,KE
+692625408,692626687,KE
+692626688,692626943,AO
+692626944,692641791,KE
692641792,692649983,GA
692649984,692658175,NG
692658176,692666367,ZA
@@ -5233,7 +6918,7 @@
692946944,692948991,EG
692948992,692951039,ZM
692951040,692953087,ZA
-692953088,692955135,RW
+692953088,692954111,RW
692955136,692957183,NG
692957184,692959231,DZ
692959232,692961279,GN
@@ -5382,7 +7067,9 @@
693567488,693575679,MW
693575680,693583871,KE
693583872,693592063,NG
-693592064,693600255,MU
+693592064,693594367,MU
+693594368,693594623,KE
+693594624,693600255,MU
693600256,693608447,MA
693608448,693616639,BW
693616640,693633023,ZA
@@ -5465,8 +7152,8 @@
700340224,700341247,GH
700341248,700342271,MW
700342272,700350463,NA
-700350464,700351231,MU
-700351232,700352511,UG
+700350464,700351487,MU
+700351488,700352511,UG
700352512,700358655,MU
700358656,700366847,MZ
700366848,700375039,UG
@@ -5515,9 +7202,7 @@
700776448,700841983,RW
700841984,700846079,MU
700846080,700850175,NA
-700850176,700851455,MU
-700851456,700851711,ZA
-700851712,700854271,MU
+700850176,700854271,MU
700854272,700855295,NA
700855296,700866559,MU
700866560,700866815,NG
@@ -5561,9 +7246,7 @@
701308928,701317119,AO
701317120,701325311,CM
701325312,701333503,EG
-701333504,701338111,NA
-701338112,701338367,ZM
-701338368,701341695,NA
+701333504,701341695,NA
701341696,701349887,NG
701349888,701358079,MA
701358080,701366271,SL
@@ -5599,9 +7282,7 @@
701495296,701496319,NG
701496320,701497343,GH
701497344,701513727,ZA
-701513728,701523711,LY
-701523712,701523967,CA
-701523968,701530111,LY
+701513728,701530111,LY
701530112,701546495,SN
701546496,701562879,ZA
701562880,701579263,KE
@@ -5625,7 +7306,9 @@
701890560,701923327,SN
701923328,701956095,MA
701956096,701992959,KE
-701992960,701997055,SZ
+701992960,701994495,SZ
+701994496,701994751,ZA
+701994752,701997055,SZ
701997056,702001151,GH
702001152,702005247,ZM
702005248,702009343,KE
@@ -5635,7 +7318,9 @@
702017536,702018559,EG
702018560,702019583,NG
702019584,702020607,RW
-702020608,702021631,CD
+702020608,702021119,CD
+702021120,702021375,ZA
+702021376,702021631,CD
702021632,702029823,ZM
702029824,702038015,BJ
702038016,702046207,ZM
@@ -5804,134 +7489,23 @@
702542848,702543871,ZA
702543872,702544895,BJ
702544896,702545919,ZA
-702545920,702721791,TN
-702721792,702722047,GP
-702722048,702729215,TN
-702729216,702729471,GP
-702729472,703070207,TN
+702545920,703070207,TN
703070208,703594495,EG
-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
+703594496,703725567,SD
+703725568,703727615,KE
+703727616,703728639,TZ
703728640,703733759,LY
-703733760,703734527,CM
-703734528,703734783,ZA
-703734784,703735807,CM
+703733760,703735807,CI
703735808,703737855,ZA
703737856,703746047,NG
703746048,703747071,ZA
703747072,703748095,CD
-703748096,703748351,ZA
-703748352,703749119,GN
+703748096,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
+703750144,703754239,MG
703754240,703755263,GH
-703755264,703755899,ZA
+703755264,703755519,YT
+703755520,703755899,ZA
703755900,703755900,YT
703755901,703757311,ZA
703757312,703758335,RE
@@ -5939,125 +7513,8 @@
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
+703791104,703856639,CD
+703856640,703922175,CM
703922176,704118783,ZA
704118784,704380927,MA
704380928,704643071,LY
@@ -6102,7 +7559,9 @@
711166464,711166591,HK
711166592,711169311,JP
711169312,711169327,IN
-711169328,711196671,JP
+711169328,711173119,JP
+711173120,711173375,SG
+711173376,711196671,JP
711196672,711458815,CN
711458816,711983103,IN
711983104,712507391,VN
@@ -6126,21 +7585,55 @@
717881344,720437247,CN
720437248,720502783,AU
720502784,721420287,CN
-721420288,737479679,JP
+721420288,737206271,JP
+737206272,737207295,ID
+737207296,737221631,JP
+737221632,737222655,IN
+737222656,737230847,JP
+737230848,737231871,IN
+737231872,737244159,JP
+737244160,737246207,IN
+737246208,737247231,JP
+737247232,737249279,IN
+737249280,737290239,JP
+737290240,737291263,AU
+737291264,737479679,JP
737479680,737480703,IN
-737480704,737490943,JP
+737480704,737488895,JP
+737488896,737489151,AU
+737489152,737490943,JP
737490944,737491967,FJ
-737491968,737511423,JP
+737491968,737502207,JP
+737502208,737503231,IN
+737503232,737507327,JP
+737507328,737508351,AU
+737508352,737509872,JP
+737509873,737509873,PK
+737509874,737511423,JP
737511424,737512447,IN
-737512448,737514495,JP
+737512448,737513471,BD
+737513472,737514495,JP
737514496,737515519,IN
737515520,737516543,JP
737516544,737517567,IN
-737517568,737526783,JP
+737517568,737517823,AU
+737517824,737518079,NZ
+737518080,737518335,AU
+737518336,737526783,JP
737526784,737527295,US
-737527296,737529855,JP
+737527296,737527551,SG
+737527552,737527807,ID
+737527808,737529855,JP
737529856,737530879,IN
-737530880,737941503,JP
+737530880,737538047,JP
+737538048,737539071,NZ
+737539072,737644644,JP
+737644645,737644645,IN
+737644646,737838079,JP
+737838080,737839103,IN
+737839104,737857535,JP
+737857536,737858559,IN
+737858560,737941503,JP
737941504,737944575,IN
737944576,737950719,JP
737950720,737951743,IN
@@ -6149,12 +7642,21 @@
737959936,737965055,JP
737965056,737966079,IN
737966080,737967103,JP
-737967104,737967359,AU
-737967360,737991679,JP
+737967104,737968127,AU
+737968128,737971199,JP
+737971200,737972223,IN
+737972224,737972735,ID
+737972736,737987583,JP
+737987584,737988607,IN
+737988608,737991679,JP
737991680,737992191,IN
737992192,737999320,JP
737999321,737999321,IN
-737999322,738197503,JP
+737999322,738160639,JP
+738160640,738161663,KH
+738161664,738173951,JP
+738173952,738174975,IN
+738174976,738197503,JP
738197504,746717183,US
746717184,746782719,DE
746782720,755105791,US
@@ -6177,7 +7679,9 @@
759188480,759189503,TH
759189504,759190527,PH
759190528,759193599,IN
-759193600,759195647,ID
+759193600,759193855,ID
+759193856,759194111,SG
+759194112,759195647,ID
759195648,759196671,IN
759196672,759197695,HK
759197696,759198207,CN
@@ -6210,7 +7714,6 @@
759235584,759236607,NZ
759236608,759237631,IN
759237632,759238655,AU
-765460480,767557631,UY
771751936,771817471,RU
771817472,771948543,TR
771948544,772014079,RU
@@ -6232,7 +7735,9 @@
772538368,772603903,GR
772603904,772669439,CZ
772669440,772734975,CH
-772734976,772800511,NO
+772734976,772753663,NO
+772753664,772753919,RU
+772753920,772800511,NO
772800512,772802559,GB
772802560,772804607,RU
772804608,772806655,GL
@@ -6303,16 +7808,11 @@
772917248,772919295,RU
772919296,772923391,GB
772923392,772925439,AT
-772925440,772926463,GB
-772926464,772926719,ZW
-772926720,772927231,GB
-772927232,772927487,ZW
+772925440,772927487,GB
772927488,772929535,UA
772929536,772931583,RU
772931584,772933631,UA
-772933632,772933887,GB
-772933888,772934143,IE
-772934144,772935679,GB
+772933632,772935679,GB
772935680,772937727,PS
772937728,772939775,IT
772939776,772941823,BE
@@ -6368,8 +7868,8 @@
773050368,773052415,IE
773052416,773054463,NL
773054464,773055231,AL
-773055232,773055359,XK
-773055360,773055871,AL
+773055232,773055487,XK
+773055488,773055871,AL
773055872,773055999,RS
773056000,773056255,XK
773056256,773056511,AL
@@ -6494,8 +7994,7 @@
773646336,773648383,TR
773648384,773650431,PL
773650432,773652479,GB
-773652480,773652735,TR
-773652736,773653503,SK
+773652480,773653503,SK
773653504,773654527,TR
773654528,773656575,RU
773656576,773658623,PL
@@ -6580,13 +8079,11 @@
773828608,773830655,HU
773830656,773832703,NO
773832704,773834751,FR
-773834752,773835007,GB
-773835008,773835263,IM
-773835264,773835519,GB
+773834752,773835519,GB
773835520,773835775,IM
773835776,773836031,GB
-773836032,773836287,IM
-773836288,773836799,GB
+773836032,773836543,IM
+773836544,773836799,GB
773836800,773838847,FR
773838848,773840895,DE
773840896,773842943,GB
@@ -6606,7 +8103,9 @@
773906432,773922815,GB
773922816,773931007,UA
773931008,773934591,DE
-773934592,773939199,FR
+773934592,773935352,FR
+773935353,773935353,US
+773935354,773939199,FR
773939200,773947391,CZ
773947392,773955583,GB
773955584,773963775,FR
@@ -6636,13 +8135,7 @@
774078464,774086655,BA
774086656,774094847,BG
774094848,774103039,HU
-774103040,774104831,RU
-774104832,774105087,UA
-774105088,774105343,RU
-774105344,774105599,UA
-774105600,774109695,RU
-774109696,774109951,UA
-774109952,774119423,RU
+774103040,774119423,RU
774119424,774127615,CZ
774127616,774135807,LT
774135808,774143999,IR
@@ -6752,7 +8245,8 @@
774161569,774161578,LC
774161579,774161588,VE
774161589,774161598,TC
-774161599,774161628,US
+774161599,774161618,US
+774161619,774161628,VA
774161629,774161638,PA
774161639,774161648,RU
774161649,774161658,HK
@@ -6845,9 +8339,7 @@
774162563,774162572,MQ
774162573,774162582,YT
774162583,774162592,NC
-774162593,774162593,NG
-774162594,774162601,CA
-774162602,774162602,NG
+774162593,774162602,CA
774162603,774162622,US
774162623,774162627,MX
774162628,774162637,GB
@@ -6868,7 +8360,8 @@
774162704,774162738,US
774162739,774162743,VA
774162744,774162778,US
-774162779,774162787,CA
+774162779,774162784,CA
+774162785,774162787,UA
774162788,774162788,VA
774162789,774162798,CA
774162799,774162803,BN
@@ -7052,21 +8545,23 @@
778043392,778108927,UA
778108928,778174463,RO
778174464,778239999,UA
-778240000,778244095,AL
-778244096,778244351,RS
+778240000,778242815,AL
+778242816,778243071,XK
+778243072,778243327,RS
+778243328,778244095,AL
+778244096,778244351,XK
778244352,778245119,AL
-778245120,778245375,RS
-778245376,778247679,AL
-778247680,778247935,XK
-778247936,778248191,RS
-778248192,778249727,AL
+778245120,778245375,XK
+778245376,778249727,AL
778249728,778249983,RS
778249984,778304305,AL
778304306,778304306,SI
778304307,778305535,AL
778305536,778371071,IR
778371072,778436607,RU
-778436608,778476031,RO
+778436608,778469375,RO
+778469376,778473471,IR
+778473472,778476031,RO
778476032,778476287,MD
778476288,778493951,RO
778493952,778495999,NL
@@ -7075,95 +8570,537 @@
778500096,778502143,RO
778502144,778567679,GR
778567680,778633215,TR
-778633216,778666259,FR
+778633216,778640127,FR
+778640128,778640383,GB
+778640384,778666143,FR
+778666144,778666151,DE
+778666152,778666239,FR
+778666240,778666243,PL
+778666244,778666259,FR
778666260,778666263,ES
-778666264,778666479,FR
+778666264,778666299,FR
+778666300,778666303,FI
+778666304,778666383,FR
+778666384,778666387,IE
+778666388,778666479,FR
778666480,778666495,DE
-778666496,778666879,FR
+778666496,778666871,FR
+778666872,778666879,DE
778666880,778666943,GB
-778666944,778667391,FR
+778666944,778666959,FR
+778666960,778666967,IT
+778666968,778666975,GB
+778666976,778667007,FR
+778667008,778667039,GB
+778667040,778667071,IT
+778667072,778667131,FR
+778667132,778667135,BE
+778667136,778667287,FR
+778667288,778667291,NL
+778667292,778667295,DE
+778667296,778667327,FR
+778667328,778667331,DE
+778667332,778667391,FR
778667392,778667395,IT
-778667396,778668863,FR
+778667396,778667399,FR
+778667400,778667407,FI
+778667408,778667455,FR
+778667456,778667471,GB
+778667472,778667475,NL
+778667476,778667911,FR
+778667912,778667919,BE
+778667920,778667927,GB
+778667928,778667935,FR
+778667936,778667943,DE
+778667944,778667947,FR
+778667948,778667951,IT
+778667952,778668015,FR
+778668016,778668019,CZ
+778668020,778668063,FR
+778668064,778668095,GB
+778668096,778668543,FR
+778668544,778668559,BE
+778668560,778668575,FR
+778668576,778668591,NL
+778668592,778668623,FR
+778668624,778668627,ES
+778668628,778668715,FR
+778668716,778668719,IT
+778668720,778668863,FR
778668864,778668895,DE
-778668896,778670975,FR
+778668896,778668927,PT
+778668928,778669503,FR
+778669504,778669535,FI
+778669536,778669567,FR
+778669568,778669575,BE
+778669576,778669623,FR
+778669624,778669631,IT
+778669632,778669759,FR
+778669760,778669767,DE
+778669768,778670043,FR
+778670044,778670047,DE
+778670048,778670151,FR
+778670152,778670159,IT
+778670160,778670163,NL
+778670164,778670171,FR
+778670172,778670175,DE
+778670176,778670215,FR
+778670216,778670223,DE
+778670224,778670247,FR
+778670248,778670255,PL
+778670256,778670347,FR
+778670348,778670351,PL
+778670352,778670387,FR
+778670388,778670391,ES
+778670392,778670395,GB
+778670396,778670399,FR
+778670400,778670407,DE
+778670408,778670415,FR
+778670416,778670431,DE
+778670432,778670543,FR
+778670544,778670559,GB
+778670560,778670567,NL
+778670568,778670571,FR
+778670572,778670575,DE
+778670576,778670591,BE
+778670592,778670975,FR
778670976,778670976,DE
-778670977,778671201,FR
-778671202,778671202,ES
-778671203,778673187,FR
+778670977,778671103,FR
+778671104,778671119,CH
+778671120,778671127,GB
+778671128,778671199,FR
+778671200,778671203,ES
+778671204,778671247,FR
+778671248,778671263,GB
+778671264,778671279,PT
+778671280,778671331,FR
+778671332,778671335,IT
+778671336,778671647,FR
+778671648,778671679,ES
+778671680,778671743,GB
+778671744,778671887,FR
+778671888,778671903,NL
+778671904,778671907,FR
+778671908,778671911,FI
+778671912,778672111,FR
+778672112,778672115,IT
+778672116,778672543,FR
+778672544,778672559,DE
+778672560,778672803,FR
+778672804,778672807,FI
+778672808,778672815,FR
+778672816,778672823,CH
+778672824,778672887,FR
+778672888,778672891,PL
+778672892,778673079,FR
+778673080,778673087,GB
+778673088,778673119,FR
+778673120,778673151,DE
+778673152,778673187,FR
778673188,778673191,ES
778673192,778673207,FR
778673208,778673211,ES
-778673212,778673383,FR
+778673212,778673215,FR
+778673216,778673247,IE
+778673248,778673383,FR
778673384,778673387,IT
-778673388,778673883,FR
+778673388,778673791,FR
+778673792,778673807,BE
+778673808,778673883,FR
778673884,778673887,ES
-778673888,778675763,FR
+778673888,778674431,FR
+778674432,778674439,IT
+778674440,778674447,FR
+778674448,778674451,BE
+778674452,778674459,FR
+778674460,778674463,DE
+778674464,778674475,IT
+778674476,778674479,CZ
+778674480,778674487,DE
+778674488,778674627,FR
+778674628,778674631,PL
+778674632,778674635,NL
+778674636,778674783,FR
+778674784,778674799,IT
+778674800,778674847,FR
+778674848,778674863,IT
+778674864,778674911,FR
+778674912,778674927,PL
+778674928,778674943,ES
+778674944,778674983,FR
+778674984,778674991,ES
+778674992,778675023,FR
+778675024,778675039,BE
+778675040,778675219,FR
+778675220,778675223,DE
+778675224,778675363,FR
+778675364,778675367,DE
+778675368,778675439,FR
+778675440,778675443,NL
+778675444,778675451,FR
+778675452,778675455,IT
+778675456,778675491,FR
+778675492,778675495,ES
+778675496,778675503,FR
+778675504,778675511,IT
+778675512,778675535,FR
+778675536,778675543,ES
+778675544,778675555,FR
+778675556,778675559,PT
+778675560,778675567,DE
+778675568,778675627,FR
+778675628,778675631,ES
+778675632,778675759,FR
+778675760,778675763,GB
778675764,778675767,PL
778675768,778675795,FR
778675796,778675799,ES
-778675800,778675891,FR
+778675800,778675851,FR
+778675852,778675855,PT
+778675856,778675863,IT
+778675864,778675891,FR
778675892,778675895,ES
-778675896,778677071,FR
+778675896,778675903,GB
+778675904,778675967,FR
+778675968,778675999,DE
+778676000,778676063,FR
+778676064,778676095,CH
+778676096,778676111,NL
+778676112,778676123,FR
+778676124,778676127,PL
+778676128,778676215,FR
+778676216,778676219,CZ
+778676220,778676415,FR
+778676416,778676423,IE
+778676424,778676579,FR
+778676580,778676587,DE
+778676588,778676591,ES
+778676592,778676611,FR
+778676612,778676615,LT
+778676616,778676655,FR
+778676656,778676671,NL
+778676672,778676687,FR
+778676688,778676691,IT
+778676692,778676695,GB
+778676696,778676727,FR
+778676728,778676735,NL
+778676736,778676743,FR
+778676744,778676751,DE
+778676752,778676783,FR
+778676784,778676799,BE
+778676800,778676807,FR
+778676808,778676815,ES
+778676816,778676827,FR
+778676828,778676831,ES
+778676832,778676847,FR
+778676848,778676851,PL
+778676852,778676855,NL
+778676856,778677039,FR
+778677040,778677055,PL
+778677056,778677063,FR
+778677064,778677071,CH
778677072,778677075,NL
-778677076,778677471,FR
+778677076,778677343,FR
+778677344,778677375,PL
+778677376,778677439,FR
+778677440,778677455,FI
+778677456,778677471,FR
778677472,778677475,DE
778677476,778677503,FR
-778677504,778677507,GB
-778677508,778677519,FR
-778677520,778677523,ES
-778677524,778679212,FR
+778677504,778677505,GB
+778677506,778677506,ES
+778677507,778677507,GB
+778677508,778677759,ES
+778677760,778677855,FR
+778677856,778677859,ES
+778677860,778677875,FR
+778677876,778677879,IT
+778677880,778677943,FR
+778677944,778677947,PL
+778677948,778678019,FR
+778678020,778678023,NL
+778678024,778678027,PL
+778678028,778678031,FR
+778678032,778678035,GB
+778678036,778678119,FR
+778678120,778678127,IT
+778678128,778678175,FR
+778678176,778678191,GB
+778678192,778678807,FR
+778678808,778678815,ES
+778678816,778678839,FR
+778678840,778678847,PL
+778678848,778678871,FR
+778678872,778678875,PL
+778678876,778678991,FR
+778678992,778679007,GB
+778679008,778679023,FR
+778679024,778679031,NL
+778679032,778679087,FR
+778679088,778679095,PL
+778679096,778679167,FR
+778679168,778679199,GB
+778679200,778679212,FR
778679213,778679214,FI
778679215,778679491,FR
778679492,778679495,ES
-778679496,778680227,FR
+778679496,778679503,IT
+778679504,778679519,FR
+778679520,778679531,ES
+778679532,778679679,FR
+778679680,778679695,ES
+778679696,778679711,NL
+778679712,778679907,FR
+778679908,778679911,PT
+778679912,778679935,FR
+778679936,778679999,GB
+778680000,778680111,FR
+778680112,778680127,NL
+778680128,778680227,FR
778680228,778680231,IE
-778680232,778680683,FR
+778680232,778680447,FR
+778680448,778680455,GB
+778680456,778680471,FR
+778680472,778680475,GB
+778680476,778680559,FR
+778680560,778680575,IT
+778680576,778680683,FR
778680684,778680687,ES
-778680688,778681487,FR
+778680688,778681403,FR
+778681404,778681407,ES
+778681408,778681423,FR
+778681424,778681431,FI
+778681432,778681435,IT
+778681436,778681459,FR
+778681460,778681463,LT
+778681464,778681487,FR
778681488,778681495,NL
778681496,778681503,FR
778681504,778681507,DE
778681508,778681519,FR
778681520,778681523,ES
-778681524,778681823,FR
+778681524,778681547,FR
+778681548,778681551,ES
+778681552,778681787,FR
+778681788,778681791,ES
+778681792,778681823,FR
778681824,778681827,IT
-778681828,778691619,FR
+778681828,778681843,FR
+778681844,778681847,CH
+778681848,778681919,FR
+778681920,778681983,PT
+778681984,778682295,FR
+778682296,778682299,PL
+778682300,778682351,FR
+778682352,778682367,DE
+778682368,778690559,FR
+778690560,778690591,BE
+778690592,778690635,FR
+778690636,778690639,BE
+778690640,778690711,FR
+778690712,778690719,BE
+778690720,778690935,FR
+778690936,778690943,CH
+778690944,778690959,BE
+778690960,778691047,FR
+778691048,778691055,ES
+778691056,778691063,NL
+778691064,778691375,FR
+778691376,778691391,ES
+778691392,778691471,FR
+778691472,778691479,PL
+778691480,778691619,FR
778691620,778691623,IT
778691624,778691711,FR
778691712,778691727,GB
-778691728,778692499,FR
+778691728,778691743,FR
+778691744,778691751,DE
+778691752,778691775,FR
+778691776,778691791,IT
+778691792,778691971,FR
+778691972,778691975,CZ
+778691976,778691983,FR
+778691984,778691987,CH
+778691988,778691999,FR
+778692000,778692007,IT
+778692008,778692055,FR
+778692056,778692059,LT
+778692060,778692107,FR
+778692108,778692111,GB
+778692112,778692119,IT
+778692120,778692143,FR
+778692144,778692159,ES
+778692160,778692195,FR
+778692196,778692199,GB
+778692200,778692287,FR
+778692288,778692319,LT
+778692320,778692499,FR
778692500,778692503,ES
-778692504,778692535,FR
+778692504,778692519,FR
+778692520,778692527,NL
+778692528,778692535,FR
778692536,778692539,IT
-778692540,778692743,FR
+778692540,778692619,FR
+778692620,778692623,ES
+778692624,778692739,FR
+778692740,778692743,IE
778692744,778692747,ES
-778692748,778693095,FR
+778692748,778692751,FR
+778692752,778692767,DE
+778692768,778692799,FR
+778692800,778692807,LT
+778692808,778692815,FR
+778692816,778692823,PL
+778692824,778692847,FR
+778692848,778692863,DE
+778692864,778692879,FR
+778692880,778692883,NL
+778692884,778692887,ES
+778692888,778692927,FR
+778692928,778692943,PL
+778692944,778693075,FR
+778693076,778693079,DE
+778693080,778693095,FR
778693096,778693099,ES
-778693100,778693427,FR
+778693100,778693151,FR
+778693152,778693155,IT
+778693156,778693223,FR
+778693224,778693227,PL
+778693228,778693243,FR
+778693244,778693247,CZ
+778693248,778693403,FR
+778693404,778693407,PL
+778693408,778693427,FR
778693428,778693431,ES
-778693432,778693759,FR
+778693432,778693455,FR
+778693456,778693459,BE
+778693460,778693471,FR
+778693472,778693503,NL
+778693504,778693515,FR
+778693516,778693519,GB
+778693520,778693623,FR
+778693624,778693627,NL
+778693628,778693631,ES
+778693632,778693679,FR
+778693680,778693695,DE
+778693696,778693759,FR
778693760,778693763,ES
-778693764,778695471,FR
+778693764,778693767,PL
+778693768,778693791,FR
+778693792,778693799,NL
+778693800,778693887,FR
+778693888,778693891,ES
+778693892,778693971,FR
+778693972,778693975,CH
+778693976,778694171,FR
+778694172,778694175,CH
+778694176,778694295,FR
+778694296,778694299,IT
+778694300,778694519,FR
+778694520,778694527,CH
+778694528,778694563,FR
+778694564,778694567,GB
+778694568,778694575,NL
+778694576,778694647,FR
+778694648,778694655,DE
+778694656,778694679,FR
+778694680,778694687,GB
+778694688,778694975,FR
+778694976,778695007,CH
+778695008,778695039,ES
+778695040,778695103,FR
+778695104,778695135,FI
+778695136,778695167,DE
+778695168,778695303,FR
+778695304,778695307,DE
+778695308,778695323,FR
+778695324,778695327,PL
+778695328,778695339,FR
+778695340,778695343,ES
+778695344,778695347,DE
+778695348,778695375,FR
+778695376,778695391,FI
+778695392,778695471,FR
778695472,778695475,ES
778695476,778695487,FR
778695488,778695503,BE
-778695504,778696495,FR
+778695504,778695663,FR
+778695664,778695679,PL
+778695680,778695711,FR
+778695712,778695743,GB
+778695744,778695759,FR
+778695760,778695767,NL
+778695768,778695823,FR
+778695824,778695839,FI
+778695840,778695871,DE
+778695872,778695927,FR
+778695928,778695935,IT
+778695936,778696199,FR
+778696200,778696207,NL
+778696208,778696211,PL
+778696212,778696255,FR
+778696256,778696263,IE
+778696264,778696383,FR
+778696384,778696415,PT
+778696416,778696487,FR
+778696488,778696495,IT
778696496,778696499,ES
-778696500,778696991,FR
+778696500,778696559,FR
+778696560,778696567,PL
+778696568,778696591,FR
+778696592,778696607,DE
+778696608,778696639,NL
+778696640,778696643,ES
+778696644,778696647,FR
+778696648,778696655,PL
+778696656,778696987,FR
+778696988,778696991,NL
778696992,778696995,ES
778696996,778697067,FR
778697068,778697071,ES
-778697072,778697175,FR
+778697072,778697119,FR
+778697120,778697151,IT
+778697152,778697175,FR
778697176,778697179,ES
-778697180,778697815,FR
+778697180,778697183,FR
+778697184,778697215,PT
+778697216,778697247,FR
+778697248,778697255,DE
+778697256,778697347,FR
+778697348,778697351,PL
+778697352,778697567,FR
+778697568,778697599,GB
+778697600,778697663,FR
+778697664,778697667,IE
+778697668,778697671,FR
+778697672,778697675,GB
+778697676,778697679,FR
+778697680,778697683,DE
+778697684,778697727,FR
+778697728,778697791,DE
+778697792,778697807,FR
+778697808,778697815,IT
778697816,778697819,ES
-778697820,778697955,FR
+778697820,778697847,FR
+778697848,778697851,DE
+778697852,778697955,FR
778697956,778697959,ES
-778697960,778698447,FR
+778697960,778698399,FR
+778698400,778698431,BE
+778698432,778698447,FR
778698448,778698451,ES
-778698452,778698643,FR
+778698452,778698455,FR
+778698456,778698463,PL
+778698464,778698467,IT
+778698468,778698623,FR
+778698624,778698627,FI
+778698628,778698631,FR
+778698632,778698635,GB
+778698636,778698643,FR
778698644,778698647,ES
-778698648,778698703,FR
+778698648,778698667,FR
+778698668,778698671,GB
+778698672,778698703,FR
778698704,778698707,ES
778698708,778698751,FR
778698752,778764287,TR
@@ -7298,8 +9235,12 @@
782667776,782671871,NL
782671872,782672871,LT
782672872,782672879,IL
-782672880,782675967,LT
-782675968,782680063,NL
+782672880,782672927,LT
+782672928,782672959,US
+782672960,782675967,LT
+782675968,782676735,NL
+782676736,782676991,DE
+782676992,782680063,NL
782680064,782696447,RU
782696448,782712831,DE
782712832,782729215,RU
@@ -7424,7 +9365,9 @@
783775744,783777791,AL
783777792,783779839,RU
783779840,783781887,DK
-783781888,783783935,NL
+783781888,783782655,NL
+783782656,783782911,RU
+783782912,783783935,NL
783783936,783785983,DE
783785984,783788031,RU
783788032,783790079,NO
@@ -7460,9 +9403,7 @@
784269312,784302079,BY
784302080,784334847,RU
784334848,784465919,FR
-784465920,784524287,SE
-784524288,784524543,PL
-784524544,784596991,SE
+784465920,784596991,SE
784596992,784728063,TR
784728064,784793599,GR
784793600,784859135,CY
@@ -7598,11 +9539,11 @@
786919800,786919807,IT
786919808,786919879,GB
786919880,786919887,IT
-786919888,786919967,GB
-786919968,786919975,IT
-786919976,786920191,GB
+786919888,786920191,GB
786920192,786920199,IT
-786920200,786920343,GB
+786920200,786920303,GB
+786920304,786920311,IT
+786920312,786920343,GB
786920344,786920351,IT
786920352,786920631,GB
786920632,786920639,IT
@@ -7713,28 +9654,16 @@
787333120,787349503,DE
787349504,787365887,BG
787365888,787382271,PL
-787382272,787387647,GP
-787387648,787388671,MQ
-787388672,787388927,GP
-787388928,787390207,MQ
+787382272,787383039,GP
+787383040,787383295,MF
+787383296,787389951,GP
+787389952,787390207,MQ
787390208,787390463,GP
-787390464,787391231,FR
-787391232,787391487,MQ
-787391488,787391743,FR
-787391744,787392255,MQ
-787392256,787392511,FR
-787392512,787392767,GP
-787392768,787393791,FR
-787393792,787394303,GP
-787394304,787394559,FR
+787390464,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
+787394816,787396095,FR
+787396096,787396351,GF
+787396352,787398399,FR
787398400,787398655,MQ
787398656,787415039,PL
787415040,787431423,BA
@@ -7761,7 +9690,13 @@
787703808,787705855,AT
787705856,787707903,RO
787707904,787709951,DE
-787709952,787718143,NL
+787709952,787711487,IE
+787711488,787711999,GB
+787712000,787713023,NL
+787713024,787713279,LV
+787713280,787713535,NL
+787713536,787713791,BG
+787713792,787718143,NL
787718144,787724287,RU
787724288,787726335,UA
787726336,787742719,RU
@@ -7786,7 +9721,9 @@
787869696,787873791,GB
787873792,787881745,SE
787881746,787881747,FR
-787881748,787891247,SE
+787881748,787883391,SE
+787883392,787883519,GB
+787883520,787891247,SE
787891248,787891251,ES
787891252,787906559,SE
787906560,787939327,GR
@@ -7802,9 +9739,7 @@
788070400,788078591,RU
788078592,788086783,NL
788086784,788094975,BG
-788094976,788100095,IR
-788100096,788101119,BG
-788101120,788103167,IR
+788094976,788103167,IR
788103168,788111359,HU
788111360,788119551,LT
788119552,788127743,GB
@@ -7908,12 +9843,9 @@
788502528,788504575,IE
788504576,788506623,FR
788506624,788508671,CH
-788508672,788508927,AT
-788508928,788509183,FR
-788509184,788509439,AT
-788509440,788509951,FR
-788509952,788510463,AT
-788510464,788510719,FR
+788508672,788509439,AT
+788509440,788510207,FR
+788510208,788510719,AT
788510720,788512767,ES
788512768,788514815,FI
788514816,788516863,FR
@@ -7927,9 +9859,9 @@
789577728,790102015,US
790102016,792002559,CA
792002560,792068095,US
-792068096,792096767,CA
-792096768,792097279,US
-792097280,792330239,CA
+792068096,792095999,CA
+792096000,792096255,US
+792096256,792330239,CA
792330240,792723455,ES
792723456,793247743,DE
793247744,793313279,NZ
@@ -8017,7 +9949,8 @@
832045056,832307199,CN
832307200,832308223,MN
832308224,832311295,JP
-832311296,832315391,AU
+832311296,832312319,AU
+832313344,832315391,AU
832315392,832319487,KH
832319488,832320511,NU
832320512,832321535,VN
@@ -8067,8 +10000,8 @@
838467584,838729727,JP
838729728,838795263,KR
838795264,838860799,AU
-838860800,838995455,US
-838995456,838995967,CA
+838860800,838995711,US
+838995712,838995967,CA
838995968,838996991,US
838996992,838997247,CA
838997248,839016191,US
@@ -8089,9 +10022,11 @@
839104256,839104511,CA
839104512,839112191,US
839112192,839112703,CA
-839112704,839352319,US
-839352320,839356415,NL
-839356416,839357439,US
+839112704,839348223,US
+839348224,839348479,DE
+839348480,839348735,AT
+839348736,839352319,US
+839352320,839357439,NL
839357440,839358463,FR
839358464,839359487,GB
839359488,839360511,DE
@@ -8118,32 +10053,47 @@
840953856,840954367,JP
840954368,840956927,US
840956928,840957951,JP
-840957952,843055103,US
+840957952,842019071,US
+842019072,842019199,AS
+842019200,843055103,US
843055104,843644927,CA
843644928,844890111,US
844890112,844988415,CA
-844988416,845283327,US
+844988416,845089407,US
+845089408,845089535,PR
+845089536,845283327,US
845283328,845545471,CA
845545472,846442495,US
846442496,846446591,CA
-846446592,846537351,US
-846537352,846537352,CA
-846537353,846561279,US
+846446592,846561279,US
846561280,846594047,CA
846594048,846626815,US
846626816,846627071,CN
-846627072,855638015,US
+846627072,850506751,US
+850506752,850507007,CA
+850507008,855638015,US
855638016,872415231,GB
872415232,889192447,US
889192448,905969663,DE
-905969664,910688255,US
+905969664,910163967,US
+910163968,910197237,JP
+910197238,910197238,US
+910197239,910295039,JP
+910295040,910360575,AU
+910360576,910688255,US
910688256,911147007,IE
911147008,911212543,AU
911212544,911998975,US
911998976,912031743,JP
-912031744,912195583,US
+912031744,912064511,US
+912064512,912130047,DE
+912130048,912195583,BR
912195584,912261119,JP
-912261120,917635071,US
+912261120,916979711,US
+916979712,917045247,JP
+917045248,917110783,SG
+917110784,917241855,IE
+917241856,917635071,US
917635072,917700607,JP
917700608,917766143,SG
917766144,918683647,US
@@ -8172,30 +10122,36 @@
922205776,922205776,DE
922205777,922222591,IE
922222592,922419199,JP
-922419200,922484735,SG
+922419200,922427633,SG
+922427634,922427634,US
+922427635,922427703,SG
+922427704,922427704,US
+922427705,922484735,SG
922484736,922615807,AU
922615808,922746879,SG
922746880,956301311,US
-956301312,959447039,FR
+956301312,959447039,BE
959447040,959512575,US
-959512576,960626687,FR
+959512576,960626687,BE
960626688,960641023,GB
-960641024,960641279,FR
+960641024,960641279,BE
960641280,960643330,GB
-960643331,960643331,FR
+960643331,960643331,BE
960643332,960644351,GB
-960644352,960644863,FR
+960644352,960644863,BE
960644864,960646399,GB
-960646400,960646911,FR
+960646400,960646911,BE
960646912,960654335,GB
-960654336,960654591,FR
+960654336,960654374,BE
+960654375,960654375,GB
+960654376,960654591,BE
960654592,960659455,GB
960659456,960662015,DE
-960662016,960662271,FR
+960662016,960662271,BE
960662272,960662783,DE
960662784,960663039,FR
960663040,960671487,DE
-960671488,960671743,FR
+960671488,960671743,BE
960671744,960676607,DE
960676608,960676863,PL
960676864,960692223,DE
@@ -8204,18 +10160,12 @@
960726784,960727039,ZA
960727040,960727295,US
960727296,960728319,NL
-960728320,960728575,FR
+960728320,960728575,BE
960728576,960729343,NL
960729344,960729599,ZA
-960729600,960729855,FR
+960729600,960729855,BE
960729856,960733183,NL
-960733184,960733439,BE
-960733440,960733695,FR
-960733696,960733951,BE
-960733952,960734463,FR
-960734464,960737535,BE
-960737536,960737791,FR
-960737792,960741375,BE
+960733184,960741375,BE
960741376,960749567,NL
960749568,960757759,LU
960757760,960888831,US
@@ -8234,36 +10184,38 @@
960970752,960974847,TV
960974848,960978943,VU
960978944,960983039,NC
-960983040,961019903,FR
+960983040,961019903,BE
961019904,961021439,HK
-961021440,961021695,FR
+961021440,961021695,BE
961021696,961021951,HK
-961021952,961022079,FR
+961021952,961022079,BE
961022080,961022095,SG
-961022096,961022207,FR
+961022096,961022207,BE
961022208,961022719,HK
-961022720,961022975,FR
+961022720,961022975,BE
961022976,961025535,HK
-961025536,961025791,FR
+961025536,961025791,BE
961025792,961036799,HK
-961036800,961037055,FR
+961036800,961037055,BE
961037056,961052671,HK
961052672,961085439,JP
961085440,961087231,SG
-961087232,961087487,FR
+961087232,961087487,BE
961087488,961089023,SG
-961089024,961089535,FR
+961089024,961089535,BE
961089536,961090047,SG
-961090048,961090303,FR
+961090048,961090303,BE
961090304,961091839,SG
-961091840,961092095,FR
+961091840,961092095,BE
961092096,961092351,IN
-961092352,961092607,FR
+961092352,961092607,BE
961092608,961093887,SG
-961093888,961094143,FR
+961093888,961094143,BE
961094144,961118207,SG
961118208,961119487,MY
-961119488,961119743,FR
+961119488,961119508,BE
+961119509,961119509,MY
+961119510,961119743,BE
961119744,961126399,MY
961126400,961134591,TW
961134592,961142783,KR
@@ -8277,7 +10229,7 @@
961224704,961228799,EC
961228800,961232895,BO
961232896,961236991,PY
-961236992,961241087,FR
+961236992,961241087,BE
961241088,961245183,GF
961245184,961247231,GY
961247232,961249279,SR
@@ -8288,7 +10240,7 @@
961265664,961269759,SV
961269760,961273855,PA
961273856,961277951,CR
-961277952,961282047,FR
+961277952,961282047,BE
961282048,961314815,MX
961314816,961380351,US
961380352,961413119,CA
@@ -8316,36 +10268,36 @@
961716224,961720319,CF
961720320,961724415,TD
961724416,961740799,ZA
-961740800,961806335,FR
+961740800,961806335,BE
961806336,961810431,MR
-961810432,961826815,FR
+961810432,961826815,BE
961826816,961830911,NE
-961830912,961892351,FR
+961830912,961892351,BE
961892352,961896447,ZW
961896448,961900543,NG
-961900544,961937407,FR
+961900544,961937407,BE
961937408,961945599,IS
961945600,961950463,FI
-961950464,961950719,FR
+961950464,961950719,BE
961950720,961953791,FI
961953792,961961983,DK
961961984,961970175,NO
-961970176,962002943,FR
+961970176,962002943,BE
962002944,962035711,RU
962035712,962039807,EE
962039808,962043903,LV
962043904,962047999,LT
-962048000,962076671,FR
+962048000,962076671,BE
962076672,962080767,BH
-962080768,962084863,FR
+962080768,962084863,BE
962084864,962088959,GE
-962088960,962097151,FR
+962088960,962097151,BE
962097152,962101247,IL
-962101248,962134015,FR
+962101248,962134015,BE
962134016,962138111,AE
-962138112,962203647,FR
+962138112,962203647,BE
962203648,962207999,AT
-962208000,962208255,FR
+962208000,962208255,BE
962208256,962211839,AT
962211840,962215935,BG
962215936,962217983,HR
@@ -8353,53 +10305,55 @@
962220032,962224127,CZ
962224128,962228223,GR
962228224,962232319,HU
-962232320,962244607,FR
+962232320,962244607,BE
962244608,962248703,RO
-962248704,962252799,FR
+962248704,962252799,BE
962252800,962256895,SK
962256896,962260991,SI
962260992,962265087,TR
-962265088,962281471,FR
+962265088,962281471,BE
962281472,962285567,DO
-962285568,962359295,FR
+962285568,962359295,BE
962359296,962363391,IN
-962363392,962392063,FR
+962363392,962392063,BE
962392064,962396159,PK
-962396160,962408447,FR
+962396160,962408447,BE
962408448,962412543,TH
962412544,962416639,UZ
-962416640,962461695,FR
+962416640,962461695,BE
962461696,962469887,IE
962469888,962527231,TR
-962527232,962592767,FR
+962527232,962592767,BE
962592768,962594815,IN
-962594816,962596863,FR
+962594816,962596863,BE
962596864,962598911,SG
-962598912,962600959,FR
+962598912,962600959,BE
962600960,962609151,HK
962609152,962613247,JP
-962613248,962617343,FR
+962613248,962617343,BE
962617344,962621439,AU
-962621440,962674687,FR
+962621440,962674687,BE
962674688,962676735,BR
-962676736,962680831,FR
+962676736,962680831,BE
962680832,962689023,US
-962689024,962723839,FR
+962689024,962723839,BE
962723840,962732031,GB
962732032,962740223,DE
962740224,962744319,SE
-962744320,962748415,FR
+962744320,962748415,BE
962748416,962752511,BH
962752512,962756607,ZA
-962756608,968818687,FR
+962756608,968818687,BE
968818688,968819711,DE
-968819712,968851455,FR
+968819712,968851455,BE
968851456,968852479,US
-968852480,972744447,FR
+968852480,972743935,BE
+972743936,972744191,GB
+972744192,972744447,BE
972744448,972744703,IN
-972744704,972747263,FR
+972744704,972747263,BE
972747264,972747519,US
-972747520,973078527,FR
+972747520,973078527,BE
973078528,973209599,JP
973209600,973275135,IN
973275136,973471743,JP
@@ -8433,7 +10387,7 @@
978321408,978452479,JP
978452480,978485247,CN
978485248,978501631,TH
-978501632,978518015,SG
+978501632,978518015,HK
978518016,978583551,CN
978599936,978640895,AU
978640896,978644991,NZ
@@ -8447,9 +10401,7 @@
979369984,979410943,AU
979410944,979419135,HK
979419136,979435519,AU
-979435520,979436799,TH
-979436800,979437055,OM
-979437056,979468287,TH
+979435520,979468287,TH
979468288,979501055,BD
979501056,979566591,JP
979566592,979599359,TW
@@ -8530,11 +10482,7 @@
999817216,999821311,BD
999839744,999845887,BD
999849984,999866367,KR
-999866368,999873919,HK
-999873920,999873941,VN
-999873942,999873943,HK
-999873944,999874047,VN
-999874048,999882751,HK
+999866368,999882751,HK
999948288,1000013823,AU
1000013824,1000079359,CN
1000079360,1000341503,JP
@@ -8551,7 +10499,9 @@
1002373120,1002405887,CN
1002405888,1002422271,JP
1002422272,1002434559,AU
-1002434560,1008730111,CN
+1002434560,1002438399,CN
+1002438400,1002438655,HK
+1002438656,1008730111,CN
1008730112,1009778687,JP
1009778688,1010237439,MY
1010237440,1010302975,CN
@@ -8581,11 +10531,11 @@
1023238144,1023246335,ID
1023246336,1023279103,CN
1023279104,1023311871,IN
-1023311872,1023315711,US
-1023315712,1023315967,AU
-1023315968,1023316991,US
+1023311872,1023316991,US
1023316992,1023317247,AU
-1023317248,1023328255,US
+1023317248,1023317759,US
+1023317760,1023318015,IN
+1023318016,1023328255,US
1023328256,1023344639,JP
1023344640,1023410175,CN
1023410176,1023672319,IN
@@ -8608,7 +10558,9 @@
1023901696,1023934463,TH
1023934464,1023942719,AU
1023942720,1023942751,MY
-1023942752,1023950847,AU
+1023942752,1023946879,AU
+1023946880,1023946911,SG
+1023946912,1023950847,AU
1023950848,1023954943,ID
1023954944,1023959039,JP
1023959040,1023967231,AU
@@ -8633,15 +10585,13 @@
1024361168,1024361183,HK
1024361184,1024362911,JP
1024362912,1024362943,SG
-1024362944,1024363263,JP
-1024363264,1024363519,SG
-1024363520,1024363775,JP
-1024363776,1024364031,AU
+1024362944,1024363519,JP
+1024363520,1024364031,AU
1024364032,1024364063,JP
1024364064,1024364079,AU
-1024364080,1024365727,JP
-1024365728,1024365759,SG
-1024365760,1024368639,JP
+1024364080,1024365567,JP
+1024365568,1024365823,SG
+1024365824,1024368639,JP
1024368640,1024369407,MY
1024369408,1024371199,JP
1024371200,1024371455,PH
@@ -8717,12 +10667,10 @@
1029636096,1029668863,AU
1029668864,1029701631,IN
1029701632,1030674431,KR
-1030674432,1030676223,JP
-1030676224,1030750207,KR
+1030674432,1030676479,JP
+1030676480,1030750207,KR
1030750208,1031798783,JP
-1031798784,1032668159,CN
-1032668160,1032668415,HK
-1032668416,1035993087,CN
+1031798784,1035993087,CN
1035993088,1037565951,JP
1037565952,1038614527,TW
1038614528,1039007743,CN
@@ -8787,7 +10735,11 @@
1041268736,1041301503,NO
1041301504,1041310975,IE
1041310976,1041311231,GB
-1041311232,1041367039,IE
+1041311232,1041335295,IE
+1041335296,1041335551,GB
+1041335552,1041338879,IE
+1041338880,1041339135,GB
+1041339136,1041367039,IE
1041367040,1041498111,IT
1041498112,1041563647,SE
1041563648,1041596415,PL
@@ -8799,27 +10751,29 @@
1041701784,1041701791,FR
1041701792,1041701823,GB
1041701824,1041701831,FR
-1041701832,1041703479,GB
+1041701832,1041702399,GB
+1041702400,1041702655,FR
+1041702656,1041703479,GB
1041703480,1041703487,FR
1041703488,1041703631,GB
1041703632,1041703639,FR
-1041703640,1041704415,GB
+1041703640,1041703679,GB
+1041703680,1041703935,FR
+1041703936,1041704415,GB
1041704416,1041704423,FR
1041704424,1041706551,GB
1041706552,1041706559,FR
1041706560,1041706751,GB
-1041706752,1041707263,FR
-1041707264,1041708543,GB
+1041706752,1041707007,FR
+1041707008,1041708543,GB
1041708544,1041708799,FR
-1041708800,1041709823,GB
-1041709824,1041710079,FR
-1041710080,1041710423,GB
-1041710424,1041710431,FR
-1041710432,1041710671,GB
+1041708800,1041709951,GB
+1041709952,1041709959,FR
+1041709960,1041710671,GB
1041710672,1041710687,FR
-1041710688,1041711551,GB
-1041711552,1041711559,FR
-1041711560,1041711943,GB
+1041710688,1041711359,GB
+1041711360,1041711615,FR
+1041711616,1041711943,GB
1041711944,1041711951,FR
1041711952,1041712631,GB
1041712632,1041712639,FR
@@ -8835,15 +10789,17 @@
1041716456,1041716463,FR
1041716464,1041718015,GB
1041718016,1041718271,FR
-1041718272,1041719223,GB
+1041718272,1041718527,GB
+1041718528,1041718783,FR
+1041718784,1041719223,GB
1041719224,1041719224,FR
1041719225,1041719227,GB
1041719228,1041719228,FR
1041719229,1041719407,GB
1041719408,1041719423,FR
-1041719424,1041720575,GB
-1041720576,1041720831,FR
-1041720832,1041721599,GB
+1041719424,1041721391,GB
+1041721392,1041721407,FR
+1041721408,1041721599,GB
1041721600,1041721727,FR
1041721728,1041721759,GB
1041721760,1041721775,FR
@@ -8859,15 +10815,15 @@
1041729565,1041729566,FR
1041729567,1041729935,GB
1041729936,1041729951,FR
-1041729952,1041731071,GB
-1041731072,1041731327,FR
-1041731328,1041732031,GB
-1041732032,1041732047,FR
-1041732048,1041736381,GB
+1041729952,1041731839,GB
+1041731840,1041732095,FR
+1041732096,1041734911,GB
+1041734912,1041735167,FR
+1041735168,1041736381,GB
1041736382,1041736382,FR
-1041736383,1041736675,GB
-1041736676,1041736676,FR
-1041736677,1041737583,GB
+1041736383,1041736447,GB
+1041736448,1041736703,FR
+1041736704,1041737583,GB
1041737584,1041737591,FR
1041737592,1041737839,GB
1041737840,1041737855,FR
@@ -8875,7 +10831,9 @@
1041739032,1041739039,FR
1041739040,1041740279,GB
1041740280,1041740287,FR
-1041740288,1041742415,GB
+1041740288,1041741055,GB
+1041741056,1041741311,FR
+1041741312,1041742415,GB
1041742416,1041742423,FR
1041742424,1041743103,GB
1041743104,1041743111,FR
@@ -8889,9 +10847,7 @@
1041749640,1041749643,FR
1041749644,1041749659,GB
1041749660,1041749663,FR
-1041749664,1041751679,GB
-1041751680,1041751687,FR
-1041751688,1041753231,GB
+1041749664,1041753231,GB
1041753232,1041753239,FR
1041753240,1041756839,GB
1041756840,1041756855,FR
@@ -8941,9 +10897,7 @@
1042875136,1042875391,FR
1042875392,1042879999,NL
1042880000,1042880255,GB
-1042880256,1042889983,NL
-1042889984,1042890239,GB
-1042890240,1042939903,NL
+1042880256,1042939903,NL
1042939904,1043070975,ES
1043070976,1043079167,CZ
1043079168,1043087359,DE
@@ -8952,19 +10906,17 @@
1043103744,1043120127,DK
1043120128,1043136511,FI
1043136512,1043202047,NL
-1043202048,1043249919,AT
-1043249920,1043250175,HU
-1043250176,1043257087,AT
-1043257088,1043257343,DE
-1043257344,1043281151,AT
-1043281152,1043281407,DE
-1043281408,1043333119,AT
+1043202048,1043242495,AT
+1043242496,1043242751,DE
+1043242752,1043333119,AT
1043333120,1043341311,CH
1043341312,1043349503,IT
1043349504,1043357695,DE
1043357696,1043365887,CH
1043365888,1043398655,PT
-1043398656,1043470127,GB
+1043398656,1043465839,GB
+1043465840,1043465847,NL
+1043465848,1043470127,GB
1043470128,1043470223,NL
1043470224,1043475871,GB
1043475872,1043475887,DE
@@ -8987,16 +10939,16 @@
1043595264,1043661567,DE
1043661568,1043661823,GB
1043661824,1043857407,DE
-1043857408,1043892735,GB
-1043892736,1043892991,CD
-1043892992,1043897343,GB
+1043857408,1043897343,GB
1043897344,1043897855,KE
1043897856,1043919442,GB
1043919443,1043919443,SS
1043919444,1043921919,GB
1043921920,1043922943,IL
1043922944,1043988479,ES
-1043988480,1044118295,NL
+1043988480,1044020223,NL
+1044020224,1044020479,BE
+1044020480,1044118295,NL
1044118296,1044118303,BE
1044118304,1044118423,NL
1044118424,1044118431,BE
@@ -9010,6 +10962,7 @@
1044201472,1044217855,FI
1044217856,1044226047,DK
1044226048,1044234239,OM
+1044234240,1044250623,RE
1044283392,1044316159,FR
1044316160,1044332543,NO
1044332544,1044348927,RU
@@ -9086,7 +11039,9 @@
1044936488,1044936495,BE
1044936496,1044937247,GB
1044937248,1044937255,BE
-1044937256,1044946943,GB
+1044937256,1044938503,GB
+1044938504,1044938511,LU
+1044938512,1044946943,GB
1044946944,1044955135,UA
1044955136,1044963327,NL
1044963328,1044971519,FI
@@ -9102,10 +11057,8 @@
1045154630,1045154630,SG
1045154631,1045158306,DE
1045158307,1045158307,SG
-1045158308,1045159711,DE
-1045159712,1045159712,EG
-1045159713,1045163508,DE
-1045163509,1045163511,SG
+1045158308,1045163509,DE
+1045163510,1045163511,SG
1045163512,1045168127,DE
1045168128,1045233663,RU
1045233664,1045241855,GB
@@ -9173,7 +11126,9 @@
1046320128,1046321151,GB
1046321152,1046323199,NL
1046323200,1046331391,ES
-1046347776,1046413311,IT
+1046347776,1046360319,IT
+1046360320,1046360575,SM
+1046360576,1046413311,IT
1046413312,1046446079,SE
1046446080,1046478879,DE
1046478880,1046479839,GB
@@ -9194,9 +11149,9 @@
1046487290,1046487290,DE
1046487291,1046487551,GB
1046487552,1046487807,DE
-1046487808,1046488319,GB
-1046488320,1046488575,DE
-1046488576,1046489087,GB
+1046487808,1046488063,GB
+1046488064,1046488319,DE
+1046488320,1046489087,GB
1046489088,1046489119,DE
1046489120,1046489311,GB
1046489312,1046489327,ES
@@ -9250,12 +11205,20 @@
1046503096,1046503103,DE
1046503104,1046504447,GB
1046504448,1046508543,DE
-1046508544,1046511615,GB
-1046511616,1046515711,DE
+1046508544,1046511815,GB
+1046511816,1046511823,DE
+1046511824,1046512583,GB
+1046512584,1046512599,DE
+1046512600,1046514687,GB
+1046514688,1046515711,DE
1046515712,1046518783,GB
1046518784,1046519807,DE
-1046519808,1046525183,GB
-1046525184,1046525695,DE
+1046519808,1046524215,GB
+1046524216,1046524223,DE
+1046524224,1046525351,GB
+1046525352,1046525359,DE
+1046525360,1046525439,GB
+1046525440,1046525695,DE
1046525696,1046529023,GB
1046529024,1046530047,DE
1046530048,1046530973,GB
@@ -9270,12 +11233,8 @@
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
+1046537040,1046543103,GB
+1046543104,1046543359,DE
1046543360,1046544383,GB
1046544384,1046560767,IT
1046560768,1046585343,ES
@@ -9322,9 +11281,9 @@
1047314432,1047322623,SE
1047322624,1047330815,IT
1047330816,1047339007,RU
-1047339008,1047346175,SE
-1047346176,1047346431,FI
-1047346432,1047347199,SE
+1047339008,1047342879,SE
+1047342880,1047342887,FI
+1047342888,1047347199,SE
1047347200,1047363583,DE
1047363584,1047371775,CZ
1047371776,1047373559,RU
@@ -9349,9 +11308,7 @@
1047658496,1047724031,EG
1047728128,1047732223,SE
1047787520,1047787775,ES
-1047789568,1047805439,AT
-1047805440,1047805695,DE
-1047805696,1047822335,AT
+1047789568,1047822335,AT
1047822336,1047838719,DE
1047838720,1047846911,DK
1047846912,1047855103,SE
@@ -9396,7 +11353,10 @@
1048576000,1048584191,DE
1048584192,1048592383,IL
1048592384,1048600575,IT
-1048600576,1048603391,UA
+1048600576,1048602111,UA
+1048602112,1048602623,PL
+1048602624,1048603135,RU
+1048603136,1048603391,UA
1048603392,1048603647,LV
1048603648,1048608767,UA
1048608768,1048616959,GB
@@ -9424,7 +11384,9 @@
1049006080,1049006335,DE
1049008128,1049009151,DE
1049016320,1049018367,DE
-1049018624,1049022463,DE
+1049018624,1049021439,DE
+1049021440,1049021695,GB
+1049021696,1049022463,DE
1049026816,1049029375,DE
1049030656,1049031679,DE
1049031744,1049031871,DE
@@ -9546,19 +11508,19 @@
1051922432,1051924479,CH
1051924480,1051948031,AT
1051948032,1051949055,CH
-1051949056,1051949823,AT
-1051949824,1051950079,NL
-1051950080,1051983871,AT
+1051949056,1051983871,AT
1051990016,1051991039,DE
1052001280,1052002303,DE
1052003584,1052003839,DE
1052011264,1052012031,DE
-1052017536,1052017663,DE
+1052017536,1052017567,DE
1052019712,1052019967,GB
1052045312,1052046079,DE
1052049408,1052057599,PL
1052057600,1052065791,RU
-1052065792,1052081151,SE
+1052065792,1052076031,SE
+1052076032,1052077055,NL
+1052077056,1052081151,SE
1052081152,1052082175,NL
1052082176,1052090367,DE
1052090368,1052098559,PL
@@ -9631,7 +11593,9 @@
1052488704,1052489727,GB
1052494336,1052494591,NL
1052498432,1052498463,RO
-1052508160,1052704767,GB
+1052508160,1052593663,GB
+1052593664,1052593919,US
+1052593920,1052704767,GB
1052704768,1052712959,NL
1052712960,1052770303,GB
1052770304,1052778495,CH
@@ -9657,19 +11621,27 @@
1053138944,1053147135,FI
1053147136,1053163519,SK
1053163520,1053294591,DK
-1053295616,1053296639,AT
-1053307904,1053308159,GB
+1053294616,1053294623,AT
+1053294656,1053294679,AT
+1053295104,1053296639,AT
+1053297152,1053297663,IT
+1053301056,1053301071,FR
+1053312872,1053312887,DK
+1053312912,1053312927,DK
1053313280,1053313535,GB
1053316688,1053316695,GB
+1053318912,1053318943,FI
1053320224,1053320239,DE
-1053327616,1053327871,ZA
+1053325824,1053326335,DE
+1053326504,1053326527,BE
+1053326544,1053326551,BE
1053329440,1053329471,ES
1053332992,1053334015,BE
1053335552,1053336575,ZA
1053339904,1053340159,AT
-1053340928,1053341183,GB
1053345280,1053345375,PK
1053349376,1053349631,NL
+1053349952,1053349967,IE
1053353408,1053353423,GB
1053353984,1053354239,IL
1053354912,1053355007,IL
@@ -9696,9 +11668,7 @@
1053663232,1053671423,RU
1053671424,1053687807,LV
1053687808,1053753343,DE
-1053753344,1053788687,NL
-1053788688,1053788695,DE
-1053788696,1053818879,NL
+1053753344,1053818879,NL
1053818880,1053819391,DE
1053819424,1053819439,DE
1053819520,1053819563,DE
@@ -9795,9 +11765,7 @@
1054015488,1054089215,IT
1054089216,1054097407,GE
1054097408,1054105599,NL
-1054105600,1054107135,FR
-1054107136,1054107391,GB
-1054107392,1054113791,FR
+1054105600,1054113791,FR
1054113792,1054121983,NL
1054121984,1054130175,AT
1054130176,1054138367,LT
@@ -9814,10 +11782,7 @@
1054186241,1054186495,GB
1054186496,1054187264,DE
1054187265,1054187519,GB
-1054187520,1054192639,FR
-1054192640,1054192895,BG
-1054192896,1054195455,FR
-1054195456,1054195711,BG
+1054187520,1054195711,FR
1054195712,1054212095,BE
1054212096,1054277631,DE
1054277632,1054343167,KW
@@ -9825,7 +11790,9 @@
1054351360,1054359551,UA
1054359552,1054367743,RO
1054367744,1054375935,FI
-1054375936,1054384127,GB
+1054375936,1054381567,GB
+1054381568,1054381823,US
+1054381824,1054384127,GB
1054384128,1054400511,DE
1054400512,1054408703,GB
1054408704,1054416895,FR
@@ -9929,8 +11896,7 @@
1056473088,1056505855,FI
1056505856,1056514047,PT
1056514048,1056522239,IT
-1056522240,1056523007,DE
-1056523008,1056538623,AT
+1056522240,1056538623,AT
1056538624,1056546815,RU
1056546816,1056555007,NO
1056555008,1056571391,GB
@@ -9951,9 +11917,7 @@
1061853696,1061854207,GB
1061854208,1061939711,US
1061939712,1061940223,JM
-1061940224,1061987839,US
-1061987840,1061988095,CA
-1061988096,1062069247,US
+1061940224,1062069247,US
1062069248,1062070271,PR
1062070272,1062219519,US
1062219520,1062219775,IN
@@ -9967,11 +11931,19 @@
1062530048,1062531071,EC
1062531072,1062545919,US
1062545920,1062546431,BM
-1062546432,1062597375,US
+1062546432,1062587135,US
+1062587136,1062587391,CA
+1062587392,1062597375,US
1062597376,1062597631,PR
1062597632,1062871551,US
1062871552,1062872063,PR
-1062872064,1063057432,US
+1062872064,1063053567,US
+1063053568,1063053647,CA
+1063053648,1063053663,US
+1063053664,1063053743,CA
+1063053744,1063053759,US
+1063053760,1063053823,CA
+1063053824,1063057432,US
1063057433,1063057433,CA
1063057434,1063305727,US
1063305728,1063305983,CA
@@ -10003,7 +11975,9 @@
1064221952,1064222207,MX
1064222208,1064445183,US
1064445184,1064445439,PK
-1064445440,1065519871,US
+1064445440,1065372927,US
+1065372928,1065373183,PR
+1065373184,1065519871,US
1065519872,1065520127,GB
1065520128,1065525791,US
1065525792,1065525807,IN
@@ -10025,9 +11999,7 @@
1065908224,1066311679,US
1066311680,1066315775,CA
1066315776,1066352639,US
-1066352640,1066354943,JM
-1066354944,1066355199,BB
-1066355200,1066355711,JM
+1066352640,1066355711,JM
1066355712,1066355967,BB
1066355968,1066369023,JM
1066369024,1067238143,US
@@ -10064,7 +12036,9 @@
1068123136,1068123391,BB
1068123392,1068175871,US
1068175872,1068176383,YE
-1068176384,1068199935,US
+1068176384,1068179455,US
+1068179456,1068179711,PR
+1068179712,1068199935,US
1068199936,1068204031,CA
1068204032,1068230655,US
1068230656,1068230911,CO
@@ -10091,7 +12065,9 @@
1070729472,1070729727,CA
1070729728,1071100927,US
1071100928,1071101951,PR
-1071101952,1071134719,US
+1071101952,1071106559,US
+1071106560,1071106815,NL
+1071106816,1071134719,US
1071134720,1071136767,HK
1071136768,1071141887,US
1071141888,1071142911,HK
@@ -10116,7 +12092,9 @@
1071255296,1071255525,LB
1071255526,1071255526,DE
1071255527,1071255551,LB
-1071255552,1071256319,US
+1071255552,1071255839,US
+1071255840,1071255847,TW
+1071255848,1071256319,US
1071256320,1071256575,HK
1071256576,1071258879,US
1071258880,1071259135,HK
@@ -10301,8 +12279,8 @@
1073028352,1073028607,US
1073028608,1073029119,GD
1073029120,1073031423,US
-1073031424,1073031679,CW
-1073031680,1073034239,US
+1073031424,1073031935,CW
+1073031936,1073034239,US
1073034240,1073034495,BB
1073034496,1073035263,US
1073035264,1073036032,GD
@@ -10469,13 +12447,16 @@
1075494912,1075558143,US
1075558144,1075558911,VI
1075558912,1075576831,US
-1075576832,1075577087,GB
-1075577088,1075579391,NO
+1075576832,1075576895,NO
+1075576896,1075576896,SE
+1075576897,1075579391,NO
1075579392,1075579903,GB
1075579904,1075585023,NO
1075585024,1075609599,US
1075609600,1075613695,TT
-1075613696,1075769343,US
+1075613696,1075717887,US
+1075717888,1075718143,CA
+1075718144,1075769343,US
1075769344,1075773439,CA
1075773440,1075855359,US
1075855360,1075871743,DO
@@ -10488,9 +12469,9 @@
1075975168,1075975679,CA
1075975680,1075976191,US
1075976192,1075976447,CA
-1075976448,1075976959,US
-1075976960,1075977215,CA
-1075977216,1075977983,US
+1075976448,1075977055,US
+1075977056,1075977071,CA
+1075977072,1075977983,US
1075977984,1075978239,CA
1075978240,1075982335,US
1075982336,1075982591,CA
@@ -10507,10 +12488,8 @@
1075988224,1075988319,US
1075988320,1075988351,CA
1075988352,1075988479,US
-1075988480,1075988991,CA
-1075988992,1075989231,US
-1075989232,1075989239,CA
-1075989240,1075989503,US
+1075988480,1075989247,CA
+1075989248,1075989503,US
1075989504,1075989759,CA
1075989760,1075990015,US
1075990016,1075990527,CA
@@ -10677,7 +12656,9 @@
1078284864,1078284991,CA
1078284992,1078285151,US
1078285152,1078285167,CA
-1078285168,1078285311,US
+1078285168,1078285255,US
+1078285256,1078285259,CA
+1078285260,1078285311,US
1078285312,1078285567,CA
1078285568,1078286351,US
1078286352,1078286367,CA
@@ -10840,17 +12821,15 @@
1080024576,1080033279,US
1080033280,1080164351,KY
1080164352,1080295423,CA
-1080295424,1080496639,US
-1080496640,1080496895,ES
-1080496896,1080498431,US
+1080295424,1080498431,US
1080498432,1080498664,GB
1080498665,1080498665,US
1080498666,1080498687,GB
-1080498688,1080513535,US
+1080498688,1080512511,US
+1080512512,1080512767,GB
+1080512768,1080513535,US
1080513536,1080513791,GB
-1080513792,1080550399,US
-1080550400,1080550655,IN
-1080550656,1080552447,US
+1080513792,1080552447,US
1080552448,1080552703,IN
1080552704,1080569343,US
1080569344,1080569599,JP
@@ -10860,7 +12839,9 @@
1080589568,1080589823,CN
1080589824,1080610559,US
1080610560,1080610815,AU
-1080610816,1080621055,US
+1080610816,1080613631,US
+1080613632,1080613887,AU
+1080613888,1080621055,US
1080621056,1080621567,AU
1080621568,1080622079,US
1080622080,1080622335,AU
@@ -10892,8 +12873,7 @@
1081037312,1081037567,CA
1081037568,1081038335,US
1081038336,1081040895,CA
-1081040896,1081057535,US
-1081061376,1081122559,US
+1081040896,1081122559,US
1081122560,1081122815,VI
1081122816,1081212927,US
1081212928,1081278463,CA
@@ -10948,7 +12928,9 @@
1081573376,1081589759,US
1081589760,1081593855,BB
1081593856,1081597951,CA
-1081597952,1082139409,US
+1081597952,1081639423,US
+1081639424,1081639679,DE
+1081639680,1082139409,US
1082139410,1082139410,ZA
1082139411,1082314751,US
1082314752,1082318847,CA
@@ -10960,7 +12942,8 @@
1082786592,1082786623,HK
1082786624,1082790143,US
1082790144,1082790399,IN
-1082790400,1082791167,US
+1082790400,1082790911,US
+1082790912,1082791167,AU
1082791168,1082791423,IN
1082791424,1082819839,US
1082819840,1082820351,IN
@@ -10982,7 +12965,9 @@
1083738112,1083740159,PR
1083740160,1084067583,US
1084067584,1084067839,CA
-1084067840,1085439999,US
+1084067840,1084153599,US
+1084153600,1084153855,NL
+1084153856,1085439999,US
1085440000,1085448191,CA
1085448192,1085456383,US
1085456384,1085457919,PR
@@ -11015,31 +13000,33 @@
1086955520,1086971903,CA
1086971904,1087016959,US
1087016960,1087021055,CA
-1087021056,1087395327,US
-1087395328,1087395455,GB
-1087395456,1087399167,US
+1087021056,1087399167,US
1087399168,1087399423,GB
1087399424,1087405407,US
1087405408,1087405423,MX
1087405424,1087413895,US
1087413896,1087413903,DE
-1087413904,1087419135,US
+1087413904,1087414271,US
+1087414272,1087414527,GB
+1087414528,1087419135,US
1087419136,1087419391,GB
1087419392,1087419903,US
1087419904,1087420159,CA
-1087420160,1087432447,US
-1087432448,1087432607,FR
-1087432608,1087432639,US
-1087432640,1087432703,FR
-1087432704,1087436159,US
+1087420160,1087432599,US
+1087432600,1087432607,FR
+1087432608,1087436031,US
+1087436032,1087436159,NL
1087436160,1087436167,CH
-1087436168,1087440895,US
+1087436168,1087436287,NL
+1087436288,1087440895,US
1087440896,1087442943,PR
1087442944,1087443551,US
1087443552,1087443583,DE
1087443584,1087444223,US
1087444224,1087444479,GB
-1087444480,1087464945,US
+1087444480,1087460863,US
+1087460864,1087461119,CA
+1087461120,1087464945,US
1087464946,1087464949,GB
1087464950,1087466489,US
1087466490,1087466493,GB
@@ -11049,11 +13036,25 @@
1087496704,1087496959,CA
1087496960,1087508161,US
1087508162,1087508162,JP
-1087508163,1087593983,US
+1087508163,1087510271,US
+1087510272,1087510463,CA
+1087510464,1087510495,US
+1087510496,1087510527,CA
+1087510528,1087514623,US
+1087514624,1087515391,BB
+1087515392,1087515647,US
+1087515648,1087516159,BB
+1087516160,1087516415,US
+1087516416,1087516671,BB
+1087516672,1087580927,US
+1087580928,1087581183,BR
+1087581184,1087593983,US
1087593984,1087594239,MX
1087594240,1087608319,US
1087608320,1087608575,GB
-1087608576,1087643723,US
+1087608576,1087626111,US
+1087626112,1087626239,VI
+1087626240,1087643723,US
1087643724,1087643727,FR
1087643728,1087654143,US
1087654144,1087654399,VE
@@ -11061,13 +13062,9 @@
1087678624,1087678655,GB
1087678656,1087686655,US
1087686656,1087686911,PR
-1087686912,1087689215,US
-1087689216,1087689471,AR
-1087689472,1087695319,US
+1087686912,1087695319,US
1087695320,1087695323,GB
-1087695324,1087708685,US
-1087708686,1087708686,AU
-1087708687,1087714335,US
+1087695324,1087714335,US
1087714336,1087714367,NL
1087714368,1087715327,US
1087715328,1087717375,PA
@@ -11080,38 +13077,38 @@
1087735648,1087746079,US
1087746080,1087746083,HK
1087746084,1087758335,US
-1087758336,1087761919,PR
-1087761920,1087762431,US
-1087762432,1087766527,PR
+1087758336,1087762175,PR
+1087762176,1087762431,US
+1087762432,1087763967,PR
+1087763968,1087764223,US
+1087764224,1087766527,PR
1087766528,1087798943,US
1087798944,1087798975,CA
-1087798976,1087799413,US
-1087799414,1087799414,DE
-1087799415,1087799787,US
+1087798976,1087799295,US
+1087799296,1087799372,DE
+1087799373,1087799374,US
+1087799375,1087799551,DE
+1087799552,1087799787,US
1087799788,1087799791,CH
1087799792,1087825663,US
1087825664,1087825919,SA
-1087825920,1087836415,US
-1087836416,1087836671,FR
-1087836672,1087837359,US
-1087837360,1087837367,BR
-1087837368,1087839231,US
-1087839232,1087839487,GB
-1087839488,1087862783,US
+1087825920,1087837183,US
+1087837184,1087837439,BR
+1087837440,1087839231,US
+1087839232,1087839359,GB
+1087839360,1087862783,US
1087862784,1087864831,PA
1087864832,1087873023,US
1087873024,1087873279,CA
1087873280,1087883263,US
1087883264,1087883519,AR
-1087883520,1087884001,US
-1087884002,1087884002,GB
-1087884003,1087950111,US
+1087883520,1087950111,US
1087950112,1087950119,PR
1087950120,1088012767,US
1088012768,1088012775,PR
-1088012776,1088398591,US
-1088398592,1088398719,CA
-1088398720,1088684031,US
+1088012776,1088319103,US
+1088319104,1088319231,CA
+1088319232,1088684031,US
1088684032,1088946175,CA
1088946176,1089053183,US
1089053184,1089053439,BR
@@ -11167,7 +13164,9 @@
1089579520,1089580031,VE
1089580032,1089598975,US
1089598976,1089599231,HK
-1089599232,1089881599,US
+1089599232,1089824767,US
+1089824768,1089825023,VI
+1089825024,1089881599,US
1089881600,1089882111,GB
1089882112,1089882623,US
1089882624,1089883135,GB
@@ -11195,8 +13194,8 @@
1091803392,1091807231,US
1091807232,1091807487,CA
1091807488,1091807999,US
-1091808000,1091808511,CA
-1091808512,1091812351,US
+1091808000,1091808255,CA
+1091808256,1091812351,US
1091812352,1091812607,CN
1091812608,1091960831,US
1091960832,1092026367,CA
@@ -11320,7 +13319,6 @@
1094670800,1095450623,US
1095450624,1095467007,BS
1095467008,1095483391,US
-1095484416,1095484671,US
1095491584,1095627775,US
1095627776,1095628287,CA
1095628288,1096278015,US
@@ -11350,14 +13348,10 @@
1097837199,1097896191,US
1097896192,1097897215,VI
1097897216,1097947135,US
-1097947136,1097947735,VI
-1097947736,1097947743,US
-1097947744,1097949183,VI
+1097947136,1097949183,VI
1097949184,1097951231,US
1097951232,1097953279,VI
-1097953280,1098507263,US
-1098507264,1098507519,CA
-1098507520,1101121535,US
+1097953280,1101121535,US
1101121536,1101121791,EC
1101121792,1101182975,US
1101182976,1101183487,YE
@@ -11387,8 +13381,8 @@
1101475840,1101479935,CO
1101479936,1101484031,US
1101484032,1101488127,CO
-1101488128,1101521407,US
-1101521408,1101521919,AS
+1101488128,1101521663,US
+1101521664,1101521919,AS
1101521920,1101542399,US
1101542400,1101542911,CO
1101542912,1101574655,US
@@ -11405,8 +13399,8 @@
1101681408,1101681663,NL
1101681664,1101750783,US
1101750784,1101751295,BM
-1101751296,1101767935,US
-1101767936,1101768191,CW
+1101751296,1101767679,US
+1101767680,1101768191,CW
1101768192,1101797375,US
1101797376,1101798399,BB
1101798400,1101803519,US
@@ -11472,9 +13466,7 @@
1104842752,1104844799,PR
1104844800,1104924415,US
1104924416,1104924671,IN
-1104924672,1105034495,US
-1105034496,1105034751,IT
-1105034752,1105099519,US
+1104924672,1105099519,US
1105099520,1105099775,EC
1105099776,1106381199,US
1106381200,1106381207,UM
@@ -11602,24 +13594,22 @@
1110573056,1110587391,PR
1110587392,1110587903,US
1110587904,1110588159,PR
-1110588160,1110588671,US
-1110588672,1110589183,PR
-1110589184,1110589439,US
+1110588160,1110588415,US
+1110588416,1110588671,PR
+1110588672,1110589439,US
1110589440,1110590207,PR
1110590208,1110590463,US
-1110590464,1110591231,PR
-1110591232,1110591487,US
-1110591488,1110592255,PR
+1110590464,1110590975,PR
+1110590976,1110591743,US
+1110591744,1110592255,PR
1110592256,1110592511,US
1110592512,1110593023,PR
-1110593024,1110593279,US
-1110593280,1110593535,PR
-1110593536,1110593791,US
+1110593024,1110593791,US
1110593792,1110594047,PR
1110594048,1110594303,US
1110594304,1110594815,PR
-1110594816,1110595583,US
-1110595584,1110598655,PR
+1110594816,1110595776,US
+1110595777,1110598655,PR
1110598656,1110598911,US
1110598912,1110638591,PR
1110638592,1110654463,US
@@ -11634,7 +13624,9 @@
1110853632,1110854655,GB
1110854656,1110855679,US
1110855680,1110856703,CN
-1110856704,1110857727,IN
+1110856704,1110857215,IN
+1110857216,1110857471,DE
+1110857472,1110857727,IN
1110857728,1110858751,SG
1110858752,1110859007,US
1110859008,1110859263,AU
@@ -11644,7 +13636,7 @@
1110867456,1110867967,JM
1110867968,1110887423,US
1110887424,1110887679,IE
-1110887680,1110925311,US
+1110887680,1110929407,US
1110929408,1110933503,BM
1110933504,1111195647,US
1111195648,1111212031,CA
@@ -11677,7 +13669,9 @@
1113603328,1113603583,GT
1113603584,1113603839,US
1113603840,1113604095,CA
-1113604096,1113657343,US
+1113604096,1113643202,US
+1113643203,1113643237,CH
+1113643238,1113657343,US
1113657344,1113661439,CA
1113661440,1113669631,US
1113669632,1113677823,CA
@@ -11706,8 +13700,12 @@
1114512128,1114513407,US
1114513408,1114513471,SA
1114513472,1114513535,US
-1114513536,1114515455,SA
-1114515456,1114517503,US
+1114513536,1114513663,SA
+1114513664,1114514175,US
+1114514176,1114515455,SA
+1114515456,1114515463,US
+1114515464,1114515471,CA
+1114515472,1114517503,US
1114517504,1114518015,CA
1114518016,1114520063,US
1114520064,1114520319,PH
@@ -11788,9 +13786,13 @@
1117420032,1117420415,CA
1117420416,1117420447,US
1117420448,1117421567,CA
-1117421568,1117460223,US
+1117421568,1117458911,US
+1117458912,1117458943,GB
+1117458944,1117460223,US
1117460224,1117460287,GB
-1117460288,1117683711,US
+1117460288,1117480191,US
+1117480192,1117480255,CA
+1117480256,1117683711,US
1117683712,1117691903,CA
1117691904,1117724671,US
1117724672,1117728767,CA
@@ -11872,7 +13874,9 @@
1118975488,1118975743,KE
1118975744,1118975999,US
1118976000,1118976255,GB
-1118976256,1118980607,US
+1118976256,1118980095,US
+1118980096,1118980351,GF
+1118980352,1118980607,US
1118980608,1118980863,TZ
1118980864,1118983423,US
1118983424,1118983679,NI
@@ -11929,11 +13933,15 @@
1119502336,1119510527,CA
1119510528,1119558143,US
1119558144,1119558655,PR
-1119558656,1119568383,US
+1119558656,1119567871,US
+1119567872,1119568127,GB
+1119568128,1119568383,US
1119568384,1119568639,GB
-1119568640,1119570175,US
-1119570176,1119570303,GB
-1119570304,1119571967,US
+1119568640,1119568895,US
+1119568896,1119569151,GB
+1119569152,1119570175,US
+1119570176,1119570431,GB
+1119570432,1119571967,US
1119571968,1119576063,CA
1119576064,1119580159,US
1119580160,1119584255,CA
@@ -11962,7 +13970,9 @@
1120312064,1120312319,PH
1120312320,1120312575,US
1120312576,1120312831,PH
-1120312832,1120346111,US
+1120312832,1120315391,US
+1120315392,1120317439,SG
+1120317440,1120346111,US
1120346112,1120350207,CA
1120350208,1120370687,US
1120370688,1120371199,CA
@@ -12059,8 +14069,12 @@
1120743680,1120744447,US
1120744448,1120744703,KN
1120744704,1120788479,US
-1120793856,1120794111,US
-1120796672,1120854015,US
+1120793088,1120793343,US
+1120796672,1120826367,US
+1120826368,1120826370,CA
+1120826371,1120826371,US
+1120826372,1120826623,CA
+1120826624,1120854015,US
1120854016,1120862207,CA
1120862208,1120875007,US
1120875008,1120875263,AS
@@ -12086,7 +14100,9 @@
1121254144,1121255423,CA
1121255424,1121714998,US
1121714999,1121714999,KW
-1121715000,1121878015,US
+1121715000,1121763327,US
+1121763328,1121767423,CA
+1121767424,1121878015,US
1121878016,1121910783,CA
1121910784,1122074623,US
1122074624,1122087935,CA
@@ -12109,11 +14125,7 @@
1122451456,1122455551,CO
1122455552,1122476031,US
1122476032,1122480127,PR
-1122480128,1122494975,US
-1122494976,1122495231,PR
-1122495232,1122497791,US
-1122497792,1122498047,PR
-1122498048,1122533375,US
+1122480128,1122533375,US
1122533376,1122535423,GB
1122535424,1122538495,KR
1122538496,1122635775,US
@@ -12132,17 +14144,13 @@
1123589632,1123589887,DE
1123589888,1123590143,US
1123590144,1123598335,VI
-1123598336,1123606527,CA
-1123606528,1123635199,US
+1123598336,1123635199,US
1123635200,1123635455,AU
-1123635456,1123635639,GB
+1123635456,1123635639,US
1123635640,1123635640,RU
-1123635641,1123635670,GB
+1123635641,1123635670,US
1123635671,1123635671,RU
-1123635672,1123635711,GB
-1123635712,1123638527,US
-1123638528,1123638783,FR
-1123638784,1123651583,US
+1123635672,1123651583,US
1123651584,1123651839,JM
1123651840,1123652095,BB
1123652096,1123652863,JM
@@ -12201,9 +14209,7 @@
1125481728,1125489151,US
1125489152,1125490687,CA
1125490688,1125498879,US
-1125498880,1125501439,CA
-1125501440,1125501695,US
-1125501696,1125508095,CA
+1125498880,1125508095,CA
1125508096,1125508351,PA
1125508352,1125514239,CA
1125514240,1125514495,CY
@@ -12235,13 +14241,17 @@
1128529920,1128641023,CA
1128641024,1128641535,US
1128641536,1128792063,CA
-1128792064,1130537215,US
+1128792064,1128817407,US
+1128817408,1128817663,NL
+1128817664,1130537215,US
1130537216,1130537471,GU
1130537472,1130537727,US
1130537728,1130537983,GU
1130537984,1130538751,US
1130538752,1130539007,GU
-1130539008,1133461247,US
+1130539008,1133226239,US
+1133226240,1133226495,AS
+1133226496,1133461247,US
1133461248,1133461503,CA
1133461504,1133785439,US
1133785440,1133785471,GB
@@ -12252,8 +14262,10 @@
1134448640,1134546943,US
1134546944,1134551039,CA
1134551040,1136523263,US
-1136523264,1136523775,CA
-1136523776,1136721919,US
+1136523264,1136523391,CA
+1136523392,1136523519,US
+1136523520,1136523647,CA
+1136523648,1136721919,US
1136721920,1136787455,CA
1136787456,1137195519,US
1137195520,1137195775,JP
@@ -12287,7 +14299,9 @@
1137541120,1137623039,US
1137623040,1137639423,PR
1137639424,1137704959,US
-1137704960,1137712383,CA
+1137704960,1137706239,CA
+1137706240,1137706495,US
+1137706496,1137712383,CA
1137712384,1137712639,US
1137712640,1137713151,CA
1137713152,1137758207,US
@@ -12303,9 +14317,7 @@
1137893376,1137917951,US
1137917952,1137922047,CA
1137922048,1137926143,US
-1137926144,1137926655,CA
-1137926656,1137926911,AW
-1137926912,1137929727,CA
+1137926144,1137929727,CA
1137929728,1137929983,IE
1137929984,1137934335,CA
1137934336,1137950719,US
@@ -12318,7 +14330,9 @@
1137975296,1137983487,US
1137983488,1137991679,CA
1137991680,1138049023,US
-1138049024,1138061311,CA
+1138049024,1138053631,CA
+1138053632,1138053887,US
+1138053888,1138061311,CA
1138061312,1138069503,US
1138069504,1138073599,JM
1138073600,1138163711,US
@@ -12336,12 +14350,10 @@
1138196480,1138204671,CA
1138204672,1138212863,US
1138212864,1138216959,CA
-1138216960,1138372863,US
-1138372864,1138373119,AS
-1138373120,1138373887,US
-1138373888,1138374655,AS
-1138374656,1138374911,US
-1138374912,1138375679,AS
+1138216960,1138374143,US
+1138374144,1138374399,AS
+1138374400,1138375167,US
+1138375168,1138375679,AS
1138375680,1138419711,US
1138419712,1138419967,DE
1138419968,1138499583,US
@@ -12366,7 +14378,9 @@
1138774016,1138778111,CA
1138778112,1138780671,US
1138780672,1138780679,CA
-1138780680,1138786303,US
+1138780680,1138781183,US
+1138781184,1138781439,CA
+1138781440,1138786303,US
1138786304,1138819071,PR
1138819072,1138851839,CA
1138851840,1138917375,US
@@ -12379,25 +14393,23 @@
1139167232,1139167743,US
1139167744,1139168767,PR
1139168768,1139169279,US
-1139169280,1139170303,PR
-1139170304,1139171071,US
+1139169280,1139170175,PR
+1139170176,1139170815,US
+1139170816,1139170943,PR
+1139170944,1139171071,US
1139171072,1139171327,PR
-1139171328,1139175679,US
-1139175680,1139175807,PR
-1139175808,1139179519,US
+1139171328,1139179519,US
1139179520,1139195903,CA
1139195904,1139216383,US
1139216384,1139220479,CA
1139220480,1139265535,US
1139265536,1139269631,CA
-1139269632,1144796671,US
-1144796672,1144796799,CA
-1144796800,1144796927,US
-1144796928,1144797055,CA
-1144797056,1145141247,US
-1145142784,1145158143,US
-1145158144,1145158655,CA
-1145158656,1145188351,US
+1139269632,1143726207,US
+1143726208,1143726335,CA
+1143726336,1144796671,US
+1144796672,1144796927,CA
+1144796928,1145141247,US
+1145142784,1145188351,US
1145188352,1145192447,CA
1145192448,1145242111,US
1145242112,1145242367,NO
@@ -12424,9 +14436,7 @@
1145430016,1145475071,US
1145475072,1145479167,CA
1145479168,1145503743,US
-1145503744,1145506815,CA
-1145506816,1145507071,US
-1145507072,1145520127,CA
+1145503744,1145520127,CA
1145520128,1145552895,US
1145552896,1145556991,CA
1145556992,1150043135,US
@@ -12461,17 +14471,15 @@
1151946240,1151946751,GB
1151946752,1152073727,US
1152073728,1152077823,CA
-1152077824,1152083455,US
-1152083456,1152083711,MO
-1152083712,1152116479,US
+1152077824,1152116479,US
1152116480,1152116735,CA
1152116736,1152117759,US
1152117760,1152117952,IL
1152117953,1152117953,CA
1152117954,1152118015,IL
-1152118016,1152121855,US
-1152121856,1152122111,ID
-1152122112,1152581631,US
+1152118016,1152120319,US
+1152120320,1152120575,CA
+1152120576,1152581631,US
1152581632,1152614399,CA
1152614400,1152778239,US
1152778240,1152843775,CA
@@ -12511,17 +14519,14 @@
1158340608,1158344703,CA
1158344704,1158348799,US
1158348800,1158381567,CA
-1158381568,1158414591,US
-1158416336,1158416351,US
-1158416896,1158417151,US
-1158420480,1158439167,US
-1158439296,1158439423,US
-1158439680,1158439935,US
+1158381568,1158438911,US
1158441216,1158441471,US
1158443008,1158724607,US
1158724608,1158724863,NL
1158724864,1158774783,US
-1158774784,1158791167,CA
+1158774784,1158784703,CA
+1158784704,1158784767,US
+1158784768,1158791167,CA
1158791168,1158794239,BM
1158794240,1158794495,US
1158794496,1158799359,BM
@@ -12532,7 +14537,11 @@
1159213056,1159217151,CA
1159217152,1159249919,US
1159249920,1159254015,PR
-1159254016,1159269119,US
+1159254016,1159262475,US
+1159262476,1159262479,SA
+1159262480,1159262487,US
+1159262488,1159262491,SA
+1159262492,1159269119,US
1159269120,1159269375,AR
1159269376,1159274495,US
1159274496,1159274751,GB
@@ -12566,7 +14575,9 @@
1159519744,1159520255,CA
1159520256,1159521535,US
1159521536,1159521791,CA
-1159521792,1159522815,US
+1159521792,1159522223,US
+1159522224,1159522239,CA
+1159522240,1159522815,US
1159522816,1159523071,CA
1159523072,1159523583,US
1159523584,1159524351,CA
@@ -12574,15 +14585,15 @@
1159525376,1159526399,CA
1159526400,1159527935,US
1159527936,1159528191,CA
-1159528192,1159694591,US
+1159528192,1159668479,US
+1159668480,1159668735,CA
+1159668736,1159694591,US
1159694592,1159694847,CA
1159694848,1159700479,US
1159700480,1159725055,CA
1159725056,1160011775,US
1160011776,1160019967,CA
-1160019968,1160202239,US
-1160202240,1160202495,CA
-1160202496,1160364031,US
+1160019968,1160364031,US
1160364032,1160368127,CA
1160368128,1160373247,US
1160373248,1160373503,AE
@@ -12615,9 +14626,7 @@
1160610816,1160665599,US
1160665600,1160665855,CH
1160665856,1160667135,US
-1160667136,1160667903,CA
-1160667904,1160668159,US
-1160668160,1160675327,CA
+1160667136,1160675327,CA
1160675328,1160678399,US
1160678400,1160678655,MX
1160678656,1160683519,US
@@ -12676,16 +14685,10 @@
1161437184,1161453567,US
1161453568,1161457663,CA
1161457664,1161576447,US
-1161576448,1161578111,CA
-1161578112,1161578239,US
-1161578240,1161580543,CA
-1161580544,1161586687,US
-1161586688,1161586943,PA
-1161586944,1161617407,US
+1161576448,1161580543,CA
+1161580544,1161617407,US
1161617408,1161625599,CA
-1161625600,1161627703,US
-1161627704,1161627711,DE
-1161627712,1161631623,US
+1161625600,1161631623,US
1161631624,1161631631,KW
1161631632,1161649407,US
1161649408,1161649663,AR
@@ -12795,9 +14798,7 @@
1163472896,1163479295,US
1163479296,1163479551,CA
1163479552,1163526143,US
-1163526144,1163526399,CA
-1163526400,1163526655,US
-1163526656,1163526911,CA
+1163526144,1163526911,CA
1163526912,1163527167,US
1163527168,1163527679,CA
1163527680,1163527935,US
@@ -12921,8 +14922,14 @@
1168393664,1168393983,CA
1168393984,1168394143,US
1168394144,1168394151,CA
-1168394152,1168394239,US
-1168394240,1168394495,CA
+1168394152,1168394279,US
+1168394280,1168394303,CA
+1168394304,1168394399,US
+1168394400,1168394407,CA
+1168394408,1168394431,US
+1168394432,1168394447,CA
+1168394448,1168394479,US
+1168394480,1168394495,CA
1168394496,1168394575,US
1168394576,1168394591,CA
1168394592,1168394719,US
@@ -12997,7 +15004,8 @@
1169203200,1169211391,CA
1169211392,1170190335,US
1170190336,1170190847,GB
-1170190848,1170227199,US
+1170190848,1170191103,JP
+1170191104,1170227199,US
1170227200,1170231295,NL
1170231296,1170461183,US
1170461184,1170461695,CO
@@ -13017,7 +15025,11 @@
1170522112,1175728639,US
1175728640,1175728895,CA
1175728896,1175977983,US
-1175977984,1176502271,CA
+1175977984,1176068167,CA
+1176068168,1176068175,US
+1176068176,1176068191,CA
+1176068192,1176068207,US
+1176068208,1176502271,CA
1176502272,1176616959,US
1176616960,1176620031,CA
1176620032,1176620447,US
@@ -13039,7 +15051,9 @@
1176702976,1176707071,CA
1176707072,1176731647,US
1176731648,1176735743,PR
-1176735744,1176738303,US
+1176735744,1176736767,US
+1176736768,1176737023,NG
+1176737024,1176738303,US
1176738304,1176739071,CO
1176739072,1176739583,US
1176739584,1176739839,CO
@@ -13086,13 +15100,13 @@
1177075456,1177164863,US
1177164864,1177164895,CA
1177164896,1177165055,US
-1177165056,1177165311,CA
+1177165056,1177165061,CA
+1177165062,1177165062,US
+1177165063,1177165311,CA
1177165312,1177354239,US
-1177354240,1177357311,PR
-1177357312,1177357567,US
-1177357568,1177405695,PR
-1177405696,1177405951,US
-1177405952,1177419775,PR
+1177354240,1177356799,PR
+1177356800,1177357055,US
+1177357056,1177419775,PR
1177419776,1177505401,US
1177505402,1177505402,BB
1177505403,1177550847,US
@@ -13115,9 +15129,9 @@
1192468480,1192476671,CA
1192476672,1192488959,US
1192488960,1192493055,CA
-1192493056,1207932159,US
-1207932160,1207932415,CA
-1207932416,1207975935,US
+1192493056,1207032703,US
+1207032704,1207032831,CA
+1207032832,1207975935,US
1207975936,1207980031,CA
1207980032,1208008703,US
1208008704,1208016895,CA
@@ -13216,15 +15230,17 @@
1209867520,1209917439,US
1209917440,1209925631,CA
1209925632,1210253311,US
-1210253312,1210258431,CA
-1210258432,1210258687,US
-1210258688,1210261503,CA
+1210253312,1210261503,CA
1210261504,1210420223,US
1210420224,1210420479,IT
1210420480,1210421503,US
1210421504,1210421551,CA
-1210421552,1210449919,US
-1210449920,1210580991,CA
+1210421552,1210447003,US
+1210447004,1210447004,CA
+1210447005,1210449919,US
+1210449920,1210554367,CA
+1210554368,1210554623,US
+1210554624,1210580991,CA
1210580992,1210847231,US
1210851328,1210925055,US
1210925056,1210941439,CA
@@ -13296,9 +15312,11 @@
1224473600,1224474623,US
1224474624,1224475647,GT
1224475648,1224476671,US
-1224476672,1224476927,CW
-1224476928,1224477183,US
-1224477184,1224478719,CW
+1224476672,1224476927,SX
+1224476928,1224477439,US
+1224477440,1224477695,SX
+1224477696,1224477951,US
+1224477952,1224478719,SX
1224478720,1224480767,US
1224480768,1224484863,JM
1224484864,1224493055,GT
@@ -13341,7 +15359,9 @@
1246923520,1246923775,AU
1246923776,1246937087,US
1246937088,1246945279,CA
-1246945280,1247119439,US
+1246945280,1247060479,US
+1247060480,1247060735,CA
+1247060736,1247119439,US
1247119440,1247119447,KW
1247119448,1247119967,US
1247119968,1247119975,KW
@@ -13350,7 +15370,9 @@
1247123712,1247123967,US
1247123968,1247124223,LU
1247124224,1247490047,US
-1247494144,1248864255,US
+1247494144,1247556640,US
+1247556641,1247556641,CA
+1247556642,1248864255,US
1248864256,1248866303,CA
1248866304,1248879615,US
1248880640,1248885759,US
@@ -13437,7 +15459,9 @@
1249256448,1249257471,CA
1249257472,1249260543,US
1249260544,1249261567,CA
-1249261568,1249272831,US
+1249261568,1249267711,US
+1249267712,1249268735,AF
+1249268736,1249272831,US
1249272832,1249273855,CA
1249273856,1249281023,US
1249282048,1249310719,US
@@ -13459,7 +15483,6 @@
1249397760,1249409023,US
1249409024,1249410047,CA
1249410048,1249432575,US
-1249433088,1249433343,US
1249433600,1249434623,US
1249434624,1249435647,CA
1249435648,1249449983,US
@@ -13496,7 +15519,8 @@
1249592320,1249593343,CA
1249593344,1249598463,US
1249598464,1249599487,CA
-1249599488,1249637887,US
+1249599488,1249609983,US
+1249611776,1249637887,US
1249637888,1249638143,CA
1249638144,1249710143,US
1249710144,1249710207,CN
@@ -13505,19 +15529,22 @@
1249710592,1249710847,DE
1249710848,1249715711,US
1249715712,1249715967,DE
-1249715968,1249716735,US
+1249715968,1249716479,US
+1249716480,1249716735,TW
1249716736,1249716991,DE
-1249716992,1249720319,US
-1249720320,1249720511,AU
+1249716992,1249718015,US
+1249718016,1249718271,BE
+1249718272,1249720319,US
+1249720320,1249720367,AU
+1249720368,1249720383,SG
+1249720384,1249720511,AU
1249720512,1249720527,IN
1249720528,1249720575,AU
1249720576,1249720591,FR
1249720592,1249720599,GB
1249720600,1249720607,IT
1249720608,1249720831,GB
-1249720832,1249721119,US
-1249721120,1249721135,CA
-1249721136,1249721343,US
+1249720832,1249721343,US
1249721344,1249721351,AT
1249721352,1249721359,BE
1249721360,1249721367,CH
@@ -13570,7 +15597,12 @@
1249721808,1249721815,ZA
1249721816,1249722111,US
1249722112,1249722367,IN
-1249722368,1249725439,US
+1249722368,1249724671,US
+1249724672,1249724694,BE
+1249724695,1249724695,US
+1249724696,1249724927,BE
+1249724928,1249725183,FI
+1249725184,1249725439,US
1249725440,1249725695,NL
1249725696,1249725951,US
1249725952,1249726207,NL
@@ -13578,9 +15610,15 @@
1249728000,1249728255,HU
1249728256,1249744895,US
1249744896,1249745151,TW
-1249745152,1249754390,US
+1249745152,1249752319,US
+1249752320,1249752575,BE
+1249752576,1249754111,US
+1249754112,1249754367,IE
+1249754368,1249754390,US
1249754391,1249754391,DE
-1249754392,1249796095,US
+1249754392,1249754623,US
+1249754624,1249754879,SG
+1249754880,1249796095,US
1249796096,1249804287,CA
1249804288,1249851903,US
1249851904,1249852159,FR
@@ -13597,7 +15635,9 @@
1254704640,1254978751,US
1254978752,1254978767,LB
1254978768,1254989823,US
-1254989824,1254998015,CA
+1254989824,1254990335,CA
+1254990336,1254990591,US
+1254990592,1254998015,CA
1254998016,1255002111,US
1255002112,1255006207,CA
1255006208,1255011583,US
@@ -13622,7 +15662,9 @@
1255514112,1255522303,CA
1255522304,1255571455,US
1255571456,1255579647,CA
-1255579648,1255669759,US
+1255579648,1255588351,US
+1255588352,1255588607,NL
+1255588608,1255669759,US
1255669760,1255735295,CA
1255735296,1255770367,US
1255770368,1255770623,CA
@@ -13643,8 +15685,8 @@
1262783744,1262783871,US
1262783872,1262783999,CA
1262784000,1262784127,US
-1262784128,1262784255,CA
-1262784256,1263271423,US
+1262784128,1262784511,CA
+1262784512,1263271423,US
1263271424,1263271679,CA
1263271680,1264717823,US
1264717824,1264718079,CA
@@ -13662,7 +15704,11 @@
1266147328,1266155519,CA
1266155520,1267934968,US
1267934969,1267934969,CA
-1267934970,1268252671,US
+1267934970,1268152737,US
+1268152738,1268152738,CA
+1268152739,1268200732,US
+1268200733,1268200733,VI
+1268200734,1268252671,US
1268252672,1268776959,CA
1268776960,1275600895,US
1275600896,1275604991,BM
@@ -13692,8 +15738,8 @@
1279262720,1279787007,CA
1279787008,1279848447,US
1279848448,1279851519,PR
-1279851520,1279852031,VI
-1279852032,1279852543,PR
+1279851520,1279851775,VI
+1279851776,1279852543,PR
1279852544,1279950847,US
1279950848,1279951103,CA
1279951104,1279951231,US
@@ -13702,7 +15748,9 @@
1279952384,1279952895,CA
1279952896,1279953151,US
1279953152,1279953663,CA
-1279953664,1279959551,US
+1279953664,1279953759,US
+1279953760,1279953791,CA
+1279953792,1279959551,US
1279959552,1279959807,CA
1279959808,1279960479,US
1279960480,1279960511,CA
@@ -13889,13 +15937,11 @@
1296367616,1296400383,GR
1296400384,1296433151,BH
1296433152,1296465919,BG
-1296465920,1296470015,LT
-1296470016,1296473087,NO
-1296473088,1296475135,LT
-1296475136,1296476159,US
-1296476160,1296479743,LT
+1296465920,1296474111,FR
+1296474112,1296476159,US
+1296476160,1296479743,FR
1296479744,1296482303,NO
-1296482304,1296498687,LT
+1296482304,1296498687,FR
1296498688,1296531455,BG
1296531456,1296564223,MT
1296564224,1296566271,GB
@@ -13952,7 +15998,9 @@
1296677640,1296677647,NG
1296677648,1296677727,JE
1296677728,1296677735,NG
-1296677736,1296678903,JE
+1296677736,1296678791,JE
+1296678792,1296678799,NG
+1296678800,1296678903,JE
1296678904,1296678911,NG
1296678912,1296680959,SA
1296680960,1296683007,ES
@@ -14038,9 +16086,15 @@
1297072128,1297088511,PL
1297088512,1297121279,AT
1297121280,1297154047,SE
-1297154048,1297178623,RO
+1297154048,1297173503,RO
+1297173504,1297173759,IR
+1297173760,1297173775,IQ
+1297173776,1297175551,IR
+1297175552,1297178623,RO
1297178624,1297178879,NL
-1297178880,1297215487,RO
+1297178880,1297182719,RO
+1297182720,1297184767,ES
+1297184768,1297215487,RO
1297215488,1297217535,NL
1297217536,1297219583,RO
1297219584,1297285119,RU
@@ -14086,7 +16140,9 @@
1297727488,1297743871,MD
1297743872,1297760255,DE
1297760256,1297776639,LT
-1297776640,1297793023,DE
+1297776640,1297782783,DE
+1297782784,1297784831,PT
+1297784832,1297793023,DE
1297793024,1297809407,UA
1297809408,1297825791,PL
1297825792,1297842175,RU
@@ -14161,7 +16217,7 @@
1298137088,1298661375,GB
1298661376,1298677759,FR
1298677760,1298694143,IR
-1298694144,1298710527,RO
+1298694144,1298710527,BG
1298710528,1298726911,CZ
1298726912,1298743295,RS
1298743296,1298759679,FI
@@ -14199,16 +16255,16 @@
1299120128,1299136511,SI
1299136512,1299169279,HU
1299169280,1299174399,FR
-1299174400,1299176447,GB
-1299176448,1299177471,FR
-1299177472,1299179519,DE
-1299179520,1299185663,FR
+1299174400,1299178495,GB
+1299178496,1299185663,FR
1299185664,1299447807,PL
1299447808,1299709951,AT
1299709952,1299972095,UA
1299972096,1300234239,IL
1300234240,1302331391,FR
-1302331392,1303379967,NL
+1302331392,1303359999,NL
+1303360000,1303360255,DE
+1303360256,1303379967,NL
1303379968,1304428543,DE
1304428544,1305477119,FR
1305477120,1305739263,ES
@@ -14342,10 +16398,8 @@
1307623424,1307627519,FR
1307627520,1307631615,SE
1307631616,1307635711,IT
-1307635712,1307636991,EE
-1307636992,1307637247,LV
-1307637248,1307637503,EE
-1307637504,1307637759,LV
+1307635712,1307636735,EE
+1307636736,1307637759,LV
1307637760,1307639807,LT
1307639808,1307643903,IT
1307643904,1307652095,RU
@@ -14374,9 +16428,9 @@
1307742208,1307746303,HU
1307746304,1307750399,UA
1307750400,1307754495,IT
-1307754496,1307757289,GB
-1307757290,1307757293,FR
-1307757294,1307758591,GB
+1307754496,1307757055,GB
+1307757056,1307757311,FR
+1307757312,1307758591,GB
1307758592,1307762687,SM
1307762688,1307766783,PL
1307766784,1307770879,GB
@@ -14389,6 +16443,7 @@
1307807744,1307811839,SE
1307811840,1307815935,NL
1307816192,1307816447,GB
+1307817286,1307817286,DE
1307817984,1307818048,GB
1307818049,1307818049,BE
1307818050,1307818239,GB
@@ -14423,7 +16478,9 @@
1307926528,1307930623,KZ
1307930624,1307934719,RU
1307934720,1307938815,FR
-1307938816,1307942911,US
+1307938816,1307941242,US
+1307941243,1307941243,TR
+1307941244,1307942911,US
1307942912,1307947007,RU
1307947008,1307951103,CH
1307951104,1307959295,RU
@@ -14521,19 +16578,7 @@
1310588928,1310605311,RU
1310605312,1310621695,PL
1310621696,1310638079,RS
-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
+1310638080,1310656511,RU
1310656512,1310657535,GB
1310657536,1310658559,SE
1310658560,1310660607,RU
@@ -14583,9 +16628,7 @@
1311250432,1311252479,RU
1311252480,1311253447,GB
1311253448,1311253455,IT
-1311253456,1311254447,GB
-1311254448,1311254455,IT
-1311254456,1311254527,GB
+1311253456,1311254527,GB
1311254528,1311256575,SE
1311256576,1311258623,FR
1311258624,1311262719,GB
@@ -14611,11 +16654,13 @@
1311301632,1311303679,TR
1311303680,1311307775,GB
1311307776,1311309823,IS
-1311309824,1311310591,GB
-1311310592,1311310847,GG
+1311309824,1311310335,GB
+1311310336,1311310847,GG
1311310848,1311310857,GB
1311310858,1311310858,GG
-1311310859,1311311871,GB
+1311310859,1311311103,GB
+1311311104,1311311359,GG
+1311311360,1311311871,GB
1311311872,1311315967,CZ
1311315968,1311318015,PL
1311318016,1311320063,RU
@@ -14646,9 +16691,11 @@
1311506432,1311637503,CZ
1311637504,1312292863,DE
1312292864,1312817151,LT
-1312817152,1313183103,SE
-1313183104,1313183231,DK
-1313183232,1313865727,SE
+1312817152,1313144959,SE
+1313144960,1313145087,DK
+1313145088,1313391615,SE
+1313391616,1313391871,DK
+1313391872,1313865727,SE
1313865728,1313931263,CZ
1313931264,1313996799,RU
1313996800,1314062335,SE
@@ -14682,10 +16729,9 @@
1315741696,1315745791,LB
1315745792,1315749887,CZ
1315749888,1315753983,RU
-1315758080,1315758847,RE
-1315758848,1315760639,FR
-1315760640,1315760895,RE
-1315760896,1315761407,FR
+1315758080,1315760383,FR
+1315760384,1315761151,RE
+1315761152,1315761407,FR
1315761408,1315761663,RE
1315761664,1315761919,FR
1315761920,1315762175,RE
@@ -14771,7 +16817,9 @@
1317636096,1317637119,IE
1317637120,1317642239,GB
1317642240,1317642495,IE
-1317642496,1317646551,GB
+1317642496,1317643316,GB
+1317643317,1317643317,IE
+1317643318,1317646551,GB
1317646552,1317646559,IE
1317646560,1317647015,GB
1317647016,1317647023,IE
@@ -14790,7 +16838,9 @@
1317765120,1317781503,GE
1317781504,1317814271,RU
1317814272,1317830655,DE
-1317830656,1317847039,NL
+1317830656,1317831167,NL
+1317831168,1317831423,RU
+1317831424,1317847039,NL
1317847040,1317863423,RU
1317863424,1317879807,GB
1317879808,1317896191,SK
@@ -14819,10 +16869,7 @@
1318682624,1318690815,RU
1318690816,1318699007,DK
1318699008,1318707199,IE
-1318707200,1318707455,FR
-1318707456,1318713023,GB
-1318713024,1318713087,FR
-1318713088,1318715391,GB
+1318707200,1318715391,FR
1318715392,1318723583,BG
1318723584,1318731775,IR
1318731776,1318739967,PL
@@ -14845,7 +16892,9 @@
1318871040,1318879231,DK
1318879232,1318887423,CZ
1318887424,1318895615,PL
-1318895616,1318903807,DK
+1318895616,1318900735,DK
+1318900736,1318900991,SE
+1318900992,1318903807,DK
1318903808,1318911999,RU
1318912000,1318920191,MK
1318920192,1318928383,IR
@@ -14900,8 +16949,7 @@
1331836928,1331838975,FR
1331838976,1331841023,ES
1331841024,1331843071,CZ
-1331843072,1331844863,GB
-1331844864,1331845119,FR
+1331843072,1331845119,GB
1331845120,1331847167,RU
1331847168,1331849215,FR
1331849216,1331851263,BG
@@ -14942,7 +16990,12 @@
1331931136,1331933183,SE
1331933184,1331935231,TR
1331935232,1331937279,NL
-1331937280,1331939327,GB
+1331937280,1331938063,NG
+1331938064,1331938079,GB
+1331938080,1331938431,NG
+1331938432,1331938559,GB
+1331938560,1331939071,NG
+1331939072,1331939327,GB
1331939328,1331941375,BE
1331941376,1331943423,ES
1331943424,1331945471,RU
@@ -15037,15 +17090,28 @@
1334479360,1334479871,SE
1334479872,1334480639,DK
1334480640,1334484991,SE
-1334484992,1334487039,DK
+1334484992,1334485503,DK
+1334485504,1334485759,SE
+1334485760,1334486015,DK
+1334486016,1334486527,SE
+1334486528,1334487039,DK
1334487040,1334487295,SE
-1334487296,1334489087,DK
+1334487296,1334487551,DK
+1334487552,1334487807,SE
+1334487808,1334489087,DK
1334489088,1334501631,SE
-1334501632,1334508031,DK
-1334508032,1334508415,SE
-1334508416,1334509055,DK
-1334509056,1334509311,SE
-1334509312,1334509567,DK
+1334501632,1334501887,DK
+1334501888,1334502143,SE
+1334502144,1334502911,DK
+1334502912,1334503423,SE
+1334503424,1334505855,DK
+1334505856,1334506239,SE
+1334506240,1334507007,DK
+1334507008,1334507519,SE
+1334507520,1334508031,DK
+1334508032,1334508543,SE
+1334508544,1334508799,DK
+1334508800,1334509567,SE
1334509568,1334542335,PL
1334542336,1334575103,RU
1334575104,1334579199,UA
@@ -15059,7 +17125,9 @@
1334611968,1334616063,ME
1334616064,1334620159,MD
1334620160,1334624255,DE
-1334624256,1334628351,GB
+1334624256,1334625791,GB
+1334625792,1334626047,AU
+1334626048,1334628351,GB
1334628352,1334632447,IE
1334632448,1334636543,KZ
1334636544,1334640639,RU
@@ -15078,8 +17146,8 @@
1334681856,1334682111,GB
1334682112,1334682367,IE
1334682368,1334682623,FR
-1334682624,1334683135,DE
-1334683136,1334683391,GB
+1334682624,1334683135,GB
+1334683136,1334683391,CZ
1334683392,1334683647,CH
1334683648,1334683903,GB
1334683904,1334684031,DE
@@ -15179,7 +17247,8 @@
1336619008,1336621055,AL
1336621056,1336623103,DE
1336623104,1336625151,BE
-1336625152,1336626286,GB
+1336625152,1336625407,IE
+1336625408,1336626286,GB
1336626287,1336626287,IE
1336626288,1336627199,GB
1336627200,1336629247,NO
@@ -15232,95 +17301,55 @@
1342177280,1342628207,GB
1342628208,1342628223,IE
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,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,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
+1342701568,1342750719,RE
+1342750720,1342751999,FR
+1342752000,1342752255,RE
+1342752256,1342753023,FR
+1342753024,1342753279,YT
+1342753280,1342754047,FR
+1342754048,1342754303,RE
+1342754304,1342755583,FR
+1342755584,1342756095,RE
+1342756096,1342759679,FR
+1342759680,1342759935,RE
+1342759936,1342760703,FR
+1342760704,1342760959,RE
+1342760960,1342763007,FR
+1342763008,1342763263,YT
+1342763264,1342765055,FR
+1342765056,1342765311,RE
+1342765312,1342988287,FR
1342988288,1342989055,US
-1342989056,1342996479,FR
-1342996480,1343000575,GF
-1343000576,1343001087,FR
-1343001088,1343001855,GF
-1343001856,1343002111,FR
-1343002112,1343005695,GF
-1343005696,1343005951,FR
-1343005952,1343012863,GF
+1342989056,1342996991,FR
+1342996992,1342997247,GF
+1342997248,1342997759,FR
+1342997760,1342999551,GF
+1342999552,1343000575,FR
+1343000576,1343001087,GF
+1343001088,1343001599,FR
+1343001600,1343002367,GF
+1343002368,1343002879,FR
+1343002880,1343003135,GF
+1343003136,1343003391,FR
+1343003392,1343004159,GF
+1343004160,1343004671,FR
+1343004672,1343004927,GF
+1343004928,1343005439,FR
+1343005440,1343007231,GF
+1343007232,1343007487,FR
+1343007488,1343007999,GF
+1343008000,1343008255,FR
+1343008256,1343008511,GF
+1343008512,1343008767,FR
+1343008768,1343009023,GF
+1343009024,1343010047,FR
+1343010048,1343010303,GF
+1343010304,1343010815,FR
+1343010816,1343011071,GF
+1343011072,1343011583,FR
+1343011584,1343012095,GF
+1343012096,1343012607,FR
+1343012608,1343012863,GF
1343012864,1343017983,FR
1343017984,1343018495,RE
1343018496,1343025151,FR
@@ -15425,12 +17454,7 @@
1346740224,1346744319,FI
1346744320,1346748415,RU
1346748416,1346752511,DE
-1346752512,1346753023,RE
-1346753024,1346753791,FR
-1346753792,1346754303,RE
-1346754304,1346754559,FR
-1346754560,1346755071,RE
-1346755072,1346755583,FR
+1346752512,1346755583,FR
1346755584,1346756095,RE
1346756096,1346756607,FR
1346756608,1346760703,SE
@@ -15726,31 +17750,27 @@
1347295217,1347295223,US
1347295224,1347295224,AO
1347295225,1347295232,NG
-1347295233,1347295744,SE
-1347295745,1347295745,US
-1347295746,1347295748,SE
-1347295749,1347295752,US
+1347295233,1347295743,SE
+1347295744,1347295752,US
1347295753,1347295755,BW
-1347295756,1347295759,SE
+1347295756,1347295759,US
1347295760,1347295775,BW
1347295776,1347295776,IQ
1347295777,1347295784,HU
1347295785,1347295791,LB
-1347295792,1347295816,SE
+1347295792,1347295816,US
1347295817,1347295824,OM
1347295825,1347295832,GH
1347295833,1347295840,FR
1347295841,1347295848,NG
1347295849,1347295852,LS
-1347295853,1347295856,SE
+1347295853,1347295856,US
1347295857,1347295864,NG
-1347295865,1347295928,SE
+1347295865,1347295928,US
1347295929,1347295936,NG
1347295937,1347295976,US
1347295977,1347295984,LS
-1347295985,1347295992,US
-1347295993,1347295999,SE
-1347296000,1347296007,US
+1347295985,1347296007,US
1347296008,1347296008,SE
1347296009,1347296032,US
1347296033,1347296040,SE
@@ -15782,9 +17802,7 @@
1347305472,1347309567,AL
1347309568,1347313663,DE
1347313664,1347321855,RU
-1347325952,1347327743,CZ
-1347327744,1347327999,SK
-1347328000,1347330047,CZ
+1347325952,1347330047,CZ
1347330048,1347338239,DE
1347338240,1347342335,RU
1347342336,1347346431,SE
@@ -15888,8 +17906,7 @@
1347755160,1347755175,GR
1347755176,1347756031,CY
1347756032,1347760127,NL
-1347760128,1347762175,CZ
-1347762176,1347764223,HU
+1347760128,1347764223,HU
1347764224,1347772415,GB
1347772416,1347776511,MT
1347776512,1347780607,SE
@@ -15910,7 +17927,8 @@
1347837952,1347846143,RO
1347846144,1347850239,NO
1347850240,1347854335,IT
-1347854336,1347854847,DE
+1347854336,1347854591,DE
+1347854600,1347854607,DE
1347857408,1347858431,DE
1347862090,1347862090,DE
1347862272,1347862527,DE
@@ -16056,53 +18074,31 @@
1348861952,1348993023,ES
1348993024,1349124095,IT
1349124096,1349255167,GR
-1349255168,1349400575,AT
-1349400576,1349401087,DE
-1349401088,1349451775,AT
+1349255168,1349451775,AT
1349451776,1349517311,IE
1349517312,1349763071,NL
1349763072,1349771263,RU
1349771264,1349779455,NL
1349779456,1349910527,IT
1349910528,1350041599,FR
-1350041600,1350067575,AT
-1350067576,1350067579,CH
-1350067580,1350110335,AT
-1350110336,1350110463,DE
-1350110464,1350140927,AT
-1350140928,1350141055,CH
-1350141056,1350166015,AT
-1350166016,1350166271,SK
-1350166272,1350188543,AT
-1350188544,1350188799,DE
-1350188800,1350195231,AT
-1350195232,1350195235,DE
-1350195236,1350215679,AT
+1350041600,1350215679,AT
1350215680,1350215935,IQ
1350215936,1350216959,AT
1350216960,1350217215,IQ
1350217216,1350217471,AT
1350217472,1350217727,IQ
-1350217728,1350230015,AT
-1350230016,1350230271,DE
-1350230272,1350251007,AT
-1350251008,1350251263,HU
-1350251264,1350259447,AT
-1350259448,1350259451,CZ
-1350259452,1350290223,AT
-1350290224,1350290227,CH
-1350290228,1350303743,AT
+1350217728,1350303743,AT
1350303744,1350434815,FR
1350434816,1350565887,NL
1350565888,1352299775,DE
1352299776,1352300031,US
1352300032,1352412159,DE
1352412160,1352412415,FR
-1352412416,1352412799,DE
-1352412800,1352412863,GB
-1352412864,1352417279,DE
+1352412416,1352417279,DE
1352417280,1352418303,SK
-1352418304,1352663039,DE
+1352418304,1352488959,DE
+1352488960,1352491007,FR
+1352491008,1352663039,DE
1352663040,1353187327,DK
1353187328,1353262295,GB
1353262296,1353262303,US
@@ -16112,11 +18108,11 @@
1353275248,1353275255,ES
1353275256,1353277439,GB
1353277440,1353279487,CH
-1353279488,1353287959,GB
+1353279488,1353279583,GB
+1353279584,1353279591,IT
+1353279592,1353287959,GB
1353287960,1353287967,IE
-1353287968,1353288191,GB
-1353288192,1353288447,IE
-1353288448,1353298687,GB
+1353287968,1353298687,GB
1353298688,1353299455,SE
1353299456,1353300079,GB
1353300080,1353300095,SE
@@ -16126,9 +18122,7 @@
1353308160,1353309183,FR
1353309184,1353312447,GB
1353312448,1353312479,CH
-1353312480,1353313535,GB
-1353313536,1353313791,IE
-1353313792,1353315327,GB
+1353312480,1353315327,GB
1353315328,1353316351,ES
1353316352,1353318399,GB
1353318400,1353383935,SE
@@ -16161,9 +18155,7 @@
1356070912,1356201983,NO
1356201984,1356333055,FR
1356333056,1356464127,SE
-1356464128,1356539775,CH
-1356539776,1356539903,DE
-1356539904,1356595199,CH
+1356464128,1356595199,CH
1356595200,1356857343,FI
1356857344,1356922879,ES
1356922880,1356988415,GB
@@ -16182,9 +18174,12 @@
1357324288,1357325311,GB
1357326336,1357326337,ES
1357327360,1357327615,FR
-1357328384,1357328639,GB
+1357328384,1357328671,GB
+1357328896,1357329151,NL
1357329408,1357329415,BE
+1357330944,1357331199,GB
1357335808,1357336063,IT
+1357337600,1357337615,NL
1357340672,1357341695,GB
1357342976,1357343231,GB
1357343488,1357343503,GB
@@ -16194,24 +18189,29 @@
1357346848,1357346863,FR
1357347336,1357347375,FR
1357347456,1357347583,FR
-1357347616,1357347647,FR
+1357347616,1357347655,FR
1357347840,1357348095,PL
1357348384,1357348415,ES
+1357348480,1357348607,ES
1357351168,1357351423,PL
1357359872,1357360383,GB
1357361152,1357363199,GB
1357363200,1357364223,QA
1357364224,1357365247,ES
-1357366784,1357366959,FR
+1357366784,1357366959,GB
1357366960,1357366967,BE
-1357366968,1357366975,FR
-1357366976,1357367039,GB
+1357366968,1357367039,GB
+1357368352,1357368383,NL
1357368576,1357368831,NL
+1357371392,1357371647,GB
1357372160,1357372927,GB
1357373468,1357373471,GB
1357373480,1357373483,GB
1357373488,1357373519,GB
-1357373952,1357374463,GB
+1357373520,1357373535,FI
+1357373952,1357374975,GB
+1357377536,1357377671,FR
+1357377792,1357378047,FR
1357381632,1357414399,NO
1357414400,1357447167,LV
1357447168,1357479935,IE
@@ -16232,6 +18232,7 @@
1357877248,1357877311,DE
1357877376,1357877439,DE
1357879936,1357880063,GB
+1357883392,1357883647,FR
1357883648,1357883903,SE
1357885952,1357886207,SE
1357889024,1357889279,GB
@@ -16241,14 +18242,12 @@
1357891840,1357892095,GB
1357892608,1357892735,NL
1357892864,1357893119,NL
+1357896192,1357896447,DE
1357898752,1357898879,DE
1357899584,1357899615,NL
1357899648,1357899775,GB
1357900416,1357900543,SE
-1357902336,1357902365,GB
1357902366,1357902366,NO
-1357902367,1357902591,GB
-1357902592,1357902847,RU
1357902848,1357903359,GB
1357904896,1357905407,GB
1357905920,1357910015,LT
@@ -16289,13 +18288,11 @@
1357984912,1357984919,IT
1357984920,1357985015,GB
1357985016,1357985023,IT
-1357985024,1357985575,GB
-1357985576,1357985583,IT
-1357985584,1357985791,GB
+1357985024,1357985599,GB
+1357985600,1357985607,IT
+1357985608,1357985791,GB
1357985792,1357987839,DE
-1357987840,1357989631,GB
-1357989632,1357989887,FR
-1357989888,1357991935,GB
+1357987840,1357991935,GB
1357991936,1357996031,NO
1357996032,1358000127,CH
1358000128,1358004223,LI
@@ -16329,21 +18326,17 @@
1358147584,1358151679,GB
1358151680,1358155775,DE
1358155776,1358159871,CH
-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
+1358163968,1358165503,FR
+1358165504,1358165759,MQ
+1358165760,1358166015,FR
+1358166016,1358166527,MQ
+1358166528,1358168063,FR
1358168064,1358172159,GB
1358172160,1358176255,CY
1358176256,1358180351,RU
1358180352,1358184447,ES
-1358184448,1358186607,SE
-1358186608,1358186623,NO
+1358184448,1358186608,SE
+1358186609,1358186623,NO
1358186624,1358187775,SE
1358187776,1358187839,NO
1358187840,1358192639,SE
@@ -16427,9 +18420,7 @@
1358553088,1358557183,UA
1358557184,1358557951,GB
1358557952,1358558207,IE
-1358558208,1358560255,GB
-1358560256,1358560511,IE
-1358560512,1358561279,GB
+1358558208,1358561279,GB
1358561280,1358569471,CZ
1358569472,1358573567,NG
1358573568,1358577663,LV
@@ -16521,9 +18512,7 @@
1358862899,1358862899,NO
1358862900,1358863359,GB
1358863360,1358863615,US
-1358863616,1358863903,GB
-1358863904,1358863919,SA
-1358863920,1358864383,GB
+1358863616,1358864383,GB
1358864384,1358872575,CH
1358872576,1358876671,IT
1358876672,1358880767,LV
@@ -16586,7 +18575,9 @@
1359413248,1359429631,DE
1359429632,1359446015,LT
1359446016,1359462399,DK
-1359462400,1359467775,DE
+1359462400,1359467007,DE
+1359467008,1359467263,US
+1359467264,1359467775,DE
1359467776,1359468031,US
1359468032,1359470591,DE
1359470592,1359478783,CH
@@ -16633,7 +18624,13 @@
1360113664,1360117759,HU
1360117760,1360121855,FI
1360121856,1360125951,DE
-1360125952,1360130047,SI
+1360125952,1360127487,SI
+1360127488,1360127999,RS
+1360128000,1360128511,MK
+1360128512,1360128767,ME
+1360128768,1360129023,SI
+1360129024,1360129535,BA
+1360129536,1360130047,SI
1360130048,1360134143,IE
1360134144,1360138239,NL
1360138240,1360142335,CH
@@ -16875,9 +18872,7 @@
1363410944,1363673087,NL
1363673088,1363935231,IT
1363935232,1364197375,GB
-1364197376,1364212991,FR
-1364212992,1364213247,GF
-1364213248,1364262911,FR
+1364197376,1364262911,FR
1364262912,1364328447,IT
1364328448,1364459519,BE
1364459520,1364525055,PT
@@ -16950,7 +18945,9 @@
1364963328,1364967423,RU
1364967424,1364971519,GB
1364971520,1364975615,CZ
-1364975616,1364979711,BJ
+1364975616,1364979199,BJ
+1364979200,1364979455,NG
+1364979456,1364979711,BJ
1364979712,1364983039,GB
1364983040,1364983295,CH
1364983296,1364983807,GB
@@ -16975,7 +18972,8 @@
1365044800,1365044927,FR
1365044928,1365044935,GR
1365044936,1365044943,LU
-1365044944,1365045247,FR
+1365044944,1365044991,FR
+1365044992,1365045247,LU
1365045248,1365047295,AT
1365047296,1365049343,SK
1365049344,1365057535,FR
@@ -17022,7 +19020,9 @@
1365219704,1365219711,US
1365219712,1365220231,NL
1365220232,1365220239,IE
-1365220240,1365221239,NL
+1365220240,1365220503,NL
+1365220504,1365220507,IE
+1365220508,1365221239,NL
1365221240,1365221247,US
1365221248,1365221375,NL
1365221376,1365225471,GE
@@ -17034,7 +19034,11 @@
1365245952,1366294527,GB
1366294528,1366405831,IT
1366405832,1366405835,SI
-1366405836,1367343103,IT
+1366405836,1366465791,IT
+1366465792,1366465873,NL
+1366465874,1366465874,IT
+1366465875,1366466047,NL
+1366466048,1367343103,IT
1367343104,1369440255,GB
1369440256,1369473023,DE
1369473024,1369505791,HU
@@ -17211,6 +19215,7 @@
1372698880,1372699391,DE
1372699904,1372700159,DE
1372702720,1372703231,DE
+1372703616,1372703743,DE
1372704768,1372713983,DE
1372715008,1372717055,DE
1372717056,1372749823,PL
@@ -17226,95 +19231,121 @@
1373437952,1373503487,CH
1373503488,1373569023,RU
1373569024,1373634559,AT
-1373634560,1374683135,SE
+1373634560,1373854975,SE
+1373854976,1373855180,RU
+1373855181,1373855181,SE
+1373855182,1373855220,RU
+1373855221,1373855221,SE
+1373855222,1373855231,RU
+1373855232,1374683135,SE
1374683136,1375207423,BE
-1375207424,1375207935,FR
-1375207936,1375208447,MQ
-1375208448,1375208703,GP
-1375208704,1375210239,MQ
-1375210240,1375210495,GP
-1375210496,1375211519,MQ
-1375211520,1375211775,GP
-1375211776,1375212031,FR
-1375212032,1375212799,GP
-1375212800,1375213055,FR
-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,1375240959,GP
-1375240960,1375241215,FR
-1375241216,1375241983,GP
-1375241984,1375242239,FR
+1375207424,1375207679,MQ
+1375207680,1375208703,FR
+1375208704,1375209215,MQ
+1375209216,1375209471,FR
+1375209472,1375209983,MQ
+1375209984,1375210751,FR
+1375210752,1375211519,MQ
+1375211520,1375211775,FR
+1375211776,1375213311,GP
+1375213312,1375213567,FR
+1375213568,1375215103,GP
+1375215104,1375215359,FR
+1375215360,1375215615,GP
+1375215616,1375215871,FR
+1375215872,1375216127,GF
+1375216128,1375217663,FR
+1375217664,1375218175,GF
+1375218176,1375218431,FR
+1375218432,1375219711,GF
+1375219712,1375219967,FR
+1375219968,1375220479,GF
+1375220480,1375220735,FR
+1375220736,1375220991,GF
+1375220992,1375221247,FR
+1375221248,1375221503,GF
+1375221504,1375223039,FR
+1375223040,1375223551,GF
+1375223552,1375224831,FR
+1375224832,1375225087,MQ
+1375225088,1375225599,FR
+1375225600,1375225855,MQ
+1375225856,1375226111,FR
+1375226112,1375227903,MQ
+1375227904,1375228671,FR
+1375228672,1375228927,MQ
+1375228928,1375229439,FR
+1375229440,1375230719,MQ
+1375230720,1375231231,FR
+1375231232,1375231487,MQ
+1375231488,1375231999,FR
+1375232000,1375232255,MQ
+1375232256,1375233023,FR
+1375233024,1375233279,MQ
+1375233280,1375233791,FR
+1375233792,1375234303,MQ
+1375234304,1375236351,FR
+1375236352,1375236863,MQ
+1375236864,1375237631,FR
+1375237632,1375237887,MQ
+1375237888,1375239679,FR
+1375239680,1375239935,MQ
+1375239936,1375240191,FR
+1375240192,1375240959,GP
+1375240960,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,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
+1375242496,1375243263,GP
+1375243264,1375243519,FR
+1375243520,1375243775,GP
+1375243776,1375244031,FR
+1375244032,1375244287,GP
+1375244288,1375244799,FR
+1375244800,1375246591,GP
+1375246592,1375246847,FR
+1375246848,1375247615,GP
+1375247616,1375247871,FR
+1375247872,1375248383,GP
+1375248384,1375248639,FR
+1375248640,1375248895,GP
+1375248896,1375249919,FR
+1375249920,1375250175,GP
+1375250176,1375251967,FR
+1375251968,1375252479,GP
+1375252480,1375252991,FR
+1375252992,1375254015,GP
+1375254016,1375254527,FR
+1375254528,1375255039,GP
+1375255040,1375255295,FR
+1375255296,1375255551,GP
+1375255552,1375256063,FR
+1375256064,1375256575,GP
1375256576,1375257087,RE
-1375257088,1375257343,FR
-1375257344,1375257855,RE
-1375257856,1375258111,FR
-1375258112,1375258879,RE
-1375258880,1375261183,FR
-1375261184,1375261695,RE
-1375261696,1375262207,FR
-1375262208,1375265535,RE
-1375265536,1375266047,FR
-1375266048,1375266303,RE
-1375266304,1375268095,FR
+1375257088,1375257855,FR
+1375257856,1375258111,RE
+1375258112,1375259135,FR
+1375259136,1375259647,RE
+1375259648,1375260671,FR
+1375260672,1375260927,RE
+1375260928,1375261951,FR
+1375261952,1375262463,RE
+1375262464,1375262719,FR
+1375262720,1375263231,RE
+1375263232,1375264511,FR
+1375264512,1375265279,RE
+1375265280,1375265535,FR
+1375265536,1375266047,RE
+1375266048,1375266559,FR
+1375266560,1375267839,RE
+1375267840,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,1375271935,RE
-1375271936,1375272191,FR
-1375272192,1375272959,RE
+1375268352,1375269119,FR
+1375269120,1375269631,RE
+1375269632,1375270143,FR
+1375270144,1375270399,RE
+1375270400,1375271167,FR
+1375271168,1375272191,RE
+1375272192,1375272703,FR
+1375272704,1375272959,RE
1375272960,1375731711,FR
1375731712,1378877439,GB
1378877440,1379926015,IT
@@ -17342,9 +19373,7 @@
1382213632,1382219775,GB
1382219776,1382222847,SE
1382222848,1382223103,FI
-1382223104,1382226943,SE
-1382226944,1382227199,NO
-1382227200,1382252543,SE
+1382223104,1382252543,SE
1382252544,1382268927,CZ
1382268928,1382285311,IR
1382285312,1382301695,CZ
@@ -17361,7 +19390,9 @@
1382465536,1382481919,PS
1382481920,1382498303,AT
1382498304,1382514687,BG
-1382514688,1382531071,DK
+1382514688,1382518783,DK
+1382518784,1382522879,DE
+1382522880,1382531071,DK
1382531072,1382547455,FI
1382547456,1382809599,IT
1382809600,1383071743,GB
@@ -17397,7 +19428,9 @@
1383251968,1383260159,CZ
1383260160,1383268351,RU
1383268352,1383273983,IR
-1383273984,1383275775,KW
+1383273984,1383274248,KW
+1383274249,1383274249,IR
+1383274250,1383275775,KW
1383275776,1383276543,IR
1383276544,1383284735,KZ
1383284736,1383292927,PL
@@ -17554,11 +19587,7 @@
1385496576,1385504767,SI
1385504768,1385512959,IT
1385512960,1385521151,DE
-1385521152,1385523711,AT
-1385523712,1385523967,HU
-1385523968,1385524479,AT
-1385524480,1385524735,HU
-1385524736,1385529343,AT
+1385521152,1385529343,AT
1385529344,1385537535,RU
1385537536,1385545727,DE
1385545728,1385553919,RU
@@ -17637,6 +19666,7 @@
1388587520,1388587775,GB
1388588288,1388588543,GB
1388588800,1388589823,GB
+1388590080,1388590335,GB
1388591104,1388591359,AU
1388593152,1388601343,RU
1388601344,1388609535,SE
@@ -17647,13 +19677,7 @@
1388642304,1388650495,FI
1388650496,1388658687,PL
1388658688,1388666879,GB
-1388666880,1388667135,FR
-1388667136,1388667391,RE
-1388667392,1388668671,FR
-1388668672,1388668927,RE
-1388668928,1388669183,FR
-1388669184,1388669439,RE
-1388669440,1388675071,FR
+1388666880,1388675071,FR
1388677632,1388677887,NL
1388678144,1388679167,DE
1388681216,1388683263,DE
@@ -17696,11 +19720,13 @@
1388744760,1388744767,IE
1388744768,1388744831,GB
1388744832,1388744847,IE
-1388744848,1388745971,GB
+1388744848,1388744959,GB
+1388744960,1388745215,IE
+1388745216,1388745971,GB
1388745972,1388745975,IE
1388745976,1388746495,GB
-1388746496,1388746751,IE
-1388746752,1388746911,GB
+1388746496,1388746559,IE
+1388746560,1388746911,GB
1388746912,1388746927,IE
1388746928,1388748799,GB
1388748800,1388756991,RU
@@ -17780,14 +19806,15 @@
1389707264,1389723647,IT
1389723648,1389756415,ES
1389756416,1389772799,SE
-1389772800,1389783039,SI
+1389772800,1389778431,SI
+1389778432,1389780991,RS
+1389780992,1389783039,HR
1389783040,1389785087,BA
1389785088,1389787135,MK
-1389787136,1389789183,SI
+1389787136,1389788671,SI
+1389788672,1389789183,RS
1389789184,1389805567,PL
-1389805568,1389805823,DE
-1389805824,1389806079,US
-1389806080,1389806591,DE
+1389805568,1389806591,DE
1389806592,1389806847,SA
1389806848,1389821951,DE
1389821952,1389838335,NL
@@ -17796,9 +19823,7 @@
1389871104,1389887487,FI
1389887488,1389953023,FR
1389953024,1390018559,NL
-1390018560,1390074879,AT
-1390074880,1390075135,HU
-1390075136,1390084095,AT
+1390018560,1390084095,AT
1390084096,1390149631,GB
1390149632,1390215167,CH
1390215168,1390280703,IS
@@ -17827,11 +19852,7 @@
1397071872,1397096447,RU
1397096448,1397227519,IE
1397227520,1397489663,DK
-1397489664,1397582847,CH
-1397582848,1397583103,DE
-1397583104,1397583615,CH
-1397583616,1397583871,DE
-1397583872,1397751807,CH
+1397489664,1397751807,CH
1397751808,1398276095,NL
1398276096,1398800383,DK
1398800384,1398833151,KW
@@ -17947,7 +19968,9 @@
1401546752,1401548799,IT
1401548800,1401550847,FR
1401550848,1401551103,GB
-1401551104,1401552639,JE
+1401551104,1401551359,JE
+1401551360,1401551615,GB
+1401551616,1401552639,JE
1401552640,1401552895,GB
1401552896,1401554943,NL
1401554944,1401556991,IE
@@ -17962,7 +19985,9 @@
1401634816,1401651199,HR
1401651200,1401667583,RU
1401667584,1401683967,IT
-1401683968,1401749503,SE
+1401683968,1401712895,SE
+1401712896,1401713151,DE
+1401713152,1401749503,SE
1401749504,1401765887,DE
1401765888,1401782271,IE
1401782272,1401815039,FR
@@ -18183,30 +20208,14 @@
1404385280,1404386047,LT
1404386048,1404387327,SE
1404387328,1404420095,LT
-1404420096,1404436479,RU
+1404420096,1404426502,RU
+1404426503,1404426503,SE
+1404426504,1404436479,RU
1404436480,1404444671,SE
-1404444672,1404445951,NO
-1404445952,1404446207,SE
-1404446208,1404446719,NO
-1404446720,1404446975,SE
-1404446976,1404447999,NO
-1404448000,1404448255,SE
-1404448256,1404452863,NO
+1404444672,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
+1404510208,1404518399,HR
+1404518400,1404522495,SE
1404522496,1404526591,LV
1404526592,1404538879,SE
1404538880,1404542975,LV
@@ -18215,93 +20224,31 @@
1404563456,1404567551,SE
1404567552,1404583935,HR
1404583936,1404600319,NO
-1404600320,1404678143,SE
+1404600320,1404633087,SE
+1404633088,1404633599,HR
+1404633600,1404633855,SE
+1404633856,1404635647,HR
+1404635648,1404635903,SE
+1404635904,1404637439,HR
+1404637440,1404637695,SE
+1404637696,1404638207,HR
+1404638208,1404638463,SE
+1404638464,1404641279,HR
+1404641280,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
+1404731392,1404764159,HR
1404764160,1404780543,NL
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
+1404788736,1404796927,NL
1404796928,1404801023,EE
-1404801024,1404803071,SE
-1404803072,1404803327,LV
-1404803328,1404803583,SE
+1404801024,1404803583,SE
1404803584,1404804095,LV
1404804096,1404805119,SE
1404805120,1404813311,AT
1404813312,1404815871,EE
1404815872,1404816383,LT
-1404816384,1404821503,NL
-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
+1404816384,1404829695,NL
1404829696,1404870655,RU
1404870656,1404872703,LT
1404872704,1404874751,SE
@@ -18310,21 +20257,44 @@
1404887040,1404927999,NL
1404928000,1404944383,SE
1404944384,1404960767,LT
-1404960768,1405009919,SE
-1405009920,1405010687,LT
-1405010688,1405010943,SE
-1405010944,1405011199,LT
-1405011200,1405011711,SE
-1405011712,1405013759,LT
-1405013760,1405014015,SE
-1405014016,1405020159,LT
-1405020160,1405020415,SE
-1405020416,1405020927,LT
-1405020928,1405021183,SE
-1405021184,1405021439,LT
-1405021440,1405021951,SE
-1405021952,1405022207,LT
-1405022208,1405026303,SE
+1404960768,1404977151,SE
+1404977152,1404977919,LT
+1404977920,1404978175,SE
+1404978176,1404980223,LT
+1404980224,1404980479,SE
+1404980480,1404981247,LT
+1404981248,1404981503,SE
+1404981504,1404983551,LT
+1404983552,1404983807,SE
+1404983808,1404985087,LT
+1404985088,1404985343,SE
+1404985344,1404986623,LT
+1404986624,1404986879,SE
+1404986880,1404987135,LT
+1404987136,1404987311,SE
+1404987312,1404987312,LT
+1404987313,1404987647,SE
+1404987648,1404988415,LT
+1404988416,1404988469,SE
+1404988470,1404988470,LT
+1404988471,1404988671,SE
+1404988672,1404989695,LT
+1404989696,1404989951,SE
+1404989952,1404990463,LT
+1404990464,1404990719,SE
+1404990720,1404990975,LT
+1404990976,1404991231,SE
+1404991232,1404992511,LT
+1404992512,1404992767,SE
+1404992768,1404993535,LT
+1404993536,1405009919,SE
+1405009920,1405022207,LT
+1405022208,1405022463,SE
+1405022464,1405022975,LT
+1405022976,1405023231,SE
+1405023232,1405025023,LT
+1405025024,1405025279,SE
+1405025280,1405026303,LT
1405026304,1405042687,NO
1405042688,1405048831,SE
1405048832,1405050879,HR
@@ -18333,21 +20303,133 @@
1405063168,1405067263,NO
1405067264,1405083647,EE
1405083648,1405091839,SE
-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
+1405091840,1405813759,FR
+1405813760,1405814015,MQ
+1405814016,1405815807,FR
+1405815808,1405816063,MQ
+1405816064,1405816319,FR
+1405816320,1405816575,MQ
+1405816576,1405816831,FR
+1405816832,1405817087,MQ
+1405817088,1405817343,FR
+1405817344,1405817599,MQ
+1405817600,1405818111,FR
+1405818112,1405818367,MQ
+1405818368,1405818623,FR
+1405818624,1405818879,MQ
+1405818880,1405819135,FR
+1405819136,1405819391,MQ
+1405819392,1405819903,FR
+1405819904,1405820159,MQ
+1405820160,1405820671,FR
+1405820672,1405820927,MQ
+1405820928,1405821439,FR
+1405821440,1405821695,MQ
+1405821696,1405822207,FR
+1405822208,1405822719,MQ
+1405822720,1405823231,FR
+1405823232,1405823743,MQ
+1405823744,1405824255,FR
+1405824256,1405824511,MQ
+1405824512,1405824767,FR
+1405824768,1405825279,MQ
+1405825280,1405825535,FR
+1405825536,1405826303,MQ
+1405826304,1405826559,FR
+1405826560,1405826815,MQ
+1405826816,1405827071,FR
+1405827072,1405827583,MQ
+1405827584,1405827839,FR
+1405827840,1405828095,MQ
+1405828096,1405828607,FR
+1405828608,1405829119,MQ
+1405829120,1405829375,FR
+1405829376,1405829631,MQ
+1405829632,1405830143,FR
+1405830144,1405830399,MQ
+1405830400,1405830655,FR
+1405830656,1405831167,MQ
+1405831168,1405831423,FR
+1405831424,1405831679,MQ
+1405831680,1405833727,FR
+1405833728,1405833983,MQ
+1405833984,1405834495,FR
+1405834496,1405835263,MQ
+1405835264,1405835775,FR
+1405835776,1405836031,MQ
+1405836032,1405836543,FR
+1405836544,1405837055,MQ
+1405837056,1405837311,FR
+1405837312,1405837567,MQ
+1405837568,1405838079,FR
+1405838080,1405838591,MQ
+1405838592,1405839103,FR
+1405839104,1405839359,MQ
+1405839360,1405839615,FR
+1405839616,1405839871,MQ
+1405839872,1405840127,FR
+1405840128,1405840639,MQ
+1405840640,1405845503,FR
+1405845504,1405845759,MQ
+1405845760,1405846015,FR
+1405846016,1405846527,MQ
+1405846528,1405846783,FR
+1405846784,1405847039,MQ
+1405847040,1405847551,FR
+1405847552,1405847807,MQ
+1405847808,1405848063,FR
+1405848064,1405848319,MQ
+1405848320,1405848575,FR
+1405848576,1405848831,MQ
+1405848832,1405849087,FR
+1405849088,1405849599,MQ
+1405849600,1405849855,FR
+1405849856,1405850111,MQ
+1405850112,1405850623,FR
+1405850624,1405850879,MQ
+1405850880,1405851135,FR
+1405851136,1405851903,MQ
+1405851904,1405852159,FR
+1405852160,1405853439,MQ
+1405853440,1405854463,FR
+1405854464,1405854975,MQ
+1405854976,1405856255,FR
+1405856256,1405856511,MQ
+1405856512,1405857791,FR
+1405857792,1405858559,MQ
+1405858560,1405858815,FR
1405858816,1405859071,MQ
-1405859072,1405871103,FR
-1405871104,1405871359,MQ
-1405871360,1406140415,FR
+1405859072,1405859327,FR
+1405859328,1405860351,MQ
+1405860352,1405860607,FR
+1405860608,1405861119,MQ
+1405861120,1405861375,FR
+1405861376,1405861631,MQ
+1405861632,1405862143,FR
+1405862144,1405862399,MQ
+1405862400,1405862911,FR
+1405862912,1405863423,MQ
+1405863424,1405864447,FR
+1405864448,1405864703,MQ
+1405864704,1405864959,FR
+1405864960,1405865983,MQ
+1405865984,1405866239,FR
+1405866240,1405866495,MQ
+1405866496,1405867519,FR
+1405867520,1405867775,MQ
+1405867776,1405868287,FR
+1405868288,1405868799,MQ
+1405868800,1405870335,FR
+1405870336,1405870591,MQ
+1405870592,1405871359,FR
+1405871360,1405871615,MQ
+1405871616,1405871871,FR
+1405871872,1405872127,MQ
+1405872128,1405872383,FR
+1405872384,1405872895,MQ
+1405872896,1405873663,FR
+1405873664,1405873919,MQ
+1405873920,1406140415,FR
1406140416,1406205951,CZ
1406205952,1406271487,SE
1406271488,1406337023,IE
@@ -18369,35 +20451,23 @@
1406730240,1406746623,RU
1406746624,1406754815,BE
1406754816,1406763007,GB
-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
+1406763008,1406771199,LU
1406771200,1406779391,GB
1406779392,1406787583,RU
-1406787584,1406791167,ES
-1406791168,1406791295,GB
+1406787584,1406791159,ES
+1406791160,1406791295,GB
1406791296,1406793843,ES
1406793844,1406793847,GB
1406793848,1406794751,ES
1406794752,1406795775,NL
1406795776,1406796543,GB
1406796544,1406796799,IM
-1406796800,1406803455,GB
-1406803456,1406803967,IM
+1406796800,1406802175,GB
+1406802176,1406802431,IM
+1406802432,1406803199,GB
+1406803200,1406803455,IM
+1406803456,1406803711,GB
+1406803712,1406803967,IM
1406803968,1406812159,DE
1406812160,1406820351,SE
1406820352,1406828543,PL
@@ -18452,9 +20522,7 @@
1407320064,1407451135,SE
1407451136,1407483903,BG
1407483904,1407516671,CH
-1407516672,1407522719,GB
-1407522720,1407522727,CD
-1407522728,1407526231,GB
+1407516672,1407526231,GB
1407526232,1407526239,CD
1407526240,1407529178,GB
1407529179,1407529180,NG
@@ -18572,9 +20640,7 @@
1410514944,1410523135,GB
1410523136,1410531327,PT
1410531328,1410539519,DE
-1410539520,1410540671,GB
-1410540672,1410540799,US
-1410540800,1410547711,GB
+1410539520,1410547711,GB
1410547712,1410555903,CZ
1410555904,1410564095,GB
1410564096,1410572287,SE
@@ -18600,9 +20666,9 @@
1410711552,1410719743,BG
1410719744,1410727935,RU
1410727936,1410736127,BG
-1410736128,1410738687,RS
-1410738688,1410738943,XK
-1410738944,1410744319,RS
+1410736128,1410739967,RS
+1410739968,1410740479,XK
+1410740480,1410744319,RS
1410744320,1410752511,FR
1410752512,1410760703,NL
1410760704,1410768895,RU
@@ -18617,15 +20683,7 @@
1410834432,1410842623,PL
1410842624,1410850815,PT
1410850816,1410859007,DE
-1410859008,1410972159,NL
-1410972160,1410972415,DE
-1410972416,1410972671,NL
-1410972672,1410972927,DE
-1410972928,1410973439,NL
-1410973440,1410973695,DE
-1410973696,1410975487,NL
-1410975488,1410975743,DE
-1410975744,1411383295,NL
+1410859008,1411383295,NL
1411383296,1411448831,LT
1411448832,1411449727,IT
1411449728,1411449791,DE
@@ -18672,8 +20730,11 @@
1411899392,1411901439,ES
1411901440,1411903487,IE
1411903488,1411907583,RU
+1411907584,1411911679,GB
1411911680,1411915775,US
+1411915776,1411919871,GB
1411919872,1411921919,DE
+1411922432,1411923967,GB
1411923968,1411940351,BG
1411940352,1411973119,PL
1411973120,1411999743,SI
@@ -18729,11 +20790,9 @@
1412939776,1412956159,CH
1412956160,1413480447,DE
1413480448,1414004735,IN
-1414004736,1414036607,CH
-1414036608,1414036991,DE
-1414036992,1414039551,CH
-1414039552,1414040575,DE
-1414040576,1414069218,CH
+1414004736,1414039551,CH
+1414039552,1414040191,DE
+1414040192,1414069218,CH
1414069219,1414069219,AT
1414069220,1414094847,CH
1414094848,1414095615,DE
@@ -18747,9 +20806,7 @@
1415577600,1416101887,FR
1416101888,1416364031,NL
1416364032,1416626175,IL
-1416626176,1416876287,AT
-1416876288,1416876543,CH
-1416876544,1416941567,AT
+1416626176,1416941567,AT
1416941568,1416943615,CH
1416943616,1416944639,AT
1416944640,1416945663,CZ
@@ -18758,61 +20815,7 @@
1417019392,1417150463,DE
1417150464,1417674751,ES
1417674752,1421869055,DE
-1421869056,1421886975,BE
-1421886976,1421887743,NL
-1421887744,1421888511,BE
-1421888512,1421888767,NL
-1421888768,1421889279,BE
-1421889280,1421889791,NL
-1421889792,1421890047,BE
-1421890048,1421890303,NL
-1421890304,1421893119,BE
-1421893120,1421893631,NL
-1421893632,1421894143,BE
-1421894144,1421894399,NL
-1421894400,1421894783,BE
-1421894784,1421894911,NL
-1421894912,1421896063,BE
-1421896064,1421896703,NL
-1421896704,1421896831,BE
-1421896832,1421896959,NL
-1421896960,1421897727,BE
-1421897728,1421898239,NL
-1421898240,1421899263,BE
-1421899264,1421899519,NL
-1421899520,1421900543,BE
-1421900544,1421900799,NL
-1421900800,1421959679,BE
-1421959680,1421959807,NL
-1421959808,1421959935,BE
-1421959936,1421960191,NL
-1421960192,1422022143,BE
-1422022144,1422022399,NL
-1422022400,1422082559,BE
-1422082560,1422083071,NL
-1422083072,1422084223,BE
-1422084224,1422084351,NL
-1422084352,1422085119,BE
-1422085120,1422085375,NL
-1422085376,1422085887,BE
-1422085888,1422086143,NL
-1422086144,1422087679,BE
-1422087680,1422088191,NL
-1422088192,1422088447,BE
-1422088448,1422088703,NL
-1422088704,1422088959,BE
-1422088960,1422089215,NL
-1422089216,1422089471,BE
-1422089472,1422089727,NL
-1422089728,1422095743,BE
-1422095744,1422095871,NL
-1422095872,1422128639,BE
-1422128640,1422129151,NL
-1422129152,1422132479,BE
-1422132480,1422132735,NL
-1422132736,1422289663,BE
-1422289664,1422289791,NL
-1422289792,1422393343,BE
+1421869056,1422393343,BE
1422393344,1422413567,DE
1422413568,1422413695,AT
1422413696,1422413727,US
@@ -18838,10 +20841,10 @@
1422786560,1422852095,HU
1422857088,1422857151,FR
1422910208,1422910463,NL
+1422911232,1422911487,NL
1422916608,1422916863,GB
1422917120,1422917343,GB
1422917344,1422917375,NL
-1422917376,1422917631,GB
1422917632,1423441919,NO
1423441920,1423704063,SE
1423704064,1423966207,IT
@@ -18858,21 +20861,27 @@
1424503716,1424523263,ES
1424523264,1424556031,RO
1424556032,1424588799,EG
-1424588800,1424592639,GB
-1424592640,1424592895,FR
-1424592896,1424595711,GB
-1424595712,1424595967,IT
-1424595968,1424597069,GB
+1424588800,1424595743,GB
+1424595744,1424595751,IT
+1424595752,1424597069,GB
1424597070,1424597070,CZ
-1424597071,1424600575,GB
-1424600576,1424600831,FR
-1424600832,1424602879,GB
-1424602880,1424603135,US
-1424603136,1424604975,GB
-1424604976,1424604983,NL
-1424604984,1424607743,GB
+1424597071,1424603023,GB
+1424603024,1424603039,US
+1424603040,1424604975,GB
+1424604976,1424604991,NL
+1424604992,1424607743,GB
1424607744,1424607775,DE
-1424607776,1424617215,GB
+1424607776,1424608083,GB
+1424608084,1424608087,FR
+1424608088,1424610643,GB
+1424610644,1424610644,PL
+1424610645,1424610992,GB
+1424610993,1424610993,FR
+1424610994,1424611002,GB
+1424611003,1424611003,FR
+1424611004,1424611005,GB
+1424611006,1424611006,FR
+1424611007,1424617215,GB
1424617216,1424617231,IT
1424617232,1424621567,GB
1424621568,1424625663,PL
@@ -18963,17 +20972,12 @@
1425485312,1425489407,RO
1425489408,1425489663,NL
1425489664,1425506303,RO
-1425506304,1425518847,NO
-1425518848,1425518975,RU
-1425518976,1425522687,NO
+1425506304,1425522687,NO
1425522688,1425539071,IT
1425539072,1425801215,FI
-1425801216,1425813759,BG
-1425813760,1425814015,MK
-1425814016,1425814271,BG
-1425814272,1425814527,MK
+1425801216,1425813503,BG
+1425813504,1425814527,MK
1425814528,1425817599,BG
-1425820160,1425820415,DE
1425833984,1425850367,RU
1425850368,1425866751,GB
1425866752,1425883135,CH
@@ -18984,7 +20988,8 @@
1425948672,1425965055,DE
1425965056,1425970175,IT
1425970176,1425970431,FR
-1425970432,1425980415,IT
+1425970432,1425977343,IT
+1425977344,1425980415,FR
1425980416,1425980671,IQ
1425980672,1425981439,IT
1425981440,1425997823,RU
@@ -18992,17 +20997,7 @@
1426014208,1426030591,DK
1426030592,1426046975,BH
1426046976,1426063359,SI
-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
+1426063360,1426587647,CH
1426587648,1426604031,SE
1426604032,1426620415,DE
1426636800,1426653183,GB
@@ -19026,9 +21021,7 @@
1426915328,1426931711,AT
1426931712,1426948095,CZ
1426948096,1426964479,DE
-1426964480,1426967287,GB
-1426967288,1426967295,ES
-1426967296,1426980863,GB
+1426964480,1426980863,GB
1426980864,1426997247,BG
1426997248,1427013631,PL
1427013632,1427030015,FR
@@ -19082,7 +21075,9 @@
1427832832,1427865599,BE
1427865600,1427898367,DK
1427898368,1427914751,RU
-1427914752,1427931135,BE
+1427914752,1427930965,BE
+1427930966,1427930966,LU
+1427930967,1427931135,BE
1427931136,1427947519,PL
1427947520,1427963903,RU
1427963904,1427980287,TR
@@ -19142,7 +21137,9 @@
1431953408,1431961599,DK
1431961600,1431969791,CH
1431969792,1431977983,GB
-1431977984,1431986175,NL
+1431977984,1431980719,NL
+1431980720,1431980727,SA
+1431980728,1431986175,NL
1431986176,1431994367,RU
1431994368,1432002559,AT
1432002560,1432010751,HU
@@ -19219,12 +21216,8 @@
1433615028,1433615028,GB
1433615029,1433615359,DE
1433615360,1433615615,FR
-1433615616,1433615871,GB
-1433615872,1433616127,CH
-1433616128,1433616383,GB
-1433616384,1433621759,AE
-1433621760,1433622015,IN
-1433622016,1433624575,AE
+1433615616,1433616383,GB
+1433616384,1433624575,AE
1433624576,1433632767,LV
1433632768,1433640959,GI
1433640960,1433649151,RU
@@ -19266,9 +21259,9 @@
1433860096,1433862143,DE
1433862144,1433864191,CH
1433864192,1433866239,HU
-1433866240,1433867519,NL
-1433867520,1433867775,GB
-1433867776,1433868287,NL
+1433866240,1433867521,NL
+1433867522,1433867522,GB
+1433867523,1433868287,NL
1433868288,1433870335,GB
1433870336,1433872383,TR
1433872384,1433874431,IT
@@ -19310,9 +21303,7 @@
1434615808,1434648575,IL
1434648576,1434681343,FI
1434681344,1434714111,DE
-1434714112,1434717951,AZ
-1434717952,1434718207,GB
-1434718208,1434746879,AZ
+1434714112,1434746879,AZ
1434746880,1434779647,CZ
1434779648,1434812415,GB
1434812416,1434845183,IR
@@ -19354,9 +21345,7 @@
1436464384,1436464639,AT
1436464640,1436465151,DE
1436465152,1436467199,RU
-1436467200,1436468223,DE
-1436468224,1436468479,AT
-1436468480,1436469247,DE
+1436467200,1436469247,DE
1436469248,1436471295,NL
1436471296,1436473343,BE
1436473344,1436475391,RO
@@ -19453,15 +21442,15 @@
1439055872,1439072255,RU
1439072256,1439088639,UA
1439088640,1439105023,PL
-1439105024,1439121407,AT
+1439105024,1439106559,AT
+1439106560,1439106815,DE
+1439106816,1439121407,AT
1439121408,1439154175,DE
1439154176,1439156106,GB
1439156107,1439156108,LB
1439156109,1439170559,GB
1439170560,1439236095,NO
-1439236096,1439261439,BE
-1439261440,1439261695,FR
-1439261696,1439301631,BE
+1439236096,1439301631,BE
1439301632,1439305727,RU
1439305728,1439309823,DK
1439309824,1439318015,PL
@@ -19511,7 +21500,7 @@
1439561728,1439562239,GB
1439562240,1439562751,IE
1439562752,1439563007,DE
-1439563008,1439563263,IT
+1439563008,1439563263,GB
1439563264,1439563775,DE
1439563776,1439629311,LT
1439629312,1439694847,CZ
@@ -19532,8 +21521,7 @@
1440645120,1440669695,RS
1440669696,1440671743,NL
1440671744,1440672767,EE
-1440672768,1440673791,RS
-1440673792,1440710655,NL
+1440672768,1440710655,NL
1440710656,1440743423,UA
1440743424,1441267711,SE
1441267712,1441275903,DE
@@ -19558,9 +21546,9 @@
1441439744,1441447935,LV
1441447936,1441456127,BE
1441456128,1441464319,NL
-1441464320,1441468927,SE
-1441468928,1441469183,DK
-1441469184,1441472511,SE
+1441464320,1441470463,SE
+1441470464,1441470719,DK
+1441470720,1441472511,SE
1441472512,1441480703,RU
1441480704,1441488895,TR
1441488896,1441497087,GB
@@ -19620,9 +21608,7 @@
1442709504,1442775039,LV
1442775040,1442779135,PL
1442779136,1442783231,DE
-1442783232,1442786559,NO
-1442786560,1442786815,LV
-1442786816,1442787327,NO
+1442783232,1442787327,NO
1442787328,1442791423,LT
1442791424,1442795519,LV
1442799616,1442803711,LT
@@ -19637,11 +21623,7 @@
1442832384,1442836479,GB
1442836480,1442840575,PL
1442840576,1444937727,GB
-1444937728,1444985599,AT
-1444985600,1444985855,DE
-1444985856,1445061631,AT
-1445061632,1445061887,DE
-1445061888,1445068799,AT
+1444937728,1445068799,AT
1445068800,1445199871,RO
1445199872,1445330943,QA
1445330944,1445396479,LT
@@ -19653,14 +21635,13 @@
1446182912,1446248447,SA
1446248448,1446313983,DK
1446313984,1446445055,GB
-1446445056,1446510591,RO
+1446445056,1446510591,IR
1446510592,1446543359,DE
1446543360,1446576127,AT
1446576128,1446608895,IR
1446608896,1446641663,BY
1446641664,1446674431,SI
-1446674432,1446707135,DK
-1446707136,1446707199,NO
+1446674432,1446707199,DK
1446707200,1446739967,AT
1446739968,1446772735,HU
1446772736,1446805503,SA
@@ -19683,7 +21664,9 @@
1449459712,1449525247,HU
1449525248,1449590783,RU
1449590784,1449656319,DE
-1449656320,1449706495,RO
+1449656320,1449664511,RO
+1449664512,1449668607,IR
+1449668608,1449706495,RO
1449706496,1449707519,MD
1449707520,1449736191,RO
1449736192,1449738239,MD
@@ -19699,13 +21682,16 @@
1449824256,1449826303,MD
1449826304,1449840639,RO
1449840640,1449852927,MD
-1449852928,1449869311,RO
+1449852928,1449857023,IR
+1449857024,1449869311,RO
1449869312,1449870335,MD
1449870336,1449883647,RO
1449883648,1449885695,BE
1449885696,1449893887,RO
1449893888,1449895935,MD
-1449895936,1449918463,RO
+1449895936,1449906175,RO
+1449906176,1449910271,IR
+1449910272,1449918463,RO
1449918464,1449951231,JO
1449951232,1449983999,TR
1449984000,1449992191,NL
@@ -19769,19 +21755,13 @@
1466097664,1466099711,ES
1466099712,1466101759,PL
1466101760,1466103807,DE
-1466103808,1466104116,FR
-1466104117,1466104117,GB
-1466104118,1466104442,FR
-1466104443,1466104443,GB
-1466104444,1466104467,FR
-1466104468,1466104468,GB
-1466104469,1466104942,FR
+1466103808,1466104575,GB
+1466104576,1466104942,FR
1466104943,1466104943,BE
1466104944,1466105173,FR
1466105174,1466105174,BE
1466105175,1466105343,FR
-1466105344,1466105599,GB
-1466105600,1466105855,FR
+1466105344,1466105855,GB
1466105856,1466122239,PL
1466122240,1466130431,LV
1466130432,1466138623,PL
@@ -19803,7 +21783,9 @@
1466499072,1466564607,PL
1466564608,1466571894,DE
1466571895,1466571895,AE
-1466571896,1466589183,DE
+1466571896,1466588785,DE
+1466588786,1466588786,FR
+1466588787,1466589183,DE
1466589184,1466590207,FR
1466590208,1466591999,GB
1466592000,1466613759,DE
@@ -19946,12 +21928,7 @@
1475211264,1475213311,DE
1475213312,1475215359,FR
1475215360,1475223551,IT
-1475223552,1475226239,SE
-1475226240,1475226367,NO
-1475226368,1475226495,SE
-1475226496,1475227647,NO
-1475227648,1475231743,SE
-1475231744,1475233791,NO
+1475223552,1475233791,NO
1475233792,1475235839,GB
1475235840,1475237887,IE
1475237888,1475239935,ES
@@ -19969,7 +21946,9 @@
1475260416,1475262463,FR
1475262464,1475266559,DE
1475266560,1475268607,GB
-1475268608,1475270655,RS
+1475268608,1475268863,RS
+1475268864,1475269119,XK
+1475269120,1475270655,RS
1475270656,1475272703,GB
1475272704,1475274751,BE
1475274752,1475276799,RU
@@ -20022,23 +22001,13 @@
1475575808,1475592191,AT
1475592192,1475608575,GB
1475608576,1475624959,RU
-1475624960,1475637303,JE
-1475637304,1475637311,GB
-1475637312,1475637471,JE
-1475637472,1475637479,GB
-1475637480,1475638783,JE
+1475624960,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
+1475639488,1475641343,JE
1475641344,1475657727,UA
1475657728,1475674111,SK
1475674112,1475690495,DE
@@ -20049,10 +22018,8 @@
1475724868,1475724869,GB
1475724870,1475724870,RU
1475724871,1475725055,GB
-1475725056,1475725311,RU
-1475725312,1475726079,GB
-1475726080,1475726335,RU
-1475726336,1475729663,GB
+1475725056,1475725183,RU
+1475725184,1475729663,GB
1475729664,1475729671,UA
1475729672,1475731007,GB
1475731008,1475731071,UA
@@ -20184,7 +22151,8 @@
1481741568,1481741568,GG
1481741569,1481741823,GB
1481741824,1481742079,GG
-1481742080,1481744383,GB
+1481742080,1481744127,GB
+1481744128,1481744383,GG
1481744384,1481752575,IT
1481752576,1481760767,RU
1481760768,1481768959,UA
@@ -20244,19 +22212,7 @@
1482948608,1483210751,CZ
1483210752,1483735039,GB
1483735040,1483997183,FI
-1483997184,1484044287,AT
-1484044288,1484044543,DE
-1484044544,1484049911,AT
-1484049912,1484049915,DE
-1484049916,1484049921,AT
-1484049922,1484049922,DE
-1484049923,1484084607,AT
-1484084608,1484084735,DE
-1484084736,1484084991,AT
-1484084992,1484085119,DE
-1484085120,1484088831,AT
-1484088832,1484089087,DE
-1484089088,1484128255,AT
+1483997184,1484128255,AT
1484128256,1484259327,LT
1484259328,1484783615,FR
1484783616,1484849151,DE
@@ -20270,9 +22226,7 @@
1485250560,1485254655,IR
1485254656,1485259007,RU
1485259008,1485262847,UA
-1485262848,1485263615,RU
-1485263616,1485263871,UA
-1485263872,1485266943,RU
+1485262848,1485266943,RU
1485266944,1485271039,RO
1485271040,1485275135,UA
1485275136,1485283327,LV
@@ -20356,13 +22310,18 @@
1489644032,1489644287,IT
1489644288,1489644543,FR
1489644544,1489644799,IQ
-1489644800,1489648383,IT
+1489644800,1489647615,IT
+1489647616,1489648383,FR
1489648384,1489648639,GR
1489648640,1489649663,IT
1489649664,1489650687,FR
-1489650688,1489660159,IT
-1489660160,1489660415,LY
-1489660416,1489666047,IT
+1489650688,1489651199,IT
+1489651200,1489653247,FR
+1489653248,1489655295,IT
+1489655296,1489655551,GR
+1489655552,1489659647,IT
+1489659648,1489661951,FR
+1489661952,1489666047,IT
1489666048,1489674239,GB
1489674240,1489676287,NL
1489676288,1489698815,GB
@@ -20379,35 +22338,26 @@
1490028544,1490029055,UA
1490029056,1490042879,NL
1490042880,1490053375,CZ
-1490053376,1490053631,PL
-1490053632,1490059263,CZ
+1490053376,1490054143,PL
+1490054144,1490059263,CZ
1490059264,1490075647,DE
1490075648,1490092031,GB
1490092032,1490108415,DE
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
+1490142720,1490142975,HU
+1490142976,1490145279,CZ
+1490145280,1490147327,HU
+1490147328,1490149375,CZ
+1490149376,1490150399,HU
+1490150400,1490155519,CZ
+1490155520,1490157567,HU
1490157568,1490173951,RU
1490173952,1490190335,PT
1490190336,1490196991,GB
1490196992,1490197247,IE
-1490197248,1490205183,GB
-1490205184,1490205439,LY
-1490205440,1490206719,GB
+1490197248,1490206719,GB
1490206720,1490223103,GE
1490223104,1490255871,GB
1490255872,1490272255,NL
@@ -20451,32 +22401,32 @@
1491075072,1493172223,TR
1493172224,1493303295,DE
1493303296,1493430527,FR
-1493430528,1493430783,GP
-1493430784,1493431039,FR
-1493431040,1493431551,GP
-1493431552,1493431807,FR
-1493431808,1493432319,GP
-1493432320,1493434111,MQ
-1493434112,1493434367,FR
+1493430528,1493431039,GP
+1493431040,1493431807,FR
+1493431808,1493432063,GP
+1493432064,1493433087,FR
+1493433088,1493433855,MQ
+1493433856,1493434111,FR
+1493434112,1493434367,MQ
1493434368,1493565439,SA
1493565440,1493696511,ES
1493696512,1493958655,NO
1493958656,1494220799,DE
-1494220800,1494221823,FR
-1494221824,1494222335,RE
+1494220800,1494222079,FR
+1494222080,1494222335,RE
1494222336,1494222591,FR
1494222592,1494222847,RE
-1494222848,1494223615,FR
-1494223616,1494223871,RE
-1494223872,1494225407,FR
+1494222848,1494223359,FR
+1494223360,1494223615,RE
+1494223616,1494223871,FR
+1494223872,1494224127,RE
+1494224128,1494224895,FR
+1494224896,1494225151,GP
+1494225152,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
+1494225664,1494227711,FR
+1494227712,1494227967,GP
+1494227968,1494228991,FR
1494228992,1494237183,RU
1494237184,1494245375,IE
1494245376,1494253567,RU
@@ -20645,13 +22595,19 @@
1495517184,1495518207,MD
1495518208,1495571455,RO
1495571456,1495572479,MD
-1495572480,1495608319,RO
+1495572480,1495597055,RO
+1495597056,1495601151,IR
+1495601152,1495608319,RO
1495608320,1495609343,MD
1495609344,1495623679,RO
1495623680,1495623935,MD
-1495623936,1495670783,RO
+1495623936,1495632127,RO
+1495632128,1495632639,MD
+1495632640,1495670783,RO
1495670784,1495671807,MD
-1495671808,1495678975,RO
+1495671808,1495672831,RO
+1495672832,1495674879,ES
+1495674880,1495678975,RO
1495678976,1495679999,MD
1495680000,1495682047,RO
1495682048,1495683071,MD
@@ -20667,9 +22623,12 @@
1495756800,1495758847,MD
1495758848,1495759871,RO
1495759872,1495760127,MD
-1495760128,1495762943,RO
+1495760128,1495760895,RO
+1495760896,1495762943,DE
1495762944,1495764991,MD
-1495764992,1495782655,RO
+1495764992,1495771135,RO
+1495771136,1495772159,PL
+1495772160,1495782655,RO
1495782656,1495782911,GB
1495782912,1495790079,RO
1495790080,1495790335,MD
@@ -20691,13 +22650,16 @@
1495957504,1495958527,MD
1495958528,1495966719,RO
1495966720,1495967743,MD
-1495967744,1495970815,RO
+1495967744,1495968767,NL
+1495968768,1495970815,RO
1495970816,1495971839,MD
1495971840,1495982079,RO
1495982080,1495983103,MD
1495983104,1495986175,RO
1495986176,1495988223,MD
-1495988224,1496004607,RO
+1495988224,1495990271,RO
+1495990272,1495994367,IR
+1495994368,1496004607,RO
1496004608,1496005631,MD
1496005632,1496018943,RO
1496018944,1496020991,MD
@@ -20717,7 +22679,9 @@
1496121344,1496122367,MD
1496122368,1496131583,RO
1496131584,1496132607,MD
-1496132608,1496197119,RO
+1496132608,1496133631,RO
+1496133632,1496137727,IR
+1496137728,1496197119,RO
1496197120,1496197631,MD
1496197632,1496228863,RO
1496228864,1496229887,MD
@@ -20736,13 +22700,7 @@
1499594752,1499725823,NL
1499725824,1499856895,IE
1499856896,1499987967,CZ
-1499987968,1499989247,AT
-1499989248,1499989503,HU
-1499989504,1499990911,AT
-1499990912,1499991039,HU
-1499991040,1499992575,AT
-1499992576,1499992831,HU
-1499992832,1499996159,AT
+1499987968,1499996159,AT
1499996160,1500004351,GB
1500004352,1500020735,RU
1500020736,1500028927,IS
@@ -20818,11 +22776,7 @@
1500479488,1500495871,RU
1500495872,1500512255,BA
1500512256,1500643327,RU
-1500643328,1500661247,PT
-1500661248,1500661503,RO
-1500661504,1500667647,PT
-1500667648,1500667903,RO
-1500667904,1500774399,PT
+1500643328,1500774399,PT
1500774400,1500905471,LT
1500905472,1501036543,IT
1501036544,1501298687,RO
@@ -20863,8 +22817,10 @@
1502937088,1502953471,RO
1502953472,1502969855,MD
1502969856,1502975231,FR
-1502975232,1502975487,GB
-1502975488,1502975743,FR
+1502975232,1502975247,GB
+1502975248,1502975327,FR
+1502975328,1502975359,GB
+1502975360,1502975743,FR
1502975744,1502975999,DE
1502976000,1502978047,FR
1502978048,1502979071,US
@@ -20895,7 +22851,9 @@
1503084544,1503100927,GB
1503100928,1503117311,RU
1503117312,1503133695,NO
-1503133696,1503395839,PT
+1503133696,1503370138,PT
+1503370139,1503370139,GB
+1503370140,1503395839,PT
1503395840,1503657983,FR
1503657984,1503690751,SE
1503690752,1503723519,IS
@@ -21075,9 +23033,7 @@
1503905648,1503905655,IT
1503905656,1503905663,AT
1503905664,1503920127,DE
-1503920128,1503985151,HR
-1503985152,1503985407,DE
-1503985408,1503985663,HR
+1503920128,1503985663,HR
1503985664,1504018431,IR
1504018432,1504051199,RO
1504051200,1504083967,FI
@@ -21111,9 +23067,7 @@
1505304576,1505312767,FR
1505312768,1505320959,RU
1505320960,1505329151,AT
-1505329152,1505335807,IE
-1505335808,1505336063,GB
-1505336064,1505336575,IE
+1505329152,1505336575,IE
1505336576,1505336831,GB
1505336832,1505337343,IE
1505337344,1505345535,FR
@@ -21164,32 +23118,12 @@
1505705984,1505714175,DE
1505714176,1505722367,LV
1505722368,1505738751,PL
-1505738752,1505740543,GB
-1505740544,1505740607,IL
-1505740608,1505740631,GB
-1505740632,1505740799,IL
-1505740800,1505746943,GB
+1505738752,1505746943,GB
1505746944,1505755135,RU
1505755136,1506017279,GB
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
+1506148352,1506279423,IR
1506279424,1506312191,NL
1506312192,1506316287,GB
1506316288,1506322431,PL
@@ -21224,15 +23158,21 @@
1506450864,1506450879,CZ
1506450880,1506453311,GB
1506453312,1506453319,SE
-1506453320,1506456831,GB
-1506456832,1506457087,IT
-1506457088,1506458244,GB
+1506453320,1506456533,GB
+1506456534,1506456534,IT
+1506456535,1506458244,GB
1506458245,1506458245,CH
-1506458246,1506460151,GB
+1506458246,1506459968,GB
+1506459969,1506459969,FR
+1506459970,1506460151,GB
1506460152,1506460159,FR
-1506460160,1506462719,GB
+1506460160,1506462511,GB
+1506462512,1506462527,FR
+1506462528,1506462719,GB
1506462720,1506462975,IT
-1506462976,1506463679,GB
+1506462976,1506463551,GB
+1506463552,1506463615,DE
+1506463616,1506463679,GB
1506463680,1506463695,DE
1506463696,1506464895,GB
1506464896,1506464911,NL
@@ -21241,8 +23181,8 @@
1506465189,1506466383,GB
1506466384,1506466391,DE
1506466392,1506466399,GB
-1506466400,1506466431,DE
-1506466432,1506469663,GB
+1506466400,1506466559,DE
+1506466560,1506469663,GB
1506469664,1506469695,IT
1506469696,1506469759,GB
1506469760,1506469775,IT
@@ -21250,11 +23190,7 @@
1506471984,1506471999,NL
1506472000,1506472031,GB
1506472032,1506472047,NL
-1506472048,1506473471,GB
-1506473472,1506473727,IT
-1506473728,1506474239,GB
-1506474240,1506474495,IT
-1506474496,1506476031,GB
+1506472048,1506476031,GB
1506476032,1506508799,KW
1506508800,1506541567,CZ
1506541568,1506574335,RU
@@ -21302,9 +23238,9 @@
1507262464,1507327999,BG
1507328000,1507393535,RS
1507393536,1507459071,CH
-1507459072,1507502847,KZ
-1507502848,1507503103,GB
-1507503104,1507524607,KZ
+1507459072,1507483903,KZ
+1507483904,1507484159,NZ
+1507484160,1507524607,KZ
1507524608,1507590143,EE
1507590144,1507655679,NL
1507655680,1507659775,DE
@@ -21346,15 +23282,13 @@
1508589568,1508605951,IR
1508605952,1508622335,RU
1508622336,1508638719,EE
-1508638720,1508639999,SE
-1508640000,1508640255,DK
-1508640256,1508642175,SE
+1508638720,1508642175,SE
1508642176,1508642303,DK
1508642304,1508642559,SE
1508642560,1508642815,DK
-1508642816,1508650751,SE
-1508650752,1508651007,DK
-1508651008,1508655103,SE
+1508642816,1508647691,SE
+1508647692,1508647692,DK
+1508647693,1508655103,SE
1508655104,1508671487,FI
1508671488,1508687871,CH
1508687872,1508704255,UZ
@@ -21365,9 +23299,7 @@
1508769792,1508786175,PL
1508786176,1508802559,DE
1508802560,1508818943,GB
-1508818944,1508819711,RO
-1508819712,1508819967,DE
-1508819968,1508830719,RO
+1508818944,1508830719,RO
1508830720,1508831487,SK
1508831488,1508835327,RO
1508835328,1508851711,CZ
@@ -21385,9 +23317,7 @@
1509449728,1509453823,ES
1509453824,1509457919,RU
1509457920,1509462015,NL
-1509462016,1509465599,LI
-1509465600,1509465855,CH
-1509465856,1509466111,LI
+1509462016,1509466111,LI
1509466112,1509470207,NL
1509470208,1509478399,RU
1509478400,1509482495,FR
@@ -21448,230 +23378,354 @@
1509883904,1509900287,NL
1509900288,1509916671,RU
1509916672,1509933055,GB
-1509933056,1509949439,US
-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,1511986687,RE
-1511986688,1511986943,FR
-1511986944,1511987199,RE
-1511987200,1511987967,FR
-1511987968,1511988479,RE
-1511988480,1511988735,FR
-1511988736,1511989247,RE
-1511989248,1511989503,FR
-1511989504,1511990271,RE
-1511990272,1511990527,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
+1509933056,1509949439,NL
+1509949440,1510605311,FR
+1510605312,1510605823,RE
+1510605824,1510608383,FR
+1510608384,1510608639,RE
+1510608640,1510609407,FR
+1510609408,1510610175,RE
+1510610176,1510614015,FR
+1510614016,1510614783,RE
+1510614784,1510615039,FR
+1510615040,1510615295,RE
+1510615296,1510615551,FR
+1510615552,1510616319,RE
+1510616320,1510616575,FR
+1510616576,1510616831,RE
+1510616832,1510617087,FR
+1510617088,1510617599,RE
+1510617600,1510617855,FR
+1510617856,1510619135,RE
+1510619136,1510619391,FR
+1510619392,1510620159,RE
+1510620160,1510621695,FR
+1510621696,1510621951,RE
+1510621952,1510622463,FR
+1510622464,1510622719,RE
+1510622720,1510624511,FR
+1510624512,1510624767,RE
+1510624768,1510625791,FR
+1510625792,1510626303,RE
+1510626304,1510626815,FR
+1510626816,1510627071,RE
+1510627072,1510628351,FR
+1510628352,1510628607,RE
+1510628608,1510628863,FR
+1510628864,1510629119,RE
+1510629120,1510629631,FR
+1510629632,1510629887,RE
+1510629888,1510630399,FR
+1510630400,1510630655,RE
+1510630656,1510631167,FR
+1510631168,1510631423,RE
+1510631424,1510631935,FR
+1510631936,1510632703,RE
+1510632704,1510632959,FR
+1510632960,1510633727,RE
+1510633728,1510633983,FR
+1510633984,1510635263,RE
+1510635264,1510637567,FR
+1510637568,1510638079,RE
+1510638080,1510638335,FR
+1510638336,1510638591,RE
+1510638592,1510638847,FR
+1510638848,1510639359,RE
+1510639360,1510639871,FR
+1510639872,1510640127,RE
+1510640128,1510640383,FR
+1510640384,1510641151,RE
+1510641152,1510641407,FR
+1510641408,1510641919,RE
+1510641920,1510642431,FR
+1510642432,1510642943,RE
+1510642944,1510643455,FR
+1510643456,1510643711,RE
+1510643712,1510644479,FR
+1510644480,1510645759,RE
+1510645760,1510646015,FR
+1510646016,1510646271,RE
+1510646272,1510646783,FR
+1510646784,1510647295,RE
+1510647296,1510647807,FR
+1510647808,1510648319,RE
+1510648320,1510649343,FR
+1510649344,1510649599,RE
+1510649600,1510650623,FR
+1510650624,1510650879,RE
+1510650880,1510651135,FR
+1510651136,1510651391,RE
+1510651392,1510651647,FR
+1510651648,1510652159,RE
+1510652160,1510652927,FR
+1510652928,1510653439,RE
+1510653440,1510654719,FR
+1510654720,1510654975,RE
+1510654976,1510655487,FR
+1510655488,1510656255,RE
+1510656256,1510656511,FR
+1510656512,1510657023,RE
+1510657024,1510658303,FR
+1510658304,1510658559,RE
+1510658560,1510658815,FR
+1510658816,1510659071,RE
+1510659072,1510659839,FR
+1510659840,1510660095,RE
+1510660096,1510660863,FR
+1510660864,1510661119,RE
+1510661120,1510661375,FR
+1510661376,1510661631,RE
+1510661632,1510662399,FR
+1510662400,1510663423,RE
+1510663424,1510663679,FR
+1510663680,1510663935,RE
+1510663936,1510664447,FR
+1510664448,1510664703,RE
+1510664704,1510664959,FR
+1510664960,1510665215,RE
+1510665216,1510665983,FR
+1510665984,1510667775,RE
+1510667776,1511981567,FR
+1511981568,1511982079,RE
+1511982080,1511982335,FR
+1511982336,1511982591,RE
+1511982592,1511984383,FR
+1511984384,1511984639,RE
+1511984640,1511985151,FR
+1511985152,1511985407,RE
+1511985408,1511987199,FR
+1511987200,1511987711,RE
+1511987712,1511990271,FR
+1511990272,1511990527,RE
+1511990528,1511992575,FR
+1511992576,1511992831,RE
+1511992832,1511995391,FR
+1511995392,1511995647,RE
+1511995648,1511996415,FR
+1511996416,1511996671,RE
+1511996672,1511997183,FR
+1511997184,1511997439,RE
+1511997440,1511997695,FR
+1511997696,1511998463,MQ
+1511998464,1512001279,FR
+1512001280,1512002047,MQ
+1512002048,1512002303,FR
+1512002304,1512002559,MQ
+1512002560,1512006143,FR
+1512006144,1512006399,MF
+1512006400,1512006655,FR
+1512006656,1512008191,BL
+1512008192,1512008703,FR
+1512008704,1512008959,BL
+1512008960,1512010495,FR
+1512010496,1512010751,MF
+1512010752,1512011263,FR
+1512011264,1512011775,BL
+1512011776,1512012287,FR
+1512012288,1512012543,BL
+1512012544,1512012799,MF
+1512012800,1512013055,FR
+1512013056,1512013311,BL
+1512013312,1512013567,FR
+1512013568,1512013823,BL
+1512013824,1512014335,FR
+1512014336,1512015103,GF
+1512015104,1512015615,FR
+1512015616,1512016127,GF
+1512016128,1512016383,FR
+1512016384,1512018175,GF
+1512018176,1512018431,FR
+1512018432,1512018687,GF
+1512018688,1512019711,FR
+1512019712,1512019967,GF
+1512019968,1512020479,FR
+1512020480,1512021503,GF
+1512021504,1512021759,FR
+1512021760,1512023295,GF
+1512023296,1512023551,FR
+1512023552,1512023807,GF
+1512023808,1512024831,FR
+1512024832,1512025087,GF
+1512025088,1512025599,FR
+1512025600,1512026879,GF
+1512026880,1512028159,FR
+1512028160,1512030207,GF
1512030208,1512046591,YT
-1512046592,1512767487,FR
-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,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,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,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,1514132735,RE
-1514132736,1514132991,FR
-1514132992,1514134015,RE
-1514134016,1514134271,FR
-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,1514140415,RE
-1514140416,1514140671,FR
-1514140672,1514142207,RE
-1514142208,1514142463,FR
-1514142464,1514143743,RE
+1512046592,1512308991,FR
+1512308992,1512309247,GP
+1512309248,1512310271,FR
+1512310272,1512310527,GP
+1512310528,1512310783,FR
+1512310784,1512311295,GP
+1512311296,1512311551,FR
+1512311552,1512312063,GP
+1512312064,1512314367,FR
+1512314368,1512314623,GP
+1512314624,1512314879,FR
+1512314880,1512315391,GP
+1512315392,1512315647,FR
+1512315648,1512316159,GP
+1512316160,1512316415,FR
+1512316416,1512316927,GP
+1512316928,1512317439,FR
+1512317440,1512317951,GP
+1512317952,1512318207,FR
+1512318208,1512318463,GP
+1512318464,1512319231,FR
+1512319232,1512319487,GP
+1512319488,1512319743,FR
+1512319744,1512319999,GP
+1512320000,1512320511,FR
+1512320512,1512320767,GP
+1512320768,1512322047,FR
+1512322048,1512322303,GP
+1512322304,1512322559,FR
+1512322560,1512322815,GP
+1512322816,1512323327,FR
+1512323328,1512323583,GP
+1512323584,1512324095,FR
+1512324096,1512324351,GP
+1512324352,1512324863,FR
+1512324864,1512325119,GP
+1512325120,1512325631,FR
+1512325632,1512325887,GP
+1512325888,1512326399,FR
+1512326400,1512326655,GP
+1512326656,1512327423,FR
+1512327424,1512328191,GP
+1512328192,1512329727,FR
+1512329728,1512330239,GP
+1512330240,1512330495,FR
+1512330496,1512332287,GP
+1512332288,1512332799,FR
+1512332800,1512333311,GP
+1512333312,1512334079,FR
+1512334080,1512334335,GP
+1512334336,1512334847,FR
+1512334848,1512335103,GP
+1512335104,1512335359,FR
+1512335360,1512335871,GP
+1512335872,1512336383,FR
+1512336384,1512337151,GP
+1512337152,1512338175,FR
+1512338176,1512338431,GP
+1512338432,1512338943,FR
+1512338944,1512339199,GP
+1512339200,1512339455,FR
+1512339456,1512339711,GP
+1512339712,1512340735,FR
+1512340736,1512341247,GP
+1512341248,1512341503,FR
+1512341504,1512341759,GP
+1512341760,1512342271,FR
+1512342272,1512342527,GP
+1512342528,1512343295,FR
+1512343296,1512343551,GP
+1512343552,1512344063,FR
+1512344064,1512344575,GP
+1512344576,1512344831,FR
+1512344832,1512345087,GP
+1512345088,1512345855,FR
+1512345856,1512346111,GP
+1512346112,1512346367,FR
+1512346368,1512346623,GP
+1512346624,1512347391,FR
+1512347392,1512347903,GP
+1512347904,1512348159,FR
+1512348160,1512348927,GP
+1512348928,1512349439,FR
+1512349440,1512349951,GP
+1512349952,1512350463,FR
+1512350464,1512350719,GP
+1512350720,1512351231,FR
+1512351232,1512351487,GP
+1512351488,1512351999,FR
+1512352000,1512352767,GP
+1512352768,1512353535,FR
+1512353536,1512354047,GP
+1512354048,1512354303,FR
+1512354304,1512354559,GP
+1512354560,1512354815,FR
+1512354816,1512355327,GP
+1512355328,1512356095,FR
+1512356096,1512356351,GP
+1512356352,1512356607,FR
+1512356608,1512356863,GP
+1512356864,1512357119,FR
+1512357120,1512357375,GP
+1512357376,1512357631,FR
+1512357632,1512357887,GP
+1512357888,1512358655,FR
+1512358656,1512359167,GP
+1512359168,1512359423,FR
+1512359424,1512360191,GP
+1512360192,1512360447,FR
+1512360448,1512361471,GP
+1512361472,1512361727,FR
+1512361728,1512361983,GP
+1512361984,1512362239,FR
+1512362240,1512362495,GP
+1512362496,1512363007,FR
+1512363008,1512363263,GP
+1512363264,1512363519,FR
+1512363520,1512363775,GP
+1512363776,1512364031,FR
+1512364032,1512364287,GP
+1512364288,1512364543,FR
+1512364544,1512366847,GP
+1512366848,1512367359,FR
+1512367360,1512367615,GP
+1512367616,1512368127,FR
+1512368128,1512368383,GP
+1512368384,1512368639,FR
+1512368640,1512368895,GP
+1512368896,1512370431,FR
+1512370432,1512370441,GP
+1512370442,1512370442,FR
+1512370443,1512370687,GP
+1512370688,1512370943,FR
+1512370944,1512372223,GP
+1512372224,1512372735,FR
+1512372736,1512372991,GP
+1512372992,1514111231,FR
+1514111232,1514111743,GP
+1514111744,1514111999,FR
+1514112000,1514112255,GP
+1514112256,1514113791,FR
+1514113792,1514114047,GP
+1514114048,1514114815,FR
+1514114816,1514115071,GP
+1514115072,1514115583,FR
+1514115584,1514115839,GP
+1514115840,1514116351,FR
+1514116352,1514116607,GP
+1514116608,1514119935,FR
+1514119936,1514120191,GP
+1514120192,1514121215,FR
+1514121216,1514121471,GP
+1514121472,1514123007,FR
+1514123008,1514123263,GP
+1514123264,1514124287,FR
+1514124288,1514124543,GP
+1514124544,1514127871,FR
+1514127872,1514128127,RE
+1514128128,1514128895,FR
+1514128896,1514129407,RE
+1514129408,1514131967,FR
+1514131968,1514132223,RE
+1514132224,1514132735,FR
+1514132736,1514132991,RE
+1514132992,1514134271,FR
+1514134272,1514134527,RE
+1514134528,1514136063,FR
+1514136064,1514136319,RE
+1514136320,1514137599,FR
+1514137600,1514137855,RE
+1514137856,1514142207,FR
+1514142208,1514142719,RE
+1514142720,1514142975,FR
+1514142976,1514143231,RE
+1514143232,1514143743,FR
1514143744,1514176511,SK
1514176512,1515467007,FR
1515467008,1515467263,ES
@@ -21688,87 +23742,51 @@
1515488512,1515488895,US
1515488896,1515489023,FR
1515489024,1515489039,DE
-1515489040,1515489151,FR
+1515489040,1515489055,FR
+1515489056,1515489087,DE
+1515489088,1515489151,FR
1515489152,1515489167,ES
1515489168,1518338047,FR
1518338048,1518370815,DE
-1518370816,1518403839,NL
-1518403840,1518404095,SE
-1518404096,1518404351,NL
-1518404352,1518404863,SE
-1518404864,1518405119,NL
-1518405120,1518405375,SE
-1518405376,1518406655,NL
-1518406656,1518406911,SE
-1518406912,1518407935,NL
-1518407936,1518408191,SE
-1518408192,1518409727,NL
-1518409728,1518436351,SE
+1518370816,1518409727,NL
+1518409728,1518412031,SE
+1518412032,1518413567,NO
+1518413568,1518413823,SE
+1518413824,1518418943,NO
+1518418944,1518419199,SE
+1518419200,1518419967,NO
+1518419968,1518436351,SE
1518436352,1518452735,NO
1518452736,1518460927,AT
-1518460928,1518470143,NL
-1518470144,1518472191,SE
+1518460928,1518471167,NL
+1518471168,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
+1518489600,1518501887,NL
1518501888,1518503935,EE
1518503936,1518510079,LT
1518510080,1518516223,LV
1518516224,1518517247,SE
1518517248,1518518271,LV
-1518518272,1518540543,SE
+1518518272,1518532351,SE
+1518532352,1518532607,NO
+1518532608,1518532863,SE
+1518532864,1518533375,NO
+1518533376,1518533887,SE
+1518533888,1518534143,NO
+1518534144,1518540543,SE
1518540544,1518540799,LT
-1518540800,1518542847,SE
+1518540800,1518541479,SE
+1518541480,1518541480,DE
+1518541481,1518542847,SE
1518542848,1518551039,LT
1518551040,1518565375,NL
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
+1518567424,1518600191,LV
1518600192,1518633215,SE
1518633216,1518633471,NL
1518633472,1518635007,SE
@@ -21784,7 +23802,35 @@
1518780416,1518796799,HR
1518796800,1518927871,DE
1518927872,1518944255,RU
-1518944256,1518960639,SE
+1518944256,1518945023,NL
+1518945024,1518945535,SE
+1518945536,1518946303,NL
+1518946304,1518946815,SE
+1518946816,1518947327,NL
+1518947328,1518948095,SE
+1518948096,1518948351,NL
+1518948352,1518948863,SE
+1518948864,1518949119,NL
+1518949120,1518949631,SE
+1518949632,1518950911,NL
+1518950912,1518951167,SE
+1518951168,1518951679,NL
+1518951680,1518952191,SE
+1518952192,1518954751,NL
+1518954752,1518955007,SE
+1518955008,1518955775,NL
+1518955776,1518956031,SE
+1518956032,1518956543,NL
+1518956544,1518957311,SE
+1518957312,1518957823,NL
+1518957824,1518958079,SE
+1518958080,1518958591,NL
+1518958592,1518958847,SE
+1518958848,1518959103,NL
+1518959104,1518959359,SE
+1518959360,1518959871,NL
+1518959872,1518960127,SE
+1518960128,1518960639,NL
1518960640,1518961663,LT
1518961664,1518962175,EE
1518962176,1518962687,SE
@@ -21792,51 +23838,49 @@
1518964736,1518966783,HR
1518966784,1518967807,SE
1518967808,1518977023,HR
-1518977024,1518993407,SE
+1518977024,1518977791,SE
+1518977792,1518978559,NL
+1518978560,1518979071,SE
+1518979072,1518980095,NL
+1518980096,1518980607,SE
+1518980608,1518980863,NL
+1518980864,1518981631,SE
+1518981632,1518982143,NL
+1518982144,1518982399,SE
+1518982400,1518982655,NL
+1518982656,1518983935,SE
+1518983936,1518984191,NL
+1518984192,1518989311,SE
+1518989312,1518992127,NL
+1518992128,1518992383,SE
+1518992384,1518992639,NL
+1518992640,1518992895,SE
+1518992896,1518993152,NL
+1518993153,1518993407,SE
1518993408,1519190015,RU
1519190016,1519206399,SE
1519206400,1519208447,LV
1519208448,1519214591,SE
-1519214592,1519214847,LV
-1519214848,1519215359,SE
-1519215360,1519215615,LV
-1519215616,1519215871,SE
-1519215872,1519219455,LV
+1519214592,1519219455,LV
1519219456,1519219711,SE
1519219712,1519222783,LV
1519222784,1519259647,SE
1519259648,1519260671,NL
1519260672,1519263743,SE
-1519263744,1519289343,NL
-1519289344,1519292415,SE
+1519263744,1519290367,NL
+1519290368,1519292415,SE
1519292416,1519293951,LT
-1519293952,1519297023,SE
-1519297024,1519297279,LT
-1519297280,1519297535,SE
-1519297536,1519297791,LT
-1519297792,1519298559,SE
-1519298560,1519298815,LT
-1519298816,1519300607,SE
+1519293952,1519296511,SE
+1519296512,1519299583,LT
+1519299584,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
+1519304704,1519312895,SE
+1519312896,1519321087,LT
1519321088,1519386623,RU
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
+1519403008,1519419391,NL
1519419392,1519452159,SE
1519452160,1519517695,NL
1519517696,1519583231,AT
@@ -21867,19 +23911,13 @@
1520271360,1520304127,SI
1520304128,1520435199,TR
1520435200,1521483775,ES
-1521483776,1521531391,CZ
-1521531392,1521531647,PL
-1521531648,1522008063,CZ
+1521483776,1522008063,CZ
1522008064,1522139135,DK
1522139136,1522270207,DE
1522270208,1522401279,RU
1522401280,1522532351,EE
1522532352,1524629503,GB
-1524629504,1525092351,SE
-1525092352,1525092479,DK
-1525092480,1525122047,SE
-1525122048,1525122175,DK
-1525122176,1525678079,SE
+1524629504,1525678079,SE
1525678080,1526726655,GB
1526726656,1531183103,DE
1531183104,1531445247,FR
@@ -21890,9 +23928,7 @@
1532199936,1532200959,RS
1532200960,1532231679,HU
1532231680,1532362751,GB
-1532362752,1532408063,BE
-1532408064,1532408319,DE
-1532408320,1532493823,BE
+1532362752,1532493823,BE
1532493824,1532559359,FR
1532559360,1532624895,DE
1532624896,1532626943,ES
@@ -21953,13 +23989,13 @@
1533472768,1533474815,ES
1533474816,1533476863,FR
1533476864,1533478911,IE
-1533478912,1533480959,RS
1533480960,1533483007,NL
1533483008,1533485055,AM
1533485056,1533486079,GB
1533486080,1533486335,SE
1533486336,1533486591,NO
-1533486592,1533487103,GB
+1533486592,1533486847,DK
+1533486848,1533487103,GB
1533487104,1533489151,FR
1533489152,1533491199,ES
1533491200,1533493247,AM
@@ -22037,74 +24073,254 @@
1533929472,1533932799,GB
1533932800,1533933055,DE
1533933056,1534066687,GB
-1534066688,1534135295,AT
-1534135296,1534135423,HU
-1534135424,1534145279,AT
-1534145280,1534145407,DE
-1534145408,1534147711,AT
-1534147712,1534147839,CZ
-1534147840,1534156543,AT
-1534156544,1534156671,SK
-1534156672,1534241535,AT
-1534241536,1534241663,DE
-1534241664,1534268671,AT
-1534268672,1534268927,HU
-1534268928,1534279423,AT
-1534279424,1534279551,SK
-1534279552,1534298751,AT
-1534298752,1534298879,HU
-1534298880,1534299903,AT
-1534299904,1534300159,HU
-1534300160,1534302975,AT
-1534302976,1534303231,HU
-1534303232,1534303999,AT
-1534304000,1534304255,SK
-1534304256,1534328831,AT
+1534066688,1534328831,AT
1534328832,1534459903,ES
1534459904,1534590975,AT
1534590976,1534656511,HU
1534656512,1534711807,FR
1534711808,1534712831,BE
-1534712832,1534714415,FR
-1534714416,1534714431,ES
-1534714432,1534714751,FR
+1534712832,1534713919,FR
+1534713920,1534713927,CH
+1534713928,1534714055,FR
+1534714056,1534714063,PL
+1534714064,1534714079,NL
+1534714080,1534714207,FR
+1534714208,1534714223,NL
+1534714224,1534714255,FR
+1534714256,1534714259,FI
+1534714260,1534714279,FR
+1534714280,1534714283,DE
+1534714284,1534714287,CH
+1534714288,1534714323,FR
+1534714324,1534714327,ES
+1534714328,1534714403,FR
+1534714404,1534714431,ES
+1534714432,1534714539,FR
+1534714540,1534714543,ES
+1534714544,1534714575,FR
+1534714576,1534714583,NL
+1534714584,1534714751,FR
1534714752,1534714767,DE
-1534714768,1534715263,FR
+1534714768,1534714799,FR
+1534714800,1534714815,GB
+1534714816,1534714927,FR
+1534714928,1534714931,DE
+1534714932,1534715211,FR
+1534715212,1534715215,LT
+1534715216,1534715263,FR
1534715264,1534715267,IT
-1534715268,1534715871,FR
+1534715268,1534715295,FR
+1534715296,1534715299,GB
+1534715300,1534715359,FR
+1534715360,1534715367,DE
+1534715368,1534715415,FR
+1534715416,1534715419,PL
+1534715420,1534715423,FR
+1534715424,1534715431,IT
+1534715432,1534715439,FR
+1534715440,1534715447,IT
+1534715448,1534715631,FR
+1534715632,1534715639,DE
+1534715640,1534715671,FR
+1534715672,1534715675,CZ
+1534715676,1534715711,FR
+1534715712,1534715727,GB
+1534715728,1534715775,FR
+1534715776,1534715783,ES
+1534715784,1534715791,IT
+1534715792,1534715871,FR
1534715872,1534715875,ES
-1534715876,1534715935,FR
+1534715876,1534715879,FR
+1534715880,1534715883,PL
+1534715884,1534715935,FR
1534715936,1534715939,NL
-1534715940,1534716375,FR
+1534715940,1534716007,FR
+1534716008,1534716015,IT
+1534716016,1534716031,ES
+1534716032,1534716095,FR
+1534716096,1534716127,NL
+1534716128,1534716131,GB
+1534716132,1534716163,FR
+1534716164,1534716167,BE
+1534716168,1534716303,FR
+1534716304,1534716307,GB
+1534716308,1534716367,FR
+1534716368,1534716375,IT
1534716376,1534716379,ES
-1534716380,1534717199,FR
+1534716380,1534716383,BE
+1534716384,1534716447,FR
+1534716448,1534716463,ES
+1534716464,1534716575,FR
+1534716576,1534716591,NL
+1534716592,1534716623,FR
+1534716624,1534716639,BE
+1534716640,1534716647,IT
+1534716648,1534716763,FR
+1534716764,1534716767,BE
+1534716768,1534716775,DE
+1534716776,1534716783,FR
+1534716784,1534716791,NL
+1534716792,1534716799,LT
+1534716800,1534716803,FI
+1534716804,1534716807,NL
+1534716808,1534717035,FR
+1534717036,1534717039,IT
+1534717040,1534717063,FR
+1534717064,1534717071,IT
+1534717072,1534717087,GB
+1534717088,1534717199,FR
1534717200,1534717215,GB
1534717216,1534717247,FR
1534717248,1534717251,ES
-1534717252,1534717263,FR
+1534717252,1534717255,FR
+1534717256,1534717263,IT
1534717264,1534717267,ES
-1534717268,1534717663,FR
+1534717268,1534717323,FR
+1534717324,1534717327,CH
+1534717328,1534717343,NL
+1534717344,1534717407,FR
+1534717408,1534717415,IT
+1534717416,1534717551,FR
+1534717552,1534717567,PL
+1534717568,1534717587,FR
+1534717588,1534717591,GB
+1534717592,1534717599,FR
+1534717600,1534717631,PT
+1534717632,1534717663,FR
1534717664,1534717679,GB
-1534717680,1534717923,FR
+1534717680,1534717695,BE
+1534717696,1534717711,PT
+1534717712,1534717791,FR
+1534717792,1534717823,NL
+1534717824,1534717915,FR
+1534717916,1534717919,ES
+1534717920,1534717923,FR
1534717924,1534717927,IT
-1534717928,1534718763,FR
-1534718764,1534718767,ES
-1534718768,1534719747,FR
+1534717928,1534717935,FR
+1534717936,1534717951,CZ
+1534717952,1534717991,FR
+1534717992,1534717995,FI
+1534717996,1534718007,FR
+1534718008,1534718011,ES
+1534718012,1534718271,FR
+1534718272,1534718335,PT
+1534718336,1534718351,FR
+1534718352,1534718359,IT
+1534718360,1534718363,GB
+1534718364,1534718475,FR
+1534718476,1534718479,GB
+1534718480,1534718535,FR
+1534718536,1534718539,IT
+1534718540,1534718575,FR
+1534718576,1534718591,LT
+1534718592,1534718631,FR
+1534718632,1534718639,GB
+1534718640,1534718655,FR
+1534718656,1534718687,GB
+1534718688,1534718759,FR
+1534718760,1534718767,ES
+1534718768,1534718819,FR
+1534718820,1534718823,PL
+1534718824,1534719087,FR
+1534719088,1534719103,GB
+1534719104,1534719335,FR
+1534719336,1534719339,IT
+1534719340,1534719423,FR
+1534719424,1534719439,PL
+1534719440,1534719459,FR
+1534719460,1534719463,DE
+1534719464,1534719471,FR
+1534719472,1534719487,BE
+1534719488,1534719507,FR
+1534719508,1534719511,FI
+1534719512,1534719519,FR
+1534719520,1534719535,GB
+1534719536,1534719567,FR
+1534719568,1534719575,LT
+1534719576,1534719583,IT
+1534719584,1534719599,PT
+1534719600,1534719607,PL
+1534719608,1534719615,FR
+1534719616,1534719631,PL
+1534719632,1534719747,FR
1534719748,1534719751,ES
1534719752,1534719783,FR
1534719784,1534719787,ES
-1534719788,1534720003,FR
+1534719788,1534719791,PT
+1534719792,1534719815,FR
+1534719816,1534719823,GB
+1534719824,1534719831,FR
+1534719832,1534719839,PL
+1534719840,1534719967,FR
+1534719968,1534719983,IT
+1534719984,1534720003,FR
1534720004,1534720007,ES
1534720008,1534720011,IT
-1534720012,1534720023,FR
+1534720012,1534720015,FR
+1534720016,1534720023,IT
1534720024,1534720027,PL
-1534720028,1534720179,FR
+1534720028,1534720047,FR
+1534720048,1534720063,GB
+1534720064,1534720095,FR
+1534720096,1534720111,IT
+1534720112,1534720179,FR
1534720180,1534720183,ES
-1534720184,1534720471,FR
+1534720184,1534720211,FR
+1534720212,1534720215,DE
+1534720216,1534720223,GB
+1534720224,1534720255,FR
+1534720256,1534720271,PL
+1534720272,1534720415,FR
+1534720416,1534720419,ES
+1534720420,1534720423,FR
+1534720424,1534720431,IT
+1534720432,1534720467,FR
+1534720468,1534720471,ES
1534720472,1534720479,DE
-1534720480,1534721619,FR
+1534720480,1534720527,FR
+1534720528,1534720531,BE
+1534720532,1534720647,FR
+1534720648,1534720655,ES
+1534720656,1534720735,FR
+1534720736,1534720739,PL
+1534720740,1534720743,FR
+1534720744,1534720767,GB
+1534720768,1534720787,FR
+1534720788,1534720791,IT
+1534720792,1534720943,FR
+1534720944,1534720951,LT
+1534720952,1534720967,FR
+1534720968,1534720975,IT
+1534720976,1534720991,FR
+1534720992,1534721007,IT
+1534721008,1534721035,FR
+1534721036,1534721039,PT
+1534721040,1534721071,FR
+1534721072,1534721087,IT
+1534721088,1534721115,FR
+1534721116,1534721119,CH
+1534721120,1534721195,FR
+1534721196,1534721199,DE
+1534721200,1534721215,IT
+1534721216,1534721295,FR
+1534721296,1534721311,GB
+1534721312,1534721391,FR
+1534721392,1534721407,GB
+1534721408,1534721487,FR
+1534721488,1534721491,BE
+1534721492,1534721587,FR
+1534721588,1534721591,LT
+1534721592,1534721619,FR
1534721620,1534721623,ES
-1534721624,1534722047,FR
+1534721624,1534721707,FR
+1534721708,1534721711,IT
+1534721712,1534721727,FR
+1534721728,1534721743,GB
+1534721744,1534721827,FR
+1534721828,1534721831,DE
+1534721832,1534721971,FR
+1534721972,1534721975,GB
+1534721976,1534722047,FR
1534722048,1534787583,RU
1534787584,1534791679,RO
1534791680,1534795775,RU
@@ -22125,11 +24341,9 @@
1534984192,1534985215,NO
1534985216,1535049727,ES
1535049728,1535115263,SK
-1535115264,1535146495,AT
-1535146496,1535146751,CH
-1535146752,1535197183,AT
-1535197184,1535203071,EE
-1535203072,1535246335,SE
+1535115264,1535197183,AT
+1535197184,1535203359,EE
+1535203360,1535246335,SE
1535246336,1535311871,AT
1535311872,1535344639,NO
1535344640,1535350783,LV
@@ -22137,8 +24351,7 @@
1535352832,1535361023,EE
1535361024,1535377407,NL
1535377408,1535442943,GR
-1535442944,1535450879,RU
-1535450880,1535451135,FI
+1535442944,1535451135,RU
1535451136,1535459327,DK
1535459328,1535475711,AT
1535475712,1535508479,IR
@@ -22172,10 +24385,12 @@
1535715328,1535717375,DE
1535717376,1535721471,CH
1535721472,1535721727,DE
-1535721728,1535737855,CH
-1535737856,1535746815,HU
-1535746816,1535747071,RS
-1535747072,1535770623,HU
+1535721728,1535727871,CH
+1535727872,1535728127,DE
+1535728128,1535732735,CH
+1535732736,1535735807,DE
+1535735808,1535737855,CH
+1535737856,1535770623,HU
1535770624,1535803391,CH
1535803392,1535836159,GR
1535836160,1535868927,CZ
@@ -22277,9 +24492,7 @@
1536684032,1536688127,GB
1536688128,1537212415,FI
1537212416,1538260991,FR
-1538260992,1538628607,BE
-1538628608,1538629119,FR
-1538629120,1538785279,BE
+1538260992,1538785279,BE
1538785280,1538793471,NL
1538793472,1538797567,DE
1538797568,1538801663,NL
@@ -22358,7 +24571,11 @@
1539211264,1539213311,CZ
1539213312,1539215359,SE
1539215360,1539219455,DE
-1539219456,1539221247,GG
+1539219456,1539219967,GG
+1539219968,1539220223,GB
+1539220224,1539220479,GG
+1539220480,1539220991,GB
+1539220992,1539221247,GG
1539221248,1539221503,GB
1539221504,1539223551,FR
1539223552,1539225599,RU
@@ -23266,8 +25483,7 @@
1539865600,1539866623,UA
1539866624,1539867647,IT
1539867648,1539868671,RO
-1539868672,1539868927,UA
-1539868928,1539869695,RU
+1539868672,1539869695,RU
1539869696,1539870719,ES
1539870720,1539871743,IL
1539872768,1539873791,SE
@@ -23566,7 +25782,6 @@
1540242944,1540243455,RU
1540243456,1540243967,PL
1540243968,1540244479,RU
-1540244480,1540244735,CH
1540244992,1540245503,DE
1540245504,1540246015,RU
1540246016,1540246527,IT
@@ -23641,7 +25856,8 @@
1540284928,1540285439,UA
1540285440,1540285951,DE
1540285952,1540286463,RU
-1540286464,1540286975,NL
+1540286464,1540286719,GB
+1540286720,1540286975,NL
1540286976,1540287487,GB
1540287488,1540288511,AT
1540288512,1540289535,RU
@@ -23764,7 +25980,7 @@
1540361472,1540361727,DE
1540361728,1540361983,IT
1540361984,1540362239,EE
-1540362240,1540363263,DE
+1540362496,1540363007,DE
1540363264,1540363519,RU
1540363776,1540364031,IS
1540364032,1540364287,RU
@@ -24252,7 +26468,6 @@
1540588544,1540589567,UA
1540589568,1540593663,RU
1540594688,1540595711,IT
-1540595712,1540596735,UZ
1540596736,1540597759,FR
1540597760,1540598783,SE
1540598784,1540600831,UA
@@ -24313,7 +26528,6 @@
1540631040,1540631295,NL
1540631296,1540631551,CH
1540631552,1540631807,HR
-1540631808,1540632063,LV
1540632064,1540632319,AT
1540632320,1540632575,RU
1540632576,1540632831,DK
@@ -24358,7 +26572,6 @@
1540645120,1540645375,RU
1540645376,1540645631,BE
1540645632,1540645887,NL
-1540645888,1540646143,PL
1540646144,1540646399,RO
1540646400,1540646655,PS
1540646656,1540646911,SE
@@ -24386,7 +26599,7 @@
1540653056,1540653311,FR
1540653312,1540653567,DK
1540653568,1540653823,DE
-1540653824,1540654335,GB
+1540653824,1540654079,GB
1540654336,1540654591,RU
1540654592,1540654847,SI
1540654848,1540655103,RU
@@ -24470,7 +26683,6 @@
1540678656,1540678911,SE
1540678912,1540679167,GB
1540679168,1540679423,RU
-1540679424,1540679679,PL
1540679680,1540679935,LT
1540679936,1540680191,BG
1540680192,1540680447,CH
@@ -24525,7 +26737,7 @@
1540693760,1540694015,UZ
1540694016,1540694271,CH
1540694272,1540694527,UA
-1540694528,1540695039,RO
+1540694528,1540694783,RO
1540695040,1540695295,DE
1540695296,1540695551,NL
1540695552,1540695807,PL
@@ -24690,7 +26902,6 @@
1540742144,1540742399,RU
1540742400,1540742655,DE
1540742656,1540742911,AT
-1540742912,1540743167,RU
1540743168,1540743423,NO
1540743424,1540743679,GB
1540743680,1540743935,PL
@@ -24726,7 +26937,6 @@
1540756480,1540757503,DK
1540757504,1540758527,PL
1540758528,1540759551,UA
-1540760064,1540760319,UA
1540760576,1540761599,PL
1540761600,1540762623,RU
1540762624,1540763647,LU
@@ -24745,9 +26955,9 @@
1540779008,1540780031,NL
1540780032,1540781055,UA
1540781056,1540783103,RU
-1540783104,1540784639,UA
-1540784640,1540784895,RU
-1540784896,1540787199,UA
+1540783104,1540784383,UA
+1540784384,1540785151,RU
+1540785152,1540787199,UA
1540787200,1540788223,KZ
1540788224,1540790271,RU
1540790272,1540791295,KW
@@ -24799,11 +27009,10 @@
1540848640,1540849663,UA
1540849664,1540850687,RU
1540850688,1540851711,FI
-1540851712,1540852735,UA
-1540852736,1540853759,RU
+1540851712,1540853759,RU
1540853760,1540854783,UA
1540854784,1540855807,NL
-1540855808,1540856831,RU
+1540855808,1540856831,UA
1540856832,1540857855,NL
1540857856,1540858879,DK
1540858880,1540859903,GB
@@ -24811,7 +27020,9 @@
1540860928,1540861951,KZ
1540861952,1540862975,BY
1540862976,1540865023,GB
-1540865024,1540872191,RU
+1540865024,1540867071,RU
+1540867072,1540868095,KZ
+1540868096,1540872191,RU
1540872192,1540873215,BG
1540873216,1540875263,RU
1540875264,1540876287,PL
@@ -25399,13 +27610,11 @@
1541165312,1541165567,RU
1541165568,1541165823,NL
1541165824,1541166079,GB
-1541166080,1541166335,RU
1541166336,1541166591,FR
1541166592,1541166847,RO
1541166848,1541167103,RU
1541167104,1541167359,NL
1541167360,1541167615,AT
-1541167616,1541167871,RU
1541167872,1541168127,UA
1541168128,1541168639,RU
1541168640,1541168895,MD
@@ -25439,7 +27648,6 @@
1541176064,1541176319,NL
1541176320,1541176575,AM
1541176576,1541176831,DE
-1541176832,1541177087,RU
1541177088,1541177343,GB
1541177344,1541177599,CH
1541177600,1541177855,DE
@@ -25484,7 +27692,6 @@
1541187840,1541188351,RU
1541188352,1541188607,FR
1541188608,1541188863,HU
-1541188864,1541189119,RU
1541189120,1541189375,UA
1541189376,1541189631,GB
1541189888,1541190143,PL
@@ -25510,7 +27717,6 @@
1541195520,1541195775,GB
1541195776,1541196031,FR
1541196032,1541196287,CZ
-1541196288,1541196543,RU
1541196800,1541197055,UA
1541197056,1541197311,PL
1541197312,1541197567,RU
@@ -25592,7 +27798,6 @@
1541228032,1541228543,RU
1541228544,1541229055,CZ
1541229056,1541229567,UA
-1541229568,1541230079,RU
1541230080,1541230591,RO
1541230592,1541231103,RU
1541231104,1541231615,GB
@@ -25729,7 +27934,7 @@
1541338112,1541341183,UA
1541341184,1541341439,TR
1541341440,1541341695,RU
-1541341696,1541341951,HU
+1541341696,1541341951,DE
1541341952,1541342463,PL
1541342464,1541342719,FR
1541342720,1541342975,PL
@@ -26004,8 +28209,8 @@
1541426176,1541426687,RU
1541426688,1541427199,UA
1541427200,1541428223,RU
-1541428224,1541428991,UA
-1541428992,1541429247,RU
+1541428224,1541428735,UA
+1541428736,1541429247,RU
1541429248,1541429759,FI
1541429760,1541430271,CZ
1541430272,1541430783,LT
@@ -26116,7 +28321,9 @@
1541532672,1541533695,RU
1541533696,1541534719,PL
1541534720,1541535743,IT
-1541535744,1541536767,US
+1541535744,1541536255,US
+1541536256,1541536511,IE
+1541536512,1541536767,US
1541536768,1541537791,RU
1541537792,1541538303,GB
1541538304,1541538815,RO
@@ -26145,15 +28352,14 @@
1541552128,1541553151,UA
1541553152,1541555199,RU
1541555200,1541556223,PL
-1541556224,1541556479,UA
1541556480,1541556735,RU
1541556736,1541557247,IT
1541557504,1541557759,SI
-1541557760,1541558015,RU
1541558016,1541558271,HU
1541558272,1541559295,RU
1541560320,1541561343,DE
-1541561344,1541562879,RU
+1541561344,1541562367,RU
+1541562624,1541562879,RU
1541562880,1541563135,FR
1541563136,1541563391,NL
1541563392,1541564415,PL
@@ -26386,7 +28592,7 @@
1541700864,1541701119,PL
1541701120,1541701631,IL
1541701632,1541702655,RO
-1541702656,1541703679,RU
+1541703424,1541703679,RU
1541703680,1541704703,PL
1541704704,1541706239,RO
1541706240,1541706751,UA
@@ -26401,7 +28607,6 @@
1541711872,1541712127,FR
1541712128,1541712383,TR
1541712384,1541712895,DE
-1541712896,1541713919,RU
1541713920,1541714175,NL
1541714176,1541716223,RU
1541716224,1541716479,PL
@@ -26454,7 +28659,6 @@
1541740032,1541740287,PL
1541740288,1541740543,NL
1541740544,1541740799,CZ
-1541740800,1541741055,RU
1541741056,1541741567,PL
1541741568,1541742079,SK
1541742080,1541742591,RO
@@ -26467,7 +28671,6 @@
1541746944,1541747199,NL
1541747200,1541747711,RU
1541747712,1541748735,UA
-1541748736,1541748991,RU
1541748992,1541749247,AT
1541749248,1541749503,ES
1541749504,1541749759,RU
@@ -26738,7 +28941,6 @@
1541893632,1541894143,PL
1541894144,1541895167,RU
1541895168,1541897727,PL
-1541897728,1541897983,RU
1541897984,1541898239,UA
1541898240,1541900799,RU
1541900800,1541901055,RO
@@ -27558,7 +29760,7 @@
1542392832,1542393087,RO
1542393088,1542393343,BG
1542393344,1542393599,IR
-1542393600,1542394879,RU
+1542393856,1542394879,RU
1542394880,1542395135,DE
1542395136,1542395391,ES
1542395392,1542395647,RU
@@ -28035,8 +30237,8 @@
1546000384,1546001407,UZ
1546001408,1546002943,RU
1546002944,1546003199,UA
-1546003200,1546003455,RU
-1546003456,1546004479,CZ
+1546003200,1546003967,RU
+1546003968,1546004479,CZ
1546004480,1546004735,UA
1546004736,1546005247,CZ
1546005248,1546006527,RU
@@ -28056,7 +30258,7 @@
1546088448,1546092543,GB
1546092544,1546096639,RU
1546096640,1546100735,IT
-1546100736,1546104831,DE
+1546100736,1546104831,AT
1546104832,1546108927,IE
1546108928,1546113023,IM
1546113024,1546121215,RU
@@ -28067,7 +30269,9 @@
1546122464,1546122479,DZ
1546122480,1546122649,FR
1546122650,1546122650,PT
-1546122651,1546125311,FR
+1546122651,1546122696,FR
+1546122697,1546122697,ES
+1546122698,1546125311,FR
1546125312,1546256383,GB
1546256384,1546264575,RU
1546264576,1546266623,TR
@@ -28137,20 +30341,25 @@
1546682368,1546698751,BE
1546698752,1546715135,NL
1546715136,1546731519,LV
-1546731520,1546731775,RE
-1546731776,1546735103,FR
+1546731520,1546735103,FR
1546735104,1546735359,RE
-1546735360,1546739711,FR
-1546739712,1546739967,GP
-1546739968,1546741503,FR
-1546741504,1546742015,GP
-1546742016,1546742527,FR
-1546742528,1546743295,GF
-1546743296,1546743551,FR
-1546743552,1546743807,GF
-1546743808,1546745087,FR
-1546745088,1546745855,MQ
-1546745856,1546747903,FR
+1546735360,1546735871,FR
+1546735872,1546736127,RE
+1546736128,1546736639,FR
+1546736640,1546736895,RE
+1546736896,1546740223,FR
+1546740224,1546740479,GP
+1546740480,1546741503,FR
+1546741504,1546741759,GP
+1546741760,1546742527,FR
+1546742528,1546743039,GF
+1546743040,1546743295,FR
+1546743296,1546743551,GF
+1546743552,1546745599,FR
+1546745600,1546745855,MQ
+1546745856,1546746111,FR
+1546746112,1546746367,MQ
+1546746368,1546747903,FR
1546747904,1546764287,RU
1546764288,1546780671,UA
1546780672,1546797055,IR
@@ -28162,7 +30371,9 @@
1546911744,1546928127,SK
1546928128,1546944511,GB
1546944512,1546960895,UA
-1546960896,1546977279,HU
+1546960896,1546964991,HU
+1546964992,1546966015,US
+1546966016,1546977279,HU
1546977280,1546993663,MK
1546993664,1547010047,RU
1547010048,1547026431,SI
@@ -28206,19 +30417,13 @@
1547542528,1547546623,FR
1547546624,1547550719,IR
1547550720,1547554815,IE
-1547554816,1547555071,AT
-1547555072,1547555078,DE
-1547555079,1547555079,AT
-1547555080,1547555327,DE
-1547555328,1547558911,AT
+1547554816,1547558911,AT
1547558912,1547563007,IL
1547563008,1547565311,NL
1547565312,1547565823,US
1547565824,1547567103,NL
1547567104,1547571199,GB
-1547571200,1547572991,AT
-1547572992,1547573247,HU
-1547573248,1547575295,AT
+1547571200,1547575295,AT
1547575296,1547579391,NO
1547579392,1547583487,RU
1547583488,1547587583,KG
@@ -28280,19 +30485,13 @@
1547685888,1547689983,AT
1547689984,1547694079,IT
1547694080,1547698175,HU
-1547698176,1547925783,NL
-1547925784,1547925791,DE
-1547925792,1548130303,NL
-1548130304,1548130559,BE
-1548130560,1548158599,NL
+1547698176,1548158599,NL
1548158600,1548158607,GB
1548158608,1548159231,NL
1548159232,1548159235,ES
1548159236,1548159487,NL
1548159488,1548159999,GB
-1548160000,1548160255,NL
-1548160256,1548160511,PL
-1548160512,1548162479,NL
+1548160000,1548162479,NL
1548162480,1548162495,FR
1548162496,1548169215,NL
1548169216,1548171263,DE
@@ -28322,10 +30521,14 @@
1549795328,1550057471,AE
1550057472,1550188543,RU
1550188544,1550319615,FR
-1550319616,1550581759,CH
+1550319616,1550519551,CH
+1550519552,1550519807,DE
+1550519808,1550581759,CH
1550581760,1550843903,NL
1550843904,1550974975,UA
-1550974976,1551007743,RO
+1550974976,1550979071,RO
+1550979072,1550983167,IR
+1550983168,1551007743,RO
1551007744,1551106047,MD
1551106048,1551237119,DE
1551237120,1551368191,GR
@@ -28346,101 +30549,28 @@
1551577088,1551580159,NL
1551604480,1551604735,SE
1551630336,1551892479,RU
-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,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,1554035455,MQ
-1554035456,1554035967,FR
-1554035968,1554037503,MQ
-1554037504,1554037759,FR
-1554037760,1554038271,MQ
-1554038272,1554038783,FR
-1554038784,1554039295,RE
-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
+1551892480,1556086783,FR
1556086784,1557921791,DE
1557921792,1558052863,NO
1558052864,1558054399,FR
1558054400,1558054655,DE
-1558054656,1558118399,FR
+1558054656,1558079407,FR
+1558079408,1558079415,PL
+1558079416,1558079423,GB
+1558079424,1558081175,FR
+1558081176,1558081183,BE
+1558081184,1558084655,FR
+1558084656,1558084659,BE
+1558084660,1558085055,FR
+1558085056,1558085071,GB
+1558085072,1558093531,FR
+1558093532,1558093532,HR
+1558093533,1558118399,FR
1558118400,1558119423,DE
1558119424,1558122495,RU
-1558122496,1558151167,AT
+1558122496,1558123519,AT
+1558123520,1558124543,LU
+1558124544,1558151167,AT
1558151168,1558183935,IT
1558183936,1558708223,DE
1558708224,1559236607,GB
@@ -28493,7 +30623,7 @@
1559633920,1559642111,IT
1559650304,1559658495,IT
1559658496,1559683071,RU
-1559683072,1559691263,CH
+1559683072,1559691263,NL
1559691264,1559756799,BG
1559756800,1559789567,AT
1559789568,1559822335,RU
@@ -28502,7 +30632,9 @@
1559887872,1559920639,PT
1559920640,1559924693,LU
1559924694,1559924694,GB
-1559924695,1559932927,LU
+1559924695,1559929599,LU
+1559929600,1559929855,LV
+1559929856,1559932927,LU
1559932928,1559943167,DE
1559943168,1559944191,LU
1559944192,1559945727,FR
@@ -28528,17 +30660,7 @@
1562378240,1564999679,IT
1564999680,1565523967,UA
1565523968,1565655039,RU
-1565655040,1565673215,AT
-1565673216,1565673471,DE
-1565673472,1565675263,AT
-1565675264,1565675391,DE
-1565675392,1565713295,AT
-1565713296,1565713299,CH
-1565713300,1565718919,AT
-1565718920,1565718927,DE
-1565718928,1565723135,AT
-1565723136,1565723391,HU
-1565723392,1565786111,AT
+1565655040,1565786111,AT
1565786112,1565917183,BY
1565917184,1566048255,RS
1566048256,1566056447,RU
@@ -28661,7 +30783,6 @@
1566425088,1566427135,RS
1566427136,1566429183,IT
1566429184,1566437375,GB
-1566437376,1566439423,BE
1566439424,1566443519,DE
1566443520,1566445567,NO
1566445568,1566447615,PL
@@ -28721,9 +30842,9 @@
1566558208,1566560255,JO
1566560256,1566560767,IT
1566560768,1566561015,SM
-1566561016,1566561017,IT
-1566561018,1566561023,SM
-1566561024,1566564351,IT
+1566561016,1566561019,IT
+1566561020,1566561279,SM
+1566561280,1566564351,IT
1566564352,1566566399,IS
1566566400,1566568447,FR
1566568448,1566570495,KZ
@@ -28746,11 +30867,7 @@
1567621120,1567696383,RO
1567696384,1567696895,MD
1567696896,1567703039,RO
-1567703040,1567707391,MD
-1567707392,1567707647,RO
-1567707648,1567707903,MD
-1567707904,1567708671,RO
-1567708672,1567709183,MD
+1567703040,1567709183,MD
1567709184,1567710207,RO
1567710208,1567711231,MD
1567711232,1567713279,RO
@@ -28761,7 +30878,9 @@
1567727360,1567727615,GB
1567727616,1567742975,RO
1567742976,1567743487,MD
-1567743488,1567749119,RO
+1567743488,1567743999,RO
+1567744000,1567748095,IR
+1567748096,1567749119,RO
1567749120,1567750143,MD
1567750144,1567752191,RO
1567752192,1567756287,MD
@@ -28789,7 +30908,8 @@
1567988736,1567992831,MD
1567992832,1567993343,RO
1567993344,1567993599,GB
-1567993600,1567997951,RO
+1567993600,1567993855,RO
+1567993856,1567997951,IR
1567997952,1568014335,NL
1568014336,1568022527,DE
1568022528,1568026623,RO
@@ -28810,79 +30930,62 @@
1568120832,1568122879,MD
1568122880,1568130047,RO
1568130048,1568133119,MD
-1568133120,1568138239,RO
+1568133120,1568137215,IR
+1568137216,1568138239,RO
1568138240,1568141311,MD
1568141312,1568178175,RO
1568178176,1568210943,RU
1568210944,1568243711,GB
-1568243712,1568243967,FR
-1568243968,1568244735,GP
-1568244736,1568244991,FR
-1568244992,1568245759,GP
-1568245760,1568246271,FR
-1568246272,1568246527,GF
-1568246528,1568247039,GP
-1568247040,1568247295,FR
+1568243712,1568245759,GP
+1568245760,1568247295,FR
1568247296,1568247551,GF
1568247552,1568247807,MF
1568247808,1568248063,FR
1568248064,1568248831,GP
-1568248832,1568249087,MQ
-1568249088,1568249599,GP
-1568249600,1568249855,MQ
+1568248832,1568249087,FR
+1568249088,1568249855,GP
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
+1568251904,1568252159,FR
+1568252160,1568252927,GP
1568252928,1568253183,GF
-1568253184,1568253951,GP
-1568253952,1568255743,FR
-1568255744,1568255999,GF
-1568256000,1568256511,GP
-1568256512,1568259071,FR
-1568259072,1568259327,MQ
+1568253184,1568254207,GP
+1568254208,1568254975,FR
+1568254976,1568255487,GP
+1568255488,1568255999,FR
+1568256000,1568256255,GP
+1568256256,1568259327,FR
1568259328,1568260095,GP
1568260096,1568260351,FR
-1568260352,1568260607,MF
-1568260608,1568261119,GP
+1568260352,1568260863,MF
+1568260864,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
+1568262144,1568262399,MQ
+1568262400,1568263167,GP
+1568263168,1568264447,FR
+1568264448,1568264959,GP
+1568264960,1568265215,MF
+1568265216,1568266239,GP
1568266240,1568266495,FR
1568266496,1568267263,GP
-1568267264,1568268543,FR
+1568267264,1568267775,MF
+1568267776,1568268543,FR
1568268544,1568269311,GP
-1568269312,1568269567,MQ
+1568269312,1568269567,FR
1568269568,1568270079,GP
1568270080,1568270335,MQ
-1568270336,1568271359,GP
-1568271360,1568271615,FR
-1568271616,1568272383,GP
+1568270336,1568272383,GP
1568272384,1568273151,FR
1568273152,1568273407,GF
-1568273408,1568274175,FR
-1568274176,1568274687,MQ
-1568274688,1568274943,GP
-1568274944,1568275199,MQ
-1568275200,1568275455,GP
+1568273408,1568274687,FR
+1568274688,1568275455,GP
1568275456,1568275711,FR
1568275712,1568275967,MQ
-1568275968,1568276223,FR
-1568276224,1568276479,MQ
+1568275968,1568276479,FR
1568276480,1568309247,DE
1568309248,1568342015,RO
1568342016,1568374783,BG
@@ -28895,9 +30998,7 @@
1568571392,1568604159,LB
1568604160,1568636927,UA
1568636928,1569193983,DE
-1569193984,1569438463,HR
-1569438464,1569438719,BR
-1569438720,1569718271,HR
+1569193984,1569718271,HR
1569718272,1570242559,IT
1570242560,1570275327,GB
1570275328,1570308095,BG
@@ -28919,14 +31020,13 @@
1570586624,1570590719,PL
1570590720,1570592767,IL
1570592768,1570596863,PL
-1570596864,1570598911,UA
1570598912,1570600959,PL
1570600960,1570603007,RU
1570603008,1570605055,CZ
1570605056,1570607103,NL
1570607104,1570609151,RU
1570609152,1570611199,PL
-1570611200,1570619391,RU
+1570611200,1570617343,RU
1570619392,1570621439,BA
1570621440,1570625535,RU
1570625536,1570627583,GB
@@ -28936,7 +31036,9 @@
1570644776,1570644991,FR
1570644992,1570645247,GB
1570645248,1570652159,FR
-1570652160,1570668543,SE
+1570652160,1570660863,SE
+1570660864,1570661375,NO
+1570661376,1570668543,SE
1570668544,1570686975,RU
1570686976,1570693119,NL
1570693120,1570695167,RU
@@ -28991,7 +31093,7 @@
1571443712,1571444991,CZ
1571444992,1571445247,UA
1571445248,1571446271,NL
-1571446272,1571446783,CZ
+1571446272,1571446783,RU
1571446784,1571447039,GB
1571447040,1571447295,CZ
1571447296,1571447807,RU
@@ -29002,7 +31104,9 @@
1571449344,1571449855,CZ
1571449856,1571450879,RU
1571450880,1571452927,UA
-1571452928,1571453951,CZ
+1571452928,1571453183,CZ
+1571453184,1571453695,RU
+1571453696,1571453951,CZ
1571453952,1571455999,RU
1571456000,1571456511,UA
1571456512,1571456767,CZ
@@ -29018,10 +31122,14 @@
1571471104,1571471359,CZ
1571471360,1571475455,RU
1571475456,1571476479,CZ
-1571476480,1571478527,RU
-1571478528,1571487743,CZ
+1571476480,1571479551,RU
+1571479552,1571483647,CZ
+1571483648,1571484159,RU
+1571484160,1571487743,CZ
1571487744,1571495935,SK
-1571495936,1571504127,CZ
+1571495936,1571499007,CZ
+1571499008,1571500031,RU
+1571500032,1571504127,BY
1571504128,1571508223,UA
1571508224,1571514367,CZ
1571514368,1571520511,BY
@@ -29034,8 +31142,9 @@
1571529216,1571529727,CZ
1571529728,1571530239,RU
1571530240,1571531263,CZ
-1571531264,1571531775,UA
-1571531776,1571534079,CZ
+1571531264,1571532031,UA
+1571532032,1571532287,RU
+1571532288,1571534079,CZ
1571534080,1571534847,RU
1571534848,1571535103,LV
1571535104,1571535617,CZ
@@ -29105,30 +31214,24 @@
1571815424,1571815679,FR
1571815680,1571815935,RE
1571815936,1571816959,FR
-1571816960,1571817727,RE
-1571817728,1571818495,FR
+1571816960,1571817215,RE
+1571817216,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,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
+1571819776,1571821055,FR
+1571821056,1571821823,RE
+1571821824,1571822847,FR
+1571822848,1571823615,RE
+1571823616,1571825407,FR
+1571825408,1571825663,RE
+1571825664,1571827455,FR
+1571827456,1571827967,RE
+1571827968,1571830783,FR
+1571830784,1571831039,RE
+1571831040,1571831807,FR
1571831808,1571848191,DK
1571848192,1571864575,RU
1571864576,1571880959,PL
@@ -29231,8 +31334,7 @@
1572538368,1572540415,NL
1572540416,1572542463,GB
1572542464,1572544511,IT
-1572544512,1572544767,FR
-1572544768,1572546559,IQ
+1572544512,1572546559,IQ
1572546560,1572548607,FR
1572548608,1572550655,NL
1572550656,1572552703,DE
@@ -29244,11 +31346,12 @@
1572562944,1572564991,CZ
1572564992,1572567039,DE
1572567040,1572569087,RU
-1572571136,1572573183,RO
-1572573184,1572574463,GG
-1572574464,1572574719,GB
-1572574720,1572574975,GG
-1572574976,1572575231,GB
+1572571136,1572572159,RO
+1572572160,1572573183,BG
+1572573184,1572573951,GG
+1572573952,1572574207,GB
+1572574208,1572574463,GG
+1572574464,1572575231,GB
1572575232,1572577279,RU
1572577280,1572579327,AM
1572579328,1572581375,GB
@@ -29314,8 +31417,9 @@
1572706304,1572708351,DE
1572708352,1572708607,GB
1572708608,1572709375,GG
-1572709376,1572710143,GB
-1572710144,1572710399,GG
+1572709376,1572709887,GB
+1572709888,1572710143,GG
+1572710144,1572710399,GB
1572710400,1572712447,DE
1572712448,1572714495,ES
1572714496,1572714943,NG
@@ -29406,15 +31510,49 @@
1578585088,1578586111,PT
1578586112,1578588159,ES
1578588160,1578590207,PL
-1578590208,1578590787,FR
+1578590208,1578590223,FR
+1578590224,1578590231,CH
+1578590232,1578590347,FR
+1578590348,1578590351,FI
+1578590352,1578590367,IT
+1578590368,1578590603,FR
+1578590604,1578590607,GB
+1578590608,1578590659,FR
+1578590660,1578590663,PL
+1578590664,1578590719,FR
+1578590720,1578590727,ES
+1578590728,1578590731,GB
+1578590732,1578590767,FR
+1578590768,1578590783,BE
+1578590784,1578590787,FR
1578590788,1578590791,ES
1578590792,1578590851,FR
1578590852,1578590855,ES
1578590856,1578590863,FR
1578590864,1578590879,BE
-1578590880,1578591695,FR
+1578590880,1578590895,GB
+1578590896,1578590975,FR
+1578590976,1578590991,IT
+1578590992,1578591087,FR
+1578591088,1578591103,GB
+1578591104,1578591231,FR
+1578591232,1578591247,NL
+1578591248,1578591263,GB
+1578591264,1578591391,FR
+1578591392,1578591399,BE
+1578591400,1578591663,FR
+1578591664,1578591679,GB
+1578591680,1578591695,FR
1578591696,1578591699,ES
-1578591700,1578592167,FR
+1578591700,1578591799,FR
+1578591800,1578591807,PL
+1578591808,1578591823,ES
+1578591824,1578591903,FR
+1578591904,1578591919,PL
+1578591920,1578591983,FR
+1578591984,1578591999,ES
+1578592000,1578592163,FR
+1578592164,1578592167,DE
1578592168,1578592171,IT
1578592172,1578592175,FR
1578592176,1578592183,CZ
@@ -29423,34 +31561,211 @@
1578592200,1578592207,CH
1578592208,1578592295,FR
1578592296,1578592303,NL
-1578592304,1578593023,FR
+1578592304,1578592379,FR
+1578592380,1578592383,GB
+1578592384,1578592511,FR
+1578592512,1578592519,ES
+1578592520,1578592543,FR
+1578592544,1578592559,GB
+1578592560,1578592575,BE
+1578592576,1578592687,FR
+1578592688,1578592695,ES
+1578592696,1578592735,FR
+1578592736,1578592743,FI
+1578592744,1578592799,FR
+1578592800,1578592803,NL
+1578592804,1578592811,FR
+1578592812,1578592815,ES
+1578592816,1578592855,FR
+1578592856,1578592859,PL
+1578592860,1578592863,FR
+1578592864,1578592879,DE
+1578592880,1578592883,GB
+1578592884,1578592991,FR
+1578592992,1578593007,NL
+1578593008,1578593023,FR
1578593024,1578593279,DE
-1578593280,1578593439,FR
+1578593280,1578593323,FR
+1578593324,1578593327,DE
+1578593328,1578593415,FR
+1578593416,1578593423,IT
+1578593424,1578593439,FR
1578593440,1578593443,ES
-1578593444,1578593551,FR
+1578593444,1578593479,FR
+1578593480,1578593483,ES
+1578593484,1578593491,FR
+1578593492,1578593495,GB
+1578593496,1578593551,FR
1578593552,1578593559,NL
-1578593560,1578593955,FR
+1578593560,1578593587,FR
+1578593588,1578593591,GB
+1578593592,1578593671,FR
+1578593672,1578593679,CH
+1578593680,1578593703,FR
+1578593704,1578593711,ES
+1578593712,1578593807,FR
+1578593808,1578593823,DE
+1578593824,1578593939,FR
+1578593940,1578593943,PL
+1578593944,1578593955,FR
1578593956,1578593959,ES
-1578593960,1578595367,FR
+1578593960,1578594063,FR
+1578594064,1578594079,PL
+1578594080,1578594095,FR
+1578594096,1578594111,PL
+1578594112,1578594143,FR
+1578594144,1578594147,ES
+1578594148,1578594151,FR
+1578594152,1578594159,ES
+1578594160,1578594163,IT
+1578594164,1578594239,FR
+1578594240,1578594255,PT
+1578594256,1578594271,IT
+1578594272,1578594303,BE
+1578594304,1578594359,FR
+1578594360,1578594363,NL
+1578594364,1578594367,FR
+1578594368,1578594371,IT
+1578594372,1578594383,FR
+1578594384,1578594399,IT
+1578594400,1578594523,FR
+1578594524,1578594527,CH
+1578594528,1578594547,FR
+1578594548,1578594551,IT
+1578594552,1578594559,FR
+1578594560,1578594815,ES
+1578594816,1578594879,FR
+1578594880,1578594895,FI
+1578594896,1578595203,FR
+1578595204,1578595207,GB
+1578595208,1578595215,FR
+1578595216,1578595231,IE
+1578595232,1578595367,FR
1578595368,1578595371,IT
-1578595372,1578595419,FR
+1578595372,1578595379,FR
+1578595380,1578595383,ES
+1578595384,1578595419,FR
1578595420,1578595423,GB
-1578595424,1578595987,FR
+1578595424,1578595439,FR
+1578595440,1578595447,NL
+1578595448,1578595535,FR
+1578595536,1578595543,LT
+1578595544,1578595551,FR
+1578595552,1578595559,NL
+1578595560,1578595583,FR
+1578595584,1578595599,BE
+1578595600,1578595607,FR
+1578595608,1578595611,GB
+1578595612,1578595615,FR
+1578595616,1578595619,ES
+1578595620,1578595627,FR
+1578595628,1578595631,ES
+1578595632,1578595663,FR
+1578595664,1578595679,ES
+1578595680,1578595747,FR
+1578595748,1578595751,CH
+1578595752,1578595767,FR
+1578595768,1578595775,ES
+1578595776,1578595871,FR
+1578595872,1578595903,IT
+1578595904,1578595911,GB
+1578595912,1578595987,FR
1578595988,1578595991,ES
-1578595992,1578602495,FR
+1578595992,1578596119,FR
+1578596120,1578596123,IT
+1578596124,1578596143,FR
+1578596144,1578596147,ES
+1578596148,1578596159,FR
+1578596160,1578596167,DE
+1578596168,1578596239,FR
+1578596240,1578596255,ES
+1578596256,1578596351,FR
+1578596352,1578596863,GB
+1578596864,1578602495,FR
1578602496,1578604543,NL
1578604544,1578606591,GB
1578606592,1578607725,DE
1578607726,1578607726,FR
1578607727,1578608639,DE
1578608640,1578610687,CZ
-1578610688,1578612907,FR
+1578610688,1578610779,FR
+1578610780,1578610783,DE
+1578610784,1578610819,FR
+1578610820,1578610823,ES
+1578610824,1578610827,FR
+1578610828,1578610831,IT
+1578610832,1578610847,FR
+1578610848,1578610851,DE
+1578610852,1578610855,FR
+1578610856,1578610859,IT
+1578610860,1578610871,FR
+1578610872,1578610879,PL
+1578610880,1578611051,FR
+1578611052,1578611055,NL
+1578611056,1578611127,FR
+1578611128,1578611135,NL
+1578611136,1578611151,FR
+1578611152,1578611167,GB
+1578611168,1578611199,FR
+1578611200,1578611215,BE
+1578611216,1578611239,FR
+1578611240,1578611243,DE
+1578611244,1578611423,FR
+1578611424,1578611439,PT
+1578611440,1578611443,FR
+1578611444,1578611447,IT
+1578611448,1578611455,FI
+1578611456,1578611583,IE
+1578611584,1578611711,GB
+1578611712,1578611907,FR
+1578611908,1578611911,PT
+1578611912,1578611919,FR
+1578611920,1578611935,IT
+1578611936,1578612255,FR
+1578612256,1578612263,DE
+1578612264,1578612271,FR
+1578612272,1578612287,GB
+1578612288,1578612303,FR
+1578612304,1578612319,DE
+1578612320,1578612523,FR
+1578612524,1578612527,PL
+1578612528,1578612579,FR
+1578612580,1578612583,BE
+1578612584,1578612591,FI
+1578612592,1578612899,FR
+1578612900,1578612903,ES
+1578612904,1578612907,FR
1578612908,1578612911,ES
-1578612912,1578613735,FR
+1578612912,1578612943,FR
+1578612944,1578612959,NL
+1578612960,1578612979,FR
+1578612980,1578612983,IE
+1578612984,1578612991,FR
+1578612992,1578613247,IT
+1578613248,1578613279,ES
+1578613280,1578613427,FR
+1578613428,1578613431,BE
+1578613432,1578613663,FR
+1578613664,1578613679,IT
+1578613680,1578613711,FR
+1578613712,1578613719,BE
+1578613720,1578613735,FR
1578613736,1578613739,ES
-1578613740,1578613931,FR
+1578613740,1578613759,FR
+1578613760,1578613775,GB
+1578613776,1578613787,FR
+1578613788,1578613791,DE
+1578613792,1578613823,FR
+1578613824,1578613839,NL
+1578613840,1578613847,GB
+1578613848,1578613855,IT
+1578613856,1578613931,FR
1578613932,1578613935,NL
-1578613936,1578614271,FR
+1578613936,1578614003,FR
+1578614004,1578614007,CZ
+1578614008,1578614047,FR
+1578614048,1578614055,ES
+1578614056,1578614271,FR
1578614272,1578614527,ES
1578614528,1578631167,FR
1578631168,1578663935,RO
@@ -29475,7 +31790,7 @@
1580007424,1580015615,RU
1580015616,1580048383,UA
1580048384,1580064767,RU
-1580064768,1580072959,DE
+1580064768,1580072959,GB
1580072960,1580134399,PT
1580134400,1580136447,ES
1580136448,1580138495,PT
@@ -29485,19 +31800,7 @@
1580466176,1580597247,RO
1580597248,1580728319,TR
1580728320,1580990463,AE
-1580990464,1580999679,PT
-1580999680,1580999935,RO
-1580999936,1581001215,PT
-1581001216,1581001471,RO
-1581001472,1581118463,PT
-1581118464,1581118719,RO
-1581118720,1581126655,PT
-1581126656,1581127167,RO
-1581127168,1581132031,PT
-1581132032,1581132287,RO
-1581132288,1581208575,PT
-1581208576,1581208831,RO
-1581208832,1581252607,PT
+1580990464,1581252607,PT
1581252608,1581776895,GR
1581776896,1581793279,RU
1581793280,1581809663,PL
@@ -29548,7 +31851,9 @@
1583616000,1583620095,NL
1583620096,1583624191,IT
1583624192,1583624447,XK
-1583624448,1583628287,RS
+1583624448,1583626751,RS
+1583626752,1583627007,XK
+1583627008,1583628287,RS
1583628288,1583632383,DE
1583632384,1583636479,RU
1583636480,1583640575,MK
@@ -29559,7 +31864,9 @@
1583656960,1583665151,RU
1583665152,1583669247,UA
1583669248,1583673343,GE
-1583673344,1583677439,DE
+1583673344,1583675647,DE
+1583675648,1583675903,US
+1583675904,1583677439,DE
1583677440,1583681535,FI
1583681536,1583685631,PL
1583685632,1583689727,DE
@@ -29567,6 +31874,7 @@
1583693824,1583697919,RU
1583697920,1583702015,TR
1583702016,1583706111,RU
+1583706624,1583706879,RU
1583710208,1583714303,IR
1583714304,1583722495,GB
1583722496,1583726591,IR
@@ -29583,7 +31891,9 @@
1583767552,1583771647,AT
1583771648,1583775743,RU
1583775744,1583779839,IT
-1583779840,1583780263,GB
+1583779840,1583780047,GB
+1583780048,1583780055,IT
+1583780056,1583780263,GB
1583780264,1583780271,IT
1583780272,1583780335,GB
1583780336,1583780343,IT
@@ -29630,9 +31940,7 @@
1583861760,1583865855,LU
1583865856,1583869951,RU
1583869952,1583874047,KZ
-1583874048,1584119935,BE
-1584119936,1584120063,FR
-1584120064,1584398335,BE
+1583874048,1584398335,BE
1584398336,1584529407,CZ
1584529408,1584660479,DE
1584660480,1584857087,GB
@@ -29655,9 +31963,8 @@
1585219584,1585221631,NL
1585221632,1585223679,SK
1585223680,1585224959,FR
-1585224960,1585225215,RE
-1585225216,1585225471,FR
-1585225472,1585225727,YT
+1585224960,1585225471,RE
+1585225472,1585225727,FR
1585225728,1585227007,UA
1585227008,1585227263,RU
1585227264,1585227775,UA
@@ -29665,9 +31972,11 @@
1585231872,1585233919,CZ
1585233920,1585238015,RU
1585238016,1585240063,DE
-1585240064,1585240575,FR
-1585240576,1585241855,MQ
-1585241856,1585242111,GP
+1585240064,1585240319,FR
+1585240320,1585240575,GP
+1585240576,1585240831,MQ
+1585240832,1585241087,FR
+1585241088,1585242111,MQ
1585242112,1585244159,RU
1585244160,1585246207,FR
1585246208,1585248255,RU
@@ -29713,7 +32022,8 @@
1585334272,1585336319,DE
1585336320,1585338367,SE
1585338368,1585340415,RU
-1585340416,1585342463,AT
+1585340416,1585340671,DE
+1585340672,1585342463,AT
1585342464,1585344511,GB
1585344512,1585346559,FR
1585346560,1585348607,GB
@@ -29791,9 +32101,7 @@
1586151424,1586159615,TR
1586159616,1586167807,MT
1586167808,1586175999,DE
-1586176000,1586177151,BE
-1586177152,1586177279,DE
-1586177280,1586184191,BE
+1586176000,1586184191,BE
1586184192,1586192383,NO
1586192384,1586200575,RU
1586200576,1586208767,MD
@@ -29934,11 +32242,17 @@
1589608448,1589608703,SE
1589608704,1589608959,DK
1589608960,1589609215,SE
-1589609216,1589611519,DK
+1589609216,1589609983,DK
+1589609984,1589610239,SE
+1589610240,1589610495,DK
+1589610496,1589611263,SE
+1589611264,1589611519,DK
1589611520,1589611775,SE
-1589611776,1589612287,DK
-1589612288,1589620735,SE
-1589620736,1589641215,DK
+1589611776,1589612031,DK
+1589612032,1589620991,SE
+1589620992,1589621247,DK
+1589621248,1589621503,SE
+1589621504,1589641215,DK
1589641216,1590034431,GB
1590034432,1590036479,RU
1590036480,1590038527,GB
@@ -30001,9 +32315,7 @@
1590165504,1590689791,AE
1590689792,1591214079,NL
1591214080,1591738367,DE
-1591738368,1591977471,BE
-1591977472,1591977599,NL
-1591977600,1592000511,BE
+1591738368,1592000511,BE
1592000512,1592004607,ES
1592004608,1592008703,AM
1592008704,1592012799,GB
@@ -30121,7 +32433,9 @@
1593147392,1593163775,RU
1593163776,1593180159,AT
1593180160,1593196543,NO
-1593196544,1593212927,SE
+1593196544,1593203103,SE
+1593203104,1593203135,FI
+1593203136,1593212927,SE
1593212928,1593229311,PL
1593229312,1593245695,EE
1593245696,1593247743,NL
@@ -30164,7 +32478,11 @@
1593421568,1593421823,GB
1593421824,1593422591,DE
1593422592,1593422847,GB
-1593422848,1593442303,DE
+1593422848,1593431167,DE
+1593431168,1593431295,GB
+1593431296,1593440511,DE
+1593440512,1593440767,GB
+1593440768,1593442303,DE
1593442304,1593475071,BA
1593475072,1593491455,HR
1593491456,1593499647,DE
@@ -30211,13 +32529,11 @@
1596932096,1596940543,CZ
1596940544,1596940799,RU
1596940800,1596941055,UA
-1596941056,1596941311,CZ
+1596941056,1596941311,BY
1596941312,1596942335,RU
1596942336,1596945407,UA
1596945408,1596945919,CZ
-1596945920,1596946175,RU
-1596946176,1596946431,NL
-1596946432,1596947455,RU
+1596945920,1596947455,RU
1596947456,1596948479,UA
1596948480,1596950527,BY
1596950528,1596950783,UA
@@ -30231,8 +32547,8 @@
1596954624,1596954879,RU
1596954880,1596955391,CZ
1596955392,1596955647,RU
-1596955648,1596956415,CZ
-1596956416,1596956671,RU
+1596955648,1596956159,CZ
+1596956160,1596956671,RU
1596956672,1596956927,CZ
1596956928,1596956963,DE
1596956964,1596956964,RU
@@ -30250,9 +32566,7 @@
1596963328,1596963839,CZ
1596963840,1596964095,KZ
1596964096,1596964607,CZ
-1596964608,1596965887,RU
-1596965888,1596966911,KG
-1596966912,1596967167,RU
+1596964608,1596967167,RU
1596967168,1596967423,CZ
1596967424,1596967935,RU
1596967936,1596968959,UA
@@ -30348,7 +32662,9 @@
1602230271,1602230271,DE
1602230272,1602232319,DK
1602232320,1602234367,CH
-1602234368,1602236415,FR
+1602234368,1602235967,FR
+1602235968,1602235999,ES
+1602236000,1602236415,FR
1602236416,1602238463,GB
1602238464,1602240511,TR
1602240512,1602242559,BY
@@ -30469,25 +32785,9 @@
1602781184,1602813951,FR
1602813952,1602846719,RU
1602846720,1602879487,GE
-1602879488,1602879488,MQ
-1602879489,1602879743,RE
-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,1602896383,MQ
-1602896384,1602896639,RE
-1602896640,1602896924,MQ
+1602879488,1602896924,MQ
1602896925,1602896925,RE
-1602896926,1602897407,MQ
-1602897408,1602897663,RE
-1602897664,1602907135,MQ
-1602907136,1602907391,RE
-1602907392,1602912255,MQ
+1602896926,1602912255,MQ
1602912256,1602928639,GB
1602928640,1602930687,HU
1602930688,1602932735,GB
@@ -30520,8 +32820,7 @@
1603081256,1603081263,FI
1603081264,1603081279,GB
1603081280,1603081295,US
-1603081296,1603081407,GB
-1603081408,1603081471,ES
+1603081296,1603081471,ES
1603081472,1603082239,GB
1603082240,1603082495,DE
1603082496,1603082751,GT
@@ -30570,9 +32869,8 @@
1603207168,1603215359,RU
1603215360,1603219455,DE
1603219456,1603223551,CH
-1603223552,1603225087,GB
-1603225088,1603225343,FR
-1603225344,1603227647,GB
+1603223552,1603223807,FR
+1603223808,1603227647,GB
1603227648,1603231743,AT
1603231744,1603235839,IT
1603235840,1603239935,RU
@@ -30582,11 +32880,7 @@
1603252224,1603256319,RU
1603256320,1603260415,SE
1603260416,1603264511,RU
-1603264512,1603266559,AT
-1603266560,1603266815,HU
-1603266816,1603267711,AT
-1603267712,1603267839,SK
-1603267840,1603268607,AT
+1603264512,1603268607,AT
1603268608,1603272703,PL
1603272704,1603796991,GB
1603796992,1603813375,RU
@@ -30666,15 +32960,11 @@
1605109432,1605109439,IT
1605109440,1605109495,GB
1605109496,1605109503,IT
-1605109504,1605109599,GB
-1605109600,1605109607,IT
-1605109608,1605109639,GB
+1605109504,1605109639,GB
1605109640,1605109647,IT
1605109648,1605110111,GB
1605110112,1605110119,IT
-1605110120,1605110167,GB
-1605110168,1605110175,IT
-1605110176,1605110263,GB
+1605110120,1605110263,GB
1605110264,1605110271,IT
1605110272,1605111023,GB
1605111024,1605111031,IT
@@ -30686,13 +32976,9 @@
1605111920,1605111927,IT
1605111928,1605111935,GB
1605111936,1605111943,IT
-1605111944,1605112647,GB
-1605112648,1605112655,IT
-1605112656,1605112847,GB
+1605111944,1605112847,GB
1605112848,1605112855,IT
-1605112856,1605112983,GB
-1605112984,1605112991,IT
-1605112992,1605113087,GB
+1605112856,1605113087,GB
1605113088,1605113095,IT
1605113096,1605113383,GB
1605113384,1605113391,IT
@@ -30700,7 +32986,13 @@
1605113408,1605113415,IT
1605113416,1605113503,GB
1605113504,1605113511,IT
-1605113512,1605114199,GB
+1605113512,1605113567,GB
+1605113568,1605113575,IT
+1605113576,1605113839,GB
+1605113840,1605113847,IT
+1605113848,1605114071,GB
+1605114072,1605114079,IT
+1605114080,1605114199,GB
1605114200,1605114207,IT
1605114208,1605114263,GB
1605114264,1605114271,IT
@@ -30716,14 +33008,14 @@
1605115600,1605115607,IT
1605115608,1605115863,GB
1605115864,1605115871,IT
-1605115872,1605115879,GB
-1605115880,1605115887,IT
-1605115888,1605115903,GB
+1605115872,1605115903,GB
1605115904,1605124095,RU
1605124096,1605125263,GB
1605125264,1605125267,DE
1605125268,1605125269,GB
-1605125270,1605125279,DE
+1605125270,1605125275,DE
+1605125276,1605125276,GB
+1605125277,1605125279,DE
1605125280,1605125903,GB
1605125904,1605125919,DE
1605125920,1605130239,GB
@@ -30778,37 +33070,30 @@
1605734537,1605735423,GB
1605735424,1605742591,RU
1605742592,1605744639,GB
-1605744640,1605750783,RU
-1605750784,1605751807,GB
-1605751808,1605763071,RU
-1605763072,1605765119,KZ
-1605765120,1605795839,RU
+1605744640,1605763071,RU
+1605763072,1605767167,KZ
+1605767168,1605795839,RU
1605795840,1605828607,BE
1605828608,1605828863,GB
-1605828864,1605830399,IL
+1605828864,1605829375,US
+1605829376,1605830399,IL
1605830400,1605830655,US
1605830656,1605840895,RU
1605840896,1605844991,CH
1605844992,1605861375,RU
1605861376,1605894143,TR
-1605894144,1606156287,RO
+1605894144,1606156287,SA
1606156288,1606418431,RU
1606418432,1606636287,SE
1606636288,1606636543,GB
1606636544,1607467007,SE
1607467008,1607532543,DE
-1607532544,1607562495,SE
-1607562496,1607562751,DK
-1607562752,1607569407,SE
+1607532544,1607569407,SE
1607569408,1607572479,DK
1607572480,1607575551,SE
1607575552,1607577599,GB
1607577600,1607581695,SE
-1607581696,1607584511,DK
-1607584512,1607584767,SE
-1607584768,1607585023,DK
-1607585024,1607585279,SE
-1607585280,1607595263,DK
+1607581696,1607595263,DK
1607595264,1607595519,SE
1607595520,1607598079,DK
1607598080,1607601919,IT
@@ -30835,14 +33120,13 @@
1607640807,1607647231,IT
1607647232,1607651327,DE
1607651328,1607655423,FR
-1607655424,1607660287,IT
-1607660288,1607660543,PT
-1607660544,1607663615,IT
+1607655424,1607663615,IT
1607663616,1607729151,NL
1607729152,1607737343,SY
-1607737344,1607761919,EG
-1607761920,1607766015,SY
-1607766016,1607794687,EG
+1607737344,1607745535,EG
+1607745536,1607766015,SY
+1607766016,1607778303,EG
+1607778304,1607794687,SY
1607794688,1607860223,RU
1607860224,1607892991,ES
1607892992,1607893055,GB
@@ -30923,15 +33207,17 @@
1611923456,1612185599,CA
1612185600,1612611327,US
1612611328,1612636159,CA
-1612636160,1613405695,US
-1613405696,1613405951,CA
-1613405952,1613471743,US
+1612636160,1613405183,US
+1613405184,1613405311,CA
+1613405312,1613471743,US
1613471744,1613479935,JM
1613479936,1613480191,CA
1613480192,1613488127,US
1613488128,1613492223,CA
1613492224,1613504511,US
-1613504512,1613529087,CA
+1613504512,1613522431,CA
+1613522432,1613522687,US
+1613522688,1613529087,CA
1613529088,1613545471,US
1613545472,1613565951,CA
1613565952,1613606911,US
@@ -30951,15 +33237,13 @@
1613742080,1613758463,US
1613758464,1614282751,CA
1614282752,1614741503,US
-1614741504,1614743039,CA
-1614743040,1614743295,US
-1614743296,1614757887,CA
+1614741504,1614743295,CA
+1614743296,1614743551,US
+1614743552,1614757887,CA
1614757888,1614774271,US
1614774272,1614786559,CA
1614786560,1618837503,US
-1618837504,1618840319,CA
-1618840320,1618840575,US
-1618840576,1618841599,CA
+1618837504,1618841599,CA
1618841600,1618849791,US
1618849792,1618850303,CA
1618850304,1618850559,US
@@ -30974,9 +33258,9 @@
1632354304,1632362495,CA
1632362496,1632978303,US
1632978304,1632978431,CA
-1632978432,1632979583,US
-1632979584,1632979711,CA
-1632979712,1634414591,US
+1632978432,1632979071,US
+1632979072,1632979199,CA
+1632979200,1634414591,US
1634414592,1634418687,CA
1634418688,1634447359,US
1634447360,1634451455,CA
@@ -30986,9 +33270,11 @@
1634467840,1634729983,CA
1634729984,1652293631,US
1652293632,1652310015,CA
-1652310016,1652447849,US
-1652447850,1652447850,CN
-1652447851,1652481279,US
+1652310016,1652447743,US
+1652447744,1652447999,CN
+1652448000,1652461823,US
+1652461824,1652462079,CN
+1652462080,1652481279,US
1652481280,1652481791,CN
1652481792,1653500927,US
1653500928,1653501439,IL
@@ -31010,9 +33296,7 @@
1654554624,1654558719,CA
1654558720,1654648831,US
1654648832,1654652927,CA
-1654652928,1656731007,US
-1656731008,1656731135,VI
-1656731136,1673527295,US
+1654652928,1673527295,US
1673527296,1673560063,CA
1673560064,1673580287,US
1673580288,1673580543,CA
@@ -31024,7 +33308,35 @@
1680535552,1680539647,CA
1680539648,1680564223,US
1680564224,1680572415,CA
-1680572416,1681915903,US
+1680572416,1680627199,US
+1680627200,1680627263,CA
+1680627264,1680646399,US
+1680646400,1680646655,CA
+1680646656,1680646911,US
+1680646912,1680647423,CA
+1680647424,1680651775,US
+1680651776,1680652031,CA
+1680652032,1680652351,US
+1680652352,1680652543,CA
+1680652544,1680732927,US
+1680732928,1680733183,CA
+1680733184,1680734719,US
+1680734720,1680734975,CA
+1680734976,1680749567,US
+1680749568,1680749695,CA
+1680749696,1680780927,US
+1680780928,1680781055,CA
+1680781056,1680781439,US
+1680781440,1680781567,CA
+1680781568,1680798591,US
+1680798592,1680798719,CA
+1680798720,1680801023,US
+1680801024,1680801151,CA
+1680801152,1680808703,US
+1680808704,1680808831,CA
+1680808832,1680814399,US
+1680814400,1680814463,PR
+1680814464,1681915903,US
1686110208,1694498815,US
1694498816,1694499839,CN
1694499840,1694500863,ID
@@ -31091,8 +33403,8 @@
1701003264,1701011455,MY
1701011456,1701019647,CN
1701019648,1701052415,GU
-1701052416,1701101567,NZ
-1701101568,1701117951,SG
+1701052416,1701093375,NZ
+1701093376,1701117951,SG
1701117952,1701134335,NC
1701134336,1701142527,CN
1701142528,1701143551,HK
@@ -31127,8 +33439,13 @@
1703411712,1703673855,TW
1703673856,1703935999,JP
1703936000,1704984575,CN
-1704984576,1705498623,AU
-1705498624,1705500671,GB
+1704984576,1705488383,AU
+1705488384,1705489407,HK
+1705489408,1705490431,SG
+1705490432,1705491455,GB
+1705491456,1705494527,HK
+1705494528,1705497599,SG
+1705497600,1705500671,GB
1705500672,1707081727,AU
1707081728,1707737087,CN
1707737088,1707802623,KR
@@ -31170,7 +33487,8 @@
1728140288,1728141311,SG
1728141312,1728142335,CN
1728142336,1728143359,NP
-1728143360,1728144383,MP
+1728143360,1728143615,GU
+1728143616,1728144383,MP
1728144384,1728145407,IN
1728145408,1728146431,MY
1728146432,1728147455,AU
@@ -31270,7 +33588,6 @@
1728316416,1728317439,MY
1728317440,1728319487,JP
1728319488,1728320511,AU
-1728321536,1728322559,JP
1728322560,1728323583,MY
1728323584,1728324607,JP
1728324608,1728325631,SG
@@ -31297,7 +33614,11 @@
1728346112,1728346367,AU
1728346368,1728346623,NZ
1728346624,1728347135,AU
-1728347136,1728348159,SG
+1728347136,1728347391,SG
+1728347392,1728347421,AU
+1728347422,1728347422,SG
+1728347423,1728347647,AU
+1728347648,1728348159,SG
1728348160,1728349183,VN
1728349184,1728349951,AU
1728349952,1728350207,NP
@@ -31633,19 +33954,17 @@
1728673792,1728674815,JP
1728674816,1728675839,ID
1728675840,1728676863,KR
-1728676864,1728677887,IN
1728677888,1728678911,BD
+1728678912,1728679935,PG
1728679936,1728680959,ID
1728680960,1728681983,MY
1728681984,1728683007,CN
-1728683008,1728684031,BD
1728684032,1728685055,AU
1728685056,1728686079,JP
1728686080,1728687103,AU
1728687104,1728689407,JP
1728689408,1728689663,BD
1728689664,1728689919,PK
-1728689920,1728690175,SG
1728690176,1728691199,BD
1728691200,1728692223,KH
1728692224,1728693247,JP
@@ -31726,7 +34045,6 @@
1728762880,1728763903,VN
1728763904,1728764927,KR
1728764928,1728765439,SG
-1728765440,1728765695,IN
1728765696,1728765951,ID
1728765952,1728766975,IN
1728766976,1728767999,TH
@@ -31826,7 +34144,7 @@
1728855040,1728856063,HK
1728856064,1728857087,MY
1728857088,1728858111,CN
-1728858112,1728860159,BD
+1728858112,1728859135,BD
1728860160,1728860671,ID
1728860672,1728861183,BD
1728861184,1728861439,ID
@@ -31849,7 +34167,6 @@
1728878592,1728879615,MY
1728879616,1728880127,IN
1728880128,1728880383,JP
-1728880384,1728880639,MY
1728880640,1728881663,KH
1728881664,1728881919,ID
1728881920,1728882175,AU
@@ -31879,7 +34196,6 @@
1728901632,1728902143,ID
1728902144,1728902399,SG
1728902400,1728902655,IN
-1728902656,1728902911,MY
1728902912,1728903167,BD
1728903168,1728905215,KR
1728905472,1728905727,PK
@@ -31910,7 +34226,6 @@
1728935936,1728936959,MY
1728936960,1728937983,CN
1728937984,1728939007,SG
-1728939008,1728939519,MY
1728939520,1728939775,PH
1728939776,1728940031,IN
1728940032,1728942079,JP
@@ -31952,7 +34267,6 @@
1728974848,1728976383,ID
1728976384,1728976895,AU
1728976896,1728977151,AF
-1728977664,1728977919,BD
1728977920,1728978943,MY
1728978944,1728979967,JP
1728979968,1728980991,MN
@@ -31967,12 +34281,11 @@
1728988160,1728988191,NZ
1728988192,1728988199,US
1728988200,1728989183,NZ
-1728989184,1728990207,BD
+1728989184,1728989695,BD
1728990208,1728990335,MY
1728990336,1728990463,ID
1728990464,1728990975,KR
1728990976,1728991231,SG
-1728991232,1728992255,BD
1728992256,1728993279,CN
1728993280,1728994303,PG
1728994304,1728995327,AU
@@ -32013,15 +34326,13 @@
1729029120,1729029375,AU
1729029376,1729029631,ID
1729029632,1729029887,AU
-1729029888,1729030143,PK
1729030144,1729031167,IN
1729031168,1729032191,SG
1729032192,1729033215,CN
1729033216,1729033727,SG
1729033728,1729034239,GB
1729034240,1729035263,KH
-1729035264,1729035519,SG
-1729035520,1729036287,AU
+1729035264,1729036287,AU
1729036288,1729037311,JP
1729037312,1729039359,CN
1729039360,1729040383,JP
@@ -32035,7 +34346,6 @@
1729047552,1729048575,AU
1729048576,1729049599,VN
1729049600,1729050623,IN
-1729050624,1729051647,JP
1729051648,1729053695,IN
1729053696,1729054719,JP
1729054720,1729055231,AU
@@ -32045,7 +34355,6 @@
1729056768,1729057791,IN
1729057792,1729058815,HK
1729058816,1729059839,TH
-1729059840,1729060863,JP
1729060864,1729061887,CN
1729061888,1729062911,SG
1729062912,1729063935,MY
@@ -32084,7 +34393,7 @@
1729090560,1729091583,JP
1729091584,1729092607,HK
1729092608,1729094143,BD
-1729094144,1729094655,IN
+1729094400,1729094655,IN
1729094656,1729095167,AU
1729095680,1729096703,SG
1729096704,1729097215,AU
@@ -32100,11 +34409,8 @@
1729105664,1729105919,VU
1729105920,1729106943,SG
1729106944,1729107967,NZ
-1729107968,1729108479,IN
-1729108480,1729108616,KR
-1729108617,1729108617,HK
-1729108618,1729108735,KR
-1729108736,1729108991,HK
+1729108480,1729108607,KR
+1729108608,1729108991,HK
1729108992,1729111039,IN
1729111040,1729112063,JP
1729112064,1729113087,MY
@@ -32200,7 +34506,6 @@
1729190912,1729191935,HK
1729191936,1729195007,IN
1729195008,1729195519,MN
-1729195520,1729196031,BD
1729196032,1729197055,GU
1729197056,1729198079,HK
1729198080,1729199103,CN
@@ -32259,7 +34564,7 @@
1729248256,1729249279,JP
1729249280,1729252351,IN
1729254400,1729255423,AU
-1729255424,1729256447,MY
+1729255424,1729257471,MY
1729257472,1729258495,ID
1729258496,1729259519,JP
1729259520,1729260543,IN
@@ -32375,7 +34680,7 @@
1729376768,1729377023,SG
1729377024,1729377279,ID
1729377280,1729378303,BD
-1729378304,1729378815,IN
+1729378560,1729378815,IN
1729379072,1729379327,SG
1729379328,1729380351,HK
1729380352,1729381375,IN
@@ -32388,14 +34693,13 @@
1729387008,1729387519,ID
1729387520,1729388543,SG
1729388544,1729389567,HK
-1729389568,1729389823,IN
1729390592,1729391103,IN
1729391104,1729391615,ID
1729391616,1729392639,JP
1729392640,1729393663,CN
1729393664,1729394687,KR
1729394688,1729395711,TH
-1729395712,1729395967,NR
+1729395712,1729395967,AU
1729395968,1729396735,IN
1729396736,1729397759,CN
1729397760,1729398783,PK
@@ -32745,7 +35049,6 @@
1729774592,1729775615,AU
1729775616,1729776127,IN
1729776128,1729776639,MY
-1729776640,1729777663,IN
1729777664,1729779711,PK
1729779712,1729780735,AU
1729780736,1729781759,HK
@@ -32754,7 +35057,6 @@
1729783552,1729783807,NZ
1729783808,1729785855,IN
1729785856,1729786879,BD
-1729786880,1729787903,JP
1729787904,1729789951,HK
1729789952,1729790975,ID
1729792000,1729793023,BD
@@ -32803,13 +35105,11 @@
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
@@ -32868,7 +35168,6 @@
1729884160,1729885183,CN
1729885184,1729886207,JP
1729886208,1729887743,ID
-1729887744,1729887999,VU
1729888000,1729888255,IN
1729888256,1729889279,KH
1729889280,1729891327,CN
@@ -33059,9 +35358,7 @@
1730082816,1730083839,PW
1730083840,1730084863,JP
1730084864,1730085887,CN
-1730085888,1730086143,AU
-1730086144,1730086399,ID
-1730086400,1730086911,AU
+1730085888,1730086911,AU
1730086912,1730087935,HK
1730087936,1730088959,JP
1730088960,1730091007,HK
@@ -33118,6 +35415,328 @@
1730147328,1730148351,JP
1730148352,1730149375,ID
1730149376,1730150399,JP
+1730150400,1730360319,CN
+1730412544,1730414591,AU
+1730414592,1730415615,ID
+1730415616,1730416127,AU
+1730416128,1730416639,ID
+1730416640,1730417663,PH
+1730417664,1730418687,CN
+1730418688,1730419711,BD
+1730419712,1730420735,CN
+1730420736,1730421759,ID
+1730421760,1730422783,CN
+1730422784,1730423807,ID
+1730423808,1730425855,IN
+1730425856,1730426879,HK
+1730426880,1730429951,CN
+1730429952,1730430207,ID
+1730430208,1730430463,AU
+1730430464,1730430719,HK
+1730430720,1730430975,IN
+1730430976,1730431999,CN
+1730432000,1730435071,IN
+1730435072,1730436095,HK
+1730436096,1730437119,SG
+1730437120,1730438143,CN
+1730438144,1730439167,BD
+1730439168,1730440191,IN
+1730440192,1730442239,HK
+1730442240,1730443263,TW
+1730443264,1730445311,IN
+1730445312,1730445567,NZ
+1730445568,1730446335,AU
+1730446336,1730448383,CN
+1730448384,1730449407,JP
+1730449408,1730450431,VU
+1730450432,1730450687,AU
+1730450688,1730450943,IN
+1730450944,1730451455,PH
+1730451456,1730452479,AU
+1730452480,1730453503,ID
+1730453504,1730476031,CN
+1730476032,1730476543,AU
+1730476544,1730476799,NZ
+1730476800,1730477055,IN
+1730477056,1730478079,AU
+1730478080,1730479103,CN
+1730479104,1730480127,HK
+1730480128,1730480639,AU
+1730480640,1730481151,JP
+1730481152,1730483199,CN
+1730483200,1730483711,IN
+1730483712,1730484223,AU
+1730484224,1730485247,CN
+1730485248,1730487295,VN
+1730487296,1730488319,TW
+1730488320,1730489343,HK
+1730489344,1730490367,CN
+1730490368,1730491391,PH
+1730491392,1730493439,CN
+1730493440,1730494463,HK
+1730494464,1730495487,JP
+1730495488,1730496511,AU
+1730496512,1730497535,CN
+1730497536,1730499583,IN
+1730499584,1730500607,HK
+1730500608,1730501631,IN
+1730501632,1730502655,JP
+1730502656,1730503167,MY
+1730503168,1730503423,ID
+1730503424,1730503679,AU
+1730503680,1730505727,CN
+1730505728,1730508799,JP
+1730508800,1730509823,AU
+1730509824,1730510847,CN
+1730510848,1730511871,AU
+1730511872,1730512895,JP
+1730512896,1730521087,CN
+1730521088,1730522111,ID
+1730522112,1730524159,CN
+1730524160,1730525183,IN
+1730525184,1730526207,HK
+1730526208,1730528255,JP
+1730528256,1730529279,SG
+1730529280,1730529791,IN
+1730529792,1730530303,AU
+1730530304,1730531327,NZ
+1730531328,1730535423,CN
+1730535424,1730536447,ID
+1730536448,1730536703,AU
+1730536704,1730537471,ID
+1730537472,1730538495,HK
+1730538496,1730540543,JP
+1730540544,1730541567,ID
+1730541568,1730544639,CN
+1730544640,1730545919,IN
+1730545920,1730546687,AU
+1730546688,1730547711,IN
+1730547712,1730548735,BD
+1730548736,1730549759,HK
+1730549760,1730550783,KR
+1730550784,1730551807,HK
+1730551808,1730552831,CN
+1730552832,1730553855,IN
+1730553856,1730555903,CN
+1730555904,1730556415,IN
+1730556416,1730556927,HK
+1730556928,1730557951,JP
+1730557952,1730558975,CN
+1730558976,1730559999,MY
+1730560000,1730561023,HK
+1730561024,1730562047,IN
+1730562048,1730563071,SG
+1730563072,1730564095,CN
+1730564096,1730565119,HK
+1730565120,1730566143,CN
+1730566144,1730566655,IN
+1730566656,1730567167,HK
+1730567168,1730569215,CN
+1730569216,1730570239,ID
+1730570240,1730571263,HK
+1730571264,1730572287,IN
+1730572288,1730573311,KH
+1730573312,1730574335,CN
+1730574336,1730575359,AU
+1730575360,1730577407,IN
+1730577408,1730578431,CN
+1730578432,1730579455,VN
+1730579456,1730580479,CN
+1730580480,1730580735,HK
+1730580736,1730580991,AU
+1730580992,1730581503,TW
+1730581504,1730582015,AU
+1730582016,1730582271,IN
+1730582272,1730582527,PH
+1730582528,1730585599,HK
+1730585600,1730586623,NZ
+1730586624,1730587647,HK
+1730587648,1730588671,PH
+1730588672,1730589695,IN
+1730589696,1730590719,JP
+1730590720,1730591743,SG
+1730591744,1730591999,PH
+1730592000,1730592767,IN
+1730592768,1730593791,MY
+1730593792,1730594815,NP
+1730594816,1730596863,IN
+1730596864,1730597887,JP
+1730597888,1730598911,PH
+1730598912,1730599423,AU
+1730599424,1730599935,VU
+1730599936,1730604031,CN
+1730605056,1730607103,IN
+1730607104,1730608127,JP
+1730608128,1730609151,CN
+1730609152,1730610687,IN
+1730610688,1730610943,MY
+1730610944,1730611199,SG
+1730611200,1730612223,IN
+1730612224,1730613247,ID
+1730613248,1730614271,CN
+1730614272,1730615295,NZ
+1730615296,1730616319,HK
+1730616320,1730617343,IN
+1730617344,1730618367,TW
+1730618368,1730619391,KR
+1730619392,1730619903,HK
+1730619904,1730620415,SG
+1730620416,1730621439,NZ
+1730621440,1730622719,ID
+1730622720,1730622975,AU
+1730622976,1730623231,IN
+1730623232,1730623487,AU
+1730623488,1730624511,HK
+1730624512,1730625535,AU
+1730625536,1730626559,CN
+1730626560,1730629631,HK
+1730629632,1730630655,PK
+1730630656,1730631679,AU
+1730631680,1730632703,CN
+1730632704,1730634751,VN
+1730634752,1730637823,CN
+1730637824,1730638079,AU
+1730638080,1730638335,JP
+1730638336,1730638847,NZ
+1730638848,1730639871,IN
+1730639872,1730640383,AU
+1730640384,1730640895,MY
+1730640896,1730641919,JP
+1730641920,1730643967,IN
+1730643968,1730644735,AU
+1730644736,1730644991,IN
+1730644992,1730646015,MY
+1730646016,1730647039,CN
+1730647040,1730649087,HK
+1730649088,1730650111,IN
+1730650112,1730658303,CN
+1730658304,1730660351,JP
+1730660352,1730669567,CN
+1730669568,1730670079,IN
+1730670080,1730670591,AU
+1730670592,1730672639,IN
+1730672640,1730673407,AU
+1730673408,1730673663,IN
+1730673664,1730674687,FM
+1730674688,1730675711,AU
+1730675712,1730677759,HK
+1730677760,1730686975,CN
+1730686976,1730687999,IN
+1730688000,1730688511,AU
+1730688512,1730689023,ID
+1730689024,1730692095,IN
+1730692096,1730692607,ID
+1730692608,1730693119,AU
+1730693120,1730694143,IN
+1730694144,1730695167,BD
+1730695168,1730695423,IN
+1730695424,1730695679,NZ
+1730695680,1730696191,BD
+1730696192,1730697215,HK
+1730697216,1730698239,CN
+1730698240,1730699263,ID
+1730699264,1730700287,JP
+1730700288,1730701311,CN
+1730701312,1730702335,JP
+1730702336,1730702591,ID
+1730702592,1730702847,AU
+1730702848,1730703359,HK
+1730703360,1730704383,CN
+1730704384,1730705407,TH
+1730705408,1730706431,ID
+1730706432,1730708479,JP
+1730708480,1730713599,TH
+1730713600,1730714623,HK
+1730714624,1730715647,JP
+1730715648,1730716671,HK
+1730716672,1730717183,PH
+1730717184,1730717695,AU
+1730717696,1730718719,IN
+1730718720,1730720767,HK
+1730720768,1730723839,TH
+1730723840,1730724863,CN
+1730724864,1730727935,IN
+1730727936,1730728959,HK
+1730728960,1730729983,CN
+1730729984,1730731007,JP
+1730731008,1730732031,CN
+1730732032,1730732287,AU
+1730732288,1730732543,HK
+1730732544,1730733055,BD
+1730733056,1730741247,CN
+1730741248,1730742271,HK
+1730742272,1730742783,AF
+1730742784,1730743295,IN
+1730743296,1730744319,SG
+1730744320,1730745343,CN
+1730745344,1730752511,IN
+1730752512,1730753535,HK
+1730753536,1730754559,CN
+1730754560,1730755071,IN
+1730755072,1730755583,TH
+1730755584,1730756607,JP
+1730756608,1730757631,HK
+1730757632,1730758655,SG
+1730758656,1730759679,JP
+1730759680,1730760703,SG
+1730760704,1730761727,HK
+1730761728,1730762751,TH
+1730762752,1730766847,IN
+1730766848,1730767871,HK
+1730767872,1730768127,AU
+1730768128,1730768639,ID
+1730768640,1730768895,BD
+1730768896,1730769919,JP
+1730769920,1730770943,CN
+1730770944,1730771967,ID
+1730771968,1730772991,HK
+1730772992,1730774015,SG
+1730774016,1730775039,HK
+1730775040,1730776063,JP
+1730776064,1730777087,CN
+1730777088,1730778111,IN
+1730778112,1730780159,CN
+1730780160,1730781183,AU
+1730781184,1730783231,CN
+1730783232,1730783487,IN
+1730783488,1730783743,ID
+1730783744,1730783999,IN
+1730784000,1730784255,ID
+1730784256,1730785279,HK
+1730785280,1730786303,AU
+1730786304,1730788351,HK
+1730788352,1730790399,ID
+1730790400,1730791423,IN
+1730791424,1730794495,ID
+1730794496,1730795007,BD
+1730795008,1730795519,IN
+1730795520,1730796543,AU
+1730796544,1730800639,CN
+1730800640,1730801663,IN
+1730801664,1730802687,JP
+1730802688,1730803199,BD
+1730803200,1730803711,ID
+1730803712,1730804735,HK
+1730804736,1730805759,JP
+1730805760,1730806783,AF
+1730806784,1730807807,JP
+1730807808,1730808831,CN
+1730808832,1730809855,HK
+1730809856,1730810623,IN
+1730810624,1730811903,AU
+1730811904,1730814975,CN
+1730814976,1730815999,HK
+1730816000,1730817023,ID
+1730817024,1730818047,JP
+1730818048,1730819071,AU
+1730819072,1730820095,JP
+1730820096,1730821119,VN
+1730821120,1730822143,HK
+1730822144,1730824191,CN
+1730824192,1730825215,IN
+1730825216,1730826239,CN
+1730826240,1730827263,JP
+1730827264,1730829311,IN
1742733312,1742734335,HK
1742734336,1742735359,IN
1742735360,1742736383,JP
@@ -33404,7 +36023,7 @@
1743026176,1743027199,BD
1743027200,1743028223,AU
1743028224,1743029247,CN
-1743029248,1743030271,AU
+1743029248,1743029503,AU
1743030272,1743031295,HK
1743031296,1743035391,IN
1743035392,1743036415,PK
@@ -33544,7 +36163,7 @@
1743163392,1743166463,IN
1743166464,1743167487,AU
1743167488,1743168511,HK
-1743168512,1743169535,IN
+1743169024,1743169535,IN
1743169536,1743170559,JP
1743170560,1743171583,KR
1743171584,1743172607,AU
@@ -33871,7 +36490,7 @@
1743506944,1743507455,IN
1743507456,1743509503,VN
1743509504,1743510527,HK
-1743510528,1743545343,CN
+1743510528,1743552511,CN
1743585280,1743589375,CN
1743589376,1743590399,AU
1743590400,1743591423,KR
@@ -33931,7 +36550,9 @@
1743681536,1743682559,AU
1743682560,1743683583,MY
1743683584,1743683839,JP
-1743683840,1743684607,HK
+1743683840,1743684095,AU
+1743684096,1743684351,HK
+1743684352,1743684607,AU
1743684608,1743685631,CN
1743685632,1743686655,ID
1743686656,1743688703,CN
@@ -33982,6 +36603,38 @@
1743740928,1743741951,CN
1743741952,1743742975,HK
1743742976,1743743487,NZ
+1743743488,1743743999,AU
+1743744000,1743745023,JP
+1743745024,1743746047,KR
+1743746048,1743748095,VN
+1743748096,1743748607,IN
+1743748608,1743748863,HK
+1743748864,1743749119,MY
+1743749120,1743751167,AU
+1743751168,1743755263,IN
+1743755264,1743757311,CN
+1743757312,1743758335,TO
+1743758336,1743758591,HK
+1743758592,1743758847,ID
+1743758848,1743759359,AU
+1743759360,1743761407,IN
+1743761408,1743764479,CN
+1743764480,1743765503,ID
+1743765504,1743767551,CN
+1743767552,1743768575,PH
+1743768576,1743770623,CN
+1743770624,1743770879,AU
+1743770880,1743771135,PH
+1743771136,1743771647,NZ
+1743771648,1743772671,JP
+1743772672,1743773695,SG
+1743773696,1743774719,CN
+1743774720,1743775743,NZ
+1743775744,1743776767,IN
+1743776768,1743778815,KR
+1743778816,1743779839,CN
+1743779840,1743780863,MY
+1743780864,1743781887,BD
1743781888,1743783935,JP
1743783936,1743784959,IN
1743784960,1743785983,JP
@@ -34166,7 +36819,8 @@
1743983616,1743984639,KR
1743984640,1743985663,CN
1743985664,1743994879,IN
-1743994880,1743995903,AU
+1743994880,1743995135,PG
+1743995136,1743995903,AU
1743995904,1743997951,IN
1743997952,1743999999,BD
1744000000,1744001023,AU
@@ -34231,15 +36885,15 @@
1744056576,1744056831,MY
1744056832,1744057087,NZ
1744057088,1744057343,ID
-1744057344,1744059391,HK
-1744059392,1744066559,CN
+1744057344,1744058879,HK
+1744058880,1744066559,CN
1744066560,1744067583,HK
1744067584,1744068607,JP
1744068608,1744069631,ID
1744069632,1744070655,SG
1744070656,1744071679,JP
1744071680,1744072703,KR
-1744072704,1744074751,JP
+1744072704,1744073727,JP
1744074752,1744076799,IN
1744076800,1744077823,AU
1744077824,1744078847,PK
@@ -34268,6 +36922,7 @@
1744101376,1744102399,HK
1744102400,1744103423,FJ
1744103424,1744104447,CN
+1744104448,1744105471,AU
1744105472,1744106751,IN
1744106752,1744107007,ID
1744107008,1744107519,SG
@@ -34354,7 +37009,7 @@
1744192512,1744194559,JP
1744194560,1744194815,ID
1744194816,1744195071,HK
-1744195072,1744195327,AU
+1744195072,1744195327,SG
1744195328,1744195583,HK
1744195584,1744196607,JP
1744196608,1744197631,IN
@@ -34514,7 +37169,7 @@
1744349184,1744350207,CN
1744350208,1744351231,IN
1744351232,1744352255,NZ
-1744352256,1744354303,HK
+1744353280,1744354303,HK
1744354304,1744355327,AU
1744355328,1744356351,CN
1744356352,1744357375,JP
@@ -34535,7 +37190,6 @@
1744370688,1744371711,HK
1744371712,1744372735,BD
1744372736,1744373759,IN
-1744373760,1744374783,JP
1744374784,1744375807,CN
1744375808,1744376831,IN
1744376832,1744377855,VN
@@ -34543,7 +37197,9 @@
1744378880,1744379903,KR
1744379904,1744380927,HK
1744380928,1744383999,IN
-1744384000,1744384039,AU
+1744384000,1744384000,AU
+1744384001,1744384031,GU
+1744384032,1744384039,AU
1744384040,1744384047,GU
1744384048,1744385023,AU
1744385024,1744386047,CN
@@ -34560,7 +37216,7 @@
1744395264,1744396287,MY
1744396288,1744397311,IN
1744397312,1744398335,VN
-1744398336,1744400383,HK
+1744399360,1744400383,HK
1744400384,1744402431,JP
1744402432,1744403455,IN
1744403456,1744404479,AU
@@ -34582,7 +37238,6 @@
1744425472,1744425727,ID
1744425728,1744425983,IN
1744425984,1744427007,JP
-1744427008,1744428031,PG
1744428032,1744429567,AU
1744429568,1744429823,IN
1744429824,1744430079,ID
@@ -34591,7 +37246,7 @@
1744434176,1744435199,CN
1744435200,1744436223,IN
1744436224,1744437247,CN
-1744437248,1744439295,JP
+1744438272,1744439295,JP
1744439296,1744439807,AU
1744439808,1744440319,IN
1744440320,1744441343,HK
@@ -34600,7 +37255,6 @@
1744443392,1744444415,VN
1744444416,1744445439,IN
1744445440,1744446463,CN
-1744446464,1744447487,JP
1744447488,1744447743,IN
1744447744,1744447999,HK
1744448000,1744448511,BD
@@ -34700,7 +37354,6 @@
1744547840,1744548863,AF
1744548864,1744549887,ID
1744549888,1744551935,IN
-1744551936,1744552959,JP
1744552960,1744553471,SG
1744553472,1744553983,HK
1744553984,1744555007,MY
@@ -34877,7 +37530,8 @@
1744733184,1744734207,NZ
1744734208,1744736255,AU
1744736256,1744737279,JP
-1744737280,1744738303,CN
+1744737280,1744738047,HK
+1744738048,1744738303,CN
1744738304,1744739327,SG
1744739328,1744740351,NZ
1744740352,1744741375,IN
@@ -34973,7 +37627,11 @@
1747219456,1747220479,CA
1747220480,1747227647,US
1747227648,1747228671,CA
-1747228672,1747256319,US
+1747228672,1747235839,US
+1747235840,1747236863,CA
+1747236864,1747255807,US
+1747255808,1747256063,CN
+1747256064,1747256319,US
1747256320,1747256575,IE
1747256576,1747256831,AU
1747256832,1747257087,AE
@@ -34989,6 +37647,7 @@
1747276800,1747283967,US
1747283968,1747284991,CA
1747284992,1747293183,US
+1747293184,1747294207,CA
1747294208,1747304447,US
1747304448,1747308543,CA
1747308544,1747316735,US
@@ -35030,7 +37689,11 @@
1754207488,1754207743,KI
1754207744,1754207999,MM
1754208000,1754208255,VU
-1754208256,1754208511,NA
+1754208256,1754208326,NA
+1754208327,1754208327,AO
+1754208328,1754208353,NA
+1754208354,1754208354,AO
+1754208355,1754208511,NA
1754208512,1754208767,DJ
1754208768,1754209023,BF
1754209024,1754209279,BW
@@ -35067,18 +37730,19 @@
1754258432,1754258687,MG
1754258688,1754258943,US
1754258944,1754259199,TN
-1754259200,1754792959,US
+1754259200,1754333183,US
+1754333184,1754337279,CA
+1754337280,1754792959,US
1754792960,1754793983,CA
1754793984,1754799103,US
1754799104,1754800127,CA
-1754800128,1754804223,US
-1754805248,1754822655,US
+1754800128,1754822655,US
1754822656,1754823679,CA
1754823680,1754830847,US
1754830848,1754831871,CA
1754831872,1754832895,US
-1754832896,1754836991,CA
-1754836992,1754845183,US
+1754832896,1754835967,CA
+1754835968,1754845183,US
1754845184,1754846207,CA
1754846208,1754849279,US
1754849280,1754850303,CA
@@ -35088,9 +37752,18 @@
1754863616,1754864639,CA
1754864640,1754869759,US
1754869760,1754870783,CA
+1754870784,1754871807,US
+1754871808,1754872831,CA
1754872832,1754890239,US
1754890240,1754892287,BB
-1754923008,1755062271,US
+1754892288,1754894335,CA
+1754894336,1754899455,US
+1754899456,1754900479,CA
+1754900480,1754911743,US
+1754911744,1754912767,CA
+1754912768,1754920959,US
+1754920960,1754921983,DM
+1754921984,1755062271,US
1755062272,1755066367,CA
1755066368,1755070463,US
1755070464,1755074559,CA
@@ -35126,14 +37799,327 @@
1755111168,1755111423,SD
1755111424,1755119615,US
1755119616,1755283455,CA
-1755283456,1755324415,US
-1755324416,1755328511,CA
-1755340800,1755348991,US
-1755357184,1755365375,US
-1755381760,1755512831,US
-1755512832,1755545599,CA
-1755578368,1755709439,US
-1762656256,1763704831,MU
+1755283456,1755365375,US
+1755365376,1755373567,CA
+1755373568,1755512831,US
+1755512832,1755578367,CA
+1755578368,1755717631,US
+1755717632,1755721727,BS
+1755721728,1755734271,US
+1755734272,1755734527,LB
+1755734528,1755734783,BS
+1755734784,1755735295,US
+1755735296,1755735551,KE
+1755735552,1755735807,MA
+1755735808,1755736063,CN
+1755736064,1755736319,US
+1755736320,1755736575,MX
+1755736576,1755736831,AW
+1755736832,1755737087,US
+1755737088,1755737343,GH
+1755737344,1755737599,IN
+1755737600,1755737855,MO
+1755737856,1755738111,MT
+1755738112,1755738367,QA
+1755738368,1755738623,YE
+1755738624,1755738879,GR
+1755738880,1755739135,US
+1755739136,1755739391,BH
+1755739392,1755739647,CO
+1755739648,1755739903,OM
+1755739904,1755740159,BN
+1755740160,1755740415,SC
+1755740416,1755740671,SY
+1755740672,1755741183,US
+1755741184,1755741439,PA
+1755741440,1755741695,BZ
+1755741696,1755741951,IM
+1755741952,1755742207,NG
+1755742208,1755799551,US
+1755799552,1755807743,CA
+1755807744,1755824127,US
+1755824128,1755824383,TV
+1755824384,1755824639,SY
+1755824640,1755824895,ZW
+1755824896,1755825151,TG
+1755825152,1755825407,GM
+1755825408,1755825663,AO
+1755825664,1755825919,LB
+1755825920,1755826175,MW
+1755826176,1755826431,CV
+1755826432,1755826687,TZ
+1755826688,1755826943,KM
+1755826944,1755827199,MN
+1755827200,1755827455,CG
+1755827456,1755827711,FM
+1755827712,1755827967,SB
+1755827968,1755828223,BI
+1755828224,1755828479,CD
+1755828480,1755828735,NE
+1755828736,1755828991,NP
+1755828992,1755829247,PK
+1755829248,1755829503,KZ
+1755829504,1755829759,OM
+1755829760,1755830015,CN
+1755830016,1755830271,ST
+1755830272,1755830527,LR
+1755830528,1755830783,JP
+1755830784,1755831039,SD
+1755831040,1755831295,MU
+1755831296,1755831551,GQ
+1755831552,1755831807,MK
+1755831808,1755832063,TL
+1755832064,1755832319,ML
+1755832320,1755832575,DZ
+1755832576,1755832831,MM
+1755832832,1755833087,NR
+1755833088,1755833343,SA
+1755833344,1755833599,IN
+1755833600,1755833855,BY
+1755833856,1755834111,SZ
+1755834112,1755834367,CN
+1755834368,1755834623,TN
+1755834624,1755834879,US
+1755834880,1755835135,PG
+1755835136,1755835391,US
+1755835392,1755835647,BA
+1755835648,1755835903,LS
+1755835904,1755836159,GN
+1755836160,1755836415,FJ
+1755836416,1755836671,MH
+1755836672,1755836927,SL
+1755836928,1755837183,LK
+1755837184,1755837439,MG
+1755837440,1755837695,ME
+1755837696,1755837951,MR
+1755837952,1755838207,SO
+1755838208,1755838463,UA
+1755838464,1755838719,LY
+1755838720,1755838975,TO
+1755838976,1755839231,TD
+1755839232,1755839487,MZ
+1755839488,1755839743,ZM
+1755839744,1755839999,ER
+1755840000,1755840255,AL
+1755840256,1755840511,RU
+1755840512,1756049407,US
+1756049408,1756053503,CA
+1756053504,1756086271,US
+1756086272,1756090367,CA
+1756090368,1757417471,US
+1757417472,1757419519,CA
+1757419520,1757424639,US
+1757424640,1757425663,CA
+1757425664,1757426687,US
+1757426688,1757427711,CA
+1757427712,1757443071,US
+1757443072,1757446143,CA
+1757446144,1757447167,US
+1757447168,1757448191,CA
+1757448192,1757450239,US
+1757450240,1757451263,CA
+1757451264,1757452287,US
+1757452288,1757453311,CA
+1757453312,1757457407,US
+1757457408,1757458431,CA
+1757458432,1757460479,US
+1757460480,1757462527,VI
+1757462528,1757472767,US
+1757472768,1757473791,CA
+1757473792,1757487103,US
+1757487104,1757489151,CA
+1757489152,1757491199,US
+1757491200,1757497343,CA
+1757497344,1757501439,US
+1757502464,1757503487,CA
+1757503488,1757505535,US
+1757505536,1757506559,CA
+1757506560,1757512703,US
+1757512704,1757513727,CA
+1757513728,1757522943,US
+1757522944,1757523967,CA
+1757523968,1757529087,US
+1757529088,1757530111,AI
+1757530112,1757532159,US
+1757532160,1757534207,CA
+1757534208,1757552639,US
+1757552640,1757560831,CA
+1757560832,1757642751,US
+1757642752,1757675519,CA
+1757675520,1757937663,US
+1757937664,1757941759,CA
+1757941760,1757958143,US
+1757958144,1757962239,CA
+1757962240,1757966335,BB
+1757966336,1758035967,US
+1758068736,1758265343,US
+1758265344,1758330879,CA
+1758330880,1758412799,US
+1758412800,1758413055,BG
+1758413056,1758413311,SE
+1758413312,1758413567,PS
+1758413568,1758414335,US
+1758414336,1758414591,LV
+1758414592,1758414847,IN
+1758414848,1758415103,GD
+1758415104,1758415359,GB
+1758415360,1758415615,FR
+1758415616,1758415871,CY
+1758415872,1758416127,IT
+1758416128,1758416383,US
+1758416384,1758416639,CF
+1758416640,1758416895,IL
+1758416896,1758417151,VC
+1758417152,1758417407,ID
+1758417408,1758417663,CL
+1758417664,1758417919,HK
+1758417920,1758418175,DE
+1758418176,1758418431,RU
+1758418432,1758418687,CN
+1758418688,1758418943,BL
+1758418944,1758419199,US
+1758419200,1758419455,CR
+1758419456,1758419711,EG
+1758419712,1758419967,VE
+1758419968,1758420223,US
+1758420224,1758420479,HU
+1758420480,1758420735,CH
+1758420736,1758420991,MM
+1758420992,1759126527,US
+1759127552,1759128575,US
+1759128576,1759129599,CA
+1759129600,1759131647,US
+1759131648,1759133695,CA
+1759133696,1759138815,US
+1759138816,1759139839,CA
+1759139840,1759140863,US
+1759140864,1759141887,CA
+1759141888,1759149055,US
+1759149056,1759150079,CA
+1759150080,1759160319,US
+1759160320,1759162367,BM
+1759162368,1759163391,BB
+1759163392,1759166463,US
+1759166464,1759167487,CA
+1759167488,1759168511,US
+1759170560,1759172607,US
+1759172608,1759173631,VC
+1759173632,1759178751,US
+1759178752,1759179775,PR
+1759179776,1759184895,US
+1759184896,1759186943,CA
+1759186944,1759188991,US
+1759188992,1759190015,VC
+1759190016,1759191039,PR
+1759191040,1759201279,US
+1759201280,1759202303,VG
+1759203328,1759208447,US
+1759208448,1759209471,CA
+1759209472,1759213567,US
+1759215616,1759217663,CA
+1759217664,1759222783,US
+1759222784,1759223807,CA
+1759223808,1759230975,US
+1759230976,1759233023,CA
+1759233024,1759234047,US
+1759234048,1759236095,CA
+1759236096,1759239167,US
+1759239168,1759240191,CA
+1759240192,1759244287,US
+1759248384,1759313919,US
+1759313920,1759346687,CA
+1759346688,1759395839,US
+1759399936,1759408127,US
+1759408128,1759412223,CA
+1759412224,1759412991,US
+1759412992,1759413247,AU
+1759413248,1759414271,US
+1759414272,1759414527,SE
+1759414528,1759415295,US
+1759415296,1759415551,SG
+1759415552,1759416575,US
+1759416576,1759416831,HK
+1759416832,1759417599,US
+1759417600,1759417855,FR
+1759417856,1759419391,US
+1759419392,1759419647,MX
+1759419648,1759510527,US
+1759510528,1759510783,VE
+1759510784,1759511039,AG
+1759511040,1759511295,GT
+1759511296,1759511551,VC
+1759511552,1759511807,PY
+1759511808,1759512063,JM
+1759512064,1759512319,MS
+1759512320,1759512575,GD
+1759512576,1759512831,LC
+1759512832,1759513087,HT
+1759513088,1759513343,EC
+1759513344,1759513599,KN
+1759513600,1759513855,SR
+1759513856,1759514111,NI
+1759514112,1759514367,BB
+1759514368,1759514623,PE
+1759514624,1759514879,KY
+1759514880,1759515135,TT
+1759515136,1759515391,GY
+1759515392,1759515647,BO
+1759515648,1759515903,CU
+1759515904,1759516159,DM
+1759516160,1759516415,SH
+1759516416,1759516671,BM
+1759516672,1759516927,FJ
+1759516928,1759517183,HN
+1759517184,1759517439,GL
+1759517440,1759517695,MQ
+1759517696,1759517951,GF
+1759517952,1759518207,MF
+1759518208,1759518463,BZ
+1759518464,1759518719,GP
+1759518720,1759518975,AW
+1759518976,1759519231,AI
+1759519232,1759519487,BL
+1759519488,1759519743,CO
+1759519744,1759519999,TC
+1759520000,1759520255,VG
+1759520256,1759520511,AX
+1759520512,1759520767,UM
+1759520768,1759521023,SV
+1759521024,1759521279,TK
+1759521280,1759521535,SJ
+1759521536,1759521791,PM
+1759521792,1759522047,GS
+1759522048,1759522303,DO
+1759522304,1759522559,RE
+1759522560,1759522815,PN
+1759522816,1759523071,MP
+1759523072,1759523327,NF
+1759523328,1759523583,US
+1759523584,1759523839,NU
+1759523840,1759524095,NC
+1759524096,1759524351,NL
+1759524352,1759524607,CX
+1759524608,1759524863,BS
+1759524864,1759525119,PF
+1759525120,1759525375,CK
+1759525376,1759525631,TF
+1759525632,1759525887,FK
+1759525888,1759526143,GG
+1759526144,1759526399,CC
+1759526400,1759526655,JE
+1759526656,1759526911,FO
+1759526912,1759535103,US
+1759535104,1759543295,CA
+1759543296,1759544319,US
+1759544320,1759559679,CA
+1759559680,1759608831,US
+1759641600,1760100351,US
+1760165888,1760231423,CA
+1760231424,1760362495,US
+1761607680,1762656255,ZA
+1762656256,1763000335,MU
+1763000336,1763000339,UG
+1763000340,1763704831,MU
1763704832,1764753407,EG
1764753408,1765801983,KE
1765801984,1766850559,MA
@@ -35194,8 +38180,8 @@
1793064960,1794113535,CN
1794113536,1795162111,KR
1795162112,1795387903,US
-1795387904,1795388159,CA
-1795388160,1795555839,US
+1795387904,1795388287,CA
+1795388288,1795555839,US
1795555840,1795555855,CA
1795555856,1795556351,US
1795556352,1795556607,CA
@@ -35229,7 +38215,27 @@
1795593728,1795595775,NL
1795595776,1795596287,US
1795596288,1795603455,NL
-1795603456,1805049855,US
+1795603456,1796253695,US
+1796253696,1796253951,CA
+1796253952,1796257919,US
+1796257920,1796258047,PR
+1796258048,1796262911,US
+1796262912,1796263167,PR
+1796263168,1796325375,US
+1796325376,1796325631,PR
+1796325632,1796402431,US
+1796402432,1796402559,CA
+1796402560,1796403199,US
+1796403200,1796403327,CA
+1796403328,1796404095,US
+1796404096,1796404223,CA
+1796404224,1796404735,US
+1796404736,1796404863,CA
+1796404864,1796406655,US
+1796406656,1796406783,CA
+1796406784,1805000058,US
+1805000059,1805000059,CA
+1805000060,1805049855,US
1805049856,1805058047,CA
1805058048,1805144063,US
1805144064,1805148159,CA
@@ -35243,7 +38249,20 @@
1805190400,1805190655,ES
1805190656,1805210623,US
1805210624,1805210879,EG
-1805210880,1805582335,US
+1805210880,1805251583,US
+1805251584,1805251839,DE
+1805251840,1805252095,GB
+1805252096,1805252351,DE
+1805252352,1805252607,GB
+1805252608,1805252863,DE
+1805252864,1805253119,GB
+1805253120,1805253375,DE
+1805253376,1805253631,GB
+1805253632,1805253887,DE
+1805253888,1805254143,GB
+1805254144,1805254399,DE
+1805254400,1805254655,GB
+1805254656,1805582335,US
1805582336,1805647871,CA
1805647872,1805713407,US
1805713408,1805717503,CA
@@ -35257,7 +38276,12 @@
1805752576,1805753087,CA
1805753088,1805754111,US
1805754112,1805754367,CA
-1805754368,1806174207,US
+1805754368,1806172159,US
+1806172160,1806172415,DE
+1806172416,1806172671,GB
+1806172672,1806172927,DE
+1806172928,1806173183,GB
+1806173184,1806174207,US
1806174208,1806174463,BR
1806174464,1806205183,US
1806205184,1806205439,CA
@@ -35275,8 +38299,7 @@
1807597568,1807646719,CA
1807646720,1807655679,US
1807655680,1807655935,IE
-1807655936,1807656191,LR
-1807656192,1807656447,CZ
+1807655936,1807656447,US
1807656448,1807656703,NL
1807656704,1807657983,US
1807657984,1807658239,SG
@@ -35312,12 +38335,17 @@
1815966976,1815967231,US
1815967232,1815967487,CA
1815967488,1815968255,US
-1815968256,1815968511,FR
-1815968512,1815968639,US
-1815968640,1815968767,FR
+1815968256,1815968767,FR
1815968768,1815969279,US
1815969280,1815969791,JP
-1815969792,1815987199,US
+1815969792,1815977983,US
+1815977984,1815979007,JP
+1815979008,1815980031,NL
+1815980032,1815980543,AU
+1815980544,1815981055,DE
+1815981056,1815982079,GB
+1815982080,1815982591,FR
+1815982592,1815987199,US
1815987200,1815987711,GB
1815987712,1815988223,NL
1815988224,1815988735,JP
@@ -35336,7 +38364,9 @@
1815996160,1815996415,CA
1815996416,1815997695,US
1815997696,1815997951,FR
-1815997952,1816001791,US
+1815997952,1816001279,US
+1816001280,1816001535,AU
+1816001536,1816001791,US
1816001792,1816002559,NL
1816002560,1816068095,US
1816068096,1816133631,CA
@@ -35360,23 +38390,26 @@
1822553856,1822554111,HK
1822554112,1822572543,US
1822572544,1822605311,CA
-1822605312,1822609407,US
-1822609408,1822609535,SG
-1822609536,1822611487,US
-1822611488,1822611551,CA
-1822611552,1822611967,US
-1822611968,1822612479,CA
-1822612480,1822614015,US
+1822605312,1822611514,US
+1822611515,1822611515,CA
+1822611516,1822614015,US
1822614016,1822614271,JP
1822614272,1822614783,US
1822614784,1822615039,FR
-1822615040,1822617855,US
+1822615040,1822615295,NO
+1822615296,1822617855,US
1822617856,1822618367,CA
-1822618368,1822618879,US
-1822618880,1822619391,CA
-1822619392,1822619903,US
-1822619904,1822620415,AU
-1822620416,1822654463,US
+1822618368,1822619135,US
+1822619136,1822619391,CA
+1822619392,1822619647,US
+1822619648,1822620415,AU
+1822620416,1822620927,US
+1822620928,1822621247,NO
+1822621248,1822621249,US
+1822621250,1822621250,NO
+1822621251,1822621263,US
+1822621264,1822621264,NO
+1822621265,1822654463,US
1822654464,1822662143,CA
1822662144,1822662399,US
1822662400,1822670847,CA
@@ -35422,9 +38455,7 @@
1831862272,1832124415,PT
1832124416,1832386559,IT
1832386560,1832517631,DK
-1832517632,1832582655,SE
-1832582656,1832582911,DK
-1832582912,1832583167,SE
+1832517632,1832583167,SE
1832583168,1832648703,DK
1832648704,1832681471,HR
1832681472,1832714239,RU
@@ -35433,26 +38464,12 @@
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,1832783871,FR
+1832780800,1832781311,MQ
+1832781312,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
+1832784640,1832786943,FR
+1832786944,1832787455,GF
+1832787456,1832791551,FR
1832791552,1832791807,YT
1832791808,1832794879,FR
1832794880,1832795135,GP
@@ -35460,15 +38477,17 @@
1832796416,1832796671,RE
1832796672,1832796927,FR
1832796928,1832797183,GP
-1832797184,1832798975,FR
-1832798976,1832799743,GP
-1832799744,1832801535,FR
-1832801536,1832802047,MQ
-1832802048,1832802559,FR
+1832797184,1832798463,FR
+1832798464,1832798719,GP
+1832798720,1832798975,FR
+1832798976,1832799231,GP
+1832799232,1832799743,FR
+1832799744,1832799999,GP
+1832800000,1832802559,FR
1832802560,1832802815,MQ
-1832802816,1832803839,FR
-1832803840,1832804351,MQ
-1832804352,1832812543,FR
+1832802816,1832803327,FR
+1832803328,1832803839,MQ
+1832803840,1832812543,FR
1832812544,1832845311,RU
1832845312,1832878079,BH
1832878080,1832878412,RU
@@ -35561,8 +38580,8 @@
1833357312,1833357587,GB
1833357588,1833357631,IE
1833357632,1833357823,GB
-1833357824,1833358079,IE
-1833358080,1833359359,GB
+1833357824,1833357903,IE
+1833357904,1833359359,GB
1833359360,1833361407,DE
1833361408,1833363455,GB
1833363456,1833365503,RU
@@ -35583,9 +38602,7 @@
1833398272,1833400319,DE
1833400320,1833402367,GB
1833402368,1833406463,FR
-1833406464,1833406719,GB
-1833406720,1833406975,LV
-1833406976,1833408511,GB
+1833406464,1833408511,GB
1833410560,1833412607,LU
1833412608,1833414655,GB
1833414656,1833416703,RU
@@ -35635,7 +38652,7 @@
1833545728,1833549823,IT
1833549824,1833553919,RU
1833553920,1833558015,CZ
-1833558016,1833562111,RO
+1833558016,1833562111,BG
1833562112,1833566207,PS
1833566208,1833570303,SE
1833570304,1833571583,NL
@@ -35766,9 +38783,7 @@
1835918440,1835918447,IT
1835918448,1835918519,GB
1835918520,1835918527,IT
-1835918528,1835918599,GB
-1835918600,1835918607,IT
-1835918608,1835918711,GB
+1835918528,1835918711,GB
1835918712,1835918719,IT
1835918720,1835918735,GB
1835918736,1835918743,IT
@@ -35776,51 +38791,41 @@
1835918824,1835918831,IT
1835918832,1835918847,GB
1835918848,1835918855,IT
-1835918856,1835919095,GB
-1835919096,1835919103,IT
-1835919104,1835919127,GB
+1835918856,1835919127,GB
1835919128,1835919135,IT
1835919136,1835919151,GB
1835919152,1835919159,IT
-1835919160,1835919751,GB
+1835919160,1835919327,GB
+1835919328,1835919335,IT
+1835919336,1835919751,GB
1835919752,1835919759,IT
1835919760,1835920479,GB
1835920480,1835920487,IT
-1835920488,1835921047,GB
-1835921048,1835921055,IT
-1835921056,1835921119,GB
+1835920488,1835920991,GB
+1835920992,1835920999,IT
+1835921000,1835921119,GB
1835921120,1835921127,IT
1835921128,1835921343,GB
1835921344,1835921351,IT
-1835921352,1835921463,GB
-1835921464,1835921471,IT
-1835921472,1835921711,GB
+1835921352,1835921711,GB
1835921712,1835921719,IT
1835921720,1835922415,GB
1835922416,1835922423,IT
-1835922424,1835922455,GB
-1835922456,1835922463,IT
-1835922464,1835922559,GB
+1835922424,1835922559,GB
1835922560,1835922567,IT
1835922568,1835922647,GB
1835922648,1835922655,IT
1835922656,1835923351,GB
1835923352,1835923359,IT
-1835923360,1835923487,GB
-1835923488,1835923495,IT
-1835923496,1835923863,GB
-1835923864,1835923871,IT
-1835923872,1835924375,GB
+1835923360,1835924375,GB
1835924376,1835924383,IT
-1835924384,1835925503,GB
+1835924384,1835925159,GB
+1835925160,1835925167,IT
+1835925168,1835925503,GB
1835925504,1835933695,LV
1835933696,1835942399,RU
1835942400,1835942655,UA
-1835942656,1835947775,RU
-1835947776,1835948031,UA
-1835948032,1835949055,RU
-1835949056,1835949311,UA
-1835949312,1835950079,RU
+1835942656,1835950079,RU
1835950080,1835958271,LB
1835958272,1835966463,HU
1835966464,1835974655,IR
@@ -35837,8 +38842,8 @@
1836580864,1836597247,RU
1836597248,1836598271,LU
1836598272,1836605439,FR
-1836605440,1836612607,LU
-1836612608,1836613631,DE
+1836605440,1836611583,LU
+1836611584,1836613631,DE
1836613632,1836626943,RU
1836626944,1836627967,NL
1836627968,1836630015,RU
@@ -35849,39 +38854,44 @@
1836687360,1836711935,BG
1836711936,1836728319,UA
1836728320,1836744703,RS
-1836744704,1836746495,FR
+1836744704,1836745983,FR
+1836745984,1836746239,RE
+1836746240,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
+1836747008,1836750335,FR
+1836750336,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
+1836751104,1836751359,RE
+1836751360,1836751871,FR
+1836751872,1836752127,RE
+1836752128,1836752639,FR
+1836752640,1836753151,RE
+1836753152,1836754175,FR
+1836754176,1836754431,RE
+1836754432,1836755199,FR
+1836755200,1836755711,RE
1836755712,1836755967,FR
1836755968,1836756223,RE
-1836756224,1836756479,FR
-1836756480,1836756991,RE
-1836756992,1836758015,FR
-1836758016,1836758527,RE
-1836758528,1836758783,FR
+1836756224,1836756735,FR
+1836756736,1836756991,RE
+1836756992,1836758783,FR
1836758784,1836759039,RE
1836759040,1836759551,FR
-1836759552,1836760575,RE
-1836760576,1836760831,FR
-1836760832,1836761087,RE
+1836759552,1836759807,RE
+1836759808,1836760063,FR
+1836760064,1836760831,RE
+1836760832,1836761087,FR
1836761088,1836777471,IR
1836777472,1836793855,SI
-1836793856,1836810239,GB
+1836793856,1836794567,GB
+1836794568,1836794587,FR
+1836794588,1836794588,GB
+1836794589,1836794592,FR
+1836794593,1836794594,GB
+1836794595,1836794595,FR
+1836794596,1836797951,GB
+1836797952,1836798207,DE
+1836798208,1836810239,GB
1836810240,1836826623,RU
1836826624,1836843007,CZ
1836843008,1836875775,RU
@@ -35940,8 +38950,12 @@
1840119808,1840152575,RU
1840152576,1840185343,GB
1840185344,1840218111,BA
-1840218112,1840316415,GB
-1840316416,1840381951,RO
+1840218112,1840232447,GB
+1840232448,1840232703,US
+1840232704,1840247007,GB
+1840247008,1840247023,NL
+1840247024,1840316415,GB
+1840316416,1840381951,AE
1840381952,1840447487,GR
1840447488,1840513023,NO
1840513024,1840644095,GB
@@ -35984,8 +38998,7 @@
1841669120,1841669375,PL
1841669376,1841669631,BE
1841669632,1841670143,UA
-1841670144,1841671935,PL
-1841671936,1841672191,GB
+1841670144,1841672191,PL
1841672192,1841674239,FR
1841674240,1841676287,PL
1841676288,1841680383,RU
@@ -36003,8 +39016,7 @@
1841758208,1841766399,PL
1841766400,1841774591,HU
1841774592,1841782783,PL
-1841782784,1841790975,RO
-1841790976,1841799167,BG
+1841782784,1841799167,BG
1841799168,1841807359,DE
1841807360,1841815551,NO
1841815552,1841823743,BG
@@ -36025,7 +39037,7 @@
1841897472,1841905663,RO
1841905664,1841922047,RU
1841922048,1841924351,NL
-1841924352,1841924607,DE
+1841924352,1841924607,GB
1841924608,1841925887,NL
1841925888,1841926143,DE
1841926144,1841930239,NL
@@ -36050,22 +39062,15 @@
1842044928,1842053119,GB
1842053120,1842069503,IR
1842069504,1842077695,RU
-1842077696,1842077951,FR
-1842077952,1842078207,MQ
-1842078208,1842078719,FR
-1842078720,1842078975,MQ
-1842078976,1842079487,FR
-1842079488,1842080767,MQ
+1842077696,1842078207,MQ
+1842078208,1842078463,FR
+1842078464,1842078975,MQ
+1842078976,1842079743,FR
+1842079744,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
+1842081024,1842083071,MQ
+1842083072,1842083327,GP
+1842083328,1842084607,MQ
1842084608,1842084863,GP
1842084864,1842085887,MQ
1842085888,1842118655,GB
@@ -36102,7 +39107,9 @@
1842206720,1842208767,SE
1842208768,1842210815,GB
1842210816,1842212863,LT
-1842212864,1842214911,CZ
+1842212864,1842213631,CZ
+1842213632,1842213887,SK
+1842213888,1842214911,CZ
1842214912,1842216959,RU
1842216960,1842225151,RO
1842225152,1842233343,UA
@@ -36133,9 +39140,7 @@
1843478528,1843494911,SE
1843494912,1843511295,IR
1843511296,1843527679,RU
-1843527680,1843539199,IL
-1843539200,1843539455,FR
-1843539456,1843544063,IL
+1843527680,1843544063,IL
1843544064,1843560447,RU
1843560448,1843576831,DE
1843576832,1843593215,RU
@@ -36179,7 +39184,6 @@
1843955712,1843957759,IT
1843957760,1843959807,CZ
1843959808,1843961855,GB
-1843961856,1843962111,DE
1843963904,1843965951,DE
1843965952,1843967999,GB
1843968000,1843970047,RU
@@ -36224,9 +39228,7 @@
1844068352,1844070399,ES
1844070400,1844072447,LU
1844072448,1844076543,ES
-1844076544,1844077055,GB
-1844077056,1844077567,IE
-1844077568,1844078591,GB
+1844076544,1844078591,GB
1844078592,1844080639,DE
1844080640,1844082687,GE
1844082688,1844084735,DE
@@ -36282,9 +39284,7 @@
1844174848,1844178943,DE
1844178944,1844180991,EE
1844180992,1844183039,TR
-1844183040,1844185087,IT
-1844185088,1844187135,CH
-1844187136,1844191231,IT
+1844183040,1844191231,IT
1844191232,1844195327,AL
1844199424,1844203519,RU
1844203520,1844207615,NL
@@ -36348,7 +39348,8 @@
1844772864,1844838399,RS
1844838400,1844903935,GB
1844903936,1844969471,NO
-1844969472,1845035007,RU
+1844969472,1845034751,RU
+1845034752,1845035007,BY
1845035008,1845100543,GB
1845100544,1845166079,DE
1845166080,1845231615,UA
@@ -36387,9 +39388,7 @@
1847757824,1847758847,CN
1847758848,1847770111,TH
1847770112,1847771135,SG
-1847771136,1847780351,TH
-1847780352,1847780607,CN
-1847780608,1847783423,TH
+1847771136,1847783423,TH
1847783424,1847787519,US
1847787520,1847803903,KR
1847803904,1847807999,VN
@@ -36584,8 +39583,7 @@
1868300288,1868333055,IN
1868333056,1868341247,PK
1868341248,1868345343,ID
-1868345344,1868346111,GU
-1868346112,1868346367,AU
+1868345344,1868346367,GU
1868346368,1868347391,TH
1868347392,1868348415,AU
1868348416,1868349439,KR
@@ -36725,9 +39723,7 @@
1888031232,1888034815,HK
1888034816,1888038911,JP
1888038912,1888040959,CN
-1888040960,1888041471,JP
-1888041472,1888041727,NZ
-1888041728,1888059391,JP
+1888040960,1888059391,JP
1888059392,1888063487,VN
1888063488,1888067583,JP
1888067584,1888071679,MY
@@ -36813,11 +39809,7 @@
1897267200,1897365503,VN
1897365504,1897398271,MY
1897398272,1897660415,CN
-1897660416,1897663487,HK
-1897663488,1897663743,GB
-1897663744,1897697279,HK
-1897697280,1897697535,AU
-1897697536,1897725951,HK
+1897660416,1897725951,HK
1897725952,1897730047,JP
1897730048,1897734143,AU
1897734144,1897738239,HK
@@ -36852,7 +39844,7 @@
1899273216,1899274239,JP
1899274240,1899282431,CN
1899282432,1899290623,KR
-1899290624,1899294719,AU
+1899292672,1899294719,AU
1899294720,1899298815,JP
1899298816,1899364351,TH
1899364352,1899724799,CN
@@ -36869,9 +39861,7 @@
1899850752,1899851775,VN
1899851776,1899855871,JP
1899855872,1899888639,TW
-1899888640,1902210559,CN
-1902210560,1902210815,MO
-1902210816,1904345087,CN
+1899888640,1904345087,CN
1904345088,1904361471,JP
1904361472,1904369663,KR
1904369664,1904375807,CN
@@ -36953,7 +39943,6 @@
1914601472,1914634239,KR
1914634240,1914642431,BD
1914642432,1914650623,KR
-1914652160,1914652415,MN
1914652672,1914654719,AU
1914654720,1914658815,JP
1914658816,1914660863,AU
@@ -37000,7 +39989,9 @@
1919918080,1919926271,CN
1919926272,1919942655,KR
1919942656,1919999999,CN
-1920000000,1920008191,HK
+1920000000,1920002047,HK
+1920002048,1920003071,CN
+1920003072,1920008191,HK
1920008192,1920057343,CN
1920057344,1920058111,HK
1920058112,1920072703,CN
@@ -37073,7 +40064,10 @@
1925640192,1925642239,ID
1925642240,1925644287,CN
1925644288,1925660671,KR
-1925660672,1925664767,HK
+1925660672,1925661439,TW
+1925661440,1925662207,HK
+1925662208,1925663743,TW
+1925663744,1925664767,HK
1925664768,1925677055,ID
1925677056,1926234111,KR
1926234112,1929379839,CN
@@ -37211,7 +40205,6 @@
1941438464,1941569535,IN
1941569536,1941618687,PK
1941618688,1941635071,AU
-1941635072,1941639167,IN
1941639168,1941643263,NP
1941643264,1941651455,IN
1941651456,1941655551,JP
@@ -37382,9 +40375,7 @@
1959104512,1959106559,AU
1959106560,1959108607,JP
1959110656,1959112703,JP
-1959112704,1959113215,HK
-1959113216,1959113471,IN
-1959113472,1959114751,HK
+1959112704,1959114751,HK
1959114752,1959115007,IN
1959115008,1959116799,HK
1959116800,1959133183,SG
@@ -37462,7 +40453,11 @@
1964120064,1964122111,JP
1964122112,1964122367,SG
1964122368,1964122879,JP
-1964122880,1964126207,SG
+1964122880,1964123135,HK
+1964123136,1964123391,GB
+1964123392,1964123647,US
+1964123648,1964123903,CN
+1964123904,1964126207,SG
1964126208,1964126463,HK
1964126464,1964130303,SG
1964130304,1964134399,HK
@@ -37694,7 +40689,7 @@
1991442432,1991499775,BD
1991499776,1991507967,NC
1991507968,1991835647,CN
-1991835648,1991901183,SG
+1991835648,1991901183,IN
1991901184,1992097791,CN
1992097792,1992163327,SG
1992163328,1992818687,CN
@@ -37718,7 +40713,9 @@
1996634112,1996636159,AU
1996636160,1996644351,ID
1996644352,1996652543,BT
-1996652544,1997078527,CN
+1996652544,1996685311,CN
+1996685312,1996750847,HK
+1996750848,1997078527,CN
1997078528,1997094911,AU
1997094912,1997144063,HK
1997144064,1997176831,CN
@@ -37789,9 +40786,14 @@
1998569472,1998577663,CN
1998577664,1998579711,AU
1998579712,1998581759,SG
-1998581760,1998584319,KR
+1998581760,1998584063,KR
+1998584064,1998584319,IN
1998584320,1998584575,OM
-1998584576,1998585855,KR
+1998584576,1998584831,IN
+1998584832,1998585087,ZA
+1998585088,1998585343,KR
+1998585344,1998585599,JP
+1998585600,1998585855,KR
1998585856,1999130623,CN
1999130624,1999134719,BD
1999134720,1999136767,MN
@@ -37849,13 +40851,15 @@
2001559552,2001567743,KR
2001567744,2001600511,TW
2001600512,2001797119,CN
-2001797120,2001798047,SG
+2001797120,2001797647,SG
+2001797648,2001797663,US
+2001797664,2001798047,SG
2001798048,2001798079,US
2001798080,2001798087,SG
2001798088,2001798095,US
-2001798096,2001798787,SG
-2001798788,2001798791,AU
-2001798792,2001799687,SG
+2001798096,2001798407,SG
+2001798408,2001798415,US
+2001798416,2001799687,SG
2001799688,2001799695,US
2001799696,2001799711,SG
2001799712,2001799743,US
@@ -37875,11 +40879,9 @@
2001801136,2001801151,US
2001801152,2001801339,SG
2001801340,2001801343,US
-2001801344,2001801615,SG
-2001801616,2001801623,NL
-2001801624,2001801663,SG
-2001801664,2001801703,US
-2001801704,2001801711,SG
+2001801344,2001801663,SG
+2001801664,2001801695,US
+2001801696,2001801711,SG
2001801712,2001801727,US
2001801728,2001801775,SG
2001801776,2001801807,US
@@ -37905,13 +40907,23 @@
2001803920,2001803935,US
2001803936,2001804015,SG
2001804016,2001804023,US
-2001804024,2001805943,SG
+2001804024,2001804295,SG
+2001804296,2001804303,US
+2001804304,2001805943,SG
2001805944,2001805951,US
-2001805952,2001809383,SG
+2001805952,2001806527,SG
+2001806528,2001806559,SA
+2001806560,2001807959,SG
+2001807960,2001807967,US
+2001807968,2001809039,SG
+2001809040,2001809047,US
+2001809048,2001809127,SG
+2001809128,2001809135,US
+2001809136,2001809383,SG
2001809384,2001809391,US
-2001809392,2001810495,SG
-2001810496,2001810527,MY
-2001810528,2001810559,SG
+2001809392,2001810111,SG
+2001810112,2001810143,US
+2001810144,2001810559,SG
2001810560,2001810623,MY
2001810624,2001812127,SG
2001812128,2001812159,SA
@@ -37919,9 +40931,7 @@
2001812256,2001812263,US
2001812264,2001812671,SG
2001812672,2001812675,GB
-2001812676,2001813655,SG
-2001813656,2001813663,AU
-2001813664,2001813783,SG
+2001812676,2001813783,SG
2001813784,2001813791,IN
2001813792,2001814431,SG
2001814432,2001814439,US
@@ -37929,25 +40939,27 @@
2001814576,2001814583,US
2001814584,2001815191,SG
2001815192,2001815199,US
-2001815200,2001817079,SG
-2001817080,2001817087,US
-2001817088,2001818639,SG
+2001815200,2001816071,SG
+2001816072,2001816079,US
+2001816080,2001816407,SG
+2001816408,2001816415,US
+2001816416,2001818063,SG
+2001818064,2001818071,US
+2001818072,2001818615,SG
+2001818616,2001818623,IN
+2001818624,2001818639,SG
2001818640,2001818647,US
-2001818648,2001818847,SG
-2001818848,2001818851,AU
-2001818852,2001819495,SG
-2001819496,2001819503,US
-2001819504,2001819887,SG
+2001818648,2001819703,SG
+2001819704,2001819711,US
+2001819712,2001819887,SG
2001819888,2001819895,IE
2001819896,2001819999,SG
2001820000,2001820031,IE
2001820032,2001820719,SG
2001820720,2001820727,CA
-2001820728,2001820991,SG
-2001820992,2001820999,US
-2001821000,2001821191,SG
-2001821192,2001821199,US
-2001821200,2001821335,SG
+2001820728,2001820871,SG
+2001820872,2001820879,US
+2001820880,2001821335,SG
2001821336,2001821343,US
2001821344,2001821367,SG
2001821368,2001821375,US
@@ -37955,234 +40967,57 @@
2001821424,2001821431,US
2001821432,2001821439,SG
2001821440,2001821447,US
-2001821448,2001821623,SG
-2001821624,2001821631,US
-2001821632,2001823007,SG
+2001821448,2001822263,SG
+2001822264,2001822271,US
+2001822272,2001823007,SG
2001823008,2001823015,US
-2001823016,2001823447,SG
+2001823016,2001823215,SG
+2001823216,2001823223,US
+2001823224,2001823303,SG
+2001823304,2001823311,US
+2001823312,2001823447,SG
2001823448,2001823455,US
2001823456,2001824175,SG
2001824176,2001824183,US
-2001824184,2001824287,SG
-2001824288,2001824295,US
-2001824296,2001824479,SG
-2001824480,2001824487,US
-2001824488,2001824495,SG
-2001824496,2001824503,KR
-2001824504,2001825183,SG
-2001825184,2001825215,US
-2001825216,2001825647,SG
-2001825648,2001825655,US
-2001825656,2001829891,SG
-2001829892,2001829903,US
-2001829904,2001830091,SG
-2001830092,2001830095,US
-2001830096,2001830175,SG
-2001830176,2001830191,US
-2001830192,2001830207,SG
-2001830208,2001830223,US
-2001830224,2001830335,SG
-2001830336,2001830351,US
-2001830352,2001830479,SG
-2001830480,2001830495,US
-2001830496,2001830567,SG
-2001830568,2001830575,US
-2001830576,2001830673,SG
-2001830674,2001830674,HK
-2001830675,2001830719,SG
-2001830720,2001830783,US
-2001830784,2001830927,SG
-2001830928,2001830935,US
-2001830936,2001830943,NL
-2001830944,2001830975,SG
-2001830976,2001830983,US
-2001830984,2001831007,SG
-2001831008,2001831015,US
-2001831016,2001831027,SG
-2001831028,2001831031,US
-2001831032,2001831163,SG
-2001831164,2001831167,US
-2001831168,2001831287,SG
-2001831288,2001831295,US
-2001831296,2001831331,SG
-2001831332,2001831335,US
-2001831336,2001831683,SG
-2001831684,2001831687,US
-2001831688,2001831691,SG
-2001831692,2001831703,US
-2001831704,2001831915,SG
-2001831916,2001831919,US
-2001831920,2001831943,SG
-2001831944,2001831951,US
-2001831952,2001831963,SG
-2001831964,2001831967,US
-2001831968,2001831992,SG
-2001831993,2001831993,US
-2001831994,2001832135,SG
-2001832136,2001832139,US
-2001832140,2001832147,SG
-2001832148,2001832151,US
-2001832152,2001832315,SG
-2001832316,2001832319,US
-2001832320,2001832443,SG
-2001832444,2001832447,US
-2001832448,2001832615,SG
-2001832616,2001832623,AZ
-2001832624,2001832751,SG
-2001832752,2001832759,IE
-2001832760,2001832879,SG
-2001832880,2001832887,US
-2001832888,2001832903,SG
-2001832904,2001832911,US
-2001832912,2001832951,SG
-2001832952,2001832955,US
-2001832956,2001833007,SG
+2001824184,2001824335,SG
+2001824336,2001824343,US
+2001824344,2001824543,SG
+2001824544,2001824551,PH
+2001824552,2001825247,SG
+2001825248,2001825255,US
+2001825256,2001825511,SG
+2001825512,2001825519,US
+2001825520,2001825623,SG
+2001825624,2001825631,US
+2001825632,2001826199,SG
+2001826200,2001826207,US
+2001826208,2001826639,SG
+2001826640,2001826671,US
+2001826672,2001826847,SG
+2001826848,2001826863,US
+2001826864,2001826911,SG
+2001826912,2001826943,US
+2001826944,2001827103,SG
+2001827104,2001827111,CA
+2001827112,2001827199,SG
+2001827200,2001827215,US
+2001827216,2001827551,SG
+2001827552,2001827567,PH
+2001827568,2001828351,SG
+2001828352,2001828367,US
+2001828368,2001828383,SG
+2001828384,2001828399,AU
+2001828400,2001828799,SG
+2001828800,2001828863,US
+2001828864,2001828927,SG
+2001828928,2001828991,US
+2001828992,2001829087,SG
+2001829088,2001829439,US
+2001829440,2001829887,SG
+2001829888,2001833007,HK
2001833008,2001833015,CN
-2001833016,2001833071,SG
-2001833072,2001833079,US
-2001833080,2001833099,SG
-2001833100,2001833103,US
-2001833104,2001833255,SG
-2001833256,2001833263,US
-2001833264,2001833419,SG
-2001833420,2001833421,US
-2001833422,2001833439,SG
-2001833440,2001833447,US
-2001833448,2001833487,SG
-2001833488,2001833495,US
-2001833496,2001833655,SG
-2001833656,2001833663,GB
-2001833664,2001833679,SG
-2001833680,2001833687,GB
-2001833688,2001833727,SG
-2001833728,2001833791,US
-2001833792,2001834096,SG
-2001834097,2001834097,US
-2001834098,2001834239,SG
-2001834240,2001834495,HK
-2001834496,2001834751,SG
-2001834752,2001834815,US
-2001834816,2001834935,SG
-2001834936,2001834943,JP
-2001834944,2001834947,US
-2001834948,2001835035,SG
-2001835036,2001835039,US
-2001835040,2001835103,SG
-2001835104,2001835135,US
-2001835136,2001835147,SG
-2001835148,2001835151,US
-2001835152,2001835231,SG
-2001835232,2001835239,US
-2001835240,2001835247,SG
-2001835248,2001835263,US
-2001835264,2001835515,SG
-2001835516,2001835519,US
-2001835520,2001835587,SG
-2001835588,2001835591,US
-2001835592,2001835711,SG
-2001835712,2001835719,US
-2001835720,2001835793,SG
-2001835794,2001835794,US
-2001835795,2001835795,SG
-2001835796,2001835799,US
-2001835800,2001835959,SG
-2001835960,2001835983,US
-2001835984,2001836107,SG
-2001836108,2001836111,US
-2001836112,2001836267,SG
-2001836268,2001836271,US
-2001836272,2001836291,SG
-2001836292,2001836295,US
-2001836296,2001836419,SG
-2001836420,2001836423,US
-2001836424,2001836427,SG
-2001836428,2001836431,US
-2001836432,2001836435,SG
-2001836436,2001836439,US
-2001836440,2001836451,SG
-2001836452,2001836455,US
-2001836456,2001836471,SG
-2001836472,2001836487,US
-2001836488,2001836506,SG
-2001836507,2001836507,US
-2001836508,2001836543,SG
-2001836544,2001838079,US
-2001838080,2001838627,SG
-2001838628,2001838631,US
-2001838632,2001838633,SG
-2001838634,2001838634,HK
-2001838635,2001838755,SG
-2001838756,2001838759,US
-2001838760,2001838763,SG
-2001838764,2001838767,US
-2001838768,2001838847,SG
-2001838848,2001839103,HK
-2001839104,2001839111,SG
-2001839112,2001839115,US
-2001839116,2001839535,SG
-2001839536,2001839543,US
-2001839544,2001839595,SG
-2001839596,2001839599,SA
-2001839600,2001839739,SG
-2001839740,2001839743,US
-2001839744,2001839775,SG
-2001839776,2001839783,US
-2001839784,2001839803,SG
-2001839804,2001839807,US
-2001839808,2001840057,SG
-2001840058,2001840059,SA
-2001840060,2001840071,SG
-2001840072,2001840079,US
-2001840080,2001840175,SG
-2001840176,2001840183,US
-2001840184,2001840767,SG
-2001840768,2001840799,US
-2001840800,2001841159,SG
-2001841160,2001841167,US
-2001841168,2001841175,SG
-2001841176,2001841176,US
-2001841177,2001841177,SA
-2001841178,2001841179,SG
-2001841180,2001841247,US
-2001841248,2001841279,SA
-2001841280,2001841311,SG
-2001841312,2001841319,US
-2001841320,2001841343,SG
-2001841344,2001841407,US
-2001841408,2001841639,SG
-2001841640,2001841647,US
-2001841648,2001842047,SG
-2001842048,2001842111,US
-2001842112,2001842175,SG
-2001842176,2001842271,US
-2001842272,2001842319,SG
-2001842320,2001842327,US
-2001842328,2001842343,SG
-2001842344,2001842351,US
-2001842352,2001842687,SG
-2001842688,2001842751,US
-2001842752,2001842783,SG
-2001842784,2001842815,US
-2001842816,2001843249,SG
-2001843250,2001843251,US
-2001843252,2001843471,SG
-2001843472,2001843475,US
-2001843476,2001843839,SG
-2001843840,2001843967,US
-2001843968,2001844127,SG
-2001844128,2001845247,US
-2001845248,2001845335,SG
-2001845336,2001845343,US
-2001845344,2001845359,SG
-2001845360,2001845375,US
-2001845376,2001845391,SG
-2001845392,2001845503,US
-2001845504,2001845695,SG
-2001845696,2001845703,US
-2001845704,2001845799,SG
-2001845800,2001845807,US
-2001845808,2001846015,SG
-2001846016,2001846311,US
+2001833016,2001846271,HK
+2001846272,2001846311,US
2001846312,2001846335,SG
2001846336,2001846359,US
2001846360,2001846479,SG
@@ -38731,7 +41566,9 @@
2019049472,2019078143,AU
2019078144,2019082239,IN
2019082240,2019098623,HK
-2019098624,2019115007,PH
+2019098624,2019106815,PH
+2019106816,2019107071,NO
+2019107072,2019115007,PH
2019115008,2019117055,US
2019117056,2019119103,IN
2019119104,2019121151,NZ
@@ -38915,7 +41752,7 @@
2047508480,2047574015,CN
2047574016,2047606783,SG
2047606784,2047803391,CN
-2047803392,2047868927,SG
+2047803392,2047868927,IN
2047868928,2048917503,JP
2048917504,2049966079,KR
2049966080,2050047999,CN
@@ -38928,8 +41765,7 @@
2050091008,2050097151,JP
2050097152,2050101247,SG
2050101248,2050113535,JP
-2050113536,2050129663,SG
-2050129664,2050129919,JP
+2050113536,2050129919,SG
2050129920,2050162687,IN
2050162688,2050228223,CN
2050228224,2050490367,PH
@@ -39064,18 +41900,13 @@
2060451840,2061500415,JP
2061500416,2063073279,CN
2063073280,2063077375,BD
-2063077376,2063077377,PH
-2063077378,2063077378,HK
-2063077379,2063077631,PH
-2063077632,2063079423,HK
+2063077376,2063079423,HK
2063079424,2063081471,CN
2063081472,2063085567,ID
2063085568,2063089663,CN
2063089664,2063097855,JP
2063097856,2063106047,MM
-2063106048,2063106559,SG
-2063106560,2063106815,AU
-2063106816,2063107071,SG
+2063106048,2063107071,SG
2063107072,2063107327,JP
2063107328,2063107623,SG
2063107624,2063107631,AU
@@ -39084,19 +41915,18 @@
2063110144,2063111167,JP
2063111168,2063114239,AU
2063114240,2063115263,IN
-2063115264,2063117311,JP
-2063117312,2063117567,NZ
-2063117568,2063117823,JP
+2063115264,2063117823,JP
2063117824,2063117839,PH
2063117840,2063117951,JP
2063117952,2063118079,PH
-2063118080,2063118335,JP
+2063118080,2063118159,JP
+2063118160,2063118191,PH
+2063118192,2063118335,JP
2063118336,2063118591,IN
2063118592,2063119871,JP
2063119872,2063120383,IN
-2063120384,2063120895,JP
-2063120896,2063121151,AU
-2063121152,2063122431,JP
+2063120384,2063121919,JP
+2063121920,2063122431,IN
2063122432,2063138815,SG
2063138816,2063335423,JP
2063335424,2063341567,AU
@@ -39320,7 +42150,11 @@
2083389440,2083454975,KR
2083454976,2083471359,CN
2083471360,2083487743,JP
-2083487744,2083504127,AU
+2083487744,2083491583,AU
+2083491584,2083491839,US
+2083491840,2083492863,AU
+2083492864,2083493375,US
+2083493376,2083504127,AU
2083504128,2083520511,JP
2083520512,2083966719,KR
2083966720,2083966975,JP
@@ -39345,7 +42179,6 @@
2087452672,2087453695,AU
2087453696,2087454719,KH
2087454720,2087456767,CN
-2087456768,2087457791,MY
2087458816,2087460863,FJ
2087460864,2087462911,JP
2087462912,2087464959,CN
@@ -39481,7 +42314,9 @@
2099216384,2099232767,KR
2099232768,2100297727,CN
2100297728,2100854783,JP
-2100854784,2100887551,US
+2100854784,2100874495,US
+2100874496,2100874751,AU
+2100874752,2100887551,US
2100887552,2100953087,KR
2100953088,2100969471,VN
2100969472,2100985855,JP
@@ -39543,13 +42378,9 @@
2112487424,2112618495,VN
2112618496,2112880639,NZ
2112880640,2113683455,KR
-2113683456,2113685759,JP
-2113685760,2113686015,MY
-2113686016,2113687807,JP
-2113687808,2113688063,AU
-2113688064,2113688319,JP
-2113688320,2113688575,SG
-2113688576,2113693599,JP
+2113683456,2113687999,JP
+2113688000,2113688031,AU
+2113688032,2113693599,JP
2113693600,2113693615,HK
2113693616,2113716223,JP
2113716224,2113724927,SG
@@ -39571,7 +42402,11 @@
2147489792,2147491839,RU
2147491840,2147494911,DE
2147494912,2147495167,RO
-2147495168,2147498239,DE
+2147495168,2147495423,DE
+2147495424,2147495935,RO
+2147495936,2147497215,DE
+2147497216,2147497471,RO
+2147497472,2147498239,DE
2147498240,2147498495,RO
2147498496,2147500031,DE
2147500032,2147501055,FR
@@ -39614,7 +42449,9 @@
2151778304,2151780351,RU
2151780352,2151782399,DE
2151782400,2151784447,ES
-2151784448,2151792639,IR
+2151784448,2151788479,IR
+2151788480,2151788495,IQ
+2151788496,2151792639,IR
2151792640,2151794687,CH
2151794688,2151796735,IT
2151796736,2151797759,DE
@@ -39683,9 +42520,7 @@
2155827200,2155831295,PL
2155831296,2155833343,RU
2155833344,2155833855,SE
-2155833856,2155834084,NL
-2155834085,2155834111,SE
-2155834112,2155834367,NL
+2155833856,2155834367,NL
2155834368,2155834464,SE
2155834465,2155834512,NL
2155834513,2155834532,SE
@@ -39731,7 +42566,9 @@
2159673344,2159869951,US
2159869952,2159935487,CA
2159935488,2160525311,US
-2160525312,2160590847,SG
+2160525312,2160533503,SG
+2160533504,2160541695,NL
+2160541696,2160590847,SG
2160590848,2160656383,US
2160721920,2160852991,US
2160852992,2160885759,RU
@@ -39744,9 +42581,7 @@
2160914432,2160918527,SA
2160918528,2161508351,US
2161508352,2161573887,FI
-2161573888,2162228223,US
-2162228224,2162228479,CA
-2162228480,2162687999,US
+2161573888,2162687999,US
2162688000,2162753535,GB
2162753536,2162819071,CA
2162819072,2162884607,RO
@@ -39780,10 +42615,11 @@
2166571008,2166575103,GB
2166575104,2166575359,US
2166575360,2166575615,GB
-2166575616,2166607009,US
+2166575616,2166606847,US
+2166606848,2166607009,GB
2166607010,2166607010,DE
-2166607011,2166607011,GB
-2166607012,2166613759,US
+2166607011,2166607103,GB
+2166607104,2166613759,US
2166613760,2166614015,DE
2166614016,2167209983,US
2167275520,2167930879,US
@@ -39855,7 +42691,9 @@
2178351104,2178416639,GB
2178416640,2178482175,US
2178482176,2178547711,DE
-2178547712,2179391487,US
+2178547712,2178900223,US
+2178900224,2178900479,NZ
+2178900480,2179391487,US
2179391488,2179391999,GB
2179392000,2179397632,US
2179397633,2179397633,GB
@@ -39993,15 +42831,21 @@
2188718582,2188718582,DE
2188718583,2188724463,US
2188724464,2188724464,NL
-2188724465,2188726783,US
+2188724465,2188724991,US
+2188724992,2188725247,RS
+2188725248,2188726783,US
2188726784,2188727039,GB
2188727040,2188728319,US
2188728320,2188728575,GB
2188728576,2188734463,US
2188734464,2188734719,FR
-2188734720,2188738306,US
+2188734720,2188736511,US
+2188736512,2188736767,GB
+2188736768,2188738306,US
2188738307,2188738307,GB
-2188738308,2188768767,US
+2188738308,2188749055,US
+2188749056,2188749311,SL
+2188749312,2188768767,US
2188768768,2188769279,YT
2188769280,2188902399,US
2188902400,2188967935,FR
@@ -40074,15 +42918,15 @@
2193707408,2193707415,IT
2193707416,2193707559,GB
2193707560,2193707567,IT
-2193707568,2193707615,GB
-2193707616,2193707623,IT
-2193707624,2193707751,GB
+2193707568,2193707655,GB
+2193707656,2193707663,IT
+2193707664,2193707751,GB
2193707752,2193707759,IT
-2193707760,2193707831,GB
-2193707832,2193707839,IT
-2193707840,2193708511,GB
-2193708512,2193708519,IT
-2193708520,2193708735,GB
+2193707760,2193708423,GB
+2193708424,2193708431,IT
+2193708432,2193708647,GB
+2193708648,2193708655,IT
+2193708656,2193708735,GB
2193708736,2193708743,IT
2193708744,2193709087,GB
2193709088,2193709095,IT
@@ -40140,9 +42984,7 @@
2197780480,2197782527,DE
2197782528,2197782685,RU
2197782686,2197782686,UA
-2197782687,2197782783,RU
-2197782784,2197783039,UA
-2197783040,2197786623,RU
+2197782687,2197786623,RU
2197786624,2197788671,IT
2197788672,2197790719,PL
2197790720,2197792767,SE
@@ -40168,7 +43010,7 @@
2197859328,2197860351,CL
2197860352,2197865471,BR
2197865472,2197866495,AR
-2197867520,2197869567,BR
+2197866496,2197869567,BR
2197869568,2197870591,UY
2197870592,2197874687,BR
2197874688,2197875711,AR
@@ -40180,24 +43022,83 @@
2202534912,2202540031,BR
2202540032,2202541055,PY
2202541056,2202542079,AR
-2202542080,2202550271,BR
+2202542080,2202552319,BR
2202552320,2202553343,AR
-2202554368,2202559487,BR
+2202553344,2202554367,TT
+2202554368,2202562559,BR
2202562560,2202563583,CW
-2202565632,2202566655,BR
+2202563584,2202567679,BR
2202567680,2202568703,AR
-2202569728,2202570751,BR
+2202568704,2202569727,NL
+2202569728,2202573823,BR
2202573824,2202574847,AR
-2202574848,2202578943,BR
+2202574848,2202576895,BR
+2202576896,2202577919,VE
+2202577920,2202586111,BR
+2202586112,2202587135,AR
+2202587136,2202588159,HN
+2202588160,2202589183,MX
+2202589184,2202591231,BR
+2202591232,2202592255,PA
+2202592256,2202593279,MX
+2202593280,2202595327,CL
+2202595328,2202596351,AR
+2202596352,2202599423,BR
2202599424,2204172287,US
2204172288,2204237823,SE
2204237824,2204303359,US
2204303360,2204368895,DE
+2204368896,2204369919,PA
+2204369920,2204376063,BR
+2204376064,2204377087,CL
+2204377088,2204378111,BR
+2204378112,2204379135,TT
+2204379136,2204385279,BR
+2204385280,2204386303,AR
+2204386304,2204391423,BR
+2204391424,2204392447,AR
+2204392448,2204394495,BR
+2204394496,2204395519,AR
+2204395520,2204396543,BR
+2204396544,2204397567,AR
+2204397568,2204404735,BR
+2204404736,2204405759,SV
+2204405760,2204409855,BR
+2204409856,2204410879,TT
+2204410880,2204414975,BR
+2204414976,2204415999,AR
+2204416000,2204417023,PY
+2204417024,2204420095,BR
+2204420096,2204421119,BO
+2204421120,2204434431,BR
2204434432,2204499967,US
2204499968,2204565503,CH
2204565504,2204631039,US
2204631040,2204696575,CA
2204696576,2204893183,US
+2204893184,2204894207,AR
+2204894208,2204895231,PA
+2204895232,2204897279,BR
+2204897280,2204898303,HN
+2204898304,2204899327,PA
+2204899328,2204902399,BR
+2204902400,2204903423,CR
+2204903424,2204904447,AR
+2204904448,2204910591,BR
+2204910592,2204911615,CL
+2204911616,2204913663,BR
+2204913664,2204914687,AR
+2204914688,2204929023,BR
+2204929024,2204930047,AR
+2204930048,2204936191,BR
+2204936192,2204937215,CO
+2204937216,2204942335,BR
+2204942336,2204943359,PY
+2204943360,2204946431,BR
+2204946432,2204947455,CL
+2204947456,2204952575,BR
+2204952576,2204953599,HN
+2204953600,2204958719,BR
2204958720,2205089791,US
2205089792,2205155327,GB
2205155328,2205286399,JP
@@ -40216,12 +43117,13 @@
2205538304,2205540351,RU
2205540352,2205548543,IQ
2205548544,2206269439,US
-2206269440,2206334975,CA
+2206269440,2206334975,HK
2206334976,2206400511,AT
2206400512,2206466047,US
2206466048,2207121407,CA
2207121408,2207449087,US
-2207449088,2207647487,CA
+2207449088,2207514623,HK
+2207514624,2207647487,CA
2207647488,2207647743,US
2207647744,2207648511,CA
2207648512,2207649791,US
@@ -40248,6 +43150,28 @@
2208038912,2208235519,US
2208235520,2208301055,DE
2208301056,2208366591,FI
+2208366592,2208379903,BR
+2208379904,2208380927,HN
+2208380928,2208381951,CL
+2208381952,2208387071,BR
+2208387072,2208388095,HN
+2208388096,2208389119,SX
+2208389120,2208390143,AR
+2208390144,2208392191,BR
+2208392192,2208393215,PE
+2208393216,2208404479,BR
+2208404480,2208405503,BZ
+2208405504,2208406527,AR
+2208406528,2208413695,BR
+2208413696,2208414719,AR
+2208414720,2208417791,BR
+2208417792,2208418815,CL
+2208418816,2208425983,BR
+2208425984,2208428031,AR
+2208428032,2208429055,BR
+2208429056,2208430079,MX
+2208430080,2208431103,BR
+2208431104,2208432127,PY
2208432128,2208563199,CA
2208563200,2208759807,DK
2208759808,2208890879,US
@@ -40280,11 +43204,30 @@
2211446784,2211643391,US
2211643392,2211708927,NL
2211708928,2211774463,US
-2211774464,2211839999,CA
+2211774464,2211839999,HK
2211840000,2212036607,US
2212036608,2212102143,AU
2212102144,2212233215,US
2212233216,2212298751,DE
+2212298752,2212299775,AR
+2212299776,2212300799,DO
+2212300800,2212301823,HN
+2212301824,2212302847,BR
+2212302848,2212303871,AR
+2212303872,2212304895,BR
+2212304896,2212305919,PA
+2212305920,2212306943,TT
+2212307968,2212308991,BR
+2212308992,2212310015,CO
+2212310016,2212315135,BR
+2212315136,2212316159,AR
+2212316160,2212335615,BR
+2212335616,2212336639,CW
+2212336640,2212337663,BR
+2212337664,2212338687,PE
+2212338688,2212340735,BR
+2212340736,2212341759,CL
+2212341760,2212364287,BR
2212364288,2212495359,US
2212495360,2212560895,NL
2212560896,2212691967,US
@@ -40321,13 +43264,16 @@
2214264832,2214330367,GB
2214330368,2214461439,US
2214461440,2214526975,FR
+2214526976,2214527999,BR
+2214528000,2214529023,AR
+2214529024,2214530047,BR
+2214530048,2214531071,AR
+2214531072,2214540287,BR
+2214541312,2214542335,BR
+2214542336,2214543359,AR
2214592512,2218786815,US
2218786816,2219769855,IL
-2219769856,2222521855,US
-2222521856,2222522111,PR
-2222522112,2223111679,US
-2223111680,2223111935,VI
-2223111936,2224160767,US
+2219769856,2224160767,US
2224160768,2224226303,GB
2224226304,2224242687,US
2224242688,2224259071,SG
@@ -40394,6 +43340,10 @@
2231107584,2231173119,DE
2231173120,2231238655,US
2231238656,2231304191,MX
+2231305216,2231306239,AR
+2231307264,2231309311,BR
+2231309312,2231310335,CO
+2231310336,2231311359,BR
2231369728,2248146943,JP
2248146944,2248148991,IT
2248148992,2248151039,ES
@@ -40438,7 +43388,9 @@
2250047488,2250113023,US
2250113024,2250178559,DE
2250178560,2250244095,CA
-2250244096,2250375167,US
+2250244096,2250282239,US
+2250282240,2250282495,GB
+2250282496,2250375167,US
2250375168,2250440703,DE
2250440704,2250506239,US
2250506240,2250571775,GB
@@ -40532,22 +43484,8 @@
2258580032,2258582783,TW
2258582784,2258582791,GB
2258582792,2258583551,TW
-2258583552,2258583575,GB
-2258583576,2258583583,TW
-2258583584,2258583775,GB
-2258583776,2258583807,TW
-2258583808,2258583935,GB
-2258583936,2258583967,TW
-2258583968,2258584007,GB
-2258584008,2258584351,TW
-2258584352,2258584383,GB
-2258584384,2258584574,TW
-2258584575,2258584575,GB
-2258584576,2258591575,TW
-2258591576,2258591579,GB
-2258591580,2258591631,TW
-2258591632,2258591639,GB
-2258591640,2258591935,TW
+2258583552,2258591743,GB
+2258591744,2258591935,TW
2258591936,2258591967,HK
2258591968,2258592271,TW
2258592272,2258592279,JP
@@ -40559,9 +43497,8 @@
2258592480,2258592495,AU
2258592496,2258592511,TW
2258592512,2258592767,AU
-2258592768,2258592791,TW
-2258592792,2258592803,HK
-2258592804,2258593279,TW
+2258592768,2258593023,HK
+2258593024,2258593279,TW
2258593280,2258593535,HK
2258593536,2258594047,TW
2258594048,2258594111,HK
@@ -40586,13 +43523,9 @@
2258596104,2258596159,TW
2258596160,2258596255,HK
2258596256,2258596351,TW
-2258596352,2258596863,HK
-2258596864,2258596887,TW
-2258596888,2258596903,HK
-2258596904,2258596991,TW
-2258596992,2258597023,HK
-2258597024,2258597115,TW
-2258597116,2258597215,HK
+2258596352,2258597071,HK
+2258597072,2258597079,TW
+2258597080,2258597215,HK
2258597216,2258597263,TW
2258597264,2258597293,HK
2258597294,2258597294,PG
@@ -40647,9 +43580,11 @@
2258599676,2258599679,JP
2258599680,2258599743,TW
2258599744,2258599747,AU
-2258599748,2258600263,TW
-2258600264,2258600267,HK
-2258600268,2258600515,TW
+2258599748,2258599935,TW
+2258599936,2258599971,HK
+2258599972,2258599975,AU
+2258599976,2258600447,HK
+2258600448,2258600515,TW
2258600516,2258600519,IN
2258600520,2258600523,TW
2258600524,2258600527,IN
@@ -40674,18 +43609,10 @@
2258601408,2258601423,AU
2258601424,2258601471,TW
2258601472,2258601983,JP
-2258601984,2258602303,TW
-2258602304,2258602327,HK
-2258602328,2258602335,TW
-2258602336,2258602367,HK
-2258602368,2258602399,TW
-2258602400,2258602447,HK
-2258602448,2258602479,TW
-2258602480,2258602495,HK
-2258602496,2258602815,TW
-2258602816,2258602879,HK
-2258602880,2258603007,TW
-2258603008,2258603071,HK
+2258601984,2258602239,TW
+2258602240,2258602495,HK
+2258602496,2258602751,TW
+2258602752,2258603071,HK
2258603072,2258603087,TW
2258603088,2258603089,HK
2258603090,2258603090,PG
@@ -40705,12 +43632,11 @@
2258603944,2258603951,TW
2258603952,2258603967,HK
2258603968,2258604031,TW
-2258604032,2258604287,HK
-2258604288,2258604671,TW
+2258604032,2258604543,HK
+2258604544,2258604671,TW
2258604672,2258604735,SG
2258604736,2258604799,AU
-2258604800,2258605055,HK
-2258605056,2258605311,TW
+2258604800,2258605311,HK
2258605312,2258605439,SG
2258605440,2258605823,TW
2258605824,2258605951,AU
@@ -40718,12 +43644,7 @@
2258606000,2258606015,AU
2258606016,2258606047,TW
2258606048,2258606079,AU
-2258606080,2258606143,TW
-2258606144,2258606147,HK
-2258606148,2258606151,TW
-2258606152,2258606191,HK
-2258606192,2258606199,TW
-2258606200,2258606367,HK
+2258606080,2258606367,HK
2258606368,2258606415,TW
2258606416,2258606423,HK
2258606424,2258606463,TW
@@ -40743,17 +43664,17 @@
2258607088,2258607091,AU
2258607092,2258607095,NZ
2258607096,2258607103,AU
-2258607104,2258607263,TW
+2258607104,2258607171,TW
+2258607172,2258607172,AU
+2258607173,2258607263,TW
2258607264,2258607279,AU
2258607280,2258607351,TW
2258607352,2258607359,NZ
2258607360,2258607519,AU
2258607520,2258607543,TW
2258607544,2258607551,AU
-2258607552,2258607819,TW
-2258607820,2258607823,HK
-2258607824,2258607871,TW
-2258607872,2258607879,HK
+2258607552,2258607615,TW
+2258607616,2258607879,HK
2258607880,2258607903,TW
2258607904,2258607999,HK
2258608000,2258608063,TW
@@ -40762,7 +43683,8 @@
2258608256,2258608259,JP
2258608260,2258608279,TW
2258608280,2258608283,JP
-2258608284,2258608639,TW
+2258608284,2258608383,TW
+2258608384,2258608639,HK
2258608640,2258608647,AU
2258608648,2258608655,TW
2258608656,2258608663,JP
@@ -40774,12 +43696,8 @@
2258608896,2258609087,TW
2258609088,2258609119,AU
2258609120,2258609151,TW
-2258609152,2258609407,AU
-2258609408,2258609423,TW
-2258609424,2258609471,AU
-2258609472,2258609567,TW
-2258609568,2258609575,AU
-2258609576,2258609919,TW
+2258609152,2258609663,AU
+2258609664,2258609919,TW
2258609920,2258609967,AU
2258609968,2258610179,TW
2258610180,2258610183,IN
@@ -40795,35 +43713,32 @@
2258611216,2258611223,NZ
2258611224,2258611567,TW
2258611568,2258611583,AU
-2258611584,2258612223,TW
+2258611584,2258611967,TW
+2258611968,2258612223,HK
2258612224,2258612303,AU
2258612304,2258612351,TW
2258612352,2258612367,AU
2258612368,2258612383,TW
2258612384,2258612743,AU
-2258612744,2258613503,TW
+2258612744,2258612767,TW
+2258612768,2258612799,AU
+2258612800,2258613503,TW
2258613504,2258613567,AU
2258613568,2258614783,TW
2258614784,2258614815,IN
2258614816,2258615039,TW
2258615040,2258615055,IN
-2258615056,2258615347,TW
-2258615348,2258615355,AU
-2258615356,2258615391,TW
-2258615392,2258615395,AU
-2258615396,2258616191,TW
+2258615056,2258615295,TW
+2258615296,2258615551,AU
+2258615552,2258616191,TW
2258616192,2258616203,AU
2258616204,2258616207,TW
2258616208,2258616303,AU
2258616304,2258616311,TW
2258616312,2258616319,AU
-2258616320,2258620447,TW
-2258620448,2258620455,HK
-2258620456,2258620463,TW
-2258620464,2258620467,HK
-2258620468,2258620471,TW
-2258620472,2258620475,HK
-2258620476,2258632703,TW
+2258616320,2258620415,TW
+2258620416,2258621951,HK
+2258621952,2258632703,TW
2258632704,2258698239,JP
2258698240,2259222527,US
2259222528,2259288063,DE
@@ -40842,23 +43757,21 @@
2260467712,2260533247,NL
2260533248,2260598783,US
2260598784,2260664319,CA
-2260664320,2260720895,GB
-2260720896,2260721151,DE
-2260721152,2260723711,GB
+2260664320,2260720639,GB
+2260720640,2260720895,DE
+2260720896,2260723711,GB
2260723712,2260723967,IL
2260723968,2260729343,GB
2260729344,2260729599,IL
2260729600,2260729855,GB
2260729856,2260926463,US
-2260992000,2261057535,CN
+2260992000,2261057535,TH
2261057536,2261188607,US
2261188608,2261254143,CA
2261254144,2261385215,US
2261385216,2261450751,PR
2261450752,2261516287,NL
-2261516288,2261569535,US
-2261569536,2261569791,TH
-2261569792,2261647359,US
+2261516288,2261647359,US
2261647360,2261712895,FR
2261712896,2261778431,US
2261778432,2261843967,TW
@@ -40907,15 +43820,19 @@
2276786176,2276851711,CA
2276851712,2277769215,US
2277769216,2277834751,GB
-2277834752,2281007103,US
+2277834752,2280998911,US
+2280998912,2280999167,FR
+2280999168,2281007103,US
2281007104,2281007359,IN
-2281007360,2281023487,US
+2281007360,2281010159,US
+2281010160,2281010175,SG
+2281010176,2281023487,US
2281023488,2281023743,IN
2281023744,2281029631,US
2281029632,2281029887,FR
2281029888,2281037823,US
-2281037824,2281038079,FR
-2281038080,2281701375,US
+2281037824,2281037951,FR
+2281037952,2281701375,US
2281701376,2281705471,CH
2281705472,2282226175,US
2282226176,2282226243,AU
@@ -40945,9 +43862,7 @@
2292973568,2293039103,DE
2293039104,2293080575,LU
2293080576,2293080831,BE
-2293080832,2293085183,LU
-2293085184,2293085439,BE
-2293085440,2293104639,LU
+2293080832,2293104639,LU
2293104640,2293825535,US
2293825536,2293891071,IN
2293891072,2293956607,AU
@@ -40970,7 +43885,11 @@
2297298944,2297364479,CH
2297364480,2297626623,US
2297626624,2297692159,DE
-2297692160,2299461631,US
+2297692160,2298144255,US
+2298144256,2298144511,GB
+2298144512,2298371071,US
+2298371072,2298371327,GB
+2298371328,2299461631,US
2299461632,2299527167,CA
2299527168,2299592703,US
2299592704,2299658239,NL
@@ -40997,7 +43916,7 @@
2303189558,2303189558,IE
2303189559,2303262719,US
2303262720,2303328255,GB
-2303328256,2303393791,CA
+2303328256,2303393791,HK
2303393792,2303459327,US
2303459328,2303524863,AU
2303524864,2303852543,US
@@ -41158,17 +44077,18 @@
2321874944,2321940479,JP
2321940480,2322006015,FR
2322006016,2322071551,US
-2322071552,2322137087,GB
+2322071552,2322130431,GB
+2322130432,2322130687,SG
+2322130688,2322137087,GB
2322137088,2322202623,US
2322202624,2322268159,SE
2322268160,2322333695,JP
2322333696,2322923519,US
2323054592,2323120127,CA
2323316736,2323382271,US
-2323382272,2323406847,NO
-2323406848,2323407103,DK
-2323407104,2323447807,NO
-2323447808,2323775487,US
+2323382272,2323447807,NO
+2323447808,2323693567,US
+2323709952,2323775487,US
2323775488,2323841023,AU
2323841024,2323906559,CH
2323906560,2323972095,IT
@@ -41214,7 +44134,13 @@
2330525696,2330591231,SE
2330591232,2330656767,US
2330656768,2330722303,NZ
-2330722304,2331181055,US
+2330722304,2330956287,US
+2330956288,2330956543,GB
+2330956544,2330956799,US
+2330956800,2330957311,NZ
+2330957312,2330968063,US
+2330968064,2330968319,IN
+2330968320,2331181055,US
2331181056,2331246591,JP
2331246592,2331443199,DE
2331443200,2331508735,US
@@ -41224,7 +44150,9 @@
2331836416,2331901951,GB
2331901952,2331967487,US
2332033024,2332098559,ID
-2332098560,2332360703,DE
+2332098560,2332298751,DE
+2332298752,2332298879,GB
+2332298880,2332360703,DE
2332426240,2332622847,DE
2332622848,2332688383,CN
2332688384,2332753919,NL
@@ -41348,7 +44276,6 @@
2344353792,2344419327,AU
2344419328,2344484863,CN
2344484864,2344550399,PK
-2344609024,2344609279,IT
2344615936,2344878079,ID
2344878080,2346188799,CN
2346188800,2346254335,AU
@@ -41513,12 +44440,17 @@
2372075520,2372206591,DE
2372206592,2372214783,UA
2372214784,2372218879,DE
-2372218880,2372222975,FR
+2372218880,2372222463,FR
+2372222464,2372222975,CH
2372224512,2372224767,GB
-2372227072,2372227583,NO
-2372230400,2372230655,AT
-2372231424,2372231679,HU
+2372227072,2372227327,NO
+2372227500,2372227510,NO
+2372227520,2372227522,NO
+2372227571,2372227571,NO
+2372228352,2372228607,KR
+2372230400,2372230655,RU
2372231680,2372232191,GB
+2372233472,2372233727,NO
2372238730,2372238730,US
2372239360,2372240383,SK
2372240384,2372240895,NL
@@ -41540,7 +44472,8 @@
2372493312,2372497407,ES
2372497408,2372499455,IE
2372499456,2372501503,NL
-2372501504,2372505599,UA
+2372501504,2372503551,BG
+2372503552,2372505599,UA
2372505600,2372507647,NL
2372507648,2372509695,IT
2372509696,2372510207,AE
@@ -41548,7 +44481,9 @@
2372510336,2372510336,ES
2372510337,2372510463,AO
2372510464,2372511743,AE
-2372511744,2372513791,SI
+2372511744,2372512815,SI
+2372512816,2372512816,BA
+2372512817,2372513791,SI
2372513792,2372534271,GB
2372534272,2372665343,US
2372665344,2372730879,IT
@@ -41573,11 +44508,7 @@
2373911042,2373911042,US
2373911043,2373976063,FI
2373976064,2374107135,US
-2374107136,2374171135,DE
-2374171136,2374171206,CH
-2374171207,2374171207,DE
-2374171208,2374171391,CH
-2374171392,2374172671,DE
+2374107136,2374172671,DE
2374172672,2374238207,US
2374238208,2374303743,AU
2374303744,2374369279,US
@@ -41620,7 +44551,9 @@
2375155712,2375221247,US
2375221248,2375286783,SE
2375286784,2375352319,CH
-2375352320,2376269823,US
+2375352320,2376079615,US
+2376079616,2376079871,GB
+2376079872,2376269823,US
2376269824,2376335359,GB
2376335360,2376597503,US
2376597504,2376663039,AU
@@ -41647,7 +44580,11 @@
2378026240,2378026495,US
2378026496,2378027007,FR
2378027008,2378170367,US
-2378170368,2378235903,FI
+2378170368,2378203135,FI
+2378203136,2378203647,NO
+2378203648,2378210559,FI
+2378210560,2378211071,NO
+2378211072,2378235903,FI
2378235904,2378301439,US
2378301440,2378366975,FR
2378366976,2378432511,US
@@ -41674,9 +44611,7 @@
2380558848,2380559103,ZA
2380559104,2380578815,GB
2380578816,2380579071,JP
-2380579072,2380579327,GB
-2380579328,2380579583,HK
-2380579584,2380595199,GB
+2380579072,2380595199,GB
2380660736,2380726271,US
2380726272,2380791807,GB
2380791808,2381119487,US
@@ -41695,8 +44630,10 @@
2382168064,2382233599,BE
2382233600,2382299135,US
2382299136,2382331903,GR
-2382331904,2382335999,FR
-2382336000,2382340095,NL
+2382331904,2382336255,FR
+2382336256,2382337791,NL
+2382337792,2382338047,FR
+2382338048,2382340095,NL
2382340096,2382342143,CH
2382342144,2382344191,AT
2382344192,2382346239,NL
@@ -41723,7 +44660,9 @@
2382659072,2382676479,US
2382676480,2382676991,CA
2382676992,2382677503,US
-2382677504,2382677987,CA
+2382677504,2382677507,CA
+2382677508,2382677511,BY
+2382677512,2382677987,CA
2382677988,2382677991,US
2382677992,2382678015,CA
2382678016,2382678527,US
@@ -41746,15 +44685,13 @@
2386690048,2386988287,CA
2386988288,2386988543,CH
2386988544,2386989055,CA
-2386989056,2386989311,GB
+2386989056,2386989311,CH
2386989312,2387003391,CA
-2387003392,2387003647,GB
+2387003392,2387003647,CH
2387003648,2387003903,CA
-2387003904,2387004159,GB
+2387003904,2387004159,CH
2387004160,2387344127,CA
-2387344128,2387344895,US
-2387344896,2387345151,CA
-2387345152,2387345407,US
+2387344128,2387345407,US
2387345408,2387410943,CA
2387410944,2387476479,US
2387476480,2387542015,CA
@@ -41773,23 +44710,21 @@
2390818816,2390884351,US
2390884352,2390995455,CA
2390995456,2391015423,US
-2391015424,2391277567,CA
+2391015424,2391165439,CA
+2391165440,2391165695,US
+2391165696,2391277567,CA
2391277568,2391343103,US
-2391343104,2393044095,CA
-2393044096,2393044223,US
-2393044224,2394947583,CA
+2391343104,2393313407,CA
+2393313408,2393313535,US
+2393313536,2394947583,CA
2394947584,2395013119,US
2395013120,2395209727,CA
2395209728,2395340799,US
-2395340800,2395804159,CA
-2395804160,2395804415,GB
-2395804416,2395814911,CA
+2395340800,2395814911,CA
2395814912,2395815167,US
2395815168,2395841023,CA
2395841024,2395841535,GB
-2395841536,2395854079,CA
-2395854080,2395854335,US
-2395854336,2397700095,CA
+2395841536,2397700095,CA
2397700096,2397765631,US
2397765632,2398748671,CA
2398748672,2398945279,US
@@ -41987,7 +44922,9 @@
2427322368,2427453439,US
2427453440,2427536895,NO
2427536896,2427537151,US
-2427537152,2427584511,NO
+2427537152,2427544319,NO
+2427544320,2427544575,MY
+2427544576,2427584511,NO
2427584512,2427650047,GB
2427650048,2427846655,NO
2427846656,2428174335,US
@@ -42014,9 +44951,7 @@
2432172032,2432237567,BE
2432237568,2432568575,US
2432568576,2432568831,BE
-2432568832,2432577535,US
-2432577536,2432577791,GB
-2432577792,2432587263,US
+2432568832,2432587263,US
2432587264,2432587519,IE
2432587520,2432616447,US
2432616448,2432617471,NL
@@ -42098,7 +45033,8 @@
2449477632,2449479679,AL
2449479680,2449481727,FR
2449481728,2449485823,DE
-2449485824,2449489919,RO
+2449485824,2449487871,IE
+2449487872,2449489919,RO
2449489920,2449490943,FR
2449490944,2449491199,DE
2449491200,2449491967,FR
@@ -42119,7 +45055,9 @@
2450849792,2450915327,SE
2450915328,2451026431,US
2451026432,2451026687,AU
-2451026688,2451042815,US
+2451026688,2451031807,US
+2451031808,2451032063,SG
+2451032064,2451042815,US
2451042816,2451043071,ZA
2451043072,2451986959,US
2451986960,2451986960,GB
@@ -42143,7 +45081,7 @@
2453803008,2453805055,KZ
2453805056,2453807103,FI
2453807104,2453815295,GB
-2453815296,2453831679,RO
+2453815296,2453831679,BG
2453831680,2453833727,IQ
2453833728,2453835775,ES
2453835776,2453837823,FR
@@ -42164,11 +45102,14 @@
2454585344,2454716415,US
2454716416,2454781951,GB
2454781952,2454847487,FI
-2454847488,2454851583,US
+2454847488,2454851327,US
+2454851328,2454851583,DE
2454851584,2454851839,DK
2454851840,2454853119,US
2454853120,2454853375,DK
-2454853376,2454885503,US
+2454853376,2454864895,US
+2454864896,2454865151,FR
+2454865152,2454885503,US
2454885504,2454885631,GB
2454885632,2454887423,US
2454887424,2454887679,DK
@@ -42178,9 +45119,9 @@
2454905920,2454905951,AR
2454905952,2454906943,US
2454906944,2454906951,CL
-2454906952,2454907265,US
-2454907266,2454907266,CL
-2454907267,2454907903,US
+2454906952,2454907263,US
+2454907264,2454907391,CL
+2454907392,2454907903,US
2454907904,2454908159,VE
2454908160,2454913023,US
2454913024,2454978559,CL
@@ -42194,9 +45135,10 @@
2455247872,2455248895,US
2455248896,2455257087,TH
2455257088,2455261183,PH
-2455261184,2455262207,US
+2455261184,2455262207,MY
2455262208,2455263231,KR
-2455263232,2455273471,US
+2455263232,2455265279,PH
+2455265280,2455273471,US
2455273472,2455275519,AU
2455275520,2455371775,US
2455371776,2455437311,GB
@@ -42258,9 +45200,7 @@
2459893760,2459959295,CH
2459959296,2460024831,US
2460024832,2460090367,FI
-2460090368,2460152319,GB
-2460152320,2460152575,FR
-2460152576,2460155903,GB
+2460090368,2460155903,GB
2460155904,2460221439,US
2460221440,2460286975,BR
2460286976,2460549119,US
@@ -42269,7 +45209,9 @@
2460680192,2460745727,NZ
2460745728,2460811263,NO
2460811264,2460876799,SE
-2460876800,2460942335,US
+2460876800,2460920319,US
+2460920320,2460920575,GB
+2460920576,2460942335,US
2460942336,2461007871,BE
2461007872,2461138943,GB
2461138944,2461204479,AU
@@ -42371,7 +45313,9 @@
2466242560,2466250751,GE
2466250752,2466318335,US
2466318336,2466318591,SG
-2466318592,2466323455,US
+2466318592,2466319103,US
+2466319104,2466319359,AU
+2466319360,2466323455,US
2466323456,2466323711,SG
2466323712,2466326015,US
2466326016,2466326271,SG
@@ -42409,11 +45353,15 @@
2470248448,2470510591,US
2470510592,2470576127,BR
2470576128,2470641663,AU
-2470641664,2470707199,LU
+2470641664,2470703359,LU
+2470703360,2470703615,BE
+2470703616,2470707199,LU
2470707200,2470772735,GB
2470772736,2470838271,AU
2470838272,2471165951,US
-2471165952,2471231487,CH
+2471165952,2471198719,CH
+2471198720,2471211007,US
+2471211008,2471231487,CH
2471231488,2471297023,AU
2471297024,2471362559,GB
2471428096,2471690239,US
@@ -42538,7 +45486,13 @@
2486697984,2486763519,AT
2486763520,2486960127,US
2486960128,2487025663,FR
-2487025664,2488205311,US
+2487025664,2487369727,US
+2487369728,2487369983,PF
+2487369984,2487370495,US
+2487370496,2487384319,PF
+2487384320,2487384575,US
+2487384576,2487386111,PF
+2487386112,2488205311,US
2488205312,2488270847,GB
2488270848,2488336383,US
2488336384,2488401919,PL
@@ -42550,11 +45504,7 @@
2489712640,2489745407,PE
2489745408,2489778175,HT
2489778176,2489843711,DO
-2489843712,2489995519,US
-2489995520,2489995544,SG
-2489995545,2489995545,US
-2489995546,2489995775,SG
-2489995776,2490013695,US
+2489843712,2490013695,US
2490013696,2490015743,GB
2490015744,2490043391,US
2490043392,2490043647,GB
@@ -42580,23 +45530,17 @@
2492989440,2493513727,US
2493513728,2493579263,SE
2493579264,2493644799,JP
-2493644800,2493755391,US
-2493755904,2493756415,US
-2493759488,2494103551,US
+2493644800,2494103551,US
2494103552,2494169087,FR
2494169088,2494562303,US
2494562304,2494627839,GB
2494627840,2494650623,US
2494650624,2494650879,BR
-2494650880,2494657535,US
-2494657536,2494657791,CO
-2494657792,2494677247,US
+2494650880,2494677247,US
2494677248,2494677503,AU
2494677504,2494677759,US
2494677760,2494678015,AU
-2494678016,2494683135,US
-2494683136,2494683391,SG
-2494683392,2494689791,US
+2494678016,2494689791,US
2494689792,2494690047,IN
2494690048,2494889983,US
2494889984,2494955519,GB
@@ -42604,13 +45548,13 @@
2495021056,2495152127,US
2495217664,2495283199,US
2495283200,2495348735,CH
-2495348736,2495410943,US
-2495410944,2495411199,AU
-2495411200,2495807487,US
+2495348736,2495807487,US
2495807488,2495873023,AU
2495873024,2495938559,CH
2495938560,2496004095,GB
-2496004096,2496069631,AT
+2496004096,2496015103,AT
+2496015104,2496015359,PL
+2496015360,2496069631,AT
2496069632,2496135167,US
2496135168,2496200703,NL
2496200704,2497682431,MX
@@ -42650,29 +45594,37 @@
2500149504,2500149759,GB
2500149760,2500150527,US
2500150528,2500150783,GB
-2500150784,2500158463,US
-2500158464,2500158719,GB
-2500158720,2500161023,US
+2500150784,2500161023,US
2500161024,2500161535,GB
-2500161536,2500162175,US
-2500162176,2500162815,GB
-2500162816,2500166207,US
-2500166208,2500166223,GB
-2500166224,2500175871,US
+2500161536,2500162559,US
+2500162560,2500162815,GB
+2500162816,2500166143,US
+2500166144,2500166399,GB
+2500166400,2500175871,US
2500175872,2500175879,RO
-2500175880,2500188159,US
-2500188160,2500188415,CH
-2500188416,2500198911,US
+2500175880,2500188679,US
+2500188680,2500188687,CH
+2500188688,2500196351,US
+2500196352,2500198399,FI
+2500198400,2500198911,US
2500198912,2500199167,GB
2500199168,2500199423,US
2500199424,2500199679,IE
-2500199680,2500201535,US
+2500199680,2500200703,US
+2500200704,2500200959,GB
+2500200960,2500201535,US
2500201536,2500201543,GB
2500201544,2500202879,US
2500202880,2500203007,ES
-2500203008,2500219135,US
+2500203008,2500212415,US
+2500212416,2500212423,CH
+2500212424,2500212991,US
+2500212992,2500213247,ES
+2500213248,2500219135,US
2500219136,2500219391,DE
-2500219392,2500225551,US
+2500219392,2500221455,US
+2500221456,2500221459,FR
+2500221460,2500225551,US
2500225552,2500225559,ES
2500225560,2500228607,US
2500228608,2500228863,FR
@@ -42694,23 +45646,23 @@
2500245504,2500245759,GB
2500245760,2500246015,US
2500246016,2500246527,GB
-2500246528,2500272127,US
+2500246528,2500247551,US
+2500247552,2500248063,ES
+2500248064,2500272127,US
2500272128,2500272639,GB
-2500272640,2500274431,US
-2500274432,2500274687,GB
-2500274688,2500275199,US
-2500275200,2500275711,GB
-2500275712,2500276223,US
+2500272640,2500276223,US
2500276224,2500276735,GB
2500276736,2500276991,US
2500276992,2500277247,GB
2500277248,2500289023,US
-2500289024,2500289279,FR
-2500289280,2500292607,US
+2500289024,2500289151,FR
+2500289152,2500292607,US
2500292608,2500292863,DE
2500292864,2500293375,US
2500293376,2500293631,DE
-2500293632,2500319231,US
+2500293632,2500313855,US
+2500313856,2500314111,AT
+2500314112,2500319231,US
2500319232,2500319743,ES
2500319744,2500392959,US
2500392960,2500393215,IN
@@ -42720,9 +45672,13 @@
2500532750,2500532750,GR
2500532751,2500535295,US
2500535296,2500535551,IE
-2500535552,2500537687,US
+2500535552,2500537343,US
+2500537344,2500537599,GB
+2500537600,2500537687,US
2500537688,2500537695,GB
-2500537696,2500551679,US
+2500537696,2500542751,US
+2500542752,2500542755,NL
+2500542756,2500551679,US
2500551680,2500551935,FR
2500551936,2500553759,US
2500553760,2500553767,GB
@@ -42730,9 +45686,7 @@
2500554380,2500554487,DE
2500554488,2500555263,US
2500555264,2500555519,FR
-2500555520,2500558847,US
-2500558848,2500559103,FR
-2500559104,2500591615,US
+2500555520,2500591615,US
2500591616,2500595711,GB
2500595712,2500608511,US
2500608512,2500608767,ES
@@ -42742,19 +45696,27 @@
2500616192,2500616703,IT
2500616704,2500636735,US
2500636736,2500636799,GB
-2500636800,2500638719,US
+2500636800,2500637727,US
+2500637728,2500637759,GB
+2500637760,2500638719,US
2500638720,2500639743,GB
-2500639744,2500644863,US
-2500644864,2500645119,FR
-2500645120,2500646911,US
+2500639744,2500646911,US
2500646912,2500647935,ES
-2500647936,2500687871,US
+2500647936,2500666111,US
+2500666112,2500666367,LU
+2500666368,2500666463,US
+2500666464,2500666471,LU
+2500666472,2500687871,US
2500687872,2500689919,FR
2500689920,2500694271,US
2500694272,2500694527,IT
2500694528,2500719103,US
2500719104,2500720639,IE
-2500720640,2501574655,US
+2500720640,2500720652,US
+2500720653,2500720653,IE
+2500720654,2500723799,US
+2500723800,2500723807,ES
+2500723808,2501574655,US
2501574656,2501640191,KZ
2501640192,2503016447,US
2503016448,2503081983,IL
@@ -42774,17 +45736,28 @@
2503917568,2503933951,BG
2503933952,2504470527,US
2504470528,2504470783,ES
-2504470784,2504474623,US
+2504470784,2504472831,US
+2504472832,2504473599,ES
+2504473600,2504474623,US
2504474624,2504482815,HR
-2504482816,2504491007,US
+2504482816,2504486911,ES
+2504486912,2504491007,US
2504491008,2504499199,IT
2504499200,2504916991,US
2504916992,2504982527,IL
-2504982528,2505793535,US
+2504982528,2505457663,US
+2505457664,2505459711,IE
+2505459712,2505469951,US
+2505469952,2505474047,NL
+2505474048,2505572351,US
+2505572352,2505637887,IL
+2505637888,2505793535,US
2505793536,2505801727,ES
2505801728,2506293247,US
2506293248,2506358783,CA
-2506358784,2506360831,US
+2506358784,2506359039,US
+2506359040,2506359295,ES
+2506359296,2506360831,US
2506360832,2506361087,ES
2506361088,2507124735,US
2507124736,2507124991,IN
@@ -42816,7 +45789,9 @@
2508324864,2508455935,US
2508455936,2508521471,IT
2508521472,2508587007,CH
-2508587008,2508652543,BE
+2508587008,2508631295,BE
+2508631296,2508631551,US
+2508631552,2508652543,BE
2508652544,2508718079,AU
2508718080,2508914687,US
2508914688,2508980223,IT
@@ -43143,7 +46118,7 @@
2545090560,2545156095,US
2545156096,2545221631,GB
2545221632,2545287167,US
-2545287168,2545352703,GB
+2545287168,2545352703,ES
2545352704,2545352959,SE
2545352960,2545418239,CH
2545418240,2545483775,NL
@@ -43154,7 +46129,8 @@
2545811456,2547187711,US
2547187712,2547318783,GB
2547318784,2547515391,US
-2547515392,2547523583,GB
+2547523584,2547535871,GB
+2547540480,2547540735,SE
2547553024,2547553279,RU
2548039680,2548563967,GB
2548563968,2548826111,IR
@@ -43198,7 +46174,8 @@
2549612544,2549614591,SE
2549614592,2549616639,IT
2549616640,2549618687,BE
-2549618688,2549620735,DE
+2549618688,2549618943,US
+2549618944,2549620735,DE
2549620736,2549624831,PL
2549624832,2549626879,BE
2549626880,2549628927,PL
@@ -43208,7 +46185,8 @@
2549645312,2549678079,CH
2549678080,2549698559,GB
2549698560,2549700607,PL
-2549700608,2549701375,DE
+2549700608,2549700863,FR
+2549700864,2549701375,DE
2549701376,2549701631,SE
2549701632,2549701887,PL
2549701888,2549702143,FR
@@ -43236,7 +46214,8 @@
2549927936,2549929983,HR
2549929984,2549932031,DE
2549932032,2549940223,HR
-2549940224,2550136831,RO
+2549940224,2550005759,AE
+2550005760,2550136831,RO
2550136832,2550202367,DO
2550202368,2553544703,US
2553544704,2553610239,IN
@@ -43282,7 +46261,8 @@
2556780032,2556780799,SG
2556780800,2556821503,HK
2556821504,2556887039,SG
-2556887040,2557018111,HK
+2556887040,2556985343,HK
+2556985344,2557018111,CN
2557018112,2557083647,GB
2557083648,2557542399,ZA
2557542400,2557607935,US
@@ -43392,7 +46372,86 @@
2584412160,2584477695,CA
2584477696,2584608767,US
2584608768,2584739839,CH
-2584739840,2584805375,MU
+2584739840,2584739903,SG
+2584739904,2584740351,MU
+2584740352,2584740415,HK
+2584740416,2584740863,MU
+2584740864,2584740927,SG
+2584740928,2584741375,MU
+2584741376,2584741439,HK
+2584741440,2584741887,MU
+2584741888,2584741951,SG
+2584741952,2584742399,MU
+2584742400,2584742463,HK
+2584742464,2584742911,MU
+2584742912,2584742975,SG
+2584742976,2584743423,MU
+2584743424,2584743487,HK
+2584743488,2584743935,MU
+2584743936,2584743999,SG
+2584744000,2584744447,MU
+2584744448,2584744511,HK
+2584744512,2584744959,MU
+2584744960,2584745023,SG
+2584745024,2584745471,MU
+2584745472,2584745535,HK
+2584745536,2584745983,MU
+2584745984,2584746047,SG
+2584746048,2584746495,MU
+2584746496,2584746559,HK
+2584746560,2584747007,MU
+2584747008,2584747071,SG
+2584747072,2584747519,MU
+2584747520,2584747583,HK
+2584747584,2584748031,MU
+2584748032,2584748095,SG
+2584748096,2584748543,MU
+2584748544,2584748607,HK
+2584748608,2584749055,MU
+2584749056,2584749119,SG
+2584749120,2584749567,MU
+2584749568,2584749631,HK
+2584749632,2584750079,MU
+2584750080,2584750143,SG
+2584750144,2584750591,MU
+2584750592,2584750655,HK
+2584750656,2584751103,MU
+2584751104,2584751167,SG
+2584751168,2584751615,MU
+2584751616,2584751679,HK
+2584751680,2584752127,MU
+2584752128,2584752191,SG
+2584752192,2584752639,MU
+2584752640,2584752703,HK
+2584752704,2584753151,MU
+2584753152,2584753215,SG
+2584753216,2584753663,MU
+2584753664,2584753727,HK
+2584753728,2584754175,MU
+2584754176,2584754239,SG
+2584754240,2584754687,MU
+2584754688,2584754751,HK
+2584754752,2584755199,MU
+2584755200,2584755263,SG
+2584755264,2584755711,MU
+2584755712,2584755775,HK
+2584755776,2584756223,MU
+2584756224,2584756287,SG
+2584756288,2584756735,MU
+2584756736,2584756799,HK
+2584756800,2584757247,MU
+2584757248,2584757311,SG
+2584757312,2584757759,MU
+2584757760,2584757823,HK
+2584757824,2584758271,MU
+2584758272,2584758335,SG
+2584758336,2584758783,MU
+2584758784,2584758847,HK
+2584758848,2584759295,MU
+2584759296,2584759359,SG
+2584759360,2584759807,MU
+2584759808,2584759871,HK
+2584759872,2584805375,MU
2584805376,2585001983,US
2585001984,2585067519,CA
2585067520,2585788415,US
@@ -43409,18 +46468,27 @@
2586610176,2586610431,ES
2586610432,2586610687,US
2586610688,2586611711,ES
-2586611712,2586611967,GB
-2586611968,2586619903,US
+2586611712,2586619903,US
2586619904,2586620415,FR
2586620416,2586622463,US
2586622464,2586622975,ES
-2586622976,2586640895,US
+2586622976,2586640383,US
+2586640384,2586640399,MC
+2586640400,2586640895,US
2586640896,2586641407,FR
2586641408,2586650687,US
2586650688,2586650703,DE
-2586650704,2586733567,US
+2586650704,2586650879,US
+2586650880,2586651135,NL
+2586651136,2586714879,US
+2586714880,2586715135,NL
+2586715136,2586733567,US
2586733568,2586733823,LT
-2586733824,2586804223,US
+2586733824,2586734591,US
+2586734592,2586735615,LT
+2586735616,2586788607,US
+2586788608,2586788863,GB
+2586788864,2586804223,US
2586804224,2586804479,ES
2586804480,2586828799,US
2586828800,2586829055,CH
@@ -43429,8 +46497,8 @@
2586874880,2586875135,US
2586875136,2586875903,ES
2586875904,2586876927,US
-2586876928,2586877951,ES
-2586877952,2586952191,US
+2586876928,2586879999,ES
+2586880000,2586952191,US
2586952192,2586952447,FR
2586952448,2587017215,US
2587017216,2587017471,IE
@@ -43440,8 +46508,8 @@
2587021824,2587022335,IE
2587022336,2587066879,US
2587066880,2587067135,GB
-2587067136,2587067647,US
-2587067648,2587067903,GB
+2587067136,2587067391,US
+2587067392,2587067903,GB
2587067904,2587068415,US
2587068416,2587068479,GB
2587068480,2587071759,US
@@ -43454,27 +46522,43 @@
2587240390,2587240390,FR
2587240391,2587249417,US
2587249418,2587249418,FR
-2587249419,2587394047,US
+2587249419,2587378175,US
+2587378176,2587378431,IT
+2587378432,2587379967,US
+2587379968,2587380223,IT
+2587380224,2587394047,US
2587394048,2587394559,ES
-2587394560,2587396095,US
+2587394560,2587394815,US
+2587394816,2587395071,ES
+2587395072,2587396095,US
2587396096,2587399167,ES
2587399168,2587443199,US
2587443200,2587447295,CH
2587447296,2587476760,US
2587476761,2587476761,LB
-2587476762,2587479119,US
+2587476762,2587477759,US
+2587477760,2587478015,LB
+2587478016,2587479119,US
2587479120,2587479120,LB
-2587479121,2587481969,US
+2587479121,2587481087,US
+2587481088,2587481343,LB
+2587481344,2587481969,US
2587481970,2587481970,LB
2587481971,2587492351,US
2587492352,2587493375,ES
2587493376,2587508735,US
2587508736,2587525119,GB
2587525120,2587542527,US
-2587542528,2587543551,ES
-2587543552,2587926527,US
+2587542528,2587544063,ES
+2587544064,2587582463,US
+2587582464,2587586559,NL
+2587586560,2587926527,US
2587926528,2587930623,BG
-2587930624,2587951103,US
+2587930624,2587939071,US
+2587939072,2587939583,PR
+2587939584,2587940607,US
+2587940608,2587940863,PR
+2587940864,2587951103,US
2587951104,2587952127,ZA
2587952128,2587953151,NG
2587953152,2587954175,MU
@@ -43483,7 +46567,9 @@
2587959296,2587961343,SN
2587961344,2587962367,ZA
2587962368,2587963391,SS
-2587963392,2587964415,SD
+2587963392,2587964027,SD
+2587964028,2587964028,SS
+2587964029,2587964415,SD
2587964416,2587965439,ZA
2587965440,2587966463,KE
2587966464,2587967487,BF
@@ -43550,7 +46636,7 @@
2588442624,2588459007,CM
2588459008,2588467199,UG
2588467200,2588471295,TN
-2588471296,2588476415,ZA
+2588471296,2588477439,ZA
2588477440,2588478463,NG
2588478464,2588479487,UG
2588479488,2588480511,ZA
@@ -43576,7 +46662,7 @@
2588494848,2588495871,SO
2588495872,2588496895,ZW
2588496896,2588497919,BW
-2588497920,2588498943,SD
+2588497920,2588498943,SS
2588498944,2588499967,DZ
2588499968,2588500991,ZA
2588500992,2588502015,CI
@@ -43588,21 +46674,31 @@
2588507136,2588508159,SO
2588508160,2588510207,LY
2588510208,2588512255,ZA
-2588522496,2588526591,ZA
+2588512256,2588514303,TZ
+2588514304,2588516351,ZA
+2588516352,2588518399,TD
+2588519424,2588520447,SN
+2588520448,2588521471,SL
+2588521472,2588526591,ZA
2588526592,2588528639,CM
-2588528640,2588530687,ZA
-2588532736,2588534783,ZA
-2588536832,2588538879,ZA
+2588528640,2588534783,ZA
+2588534784,2588535807,ZM
+2588535808,2588536831,NG
+2588536832,2588540927,ZA
2588672000,2588934143,KE
2588934144,2589982719,SC
2589982720,2590507007,SD
2590507008,2591031295,TN
2591031296,2591096831,GA
2591293440,2591326207,GA
+2591326208,2591358975,AO
+2591490048,2591498239,BI
+2591498240,2591510527,ZA
+2591514624,2591522815,SZ
2591522816,2591526911,LR
-2591531008,2591539199,ZA
+2591526912,2591539199,ZA
2591539200,2591547391,GA
-2591547392,2591555583,ZA
+2591547392,2591571967,ZA
2591571968,2591588351,NG
2591588352,2591604735,MG
2591604736,2591612927,MU
@@ -43615,21 +46711,20 @@
2592006144,2592022527,TZ
2592022528,2592026623,BJ
2592026624,2592026879,US
-2592026880,2592027391,MU
+2592026880,2592027391,ZA
2592027392,2592027647,GB
-2592027648,2592028159,MU
+2592027648,2592028159,ZA
2592028160,2592028415,CA
-2592028416,2592028671,MU
+2592028416,2592028671,ZA
2592028672,2592028799,NG
2592028800,2592028927,KE
-2592028928,2592029183,MU
+2592028928,2592029183,ZA
2592029184,2592029311,CI
-2592029312,2592029695,MU
-2592029696,2592030207,ZA
+2592029312,2592030207,ZA
2592030208,2592030335,GH
2592030336,2592030463,CM
2592030464,2592030591,UG
-2592030592,2592030719,MU
+2592030592,2592030719,ZA
2592030720,2592034815,LY
2592034816,2592038911,NE
2592038912,2592043007,DZ
@@ -43678,9 +46773,7 @@
2609119232,2609184767,FR
2609184768,2609250303,PL
2609250304,2609381375,US
-2609381376,2609428479,GB
-2609428480,2609428735,IN
-2609428736,2609446911,GB
+2609381376,2609446911,GB
2609446912,2609512447,DK
2609512448,2609643519,US
2609643520,2609709055,GB
@@ -43717,9 +46810,7 @@
2614165504,2614231039,NO
2614231040,2614296575,ES
2614296576,2614362111,BR
-2614362112,2614386431,US
-2614386432,2614386559,PR
-2614386560,2615083007,US
+2614362112,2615083007,US
2615083008,2615148543,TR
2615148544,2615345151,US
2615345152,2615410687,NO
@@ -43773,7 +46864,7 @@
2617146624,2617146879,GY
2617146880,2617147135,DE
2617147136,2617147391,AO
-2617147392,2617148159,US
+2617147392,2617148415,US
2617151488,2617155583,CA
2617155584,2617163775,US
2617163776,2617164031,SK
@@ -43909,6 +47000,7 @@
2627010560,2627076095,NZ
2627076096,2627141631,NL
2627141632,2627403775,US
+2627469312,2627731455,TZ
2634022912,2634088447,CN
2634088448,2634350591,JP
2634416128,2635005951,JP
@@ -44005,7 +47097,9 @@
2647326720,2647392255,GB
2647392256,2647457791,US
2647457792,2647523327,JP
-2647523328,2647687167,US
+2647523328,2647605503,US
+2647605504,2647605759,GB
+2647605760,2647687167,US
2647687168,2647687423,CA
2647687424,2647851007,US
2647851008,2647916543,AU
@@ -44064,7 +47158,9 @@
2655125504,2655191039,PL
2655256576,2655715327,US
2655715328,2655780863,PL
-2655780864,2656632831,US
+2655780864,2656387071,US
+2656387072,2656403455,CA
+2656403456,2656632831,US
2656632832,2656698367,AU
2656698368,2656763903,FI
2656763904,2656829439,US
@@ -44087,7 +47183,9 @@
2658009088,2658074623,IT
2658074624,2658140159,US
2658140160,2658205695,NO
-2658205696,2658598911,US
+2658205696,2658451455,US
+2658451456,2658451711,MY
+2658451712,2658598911,US
2658598912,2658664447,GB
2658664448,2658926591,US
2658926592,2659057663,GB
@@ -44119,9 +47217,7 @@
2661548032,2661679103,US
2661679104,2661885951,LU
2661885952,2661886207,BE
-2661886208,2661909247,LU
-2661909248,2661909503,BE
-2661909504,2661914111,LU
+2661886208,2661914111,LU
2661914112,2661914367,BE
2661914368,2661941247,LU
2661941248,2662006783,CL
@@ -44155,7 +47251,9 @@
2665545728,2665611263,DE
2665611264,2665676799,CH
2665676800,2665742335,ES
-2665742336,2665873407,US
+2665742336,2665783551,US
+2665783552,2665783807,GB
+2665783808,2665873407,US
2665873408,2665938943,GB
2665938944,2666004479,FR
2666004480,2666070015,CH
@@ -44178,8 +47276,7 @@
2667528192,2667532287,FR
2667532288,2667534335,RU
2667534336,2667536383,PL
-2667536384,2667536639,FR
-2667536640,2667537087,AT
+2667536384,2667537087,AT
2667537088,2667537119,FR
2667537120,2667537151,AT
2667537152,2667541503,FR
@@ -44225,7 +47322,10 @@
2668102648,2668102655,US
2668102656,2668102991,NL
2668102992,2668102999,US
-2668103000,2668103743,NL
+2668103000,2668103719,NL
+2668103720,2668103727,US
+2668103728,2668103735,NL
+2668103736,2668103743,US
2668103744,2668103775,KE
2668103776,2668104127,NL
2668104128,2668104135,GB
@@ -44233,8 +47333,84 @@
2668104192,2668104207,KE
2668104208,2668104247,NL
2668104248,2668104255,US
-2668104256,2668167167,NL
-2668167168,2668363775,US
+2668104256,2668104999,NL
+2668105000,2668105015,US
+2668105016,2668105063,NL
+2668105064,2668105071,US
+2668105072,2668105135,NL
+2668105136,2668105151,US
+2668105152,2668105223,NL
+2668105224,2668105239,US
+2668105240,2668105255,NL
+2668105256,2668105271,US
+2668105272,2668105287,NL
+2668105288,2668105351,US
+2668105352,2668105383,NL
+2668105384,2668105391,US
+2668105392,2668105399,NL
+2668105400,2668105439,US
+2668105440,2668105471,NL
+2668105472,2668105479,US
+2668105480,2668105727,NL
+2668105728,2668105791,US
+2668105792,2668106935,NL
+2668106936,2668106943,US
+2668106944,2668106951,NL
+2668106952,2668106959,US
+2668106960,2668107599,NL
+2668107600,2668107607,US
+2668107608,2668107679,NL
+2668107680,2668107687,US
+2668107688,2668107711,NL
+2668107712,2668107759,US
+2668107760,2668107767,NL
+2668107768,2668107775,US
+2668107776,2668108303,NL
+2668108304,2668108335,US
+2668108336,2668108343,CA
+2668108344,2668108359,US
+2668108360,2668108383,NL
+2668108384,2668108391,US
+2668108392,2668108399,NL
+2668108400,2668108415,US
+2668108416,2668108799,NL
+2668108800,2668108807,US
+2668108808,2668108823,NL
+2668108824,2668108831,US
+2668108832,2668108855,NL
+2668108856,2668108863,US
+2668108864,2668108887,NL
+2668108888,2668108903,US
+2668108904,2668108919,NL
+2668108920,2668108927,US
+2668108928,2668108935,NL
+2668108936,2668108951,GB
+2668108952,2668108967,NL
+2668108968,2668108983,US
+2668108984,2668108999,NL
+2668109000,2668109023,US
+2668109024,2668109031,NL
+2668109032,2668109047,US
+2668109048,2668109063,NL
+2668109064,2668109071,US
+2668109072,2668109615,NL
+2668109616,2668109623,US
+2668109624,2668109639,NL
+2668109640,2668109663,US
+2668109664,2668109671,NL
+2668109672,2668109687,US
+2668109688,2668109695,NL
+2668109696,2668109743,US
+2668109744,2668109751,NL
+2668109752,2668109759,US
+2668109760,2668109951,NL
+2668109952,2668110047,US
+2668110048,2668134399,NL
+2668134400,2668150783,GB
+2668150784,2668167167,NL
+2668167168,2668286463,US
+2668286464,2668286719,GB
+2668286720,2668363775,US
2668363776,2668429311,CH
2668429312,2668494847,AU
2668494848,2668560383,US
@@ -44253,9 +47429,14 @@
2668916736,2668918783,TR
2668918784,2668920831,ES
2668920832,2668953599,IT
-2668953600,2668989951,US
+2668953600,2668969983,US
+2668969984,2668971007,GB
+2668971008,2668987135,US
+2668987136,2668987391,AU
+2668987392,2668989951,US
2668989952,2668990463,NZ
-2668990464,2669019135,US
+2668990464,2668991487,IN
+2668991488,2669019135,US
2669019136,2669084671,CH
2669084672,2669150207,ES
2669150208,2669215743,US
@@ -44280,9 +47461,9 @@
2671378432,2671443967,NO
2671443968,2671509503,US
2671509504,2671575039,NL
-2671575040,2671720191,US
-2671720192,2671720447,VE
-2671720448,2671749119,US
+2671575040,2671711479,US
+2671711480,2671711483,DE
+2671711484,2671749119,US
2671749120,2671750143,CA
2671750144,2672295935,US
2672295936,2672361471,SE
@@ -44303,9 +47484,7 @@
2673737728,2673803263,US
2673803264,2673868799,FR
2673868800,2674130943,US
-2674130944,2674163711,GB
-2674163712,2674171903,CA
-2674171904,2674175999,GB
+2674130944,2674175999,GB
2674176000,2674192383,US
2674192384,2674196479,CH
2674196480,2674249727,GB
@@ -44337,23 +47516,25 @@
2677080064,2677145599,US
2677145600,2677178367,TR
2677178368,2677211135,UA
-2677211136,2677276671,GB
+2677211136,2677276671,ES
2677276672,2677342207,LV
2677342208,2677407743,IT
2677407744,2677473279,US
2677473280,2677538815,FR
2677538816,2677604351,FI
-2677604352,2677622783,US
-2677622784,2677623039,IE
-2677623040,2677635071,US
+2677604352,2677635071,US
2677635072,2677636095,CN
2677636096,2677639679,US
2677639680,2677639935,CA
2677639936,2677642239,US
2677642240,2677642495,ES
-2677642496,2677642751,US
+2677642496,2677642751,CA
2677642752,2677643007,SE
-2677643008,2677648383,US
+2677643008,2677644287,US
+2677644288,2677644347,GB
+2677644348,2677644348,US
+2677644349,2677644543,GB
+2677644544,2677648383,US
2677648384,2677649407,JP
2677649408,2677650431,US
2677650432,2677650943,RO
@@ -44368,7 +47549,9 @@
2677669888,2677735423,DE
2677735424,2677800959,US
2677800960,2677866495,CH
-2677866496,2677997567,US
+2677866496,2677924863,US
+2677924864,2677925119,GB
+2677925120,2677997567,US
2677997568,2678063103,CA
2678063104,2678128639,UA
2678128640,2678194175,US
@@ -44411,7 +47594,10 @@
2679242752,2679308287,US
2679308288,2679373823,CH
2679373824,2679406591,GB
-2679406592,2679422975,BR
+2679406592,2679414783,US
+2679414784,2679418879,BR
+2679418880,2679420927,SG
+2679420928,2679422975,BR
2679422976,2679431167,US
2679431168,2679439359,FR
2679439360,2679523327,US
@@ -44448,7 +47634,9 @@
2682014208,2682014719,GB
2682014720,2682015231,US
2682015232,2682015487,IN
-2682015488,2682123263,US
+2682015488,2682107903,US
+2682107904,2682108159,GB
+2682108160,2682123263,US
2682123264,2682123519,AU
2682123520,2682257407,US
2682257408,2682322943,UA
@@ -44467,8 +47655,9 @@
2683371520,2683437055,CH
2683437056,2683568127,US
2683568128,2683633663,GB
-2683637760,2683637859,NL
-2683637861,2683641855,NL
+2683637760,2683637859,FR
+2683637861,2683638015,FR
+2683638016,2683641855,NL
2683641856,2683645951,US
2683646208,2683650047,SG
2683650048,2683651071,US
@@ -44508,13 +47697,17 @@
2684191988,2684191999,US
2684192000,2684192103,NL
2684192104,2684192107,US
-2684192108,2684192303,NL
+2684192108,2684192151,NL
+2684192152,2684192159,US
+2684192160,2684192303,NL
2684192304,2684192311,US
2684192312,2684192387,NL
2684192388,2684192391,US
2684192392,2684192459,NL
2684192460,2684192463,US
-2684192464,2684192511,NL
+2684192464,2684192495,NL
+2684192496,2684192503,US
+2684192504,2684192511,NL
2684192512,2684192519,US
2684192520,2684192523,NL
2684192524,2684192535,US
@@ -44530,7 +47723,9 @@
2684192980,2684192983,US
2684192984,2684193147,NL
2684193148,2684193151,US
-2684193152,2684193275,NL
+2684193152,2684193175,NL
+2684193176,2684193183,US
+2684193184,2684193275,NL
2684193276,2684193279,US
2684193280,2684193447,NL
2684193448,2684193455,AZ
@@ -44538,7 +47733,9 @@
2684193584,2684193591,IE
2684193592,2684193735,NL
2684193736,2684193743,US
-2684193744,2684193887,NL
+2684193744,2684193751,NL
+2684193752,2684193759,US
+2684193760,2684193887,NL
2684193888,2684193911,US
2684193912,2684193931,NL
2684193932,2684193935,US
@@ -44551,7 +47748,9 @@
2684194144,2684194151,US
2684194152,2684194167,NL
2684194168,2684194171,US
-2684194172,2684194351,NL
+2684194172,2684194319,NL
+2684194320,2684194327,SA
+2684194328,2684194351,NL
2684194352,2684194359,US
2684194360,2684194487,NL
2684194488,2684194495,GB
@@ -44563,7 +47762,9 @@
2684194560,2684194623,US
2684194624,2684194723,NL
2684194724,2684194727,US
-2684194728,2684195119,NL
+2684194728,2684194815,NL
+2684194816,2684194823,US
+2684194824,2684195119,NL
2684195120,2684195123,US
2684195124,2684195199,NL
2684195200,2684195263,US
@@ -44573,7 +47774,9 @@
2684195336,2684195339,US
2684195340,2684195663,NL
2684195664,2684195667,US
-2684195668,2684195867,NL
+2684195668,2684195695,NL
+2684195696,2684195703,US
+2684195704,2684195867,NL
2684195868,2684195871,US
2684195872,2684195927,NL
2684195928,2684195935,JP
@@ -44581,7 +47784,9 @@
2684195980,2684195983,US
2684195984,2684196095,NL
2684196096,2684196159,US
-2684196160,2684196343,NL
+2684196160,2684196215,NL
+2684196216,2684196223,US
+2684196224,2684196343,NL
2684196344,2684196351,US
2684196352,2684196391,NL
2684196392,2684196399,US
@@ -44595,7 +47800,9 @@
2684196940,2684196943,US
2684196944,2684196959,NL
2684196960,2684196963,US
-2684196964,2684197099,NL
+2684196964,2684197031,NL
+2684197032,2684197039,IT
+2684197040,2684197099,NL
2684197100,2684197103,US
2684197104,2684197115,NL
2684197116,2684197119,US
@@ -44660,9 +47867,8 @@
2687041536,2687238143,US
2687238144,2687297231,DE
2687297232,2687297239,GB
-2687297240,2687301375,DE
-2687301376,2687301631,NL
-2687301632,2687560191,DE
+2687297240,2687297247,SE
+2687297248,2687560191,DE
2687560192,2687560447,ZA
2687560448,2687762431,DE
2687762432,2687827967,AT
@@ -44744,8 +47950,8 @@
2697854976,2697889791,AU
2697889792,2697891839,US
2697891840,2697892863,AU
-2697892864,2697894143,US
-2697894144,2697920511,AU
+2697892864,2697894399,US
+2697894400,2697920511,AU
2697920512,2698117119,US
2698117120,2698182655,IS
2698182656,2698248191,DE
@@ -44759,6 +47965,7 @@
2698838016,2698903551,BE
2698903552,2698969087,AU
2698969088,2699034623,CA
+2699034624,2699165695,AO
2699231232,2699296767,US
2699296768,2699362303,FR
2699362304,2699624447,US
@@ -44826,9 +48033,7 @@
2704343040,2704408575,US
2704408576,2704474111,AU
2704474112,2704476927,US
-2704476928,2704476929,GB
-2704476930,2704476930,US
-2704476931,2704477183,GB
+2704476928,2704477183,GB
2704477184,2704485119,US
2704485120,2704485375,AU
2704485376,2704539647,US
@@ -44847,9 +48052,7 @@
2705522688,2705588223,ES
2705588224,2705596159,US
2705596160,2705596415,CA
-2705596416,2705621247,US
-2705621248,2705621503,CH
-2705621504,2705691647,US
+2705596416,2705691647,US
2705691648,2705692671,GB
2705692672,2705710079,US
2705710080,2705711103,IN
@@ -44911,7 +48114,8 @@
2713583616,2713649151,AR
2713649152,2713946367,US
2713946368,2713946623,CA
-2713946624,2713976831,US
+2713946624,2713946879,GB
+2713946880,2713976831,US
2713976832,2714042367,VE
2714042368,2714238975,US
2714238976,2714304511,TH
@@ -45003,7 +48207,9 @@
2731674624,2731679743,US
2731679744,2731680767,CA
2731680768,2731681791,US
-2731681792,2731682815,PR
+2731681792,2731682047,PR
+2731682048,2731682303,VI
+2731682304,2731682815,PR
2731682816,2731685887,US
2731685888,2731686911,CA
2731686912,2731688959,US
@@ -45087,9 +48293,7 @@
2732220416,2732227583,US
2732227584,2732228607,CA
2732228608,2732261375,US
-2732261376,2732262399,CA
-2732262400,2732263423,US
-2732263424,2732265471,CA
+2732261376,2732265471,CA
2732265472,2732273663,US
2732273664,2732275711,CA
2732275712,2732278783,US
@@ -45112,7 +48316,8 @@
2732351488,2732353535,PR
2732353536,2732361727,US
2732361728,2732363775,BB
-2732363776,2732375039,US
+2732363776,2732371967,US
+2732372992,2732375039,US
2732375040,2732376063,CA
2732376064,2732379135,US
2732379136,2732380159,CA
@@ -45352,12 +48557,15 @@
2737769472,2737770495,IN
2737770496,2737771263,AU
2737771264,2737771519,JP
-2737771520,2737772031,AU
-2737772544,2737774591,JP
+2737771520,2737771775,AU
+2737771776,2737772031,NZ
+2737772288,2737774591,JP
2737774592,2737776639,BD
2737776640,2737777663,AU
2737777664,2737778175,HK
-2737778432,2737785855,AU
+2737778432,2737781759,AU
+2737781760,2737782783,US
+2737782784,2737785855,AU
2737785856,2737788927,BD
2737788928,2737789951,MY
2737789952,2737793023,AU
@@ -45471,7 +48679,9 @@
2746482688,2746548223,KR
2746548224,2746824703,US
2746824704,2746824959,CA
-2746824960,2747072511,US
+2746824960,2746839295,US
+2746839296,2746839551,CA
+2746839552,2747072511,US
2747072512,2747138047,AU
2747138048,2747465727,US
2747465728,2748055551,ZA
@@ -45495,7 +48705,9 @@
2750873600,2750939135,CL
2750939136,2751070207,US
2751070208,2751135743,CL
-2751135744,2751397887,US
+2751135744,2751176703,US
+2751176704,2751176959,GU
+2751176960,2751397887,US
2751397888,2751463423,KR
2751463424,2751528959,KZ
2751528960,2751660031,FR
@@ -45637,9 +48849,7 @@
2765568000,2765570047,IR
2765570048,2765578239,RU
2765578240,2765580287,AZ
-2765580288,2765581567,GB
-2765581568,2765581823,ZA
-2765581824,2765582335,GB
+2765580288,2765582335,GB
2765582336,2765586431,CZ
2765586432,2765619199,IR
2765619200,2768240639,US
@@ -45661,7 +48871,9 @@
2770337792,2770993151,US
2770993152,2771124223,IN
2771124224,2771451903,US
+2771517440,2771648511,TN
2771648512,2771910655,ZA
+2771910656,2772434943,ZM
2772434944,2772631551,US
2772697088,2772762623,US
2772762624,2772828159,AU
@@ -45717,8 +48929,8 @@
2780561408,2780758015,US
2780758016,2780823551,AU
2780823552,2780925951,US
-2780925952,2780926207,GB
-2780926208,2780926975,US
+2780925952,2780926463,GB
+2780926464,2780926975,US
2780926976,2780927487,GB
2780927488,2780927743,US
2780927744,2780927999,GB
@@ -45768,11 +48980,12 @@
2784165888,2784296959,KR
2784296960,2784362495,US
2784362496,2784428031,KR
-2784428032,2784952319,US
-2785017856,2785300735,US
-2785300736,2785300991,PR
-2785300992,2785542143,US
-2785542144,2786066431,CH
+2784428032,2784952063,US
+2784952064,2784952319,NL
+2785017856,2785542143,US
+2785542144,2785673215,CH
+2785673216,2785738751,NL
+2785738752,2786066431,CH
2786066432,2788163583,US
2788163584,2788229119,CA
2788229120,2788261887,US
@@ -45832,13 +49045,13 @@
2803826688,2803892223,US
2803892224,2805465087,CA
2805465088,2805989375,UY
-2805989376,2806012927,US
-2806012928,2806013183,HK
-2806013184,2806644735,US
+2805989376,2806644735,US
2806644736,2806710271,CA
2806710272,2807103487,US
2807103488,2807169023,NL
-2807169024,2807566335,US
+2807169024,2807271679,US
+2807271680,2807271935,AU
+2807271936,2807566335,US
2807566336,2807574527,CA
2807574528,2807587071,US
2807587072,2807587327,IT
@@ -45867,7 +49080,11 @@
2808872960,2808938495,UY
2808938496,2809069567,US
2809069568,2809135103,SA
-2809135104,2809397247,US
+2809135104,2809266175,US
+2809266176,2809286975,CA
+2809286976,2809286991,US
+2809286992,2809331711,CA
+2809331712,2809397247,US
2809397248,2809462783,UY
2809462784,2809855999,US
2809856000,2809921535,AU
@@ -45943,9 +49160,11 @@
2816264704,2816270335,US
2816270336,2816271615,SG
2816271616,2816271871,JP
-2816271872,2816272383,IN
+2816271872,2816272127,IN
+2816272128,2816272383,AU
2816272384,2816273407,JP
-2816273408,2816275455,IN
+2816273408,2816274431,IN
+2816274432,2816275455,AU
2816275456,2816278527,SG
2816278528,2816671743,US
2816671744,2816737279,CA
@@ -45955,8 +49174,7 @@
2817277952,2817294335,NL
2817294336,2817933055,US
2817933056,2817933311,CA
-2817933312,2817933567,PR
-2817933568,2818002943,US
+2817933312,2818002943,US
2818002944,2818003722,GB
2818003723,2818003723,US
2818003724,2818004991,GB
@@ -45964,7 +49182,9 @@
2818244608,2818310143,US
2818310144,2818375679,AR
2818375680,2818572287,US
-2818637824,2818703359,NL
+2818637824,2818654207,NL
+2818654208,2818670591,AU
+2818670592,2818703359,NL
2818703360,2822731894,US
2822731895,2822731895,GB
2822731896,2823159807,US
@@ -46050,7 +49270,9 @@
2829844480,2829910015,ZA
2829910016,2830066431,US
2830066432,2830066687,HK
-2830066688,2830106623,US
+2830066688,2830085887,US
+2830085888,2830086143,GB
+2830086144,2830106623,US
2830106624,2830172159,CO
2830172160,2830434303,US
2830499840,2830761983,US
@@ -46079,7 +49301,7 @@
2833907712,2833973247,GT
2833973248,2834010111,US
2834010112,2834014207,CA
-2834018304,2834030591,US
+2834014208,2834030591,US
2834030592,2834034687,CA
2834034688,2834497535,US
2834497536,2834563071,SV
@@ -46090,11 +49312,21 @@
2835218432,2835283967,US
2835283968,2835349503,MX
2835480576,2837446655,US
-2837446656,2838822911,CH
+2837446656,2837839871,CH
+2837839872,2837905407,NL
+2837905408,2838298623,CH
+2838298624,2838495231,NL
+2838495232,2838691839,CH
+2838691840,2838757375,NL
+2838757376,2838822911,CH
2838822912,2839019519,NL
2839019520,2839085055,CH
-2839085056,2839150591,NL
-2839150592,2839543807,CH
+2839085056,2839101439,NL
+2839101440,2839117823,MX
+2839117824,2839150591,NL
+2839150592,2839281663,CH
+2839281664,2839412735,NL
+2839412736,2839543807,CH
2839543808,2843803647,US
2843803648,2843869183,ZA
2843869184,2844524543,US
@@ -46124,6 +49356,17 @@
2849964032,2850029567,HK
2850029568,2851012607,US
2851078144,2851995647,US
+2852061184,2852062207,ZA
+2852063232,2852064255,KE
+2852064256,2852065279,ZA
+2852065280,2852066303,GH
+2852067328,2852068351,SD
+2852069376,2852070399,ZA
+2852071424,2852072447,NG
+2852072448,2852073471,ZA
+2852073472,2852074495,TZ
+2852074496,2852075519,MW
+2852075520,2852076543,ZA
2852192256,2852716653,US
2852716654,2852716654,AU
2852716655,2853306367,US
@@ -46139,11 +49382,7 @@
2855484672,2855485439,AR
2855485440,2855501823,UY
2855501824,2855534591,AR
-2855534592,2855811583,US
-2855811584,2855811730,DE
-2855811731,2855811731,US
-2855811732,2855811839,DE
-2855811840,2856058879,US
+2855534592,2856058879,US
2856058880,2856124415,CH
2856124416,2856184831,US
2856184832,2856185855,GB
@@ -46157,9 +49396,7 @@
2857697280,2858352639,US
2858418176,2859007999,US
2859008000,2859073535,JP
-2859073536,2861069055,US
-2861069056,2861069311,GB
-2861069312,2861850879,US
+2859073536,2861850879,US
2861850880,2861851391,HK
2861851392,2861851647,US
2861851648,2861861375,HK
@@ -46185,26 +49422,28 @@
2864844800,2864845055,NL
2864845056,2864848895,US
2864848896,2864849151,GB
-2864849152,2865417215,US
-2865417216,2865417471,GB
-2865417472,2865577983,US
+2864849152,2865417457,US
+2865417458,2865417458,GB
+2865417459,2865577983,US
2865577984,2865610751,BE
2865610752,2865889279,US
2865889280,2865954815,AR
-2865954816,2867265535,US
+2865954816,2866953215,US
+2866953216,2866953471,AU
+2866953472,2867265535,US
2867331072,2867396607,US
2867462144,2867593215,US
2867593216,2867724287,CH
2867855360,2868117503,US
-2868379648,2868605183,US
-2868605184,2868605439,NO
-2868605440,2868658175,US
+2868379648,2868605376,US
+2868605377,2868605377,NO
+2868605378,2868658175,US
2868658176,2868658431,GB
-2868658432,2868676607,US
+2868658432,2868673023,US
+2868673024,2868673279,FR
+2868673280,2868676607,US
2868676608,2868676863,AU
-2868676864,2868689407,US
-2868689408,2868689663,AU
-2868689664,2868772863,US
+2868676864,2868772863,US
2868838400,2868903935,BE
2868903936,2869035007,SG
2869035008,2869166079,JP
@@ -46213,7 +49452,9 @@
2869952512,2870018047,FR
2870018048,2870083583,DE
2870083584,2870089727,FR
-2870089728,2870091775,DE
+2870089728,2870090495,DE
+2870090496,2870090751,BE
+2870090752,2870091775,DE
2870091776,2870149119,FR
2870149120,2870214655,HU
2870214656,2870280191,DK
@@ -46363,19 +49604,15 @@
2905446656,2905446911,DE
2905446912,2905473023,US
2905473024,2905481215,CA
-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
+2905481216,2913992703,US
2913992704,2914516991,CA
-2914516992,2915092135,US
-2915092136,2915092143,SA
-2915092144,2915250175,US
+2914516992,2915195647,US
+2915195648,2915195903,CL
+2915195904,2915196927,US
+2915196928,2915197183,IE
+2915197184,2915197439,US
+2915197440,2915197695,FI
+2915197696,2915250175,US
2915250176,2915254271,CA
2915254272,2915516415,US
2915516416,2915516671,NL
@@ -46409,7 +49646,9 @@
2916319232,2916335615,PR
2916335616,2916368383,US
2916368384,2916401151,CA
-2916401152,2916515839,US
+2916401152,2916410879,US
+2916410880,2916411135,GB
+2916411136,2916515839,US
2916515840,2916519935,CA
2916519936,2916581375,US
2916581376,2916614143,PR
@@ -46432,7 +49671,8 @@
2917267712,2917267967,AG
2917267968,2917268223,JM
2917268224,2917268479,BB
-2917268480,2917269503,JM
+2917268480,2917268735,TC
+2917268736,2917269503,JM
2917269504,2917449727,US
2917449728,2917466111,PR
2917466112,2917572607,US
@@ -46488,11 +49728,7 @@
2918023168,2918043647,US
2918043648,2918047743,CA
2918047744,2918051839,US
-2918051840,2918111999,CA
-2918112000,2918112127,US
-2918112128,2918112895,CA
-2918112896,2918113023,US
-2918113024,2918121471,CA
+2918051840,2918121471,CA
2918121472,2918154239,US
2918154240,2918170623,CA
2918170624,2918187775,US
@@ -46517,9 +49753,7 @@
2918395904,2918404095,US
2918404096,2918406911,PR
2918406912,2918407167,US
-2918407168,2918407295,PR
-2918407296,2918407423,US
-2918407424,2918408191,PR
+2918407168,2918408191,PR
2918408192,2918432767,US
2918432768,2918436863,CA
2918436864,2918469631,US
@@ -46530,17 +49764,13 @@
2918473216,2918473727,CA
2918473728,2918477823,US
2918477824,2918481919,CA
-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
+2918481920,2918527743,US
+2918527744,2918527999,NO
+2918528000,2918536719,US
2918536720,2918536727,CA
-2918536728,2918570239,US
+2918536728,2918568191,US
+2918568192,2918568319,AU
+2918568320,2918570239,US
2918570240,2918570495,JP
2918570496,2918580223,US
2918580224,2918588415,CA
@@ -46607,42 +49837,49 @@
2919759872,2921512703,US
2921512704,2921512959,CA
2921512960,2921530367,US
-2921530368,2921531391,DE
-2921531392,2921541119,US
+2921530368,2921530879,DE
+2921530880,2921541119,US
2921541120,2921541375,DE
2921541376,2921542143,US
2921542144,2921542399,CA
-2921542400,2921545727,US
+2921542400,2921545215,US
+2921545216,2921545727,DE
2921545728,2921545983,NL
-2921545984,2921546495,US
+2921545984,2921546239,US
+2921546240,2921546495,FR
2921546496,2921546751,NL
-2921546752,2921547519,US
+2921546752,2921547007,US
+2921547008,2921547263,FR
+2921547264,2921547519,US
2921547520,2921547775,DE
2921547776,2921548031,GB
-2921548032,2921548799,US
-2921548800,2921549055,FR
+2921548032,2921548831,US
+2921548832,2921549055,FR
2921549056,2921550335,US
2921550336,2921550591,IT
-2921550592,2921552895,US
+2921550592,2921551615,US
+2921551616,2921551871,BR
+2921551872,2921552127,AR
+2921552128,2921552383,US
+2921552384,2921552639,MX
+2921552640,2921552895,US
2921552896,2921553151,CL
2921553152,2921553407,BR
2921553408,2921553663,CO
2921553664,2921562111,US
2921562112,2921594879,CA
-2921594880,2925002751,US
+2921594880,2921681631,US
+2921681632,2921681639,JP
+2921681640,2925002751,US
2925002752,2925527039,CA
2925527040,2926575615,US
-2926575616,2926777343,CA
-2926777344,2926777855,US
-2926777856,2926778111,CA
-2926778112,2926778239,US
-2926778240,2926779391,CA
-2926779392,2926779519,US
-2926779520,2927084799,CA
-2927084800,2927085055,US
-2927085056,2927085567,CA
-2927085568,2927085823,US
-2927085824,2927099903,CA
+2926575616,2926777727,CA
+2926777728,2926777983,US
+2926777984,2927084543,CA
+2927084544,2927085055,US
+2927085056,2927085311,CA
+2927085312,2927085567,US
+2927085568,2927099903,CA
2927099904,2927242751,US
2927242752,2927243263,AE
2927243264,2927254783,US
@@ -46687,16 +49924,15 @@
2938634240,2938699775,IN
2938699776,2938700031,PH
2938700032,2938700287,ID
-2938700288,2938700543,KR
+2938700288,2938700543,AE
2938700544,2938701055,SG
2938701056,2938701311,IQ
2938701312,2938701567,AU
-2938701568,2938701823,KR
-2938701824,2938702079,IN
+2938701568,2938702079,IN
2938702080,2938703103,HK
2938703104,2938703359,IL
2938703360,2938703615,ZA
-2938703616,2938703871,KR
+2938703616,2938703871,IN
2938703872,2938707967,HK
2938707968,2938710015,JP
2938710016,2938712063,AU
@@ -46786,9 +50022,9 @@
2947598336,2947602431,AU
2947602432,2947603455,NZ
2947603456,2947604479,TH
-2947604480,2947609599,HK
-2947609600,2947609855,GB
-2947609856,2947612671,HK
+2947604480,2947611135,HK
+2947611136,2947611391,AU
+2947611392,2947612671,HK
2947612672,2947678207,JP
2947678208,2947743743,CN
2947743744,2947809279,JP
@@ -46815,9 +50051,7 @@
2953466368,2953466879,GB
2953467392,2953467647,GB
2953467904,2953469951,BE
-2953469952,2953474815,CH
-2953474816,2953475071,DE
-2953475072,2953478143,CH
+2953469952,2953478143,CH
2953478144,2953503551,SE
2953503552,2953503559,NO
2953503560,2953510911,SE
@@ -46827,9 +50061,7 @@
2953596928,2953598975,ES
2953598976,2953601023,IT
2953601024,2953603071,RU
-2953603072,2953603977,GB
-2953603978,2953603979,IE
-2953603980,2953605119,GB
+2953603072,2953605119,GB
2953605120,2953609215,CZ
2953609216,2953707519,IL
2953707520,2953838591,RU
@@ -46843,149 +50075,992 @@
2954647552,2954657791,ES
2954657792,2954756095,JO
2954756096,2954821631,TR
-2954821632,2954822927,FR
+2954821632,2954821651,FR
+2954821652,2954821655,IT
+2954821656,2954821775,FR
+2954821776,2954821783,IT
+2954821784,2954822047,FR
+2954822048,2954822063,ES
+2954822064,2954822159,FR
+2954822160,2954822167,GB
+2954822168,2954822175,NL
+2954822176,2954822255,FR
+2954822256,2954822263,PL
+2954822264,2954822311,FR
+2954822312,2954822319,GB
+2954822320,2954822335,FR
+2954822336,2954822339,PL
+2954822340,2954822347,FR
+2954822348,2954822351,BE
+2954822352,2954822527,FR
+2954822528,2954822531,ES
+2954822532,2954822559,FR
+2954822560,2954822575,NL
+2954822576,2954822591,FR
+2954822592,2954822599,GB
+2954822600,2954822655,FR
+2954822656,2954822687,GB
+2954822688,2954822783,FR
+2954822784,2954822791,GB
+2954822792,2954822927,FR
2954822928,2954822931,DE
-2954822932,2954823395,FR
+2954822932,2954823071,FR
+2954823072,2954823103,BE
+2954823104,2954823263,FR
+2954823264,2954823295,CZ
+2954823296,2954823383,FR
+2954823384,2954823387,DE
+2954823388,2954823395,FR
2954823396,2954823399,GB
-2954823400,2954824255,FR
+2954823400,2954823403,NL
+2954823404,2954823551,FR
+2954823552,2954823555,BE
+2954823556,2954823559,CZ
+2954823560,2954823567,FR
+2954823568,2954823583,GB
+2954823584,2954823703,FR
+2954823704,2954823707,NL
+2954823708,2954823767,FR
+2954823768,2954823771,GB
+2954823772,2954823779,FR
+2954823780,2954823791,GB
+2954823792,2954823891,FR
+2954823892,2954823895,CH
+2954823896,2954823903,FR
+2954823904,2954823911,DE
+2954823912,2954823927,FR
+2954823928,2954823935,CH
+2954823936,2954823999,FR
+2954824000,2954824015,ES
+2954824016,2954824031,FR
+2954824032,2954824047,IT
+2954824048,2954824255,FR
2954824256,2954824259,ES
-2954824260,2954825063,FR
+2954824260,2954824271,FR
+2954824272,2954824275,ES
+2954824276,2954824279,FR
+2954824280,2954824283,PT
+2954824284,2954824431,FR
+2954824432,2954824447,PL
+2954824448,2954824711,FR
+2954824712,2954824719,ES
+2954824720,2954824735,FI
+2954824736,2954824767,DE
+2954824768,2954824775,FR
+2954824776,2954824783,IT
+2954824784,2954824911,FR
+2954824912,2954824919,CH
+2954824920,2954824943,FR
+2954824944,2954824959,BE
+2954824960,2954824975,FR
+2954824976,2954824991,ES
+2954824992,2954825023,FR
+2954825024,2954825039,NL
+2954825040,2954825063,FR
2954825064,2954825067,ES
-2954825068,2954825315,FR
+2954825068,2954825159,FR
+2954825160,2954825167,GB
+2954825168,2954825183,FR
+2954825184,2954825191,GB
+2954825192,2954825271,FR
+2954825272,2954825275,ES
+2954825276,2954825315,FR
2954825316,2954825319,ES
-2954825320,2954825403,FR
+2954825320,2954825327,FR
+2954825328,2954825335,DE
+2954825336,2954825343,FR
+2954825344,2954825351,DE
+2954825352,2954825375,FR
+2954825376,2954825383,DE
+2954825384,2954825403,FR
2954825404,2954825407,ES
2954825408,2954825535,FR
2954825536,2954825539,ES
-2954825540,2954826031,FR
+2954825540,2954825551,FR
+2954825552,2954825567,ES
+2954825568,2954825759,FR
+2954825760,2954825791,LT
+2954825792,2954825927,FR
+2954825928,2954825931,CZ
+2954825932,2954826031,FR
2954826032,2954826035,ES
-2954826036,2954826159,FR
+2954826036,2954826039,FR
+2954826040,2954826043,DE
+2954826044,2954826063,FR
+2954826064,2954826071,DE
+2954826072,2954826159,FR
2954826160,2954826163,ES
-2954826164,2954826755,FR
+2954826164,2954826167,FR
+2954826168,2954826175,DE
+2954826176,2954826279,FR
+2954826280,2954826287,ES
+2954826288,2954826343,FR
+2954826344,2954826351,NL
+2954826352,2954826379,FR
+2954826380,2954826383,ES
+2954826384,2954826403,FR
+2954826404,2954826407,IT
+2954826408,2954826415,FR
+2954826416,2954826423,NL
+2954826424,2954826447,FR
+2954826448,2954826451,GB
+2954826452,2954826471,FR
+2954826472,2954826475,GB
+2954826476,2954826755,FR
2954826756,2954826759,IT
2954826760,2954826763,ES
2954826764,2954826775,FR
2954826776,2954826779,ES
-2954826780,2954827799,FR
+2954826780,2954826799,FR
+2954826800,2954826807,ES
+2954826808,2954827007,FR
+2954827008,2954827135,ES
+2954827136,2954827167,FR
+2954827168,2954827199,GB
+2954827200,2954827231,FR
+2954827232,2954827263,BE
+2954827264,2954827295,ES
+2954827296,2954827391,FR
+2954827392,2954827423,DE
+2954827424,2954827647,FR
+2954827648,2954827775,GB
+2954827776,2954827779,FR
+2954827780,2954827783,GB
+2954827784,2954827799,FR
2954827800,2954827807,DE
-2954827808,2954829395,FR
+2954827808,2954827811,IT
+2954827812,2954827823,FR
+2954827824,2954827831,IE
+2954827832,2954827839,PT
+2954827840,2954827855,FR
+2954827856,2954827871,ES
+2954827872,2954827999,FR
+2954828000,2954828031,NL
+2954828032,2954828159,FR
+2954828160,2954828191,IT
+2954828192,2954828447,FR
+2954828448,2954828463,GB
+2954828464,2954828471,IT
+2954828472,2954828799,FR
+2954828800,2954828815,GB
+2954828816,2954828823,FR
+2954828824,2954828831,PT
+2954828832,2954828839,DE
+2954828840,2954828959,FR
+2954828960,2954828975,PL
+2954828976,2954829135,FR
+2954829136,2954829139,DE
+2954829140,2954829179,FR
+2954829180,2954829183,NL
+2954829184,2954829215,GB
+2954829216,2954829375,FR
+2954829376,2954829391,ES
+2954829392,2954829395,FR
2954829396,2954829399,IT
-2954829400,2954829751,FR
+2954829400,2954829427,FR
+2954829428,2954829431,NL
+2954829432,2954829435,GB
+2954829436,2954829459,FR
+2954829460,2954829463,PL
+2954829464,2954829727,FR
+2954829728,2954829735,DE
+2954829736,2954829751,FR
2954829752,2954829752,ES
2954829753,2954829759,FR
2954829760,2954829823,ES
2954829824,2954829843,FR
2954829844,2954829847,DE
-2954829848,2954830395,FR
+2954829848,2954829855,FR
+2954829856,2954829871,PL
+2954829872,2954829875,FR
+2954829876,2954829879,DE
+2954829880,2954829887,FR
+2954829888,2954829903,BE
+2954829904,2954829983,FR
+2954829984,2954830015,GB
+2954830016,2954830111,FR
+2954830112,2954830127,IE
+2954830128,2954830183,FR
+2954830184,2954830191,IT
+2954830192,2954830207,FR
+2954830208,2954830271,PL
+2954830272,2954830287,FR
+2954830288,2954830303,NL
+2954830304,2954830375,FR
+2954830376,2954830383,DE
+2954830384,2954830391,FR
+2954830392,2954830395,BE
2954830396,2954830399,ES
-2954830400,2954831247,FR
+2954830400,2954830447,FR
+2954830448,2954830455,PL
+2954830456,2954830735,FR
+2954830736,2954830751,NL
+2954830752,2954830847,FR
+2954830848,2954830855,IT
+2954830856,2954830895,FR
+2954830896,2954830911,GB
+2954830912,2954830927,FR
+2954830928,2954830931,CZ
+2954830932,2954830975,FR
+2954830976,2954830983,IT
+2954830984,2954830991,FR
+2954830992,2954830995,IT
+2954830996,2954831247,FR
2954831248,2954831251,ES
-2954831252,2954832343,FR
+2954831252,2954831255,FR
+2954831256,2954831263,DE
+2954831264,2954831327,FR
+2954831328,2954831331,LT
+2954831332,2954831503,FR
+2954831504,2954831511,NL
+2954831512,2954831519,FR
+2954831520,2954831535,BE
+2954831536,2954831543,FR
+2954831544,2954831551,ES
+2954831552,2954831611,FR
+2954831612,2954831615,ES
+2954831616,2954831667,FR
+2954831668,2954831671,CZ
+2954831672,2954831807,FR
+2954831808,2954831823,ES
+2954831824,2954831919,FR
+2954831920,2954831935,PL
+2954831936,2954832007,FR
+2954832008,2954832015,PL
+2954832016,2954832159,FR
+2954832160,2954832167,PT
+2954832168,2954832215,FR
+2954832216,2954832219,IE
+2954832220,2954832223,GB
+2954832224,2954832255,FR
+2954832256,2954832287,GB
+2954832288,2954832319,PT
+2954832320,2954832343,FR
2954832344,2954832347,CH
-2954832348,2954832891,FR
+2954832348,2954832671,FR
+2954832672,2954832679,ES
+2954832680,2954832799,FR
+2954832800,2954832815,CZ
+2954832816,2954832823,PT
+2954832824,2954832887,FR
+2954832888,2954832891,IT
2954832892,2954832895,ES
-2954832896,2954833419,FR
+2954832896,2954832927,GB
+2954832928,2954832959,DE
+2954832960,2954833039,FR
+2954833040,2954833047,CZ
+2954833048,2954833055,ES
+2954833056,2954833079,FR
+2954833080,2954833087,IT
+2954833088,2954833255,FR
+2954833256,2954833263,LT
+2954833264,2954833315,FR
+2954833316,2954833319,FI
+2954833320,2954833419,FR
2954833420,2954833423,PL
-2954833424,2954833555,FR
+2954833424,2954833551,FR
+2954833552,2954833555,ES
2954833556,2954833559,NL
2954833560,2954833567,FR
2954833568,2954833571,ES
-2954833572,2954833655,FR
+2954833572,2954833575,FR
+2954833576,2954833583,NL
+2954833584,2954833615,FR
+2954833616,2954833631,DE
+2954833632,2954833635,IT
+2954833636,2954833655,FR
2954833656,2954833659,IT
-2954833660,2954834519,FR
+2954833660,2954833679,FR
+2954833680,2954833695,ES
+2954833696,2954833723,FR
+2954833724,2954833727,LT
+2954833728,2954833855,FR
+2954833856,2954833887,ES
+2954833888,2954833919,FR
+2954833920,2954833927,GB
+2954833928,2954834007,FR
+2954834008,2954834011,GB
+2954834012,2954834063,FR
+2954834064,2954834079,ES
+2954834080,2954834095,CH
+2954834096,2954834151,FR
+2954834152,2954834159,DE
+2954834160,2954834223,FR
+2954834224,2954834227,CH
+2954834228,2954834255,FR
+2954834256,2954834271,CH
+2954834272,2954834287,FR
+2954834288,2954834303,DE
+2954834304,2954834335,NL
+2954834336,2954834431,FR
+2954834432,2954834439,PL
+2954834440,2954834447,FR
+2954834448,2954834455,ES
+2954834456,2954834495,FR
+2954834496,2954834503,PT
+2954834504,2954834519,FR
2954834520,2954834523,ES
-2954834524,2954834671,FR
+2954834524,2954834559,FR
+2954834560,2954834563,GB
+2954834564,2954834623,FR
+2954834624,2954834627,DE
+2954834628,2954834663,FR
+2954834664,2954834671,IE
2954834672,2954834675,ES
-2954834676,2954835295,FR
+2954834676,2954834847,FR
+2954834848,2954834863,ES
+2954834864,2954834871,FR
+2954834872,2954834879,PT
+2954834880,2954834911,ES
+2954834912,2954835295,FR
2954835296,2954835299,ES
-2954835300,2954835443,FR
+2954835300,2954835307,DE
+2954835308,2954835407,FR
+2954835408,2954835411,NL
+2954835412,2954835443,FR
2954835444,2954835447,ES
2954835448,2954835451,FR
2954835452,2954835455,ES
-2954835456,2954837071,FR
+2954835456,2954835479,FR
+2954835480,2954835487,PL
+2954835488,2954835583,FR
+2954835584,2954835599,PT
+2954835600,2954835607,FR
+2954835608,2954835611,PL
+2954835612,2954835615,FR
+2954835616,2954835619,DE
+2954835620,2954836031,FR
+2954836032,2954836063,DE
+2954836064,2954836239,FR
+2954836240,2954836255,IE
+2954836256,2954836351,FR
+2954836352,2954836355,IE
+2954836356,2954836359,FR
+2954836360,2954836367,ES
+2954836368,2954836399,FR
+2954836400,2954836407,BE
+2954836408,2954836415,IT
+2954836416,2954836771,FR
+2954836772,2954836775,GB
+2954836776,2954836895,FR
+2954836896,2954836903,IE
+2954836904,2954837071,FR
2954837072,2954837075,ES
-2954837076,2954837615,FR
+2954837076,2954837119,FR
+2954837120,2954837123,IE
+2954837124,2954837127,ES
+2954837128,2954837135,FR
+2954837136,2954837143,DE
+2954837144,2954837407,FR
+2954837408,2954837423,BE
+2954837424,2954837431,FR
+2954837432,2954837439,PL
+2954837440,2954837479,FR
+2954837480,2954837483,ES
+2954837484,2954837495,FR
+2954837496,2954837499,DE
+2954837500,2954837535,FR
+2954837536,2954837543,PT
+2954837544,2954837551,IT
+2954837552,2954837559,DE
+2954837560,2954837567,FR
+2954837568,2954837575,CZ
+2954837576,2954837583,FR
+2954837584,2954837591,IE
+2954837592,2954837615,FR
2954837616,2954837619,IT
-2954837620,2954837667,FR
+2954837620,2954837663,FR
+2954837664,2954837667,IT
2954837668,2954837671,ES
-2954837672,2954837827,FR
+2954837672,2954837691,FR
+2954837692,2954837695,ES
+2954837696,2954837827,FR
2954837828,2954837831,DE
2954837832,2954837867,FR
2954837868,2954837871,ES
-2954837872,2954838599,FR
+2954837872,2954837919,FR
+2954837920,2954837935,GB
+2954837936,2954838115,FR
+2954838116,2954838119,DE
+2954838120,2954838127,FR
+2954838128,2954838131,FI
+2954838132,2954838135,FR
+2954838136,2954838143,GB
+2954838144,2954838151,PL
+2954838152,2954838199,FR
+2954838200,2954838203,CH
+2954838204,2954838239,FR
+2954838240,2954838255,IT
+2954838256,2954838263,IE
+2954838264,2954838379,FR
+2954838380,2954838383,IT
+2954838384,2954838415,FR
+2954838416,2954838423,ES
+2954838424,2954838511,FR
+2954838512,2954838519,NL
+2954838520,2954838539,FR
+2954838540,2954838543,PT
+2954838544,2954838559,FR
+2954838560,2954838575,IT
+2954838576,2954838599,FR
2954838600,2954838607,GB
2954838608,2954838615,NL
-2954838616,2954839239,FR
+2954838616,2954838863,FR
+2954838864,2954838871,GB
+2954838872,2954838879,FR
+2954838880,2954838895,ES
+2954838896,2954838935,FR
+2954838936,2954838939,PL
+2954838940,2954838943,CH
+2954838944,2954838959,IT
+2954838960,2954838975,DE
+2954838976,2954838999,FR
+2954839000,2954839007,DE
+2954839008,2954839063,FR
+2954839064,2954839067,IT
+2954839068,2954839211,FR
+2954839212,2954839215,ES
+2954839216,2954839239,FR
2954839240,2954839243,IT
2954839244,2954839267,FR
2954839268,2954839271,ES
-2954839272,2954839471,FR
+2954839272,2954839343,FR
+2954839344,2954839351,FI
+2954839352,2954839403,FR
+2954839404,2954839407,IT
+2954839408,2954839423,ES
+2954839424,2954839471,FR
2954839472,2954839479,BE
-2954839480,2954840255,FR
+2954839480,2954839487,ES
+2954839488,2954839523,FR
+2954839524,2954839527,BE
+2954839528,2954839551,FR
+2954839552,2954839583,PL
+2954839584,2954839647,FR
+2954839648,2954839679,GB
+2954839680,2954840175,FR
+2954840176,2954840179,GB
+2954840180,2954840183,FR
+2954840184,2954840191,PT
+2954840192,2954840255,FR
2954840256,2954840447,GB
2954840448,2954840515,FR
2954840516,2954840519,NL
-2954840520,2954840927,FR
+2954840520,2954840575,FR
+2954840576,2954840591,DE
+2954840592,2954840619,FR
+2954840620,2954840623,ES
+2954840624,2954840639,IT
+2954840640,2954840903,FR
+2954840904,2954840911,GB
+2954840912,2954840927,FR
2954840928,2954840931,DE
-2954840932,2954841567,FR
+2954840932,2954841111,FR
+2954841112,2954841119,BE
+2954841120,2954841183,FR
+2954841184,2954841199,NL
+2954841200,2954841207,PL
+2954841208,2954841275,FR
+2954841276,2954841279,DE
+2954841280,2954841299,FR
+2954841300,2954841303,BE
+2954841304,2954841567,FR
2954841568,2954841583,ES
-2954841584,2954841707,FR
+2954841584,2954841595,FR
+2954841596,2954841599,ES
+2954841600,2954841639,FR
+2954841640,2954841643,GB
+2954841644,2954841667,FR
+2954841668,2954841671,DE
+2954841672,2954841707,FR
2954841708,2954841711,NL
-2954841712,2954841807,FR
+2954841712,2954841715,FR
+2954841716,2954841719,IT
+2954841720,2954841727,FR
+2954841728,2954841759,CH
+2954841760,2954841807,FR
2954841808,2954841815,NL
-2954841816,2954843503,FR
+2954841816,2954841855,FR
+2954841856,2954841871,IT
+2954841872,2954841903,FR
+2954841904,2954841907,BE
+2954841908,2954841983,FR
+2954841984,2954841999,ES
+2954842000,2954842043,FR
+2954842044,2954842047,CH
+2954842048,2954842111,FR
+2954842112,2954842143,PL
+2954842144,2954842207,FR
+2954842208,2954842239,DE
+2954842240,2954842403,FR
+2954842404,2954842407,BE
+2954842408,2954842415,FR
+2954842416,2954842419,CH
+2954842420,2954842431,FR
+2954842432,2954842439,GB
+2954842440,2954842463,FR
+2954842464,2954842467,NL
+2954842468,2954842559,FR
+2954842560,2954842575,CZ
+2954842576,2954842703,FR
+2954842704,2954842719,GB
+2954842720,2954842727,FR
+2954842728,2954842731,DE
+2954842732,2954842863,FR
+2954842864,2954842879,ES
+2954842880,2954842911,CZ
+2954842912,2954843055,FR
+2954843056,2954843071,PL
+2954843072,2954843103,FR
+2954843104,2954843135,IE
+2954843136,2954843183,FR
+2954843184,2954843187,ES
+2954843188,2954843319,FR
+2954843320,2954843323,GB
+2954843324,2954843407,FR
+2954843408,2954843415,PL
+2954843416,2954843419,BE
+2954843420,2954843423,PL
+2954843424,2954843503,FR
2954843504,2954843507,ES
-2954843508,2954843767,FR
+2954843508,2954843591,FR
+2954843592,2954843595,BE
+2954843596,2954843599,ES
+2954843600,2954843603,BE
+2954843604,2954843723,FR
+2954843724,2954843727,DE
+2954843728,2954843767,FR
2954843768,2954843771,ES
-2954843772,2954844147,FR
+2954843772,2954843871,FR
+2954843872,2954843887,DE
+2954843888,2954843895,FR
+2954843896,2954843899,DE
+2954843900,2954844031,FR
+2954844032,2954844039,NL
+2954844040,2954844047,IE
+2954844048,2954844147,FR
2954844148,2954844151,DE
-2954844152,2954844999,FR
+2954844152,2954844155,ES
+2954844156,2954844183,FR
+2954844184,2954844187,DE
+2954844188,2954844191,FR
+2954844192,2954844223,IE
+2954844224,2954844239,FR
+2954844240,2954844255,IT
+2954844256,2954844447,FR
+2954844448,2954844455,PT
+2954844456,2954844551,FR
+2954844552,2954844559,PL
+2954844560,2954844607,FR
+2954844608,2954844639,ES
+2954844640,2954844731,FR
+2954844732,2954844735,PL
+2954844736,2954844991,FR
+2954844992,2954844999,GB
2954845000,2954845003,ES
-2954845004,2954846095,FR
+2954845004,2954845023,FR
+2954845024,2954845039,DE
+2954845040,2954845083,FR
+2954845084,2954845087,IE
+2954845088,2954845091,FR
+2954845092,2954845095,CZ
+2954845096,2954845111,FR
+2954845112,2954845119,DE
+2954845120,2954845135,GB
+2954845136,2954845159,FR
+2954845160,2954845167,CZ
+2954845168,2954845391,FR
+2954845392,2954845407,PL
+2954845408,2954845695,FR
+2954845696,2954845759,BE
+2954845760,2954845791,DE
+2954845792,2954845999,FR
+2954846000,2954846015,PT
+2954846016,2954846047,FR
+2954846048,2954846055,NL
+2954846056,2954846063,FR
+2954846064,2954846079,ES
+2954846080,2954846095,FR
2954846096,2954846103,NL
2954846104,2954846107,FR
2954846108,2954846111,ES
-2954846112,2954846139,FR
+2954846112,2954846123,FR
+2954846124,2954846127,IT
+2954846128,2954846139,FR
2954846140,2954846143,ES
-2954846144,2954855075,FR
+2954846144,2954846175,FR
+2954846176,2954846191,NL
+2954846192,2954854471,FR
+2954854472,2954854475,CH
+2954854476,2954854495,FR
+2954854496,2954854511,IT
+2954854512,2954854671,FR
+2954854672,2954854687,ES
+2954854688,2954854815,FR
+2954854816,2954854847,PL
+2954854848,2954854871,FR
+2954854872,2954854875,IT
+2954854876,2954854975,FR
+2954854976,2954854991,PL
+2954854992,2954855007,IT
+2954855008,2954855023,FR
+2954855024,2954855039,DE
+2954855040,2954855075,FR
2954855076,2954855079,ES
-2954855080,2954855507,FR
+2954855080,2954855087,FR
+2954855088,2954855091,PL
+2954855092,2954855507,FR
2954855508,2954855511,DE
2954855512,2954855515,FR
2954855516,2954855519,ES
2954855520,2954855527,FR
2954855528,2954855531,ES
-2954855532,2954856179,FR
+2954855532,2954855615,FR
+2954855616,2954855619,DE
+2954855620,2954855639,FR
+2954855640,2954855643,DE
+2954855644,2954855647,ES
+2954855648,2954855651,CZ
+2954855652,2954855727,FR
+2954855728,2954855743,DE
+2954855744,2954856063,FR
+2954856064,2954856067,LT
+2954856068,2954856071,FR
+2954856072,2954856079,GB
+2954856080,2954856111,FR
+2954856112,2954856115,ES
+2954856116,2954856175,FR
+2954856176,2954856179,DE
2954856180,2954856183,ES
-2954856184,2954859323,FR
+2954856184,2954856543,FR
+2954856544,2954856547,CH
+2954856548,2954856551,CZ
+2954856552,2954856563,FR
+2954856564,2954856567,DE
+2954856568,2954856571,CH
+2954856572,2954856611,FR
+2954856612,2954856615,IT
+2954856616,2954856619,FR
+2954856620,2954856623,ES
+2954856624,2954856975,FR
+2954856976,2954856979,GB
+2954856980,2954856983,LT
+2954856984,2954856999,FR
+2954857000,2954857003,DE
+2954857004,2954857087,FR
+2954857088,2954857091,IT
+2954857092,2954857095,FR
+2954857096,2954857099,LT
+2954857100,2954857115,FR
+2954857116,2954857119,NL
+2954857120,2954857183,FR
+2954857184,2954857215,PL
+2954857216,2954857703,FR
+2954857704,2954857707,ES
+2954857708,2954857999,FR
+2954858000,2954858015,IE
+2954858016,2954858059,FR
+2954858060,2954858063,BE
+2954858064,2954858367,FR
+2954858368,2954858375,NL
+2954858376,2954858379,ES
+2954858380,2954858383,IE
+2954858384,2954858419,FR
+2954858420,2954858423,GB
+2954858424,2954858427,FR
+2954858428,2954858431,BE
+2954858432,2954858483,FR
+2954858484,2954858487,GB
+2954858488,2954858819,FR
+2954858820,2954858823,IT
+2954858824,2954858827,ES
+2954858828,2954858831,FR
+2954858832,2954858847,PL
+2954858848,2954859043,FR
+2954859044,2954859047,ES
+2954859048,2954859119,FR
+2954859120,2954859123,CZ
+2954859124,2954859239,FR
+2954859240,2954859243,PL
+2954859244,2954859311,FR
+2954859312,2954859315,ES
+2954859316,2954859323,FR
2954859324,2954859327,ES
-2954859328,2954861875,FR
+2954859328,2954859583,FR
+2954859584,2954859615,DE
+2954859616,2954859679,FR
+2954859680,2954859695,PT
+2954859696,2954859711,FR
+2954859712,2954859727,PL
+2954859728,2954859743,FR
+2954859744,2954859775,ES
+2954859776,2954859831,FR
+2954859832,2954859839,ES
+2954859840,2954859871,FR
+2954859872,2954859903,ES
+2954859904,2954859955,FR
+2954859956,2954859959,GB
+2954859960,2954860223,FR
+2954860224,2954860227,PL
+2954860228,2954860231,FR
+2954860232,2954860239,IT
+2954860240,2954860255,FR
+2954860256,2954860259,PL
+2954860260,2954860263,FR
+2954860264,2954860271,GB
+2954860272,2954860303,FR
+2954860304,2954860319,FI
+2954860320,2954860327,FR
+2954860328,2954860335,NL
+2954860336,2954860367,FR
+2954860368,2954860383,PL
+2954860384,2954860415,FR
+2954860416,2954860423,NL
+2954860424,2954860427,FR
+2954860428,2954860431,BE
+2954860432,2954860447,FR
+2954860448,2954860455,GB
+2954860456,2954860535,FR
+2954860536,2954860539,DE
+2954860540,2954860671,FR
+2954860672,2954860687,DE
+2954860688,2954860695,GB
+2954860696,2954860703,CZ
+2954860704,2954860735,FR
+2954860736,2954860751,PL
+2954860752,2954860767,FR
+2954860768,2954860783,ES
+2954860784,2954860791,FR
+2954860792,2954860799,IT
+2954860800,2954860991,FR
+2954860992,2954861007,DE
+2954861008,2954861119,FR
+2954861120,2954861135,GB
+2954861136,2954861167,FR
+2954861168,2954861183,BE
+2954861184,2954861191,PL
+2954861192,2954861423,FR
+2954861424,2954861431,CZ
+2954861432,2954861619,FR
+2954861620,2954861623,IT
+2954861624,2954861635,FR
+2954861636,2954861639,ES
+2954861640,2954861671,FR
+2954861672,2954861675,ES
+2954861676,2954861759,FR
+2954861760,2954861763,ES
+2954861764,2954861839,FR
+2954861840,2954861847,IT
+2954861848,2954861875,FR
2954861876,2954861879,CH
-2954861880,2954862415,FR
+2954861880,2954861919,FR
+2954861920,2954861923,CZ
+2954861924,2954861947,FR
+2954861948,2954861951,FI
+2954861952,2954861983,FR
+2954861984,2954861987,IE
+2954861988,2954861995,FR
+2954861996,2954861999,ES
+2954862000,2954862047,FR
+2954862048,2954862079,ES
+2954862080,2954862207,FR
+2954862208,2954862211,ES
+2954862212,2954862247,FR
+2954862248,2954862255,ES
+2954862256,2954862367,FR
+2954862368,2954862375,DE
+2954862376,2954862383,FR
+2954862384,2954862391,DE
+2954862392,2954862415,FR
2954862416,2954862419,ES
-2954862420,2954863615,FR
+2954862420,2954862423,FR
+2954862424,2954862431,PL
+2954862432,2954862471,FR
+2954862472,2954862479,FI
+2954862480,2954863615,FR
2954863616,2954864639,DE
2954864640,2954865663,IT
2954865664,2954866687,ES
-2954866688,2954870799,FR
+2954866688,2954867041,FR
+2954867042,2954867043,PT
+2954867044,2954870799,FR
2954870800,2954870803,ES
2954870804,2954870843,FR
2954870844,2954870847,ES
-2954870848,2954870903,FR
+2954870848,2954870871,FR
+2954870872,2954870875,ES
+2954870876,2954870903,FR
2954870904,2954870907,ES
-2954870908,2954875879,FR
+2954870908,2954871391,FR
+2954871392,2954871423,DE
+2954871424,2954871615,FR
+2954871616,2954871623,PT
+2954871624,2954871627,FR
+2954871628,2954871631,IT
+2954871632,2954871635,FR
+2954871636,2954871639,IT
+2954871640,2954871743,FR
+2954871744,2954871759,CH
+2954871760,2954871839,FR
+2954871840,2954871871,NL
+2954871872,2954871887,FR
+2954871888,2954871895,BE
+2954871896,2954872323,FR
+2954872324,2954872327,IT
+2954872328,2954872383,FR
+2954872384,2954872415,IE
+2954872416,2954872447,FR
+2954872448,2954872479,CH
+2954872480,2954872559,FR
+2954872560,2954872567,NL
+2954872568,2954872587,FR
+2954872588,2954872591,LT
+2954872592,2954872679,FR
+2954872680,2954872687,ES
+2954872688,2954872863,FR
+2954872864,2954872895,ES
+2954872896,2954872959,FR
+2954872960,2954872975,IT
+2954872976,2954872979,FR
+2954872980,2954872983,GB
+2954872984,2954872987,FR
+2954872988,2954872991,FI
+2954872992,2954873023,PL
+2954873024,2954873087,BE
+2954873088,2954873391,FR
+2954873392,2954873407,NL
+2954873408,2954873451,FR
+2954873452,2954873455,GB
+2954873456,2954873551,FR
+2954873552,2954873567,PL
+2954873568,2954873583,FR
+2954873584,2954873591,DE
+2954873592,2954873647,FR
+2954873648,2954873663,IE
+2954873664,2954873783,FR
+2954873784,2954873787,PT
+2954873788,2954873839,FR
+2954873840,2954873847,ES
+2954873848,2954873851,CZ
+2954873852,2954873903,FR
+2954873904,2954873911,IT
+2954873912,2954874123,FR
+2954874124,2954874127,LT
+2954874128,2954874135,FR
+2954874136,2954874143,FI
+2954874144,2954874151,NL
+2954874152,2954874319,FR
+2954874320,2954874335,IT
+2954874336,2954874355,FR
+2954874356,2954874359,IT
+2954874360,2954874379,FR
+2954874380,2954874383,CZ
+2954874384,2954874391,FR
+2954874392,2954874399,DE
+2954874400,2954874419,FR
+2954874420,2954874423,NL
+2954874424,2954874799,FR
+2954874800,2954874815,GB
+2954874816,2954874827,FR
+2954874828,2954874831,ES
+2954874832,2954874867,FR
+2954874868,2954874871,IT
+2954874872,2954874927,FR
+2954874928,2954874943,IE
+2954874944,2954875023,FR
+2954875024,2954875039,PL
+2954875040,2954875047,NL
+2954875048,2954875055,FR
+2954875056,2954875071,CZ
+2954875072,2954875103,FR
+2954875104,2954875135,NL
+2954875136,2954875167,GB
+2954875168,2954875183,FR
+2954875184,2954875191,GB
+2954875192,2954875203,FR
+2954875204,2954875207,CH
+2954875208,2954875231,FR
+2954875232,2954875247,ES
+2954875248,2954875279,FR
+2954875280,2954875287,PL
+2954875288,2954875295,GB
+2954875296,2954875311,FR
+2954875312,2954875327,IT
+2954875328,2954875379,FR
+2954875380,2954875383,DE
+2954875384,2954875391,FR
+2954875392,2954875455,GB
+2954875456,2954875471,FR
+2954875472,2954875479,FI
+2954875480,2954875695,FR
+2954875696,2954875711,PL
+2954875712,2954875779,FR
+2954875780,2954875783,ES
+2954875784,2954875871,FR
+2954875872,2954875879,BE
2954875880,2954875883,ES
-2954875884,2954876871,FR
+2954875884,2954875911,FR
+2954875912,2954875919,PL
+2954875920,2954876055,FR
+2954876056,2954876063,IE
+2954876064,2954876111,FR
+2954876112,2954876119,ES
+2954876120,2954876399,FR
+2954876400,2954876407,IT
+2954876408,2954876447,FR
+2954876448,2954876455,CH
+2954876456,2954876459,DE
+2954876460,2954876591,FR
+2954876592,2954876607,CH
+2954876608,2954876639,PT
+2954876640,2954876871,FR
2954876872,2954876875,ES
2954876876,2954876887,FR
2954876888,2954876891,ES
-2954876892,2954877103,FR
+2954876892,2954876903,FR
+2954876904,2954876911,IT
+2954876912,2954876927,FR
+2954876928,2954876943,PL
+2954876944,2954877103,FR
2954877104,2954877107,PL
-2954877108,2954877163,FR
+2954877108,2954877111,FR
+2954877112,2954877119,NL
+2954877120,2954877151,FR
+2954877152,2954877159,PL
+2954877160,2954877163,FR
2954877164,2954877167,ES
-2954877168,2954877819,FR
+2954877168,2954877279,FR
+2954877280,2954877311,NL
+2954877312,2954877535,FR
+2954877536,2954877539,IT
+2954877540,2954877599,FR
+2954877600,2954877615,IT
+2954877616,2954877819,FR
2954877820,2954877823,ES
-2954877824,2954878907,FR
+2954877824,2954877983,FR
+2954877984,2954877991,DE
+2954877992,2954878031,FR
+2954878032,2954878035,IT
+2954878036,2954878095,FR
+2954878096,2954878111,ES
+2954878112,2954878143,FR
+2954878144,2954878207,ES
+2954878208,2954878463,IE
+2954878464,2954878495,FR
+2954878496,2954878499,ES
+2954878500,2954878511,FR
+2954878512,2954878527,ES
+2954878528,2954878591,FR
+2954878592,2954878607,DE
+2954878608,2954878707,FR
+2954878708,2954878711,ES
+2954878712,2954878815,FR
+2954878816,2954878847,LT
+2954878848,2954878863,FR
+2954878864,2954878871,GB
+2954878872,2954878887,FR
+2954878888,2954878891,PL
+2954878892,2954878907,FR
2954878908,2954878911,ES
2954878912,2954887167,FR
2954887168,2954891263,UA
@@ -47143,7 +51218,8 @@
2957193216,2957195263,RU
2957195264,2957197311,PS
2957197312,2957201407,IR
-2957201408,2957202679,US
+2957201408,2957201423,GB
+2957201424,2957202679,US
2957202680,2957202680,PT
2957202681,2957203455,US
2957203456,2957205503,FR
@@ -47406,7 +51482,8 @@
2960152576,2960158719,RU
2960158720,2960160767,PL
2960160768,2960162815,UA
-2960162816,2960171007,CZ
+2960162816,2960168959,RU
+2960168960,2960171007,CZ
2960171008,2960175103,RU
2960175104,2960179199,SK
2960179200,2960205823,RU
@@ -47593,10 +51670,15 @@
2961088512,2961088767,SE
2961088768,2961089535,UA
2961089536,2961090559,KG
-2961090560,2961108991,RO
+2961090560,2961102847,RO
+2961102848,2961103871,DE
+2961103872,2961108991,RO
2961108992,2961111039,GB
-2961111040,2961113087,RO
-2961113088,2961178623,CH
+2961111040,2961112063,PL
+2961112064,2961113087,RO
+2961113088,2961166079,CH
+2961166080,2961166335,DE
+2961166336,2961178623,CH
2961178624,2965372927,FR
2965372928,2965766143,RU
2965766144,2965897215,DE
@@ -47738,11 +51820,7 @@
2987552768,2987556863,GB
2987556864,2987560959,NL
2987560960,2987565055,DE
-2987565056,2987566591,AT
-2987566592,2987566847,HU
-2987566848,2987568383,AT
-2987568384,2987568639,HU
-2987568640,2987569151,AT
+2987565056,2987569151,AT
2987569152,2987573247,FR
2987573248,2987577343,TR
2987577344,2987585535,RU
@@ -47817,7 +51895,9 @@
2987771904,2987773951,IT
2987773952,2987775999,FR
2987776000,2987778047,NL
-2987778048,2987780095,CH
+2987778048,2987779071,CH
+2987779072,2987779583,LI
+2987779584,2987780095,CH
2987780096,2987782143,GB
2987782144,2987784191,EE
2987784192,2987786239,DK
@@ -47888,216 +51968,1850 @@
2988179456,2988411647,SE
2988411648,2988411775,DE
2988411776,2988441599,SE
-2988441600,2988442075,FR
+2988441600,2988441603,ES
+2988441604,2988441607,FR
+2988441608,2988441615,DE
+2988441616,2988441815,FR
+2988441816,2988441819,LT
+2988441820,2988441887,FR
+2988441888,2988441895,NL
+2988441896,2988441899,FR
+2988441900,2988441903,IT
+2988441904,2988441919,FR
+2988441920,2988441923,ES
+2988441924,2988441927,FR
+2988441928,2988441931,DE
+2988441932,2988441951,FR
+2988441952,2988441967,IE
+2988441968,2988441975,FR
+2988441976,2988441979,GB
+2988441980,2988441983,FR
+2988441984,2988441991,DE
+2988441992,2988442075,FR
2988442076,2988442079,ES
-2988442080,2988442847,FR
+2988442080,2988442087,PT
+2988442088,2988442111,FR
+2988442112,2988442143,CZ
+2988442144,2988442175,CH
+2988442176,2988442207,BE
+2988442208,2988442239,GB
+2988442240,2988442447,FR
+2988442448,2988442463,PL
+2988442464,2988442495,FR
+2988442496,2988442503,BE
+2988442504,2988442687,FR
+2988442688,2988442703,IT
+2988442704,2988442751,FR
+2988442752,2988442783,PT
+2988442784,2988442815,FR
+2988442816,2988442831,PL
+2988442832,2988442847,FR
2988442848,2988442863,IT
-2988442864,2988444208,FR
+2988442864,2988442871,FR
+2988442872,2988442879,DE
+2988442880,2988442911,FR
+2988442912,2988442919,GB
+2988442920,2988442923,FR
+2988442924,2988442927,PT
+2988442928,2988442943,FR
+2988442944,2988442975,GB
+2988442976,2988443071,FR
+2988443072,2988443087,BE
+2988443088,2988443447,FR
+2988443448,2988443455,DE
+2988443456,2988443647,FR
+2988443648,2988443651,NL
+2988443652,2988443927,FR
+2988443928,2988443935,IT
+2988443936,2988444203,FR
+2988444204,2988444207,DE
+2988444208,2988444208,PL
2988444209,2988444209,FI
-2988444210,2988444671,FR
+2988444210,2988444211,PL
+2988444212,2988444287,FR
+2988444288,2988444415,GB
+2988444416,2988444543,PT
+2988444544,2988444575,FR
+2988444576,2988444607,FI
+2988444608,2988444639,ES
+2988444640,2988444671,FR
2988444672,2988444679,ES
-2988444680,2988449207,FR
-2988449208,2988449215,ES
-2988449216,2988451839,FR
+2988444680,2988444703,FR
+2988444704,2988444719,GB
+2988444720,2988444967,FR
+2988444968,2988444975,IT
+2988444976,2988445279,FR
+2988445280,2988445287,IT
+2988445288,2988445295,GB
+2988445296,2988445375,FR
+2988445376,2988445391,GB
+2988445392,2988446275,FR
+2988446276,2988446279,ES
+2988446280,2988446431,FR
+2988446432,2988446463,IT
+2988446464,2988447327,FR
+2988447328,2988447359,IT
+2988447360,2988447423,FR
+2988447424,2988447487,PT
+2988447488,2988447507,FR
+2988447508,2988447511,NL
+2988447512,2988447519,FR
+2988447520,2988447535,IT
+2988447536,2988447551,FR
+2988447552,2988447583,DE
+2988447584,2988447599,NL
+2988447600,2988447615,FR
+2988447616,2988447743,PT
+2988447744,2988447747,DE
+2988447748,2988447959,FR
+2988447960,2988447967,IT
+2988447968,2988448031,FR
+2988448032,2988448063,GB
+2988448064,2988448127,FR
+2988448128,2988448255,IT
+2988448256,2988448271,FR
+2988448272,2988448287,NL
+2988448288,2988448567,FR
+2988448568,2988448575,PL
+2988448576,2988448639,FR
+2988448640,2988448671,NL
+2988448672,2988448687,CZ
+2988448688,2988448695,FR
+2988448696,2988448703,DE
+2988448704,2988448767,PT
+2988448768,2988448799,FR
+2988448800,2988448815,ES
+2988448816,2988448907,FR
+2988448908,2988448911,IT
+2988448912,2988449055,FR
+2988449056,2988449071,ES
+2988449072,2988449183,FR
+2988449184,2988449191,PL
+2988449192,2988449199,FI
+2988449200,2988449215,ES
+2988449216,2988449567,FR
+2988449568,2988449575,GB
+2988449576,2988451839,FR
2988451840,2988453887,BE
-2988453888,2988457983,GB
-2988457984,2988458319,FR
+2988453888,2988454399,GB
+2988454400,2988454655,FR
+2988454656,2988457983,GB
+2988457984,2988458047,FR
+2988458048,2988458063,DE
+2988458064,2988458299,FR
+2988458300,2988458303,ES
+2988458304,2988458319,FR
2988458320,2988458327,NL
-2988458328,2988459119,FR
+2988458328,2988458399,FR
+2988458400,2988458431,NL
+2988458432,2988458763,FR
+2988458764,2988458767,DE
+2988458768,2988459023,FR
+2988459024,2988459039,ES
+2988459040,2988459047,IT
+2988459048,2988459055,FR
+2988459056,2988459071,ES
+2988459072,2988459107,FR
+2988459108,2988459111,PL
+2988459112,2988459119,FR
2988459120,2988459127,IT
2988459128,2988459135,PL
-2988459136,2988459535,FR
+2988459136,2988459183,FR
+2988459184,2988459199,CZ
+2988459200,2988459243,FR
+2988459244,2988459247,ES
+2988459248,2988459251,DE
+2988459252,2988459439,FR
+2988459440,2988459455,GB
+2988459456,2988459535,FR
2988459536,2988459539,ES
-2988459540,2988459679,FR
+2988459540,2988459543,BE
+2988459544,2988459603,FR
+2988459604,2988459607,ES
+2988459608,2988459631,FR
+2988459632,2988459639,DE
+2988459640,2988459643,IT
+2988459644,2988459679,FR
2988459680,2988459683,ES
2988459684,2988459687,FR
2988459688,2988459691,PL
-2988459692,2988459863,FR
+2988459692,2988459695,ES
+2988459696,2988459719,FR
+2988459720,2988459723,IT
+2988459724,2988459759,FR
+2988459760,2988459767,DE
+2988459768,2988459863,FR
2988459864,2988459867,ES
-2988459868,2988460575,FR
+2988459868,2988459903,FR
+2988459904,2988459967,PL
+2988459968,2988460031,FR
+2988460032,2988460063,DE
+2988460064,2988460115,FR
+2988460116,2988460119,DE
+2988460120,2988460123,IT
+2988460124,2988460191,FR
+2988460192,2988460207,BE
+2988460208,2988460223,IT
+2988460224,2988460311,FR
+2988460312,2988460319,IT
+2988460320,2988460371,FR
+2988460372,2988460375,DE
+2988460376,2988460383,FR
+2988460384,2988460399,ES
+2988460400,2988460547,FR
+2988460548,2988460551,NL
+2988460552,2988460559,FR
+2988460560,2988460575,CZ
2988460576,2988460591,PT
-2988460592,2988460651,FR
+2988460592,2988460631,FR
+2988460632,2988460635,DE
+2988460636,2988460647,FR
+2988460648,2988460651,GB
2988460652,2988460655,ES
-2988460656,2988461703,FR
+2988460656,2988460703,FR
+2988460704,2988460711,PL
+2988460712,2988460735,FR
+2988460736,2988460751,GB
+2988460752,2988460755,FR
+2988460756,2988460759,BE
+2988460760,2988460767,FR
+2988460768,2988460799,GB
+2988460800,2988460895,FR
+2988460896,2988460927,PT
+2988460928,2988460959,FR
+2988460960,2988460975,NL
+2988460976,2988461003,FR
+2988461004,2988461007,ES
+2988461008,2988461031,FR
+2988461032,2988461035,GB
+2988461036,2988461183,FR
+2988461184,2988461215,IE
+2988461216,2988461255,FR
+2988461256,2988461259,ES
+2988461260,2988461263,DE
+2988461264,2988461279,FR
+2988461280,2988461295,IT
+2988461296,2988461299,PL
+2988461300,2988461307,FR
+2988461308,2988461311,NL
+2988461312,2988461375,PL
+2988461376,2988461391,FR
+2988461392,2988461399,DE
+2988461400,2988461407,PL
+2988461408,2988461415,NL
+2988461416,2988461523,FR
+2988461524,2988461527,LT
+2988461528,2988461595,FR
+2988461596,2988461599,CH
+2988461600,2988461631,FR
+2988461632,2988461695,PL
+2988461696,2988461703,FR
2988461704,2988461707,NL
-2988461708,2988462603,FR
+2988461708,2988461815,FR
+2988461816,2988461819,GB
+2988461820,2988461871,FR
+2988461872,2988461879,PT
+2988461880,2988461907,FR
+2988461908,2988461911,ES
+2988461912,2988462127,FR
+2988462128,2988462131,CH
+2988462132,2988462171,FR
+2988462172,2988462175,IT
+2988462176,2988462195,FR
+2988462196,2988462199,IT
+2988462200,2988462311,FR
+2988462312,2988462319,DE
+2988462320,2988462323,FR
+2988462324,2988462327,IE
+2988462328,2988462603,FR
2988462604,2988462607,ES
-2988462608,2988463915,FR
+2988462608,2988462623,FR
+2988462624,2988462639,CH
+2988462640,2988462747,FR
+2988462748,2988462751,ES
+2988462752,2988463131,FR
+2988463132,2988463135,ES
+2988463136,2988463143,IT
+2988463144,2988463167,FR
+2988463168,2988463199,PL
+2988463200,2988463203,ES
+2988463204,2988463207,FR
+2988463208,2988463211,NL
+2988463212,2988463247,FR
+2988463248,2988463251,PL
+2988463252,2988463263,FR
+2988463264,2988463279,GB
+2988463280,2988463319,FR
+2988463320,2988463323,FI
+2988463324,2988463615,FR
+2988463616,2988463623,GB
+2988463624,2988463627,FR
+2988463628,2988463631,ES
+2988463632,2988463791,FR
+2988463792,2988463799,ES
+2988463800,2988463915,FR
2988463916,2988463919,ES
2988463920,2988463999,FR
2988464000,2988464007,IE
2988464008,2988464015,LT
-2988464016,2988464611,FR
+2988464016,2988464059,FR
+2988464060,2988464063,ES
+2988464064,2988464359,FR
+2988464360,2988464360,NL
+2988464361,2988464543,FR
+2988464544,2988464551,NL
+2988464552,2988464591,FR
+2988464592,2988464595,BE
+2988464596,2988464611,FR
2988464612,2988464615,IT
-2988464616,2988464623,FR
+2988464616,2988464619,FR
+2988464620,2988464623,LT
2988464624,2988464627,ES
-2988464628,2988465215,FR
+2988464628,2988464927,FR
+2988464928,2988464943,DE
+2988464944,2988464947,BE
+2988464948,2988464951,FR
+2988464952,2988464955,IE
+2988464956,2988464959,FR
+2988464960,2988464975,ES
+2988464976,2988464991,FR
+2988464992,2988465023,DE
+2988465024,2988465151,FR
+2988465152,2988465215,GB
2988465216,2988465219,ES
-2988465220,2988465279,FR
+2988465220,2988465231,FR
+2988465232,2988465239,IT
+2988465240,2988465279,FR
2988465280,2988465295,DE
-2988465296,2988465559,FR
+2988465296,2988465307,FR
+2988465308,2988465311,DE
+2988465312,2988465359,FR
+2988465360,2988465363,GB
+2988465364,2988465391,FR
+2988465392,2988465399,CH
+2988465400,2988465559,FR
2988465560,2988465563,ES
-2988465564,2988476415,FR
+2988465564,2988465567,FR
+2988465568,2988465571,ES
+2988465572,2988465587,FR
+2988465588,2988465591,IT
+2988465592,2988465615,FR
+2988465616,2988465619,IT
+2988465620,2988465623,DE
+2988465624,2988465919,FR
+2988465920,2988465983,ES
+2988465984,2988476415,FR
2988476416,2988478463,IT
-2988478464,2988478579,FR
+2988478464,2988478487,FR
+2988478488,2988478495,PL
+2988478496,2988478499,ES
+2988478500,2988478579,FR
2988478580,2988478583,DE
2988478584,2988478587,FR
2988478588,2988478591,DE
-2988478592,2988479791,FR
+2988478592,2988478683,FR
+2988478684,2988478687,BE
+2988478688,2988478863,FR
+2988478864,2988478871,IE
+2988478872,2988478879,FR
+2988478880,2988478911,GB
+2988478912,2988478947,FR
+2988478948,2988478951,CZ
+2988478952,2988479003,FR
+2988479004,2988479007,ES
+2988479008,2988479055,FR
+2988479056,2988479071,ES
+2988479072,2988479075,BE
+2988479076,2988479103,FR
+2988479104,2988479107,IE
+2988479108,2988479119,FR
+2988479120,2988479135,NL
+2988479136,2988479143,FR
+2988479144,2988479147,DE
+2988479148,2988479159,FR
+2988479160,2988479167,ES
+2988479168,2988479199,FR
+2988479200,2988479231,PL
+2988479232,2988479323,FR
+2988479324,2988479327,PL
+2988479328,2988479343,FR
+2988479344,2988479359,NL
+2988479360,2988479519,FR
+2988479520,2988479535,DE
+2988479536,2988479567,FR
+2988479568,2988479575,DE
+2988479576,2988479711,FR
+2988479712,2988479743,CH
+2988479744,2988479783,FR
+2988479784,2988479787,ES
+2988479788,2988479791,FR
2988479792,2988479807,GB
-2988479808,2988482111,FR
+2988479808,2988480007,FR
+2988480008,2988480011,CH
+2988480012,2988480031,FR
+2988480032,2988480047,DE
+2988480048,2988480095,FR
+2988480096,2988480111,IT
+2988480112,2988480143,FR
+2988480144,2988480147,ES
+2988480148,2988480155,FR
+2988480156,2988480159,BE
+2988480160,2988480223,FR
+2988480224,2988480227,NL
+2988480228,2988480231,IE
+2988480232,2988480235,FR
+2988480236,2988480239,IT
+2988480240,2988480431,FR
+2988480432,2988480435,BE
+2988480436,2988480503,FR
+2988480504,2988480511,DE
+2988480512,2988480783,FR
+2988480784,2988480799,NL
+2988480800,2988480895,FR
+2988480896,2988480903,DE
+2988480904,2988480915,ES
+2988480916,2988480923,FR
+2988480924,2988480927,ES
+2988480928,2988481039,FR
+2988481040,2988481047,GB
+2988481048,2988481063,FR
+2988481064,2988481067,GB
+2988481068,2988481223,FR
+2988481224,2988481231,BE
+2988481232,2988481599,FR
+2988481600,2988481663,NL
+2988481664,2988481679,FR
+2988481680,2988481695,IT
+2988481696,2988481775,FR
+2988481776,2988481779,IE
+2988481780,2988482031,FR
+2988482032,2988482035,ES
+2988482036,2988482111,FR
2988482112,2988482143,DE
-2988482144,2988482319,FR
-2988482320,2988482335,IT
-2988482336,2988482575,FR
+2988482144,2988482163,FR
+2988482164,2988482167,IT
+2988482168,2988482175,FR
+2988482176,2988482191,ES
+2988482192,2988482291,FR
+2988482292,2988482295,IE
+2988482296,2988482315,FR
+2988482316,2988482335,IT
+2988482336,2988482399,FR
+2988482400,2988482407,GB
+2988482408,2988482411,PL
+2988482412,2988482447,FR
+2988482448,2988482463,DE
+2988482464,2988482495,FR
+2988482496,2988482511,PL
+2988482512,2988482535,FR
+2988482536,2988482543,ES
+2988482544,2988482575,FR
2988482576,2988482579,CZ
-2988482580,2988483027,FR
+2988482580,2988482639,FR
+2988482640,2988482647,PL
+2988482648,2988482655,FR
+2988482656,2988482687,GB
+2988482688,2988482775,FR
+2988482776,2988482779,DE
+2988482780,2988482823,FR
+2988482824,2988482827,CZ
+2988482828,2988482879,FR
+2988482880,2988482883,DE
+2988482884,2988482887,PL
+2988482888,2988482891,BE
+2988482892,2988482895,FI
+2988482896,2988482927,ES
+2988482928,2988483027,FR
2988483028,2988483031,ES
-2988483032,2988484831,FR
+2988483032,2988483035,FR
+2988483036,2988483039,IT
+2988483040,2988483095,FR
+2988483096,2988483103,BE
+2988483104,2988483115,FR
+2988483116,2988483119,IT
+2988483120,2988483199,FR
+2988483200,2988483231,PT
+2988483232,2988483387,FR
+2988483388,2988483391,GB
+2988483392,2988483427,FR
+2988483428,2988483431,GB
+2988483432,2988483639,FR
+2988483640,2988483647,GB
+2988483648,2988483663,IT
+2988483664,2988483679,FR
+2988483680,2988483695,PT
+2988483696,2988483739,FR
+2988483740,2988483743,BE
+2988483744,2988483771,FR
+2988483772,2988483775,PL
+2988483776,2988483871,FR
+2988483872,2988483879,GB
+2988483880,2988483959,FR
+2988483960,2988483963,ES
+2988483964,2988483987,FR
+2988483988,2988483991,ES
+2988483992,2988484031,FR
+2988484032,2988484047,GB
+2988484048,2988484095,FR
+2988484096,2988484111,ES
+2988484112,2988484127,PL
+2988484128,2988484163,FR
+2988484164,2988484167,GB
+2988484168,2988484171,PL
+2988484172,2988484187,FR
+2988484188,2988484191,ES
+2988484192,2988484407,FR
+2988484408,2988484415,PL
+2988484416,2988484423,IT
+2988484424,2988484427,FR
+2988484428,2988484431,DE
+2988484432,2988484439,FR
+2988484440,2988484443,FI
+2988484444,2988484831,FR
2988484832,2988484847,GB
-2988484848,2988485683,FR
+2988484848,2988484955,FR
+2988484956,2988484959,DE
+2988484960,2988485167,FR
+2988485168,2988485183,GB
+2988485184,2988485599,FR
+2988485600,2988485607,ES
+2988485608,2988485675,FR
+2988485676,2988485679,NL
+2988485680,2988485683,FR
2988485684,2988485687,PL
-2988485688,2988486311,FR
+2988485688,2988485767,FR
+2988485768,2988485771,BE
+2988485772,2988485831,FR
+2988485832,2988485839,NL
+2988485840,2988486015,FR
+2988486016,2988486031,GB
+2988486032,2988486075,FR
+2988486076,2988486079,DE
+2988486080,2988486083,FR
+2988486084,2988486087,PT
+2988486088,2988486127,FR
+2988486128,2988486143,GB
+2988486144,2988486147,FR
+2988486148,2988486151,BE
+2988486152,2988486199,FR
+2988486200,2988486207,GB
+2988486208,2988486215,IT
+2988486216,2988486311,FR
2988486312,2988486319,NL
-2988486320,2988487071,FR
+2988486320,2988486375,FR
+2988486376,2988486379,DE
+2988486380,2988486519,FR
+2988486520,2988486527,PL
+2988486528,2988486575,FR
+2988486576,2988486579,GB
+2988486580,2988486647,FR
+2988486648,2988486651,ES
+2988486652,2988486655,IT
+2988486656,2988486707,FR
+2988486708,2988486711,IT
+2988486712,2988486719,IE
+2988486720,2988486791,FR
+2988486792,2988486795,ES
+2988486796,2988486799,FR
+2988486800,2988486807,PL
+2988486808,2988486811,FR
+2988486812,2988486815,DE
+2988486816,2988486879,FR
+2988486880,2988486887,BE
+2988486888,2988486891,FR
+2988486892,2988486895,IT
+2988486896,2988486907,FR
+2988486908,2988486911,NL
+2988486912,2988487071,FR
2988487072,2988487075,ES
2988487076,2988487095,FR
2988487096,2988487099,ES
-2988487100,2988489119,FR
+2988487100,2988487135,FR
+2988487136,2988487167,ES
+2988487168,2988487235,FR
+2988487236,2988487239,NL
+2988487240,2988487303,FR
+2988487304,2988487311,NL
+2988487312,2988487883,FR
+2988487884,2988487887,NL
+2988487888,2988487967,FR
+2988487968,2988487975,DE
+2988487976,2988488031,FR
+2988488032,2988488047,NL
+2988488048,2988488151,FR
+2988488152,2988488159,IT
+2988488160,2988488183,FR
+2988488184,2988488187,DE
+2988488188,2988488479,FR
+2988488480,2988488487,CH
+2988488488,2988488563,FR
+2988488564,2988488567,GB
+2988488568,2988488647,FR
+2988488648,2988488655,IT
+2988488656,2988488671,FR
+2988488672,2988488679,BE
+2988488680,2988488963,FR
+2988488964,2988488967,DE
+2988488968,2988488971,GB
+2988488972,2988488975,IT
+2988488976,2988489071,FR
+2988489072,2988489087,GB
+2988489088,2988489095,FR
+2988489096,2988489099,DE
+2988489100,2988489119,FR
2988489120,2988489127,DE
-2988489128,2988489479,FR
+2988489128,2988489135,FR
+2988489136,2988489151,PT
+2988489152,2988489175,FR
+2988489176,2988489179,DE
+2988489180,2988489255,FR
+2988489256,2988489259,GB
+2988489260,2988489295,FR
+2988489296,2988489311,CH
+2988489312,2988489335,FR
+2988489336,2988489343,BE
+2988489344,2988489379,FR
+2988489380,2988489383,ES
+2988489384,2988489391,PL
+2988489392,2988489479,FR
2988489480,2988489483,DE
-2988489484,2988489675,FR
+2988489484,2988489487,NL
+2988489488,2988489527,FR
+2988489528,2988489535,PT
+2988489536,2988489671,FR
+2988489672,2988489675,IT
2988489676,2988489679,ES
-2988489680,2988490179,FR
+2988489680,2988489711,FR
+2988489712,2988489719,IE
+2988489720,2988489727,PL
+2988489728,2988489743,FR
+2988489744,2988489747,CH
+2988489748,2988489791,FR
+2988489792,2988489823,PL
+2988489824,2988489855,FR
+2988489856,2988489887,GB
+2988489888,2988489903,FR
+2988489904,2988489919,PT
+2988489920,2988490047,FR
+2988490048,2988490051,PL
+2988490052,2988490055,FR
+2988490056,2988490059,BE
+2988490060,2988490063,FR
+2988490064,2988490079,GB
+2988490080,2988490095,FR
+2988490096,2988490103,CH
+2988490104,2988490179,FR
2988490180,2988490183,ES
-2988490184,2988490683,FR
+2988490184,2988490195,FR
+2988490196,2988490199,GB
+2988490200,2988490247,FR
+2988490248,2988490251,IE
+2988490252,2988490359,FR
+2988490360,2988490367,PT
+2988490368,2988490383,FR
+2988490384,2988490399,IE
+2988490400,2988490407,DE
+2988490408,2988490631,FR
+2988490632,2988490639,IT
+2988490640,2988490655,PL
+2988490656,2988490671,ES
+2988490672,2988490683,FR
2988490684,2988490686,IT
2988490687,2988490687,BE
-2988490688,2988492799,FR
+2988490688,2988490719,ES
+2988490720,2988492799,FR
2988492800,2988494847,PL
-2988494848,2988499663,FR
+2988494848,2988498991,FR
+2988498992,2988499007,DE
+2988499008,2988499167,FR
+2988499168,2988499199,NL
+2988499200,2988499231,FR
+2988499232,2988499263,PT
+2988499264,2988499455,FR
+2988499456,2988499463,CZ
+2988499464,2988499471,ES
+2988499472,2988499487,FR
+2988499488,2988499503,DE
+2988499504,2988499559,FR
+2988499560,2988499567,PT
+2988499568,2988499623,FR
+2988499624,2988499631,GB
+2988499632,2988499639,FR
+2988499640,2988499647,IT
+2988499648,2988499663,FR
2988499664,2988499671,NL
2988499672,2988499729,FR
2988499730,2988499730,GB
2988499731,2988499736,FR
2988499737,2988499737,NL
-2988499738,2988500415,FR
+2988499738,2988499767,FR
+2988499768,2988499775,GB
+2988499776,2988499823,FR
+2988499824,2988499831,GB
+2988499832,2988499851,FR
+2988499852,2988499855,ES
+2988499856,2988499935,FR
+2988499936,2988499967,IE
+2988499968,2988500255,FR
+2988500256,2988500271,ES
+2988500272,2988500343,FR
+2988500344,2988500347,IT
+2988500348,2988500351,CH
+2988500352,2988500415,FR
2988500416,2988500447,CZ
-2988500448,2988500855,FR
+2988500448,2988500511,FR
+2988500512,2988500519,CH
+2988500520,2988500607,FR
+2988500608,2988500623,PL
+2988500624,2988500639,FR
+2988500640,2988500671,IT
+2988500672,2988500679,FR
+2988500680,2988500687,ES
+2988500688,2988500703,GB
+2988500704,2988500735,FR
+2988500736,2988500751,PL
+2988500752,2988500855,FR
2988500856,2988500859,ES
-2988500860,2988501127,FR
+2988500860,2988500959,FR
+2988500960,2988500975,NL
+2988500976,2988501055,FR
+2988501056,2988501087,GB
+2988501088,2988501127,FR
2988501128,2988501131,IT
-2988501132,2988502051,FR
+2988501132,2988501215,FR
+2988501216,2988501223,FI
+2988501224,2988501367,FR
+2988501368,2988501375,IE
+2988501376,2988502051,FR
2988502052,2988502055,PL
-2988502056,2988502479,FR
+2988502056,2988502107,FR
+2988502108,2988502111,GB
+2988502112,2988502267,FR
+2988502268,2988502271,BE
+2988502272,2988502287,FR
+2988502288,2988502303,PL
+2988502304,2988502391,FR
+2988502392,2988502399,IT
+2988502400,2988502407,FR
+2988502408,2988502411,FI
+2988502412,2988502479,FR
2988502480,2988502483,ES
-2988502484,2988502655,FR
+2988502484,2988502487,PL
+2988502488,2988502491,FR
+2988502492,2988502495,DE
+2988502496,2988502631,FR
+2988502632,2988502639,FI
+2988502640,2988502655,FR
2988502656,2988502719,DE
-2988502720,2988502881,FR
+2988502720,2988502735,FR
+2988502736,2988502751,ES
+2988502752,2988502881,FR
2988502882,2988502882,IT
-2988502883,2988504371,FR
+2988502883,2988502891,FR
+2988502892,2988502895,ES
+2988502896,2988502911,FI
+2988502912,2988503031,FR
+2988503032,2988503035,FI
+2988503036,2988503327,FR
+2988503328,2988503343,IT
+2988503344,2988503395,FR
+2988503396,2988503399,NL
+2988503400,2988503407,CH
+2988503408,2988503903,FR
+2988503904,2988503907,PL
+2988503908,2988503911,DE
+2988503912,2988503919,FR
+2988503920,2988503927,IT
+2988503928,2988503935,FR
+2988503936,2988503939,GB
+2988503940,2988503999,FR
+2988504000,2988504003,BE
+2988504004,2988504095,FR
+2988504096,2988504127,PL
+2988504128,2988504143,CH
+2988504144,2988504231,FR
+2988504232,2988504239,DE
+2988504240,2988504315,FR
+2988504316,2988504319,PT
+2988504320,2988504371,FR
2988504372,2988504375,PL
-2988504376,2988505391,FR
+2988504376,2988504435,FR
+2988504436,2988504439,LT
+2988504440,2988504543,FR
+2988504544,2988504559,DE
+2988504560,2988504567,FR
+2988504568,2988504575,IT
+2988504576,2988504591,FR
+2988504592,2988504599,IT
+2988504600,2988504647,FR
+2988504648,2988504655,IT
+2988504656,2988504827,FR
+2988504828,2988504831,DE
+2988504832,2988504895,FR
+2988504896,2988504959,DE
+2988504960,2988504967,FR
+2988504968,2988504975,ES
+2988504976,2988504979,PL
+2988504980,2988505151,FR
+2988505152,2988505167,GB
+2988505168,2988505183,FR
+2988505184,2988505191,NL
+2988505192,2988505199,DE
+2988505200,2988505207,FR
+2988505208,2988505215,ES
+2988505216,2988505335,FR
+2988505336,2988505339,IE
+2988505340,2988505343,DE
+2988505344,2988505375,FR
+2988505376,2988505391,GB
2988505392,2988505395,ES
-2988505396,2988507163,FR
+2988505396,2988505399,FI
+2988505400,2988505403,PL
+2988505404,2988505455,FR
+2988505456,2988505463,GB
+2988505464,2988505479,FR
+2988505480,2988505487,IT
+2988505488,2988505495,FR
+2988505496,2988505499,NL
+2988505500,2988505503,ES
+2988505504,2988505567,FR
+2988505568,2988505583,IE
+2988505584,2988505615,FR
+2988505616,2988505623,PL
+2988505624,2988505703,FR
+2988505704,2988505707,FI
+2988505708,2988505735,FR
+2988505736,2988505743,FI
+2988505744,2988505751,ES
+2988505752,2988505951,FR
+2988505952,2988505967,NL
+2988505968,2988506235,FR
+2988506236,2988506239,NL
+2988506240,2988506379,FR
+2988506380,2988506383,GB
+2988506384,2988506439,FR
+2988506440,2988506447,IE
+2988506448,2988506459,FR
+2988506460,2988506463,ES
+2988506464,2988506495,FR
+2988506496,2988506499,CH
+2988506500,2988506527,FR
+2988506528,2988506543,IE
+2988506544,2988506567,FR
+2988506568,2988506571,NL
+2988506572,2988506651,FR
+2988506652,2988506655,IT
+2988506656,2988506671,FR
+2988506672,2988506687,DE
+2988506688,2988506703,FR
+2988506704,2988506719,ES
+2988506720,2988506767,FR
+2988506768,2988506771,NL
+2988506772,2988506827,FR
+2988506828,2988506831,ES
+2988506832,2988506867,FR
+2988506868,2988506875,CH
+2988506876,2988506879,DE
+2988506880,2988506943,FR
+2988506944,2988506975,DE
+2988506976,2988507039,FR
+2988507040,2988507071,ES
+2988507072,2988507135,FR
+2988507136,2988507143,PL
+2988507144,2988507151,FR
+2988507152,2988507155,ES
+2988507156,2988507163,FR
2988507164,2988507167,ES
-2988507168,2988507975,FR
+2988507168,2988507203,FR
+2988507204,2988507207,DE
+2988507208,2988507215,FR
+2988507216,2988507223,FI
+2988507224,2988507231,DE
+2988507232,2988507291,FR
+2988507292,2988507295,IT
+2988507296,2988507459,FR
+2988507460,2988507463,BE
+2988507464,2988507471,DE
+2988507472,2988507503,FR
+2988507504,2988507519,IT
+2988507520,2988507527,FR
+2988507528,2988507531,GB
+2988507532,2988507535,NL
+2988507536,2988507567,FR
+2988507568,2988507583,ES
+2988507584,2988507595,FR
+2988507596,2988507599,LT
+2988507600,2988507615,FR
+2988507616,2988507623,DE
+2988507624,2988507627,FR
+2988507628,2988507631,PL
+2988507632,2988507743,FR
+2988507744,2988507759,NL
+2988507760,2988507775,FR
+2988507776,2988507791,NL
+2988507792,2988507807,IT
+2988507808,2988507871,FR
+2988507872,2988507879,DE
+2988507880,2988507955,FR
+2988507956,2988507959,DE
+2988507960,2988507975,FR
2988507976,2988507979,IT
-2988507980,2988509511,FR
+2988507980,2988508035,FR
+2988508036,2988508039,DE
+2988508040,2988508111,FR
+2988508112,2988508127,IE
+2988508128,2988508143,FR
+2988508144,2988508147,IE
+2988508148,2988508175,FR
+2988508176,2988508191,IE
+2988508192,2988508211,FR
+2988508212,2988508215,CZ
+2988508216,2988508239,FR
+2988508240,2988508255,GB
+2988508256,2988508303,FR
+2988508304,2988508307,CH
+2988508308,2988508479,FR
+2988508480,2988508543,BE
+2988508544,2988508607,FR
+2988508608,2988508639,ES
+2988508640,2988508671,DE
+2988508672,2988508723,FR
+2988508724,2988508727,GB
+2988508728,2988508947,FR
+2988508948,2988508951,ES
+2988508952,2988508987,FR
+2988508988,2988508991,ES
+2988508992,2988509007,BE
+2988509008,2988509011,FR
+2988509012,2988509015,BE
+2988509016,2988509023,FR
+2988509024,2988509055,CH
+2988509056,2988509287,FR
+2988509288,2988509291,GB
+2988509292,2988509403,FR
+2988509404,2988509407,FI
+2988509408,2988509467,FR
+2988509468,2988509471,BE
+2988509472,2988509511,FR
2988509512,2988509515,PL
-2988509516,2988509747,FR
+2988509516,2988509551,FR
+2988509552,2988509559,DE
+2988509560,2988509599,FR
+2988509600,2988509615,DE
+2988509616,2988509619,FR
+2988509620,2988509623,DE
+2988509624,2988509627,FR
+2988509628,2988509631,GB
+2988509632,2988509735,FR
+2988509736,2988509739,CH
+2988509740,2988509747,FR
2988509748,2988509751,LT
-2988509752,2988512903,FR
+2988509752,2988509755,IT
+2988509756,2988509767,FR
+2988509768,2988509775,PL
+2988509776,2988509779,DE
+2988509780,2988509791,FR
+2988509792,2988509823,ES
+2988509824,2988509839,PL
+2988509840,2988509863,FR
+2988509864,2988509871,NL
+2988509872,2988509875,FR
+2988509876,2988509879,NL
+2988509880,2988509931,FR
+2988509932,2988509935,ES
+2988509936,2988509939,IT
+2988509940,2988509951,FR
+2988509952,2988509955,DE
+2988509956,2988509983,FR
+2988509984,2988509991,DE
+2988509992,2988509999,FR
+2988510000,2988510015,IT
+2988510016,2988510023,IE
+2988510024,2988510039,FR
+2988510040,2988510043,ES
+2988510044,2988510207,FR
+2988510208,2988510215,GB
+2988510216,2988510223,DE
+2988510224,2988510255,FR
+2988510256,2988510259,FI
+2988510260,2988510323,FR
+2988510324,2988510327,FI
+2988510328,2988510335,ES
+2988510336,2988510423,FR
+2988510424,2988510427,DE
+2988510428,2988510431,IT
+2988510432,2988510499,FR
+2988510500,2988510503,GB
+2988510504,2988510507,FR
+2988510508,2988510511,GB
+2988510512,2988510515,FR
+2988510516,2988510519,ES
+2988510520,2988510975,FR
+2988510976,2988510983,PL
+2988510984,2988511559,FR
+2988511560,2988511567,IT
+2988511568,2988511615,FR
+2988511616,2988511647,IE
+2988511648,2988511695,FR
+2988511696,2988511703,PL
+2988511704,2988511719,FR
+2988511720,2988511723,PL
+2988511724,2988511743,FR
+2988511744,2988511747,IT
+2988511748,2988511835,FR
+2988511836,2988511839,IT
+2988511840,2988511855,BE
+2988511856,2988511871,FR
+2988511872,2988511879,IT
+2988511880,2988511887,FR
+2988511888,2988511903,CH
+2988511904,2988511927,FR
+2988511928,2988511931,ES
+2988511932,2988511959,FR
+2988511960,2988511967,DE
+2988511968,2988511999,FR
+2988512000,2988512031,PL
+2988512032,2988512055,FR
+2988512056,2988512059,GB
+2988512060,2988512143,FR
+2988512144,2988512159,ES
+2988512160,2988512195,FR
+2988512196,2988512199,PL
+2988512200,2988512231,FR
+2988512232,2988512239,NL
+2988512240,2988512435,FR
+2988512436,2988512439,DE
+2988512440,2988512455,FR
+2988512456,2988512459,GB
+2988512460,2988512467,FR
+2988512468,2988512471,GB
+2988512472,2988512511,FR
+2988512512,2988512515,DE
+2988512516,2988512519,PL
+2988512520,2988512703,FR
+2988512704,2988512735,ES
+2988512736,2988512767,PL
+2988512768,2988512879,FR
+2988512880,2988512895,GB
+2988512896,2988512903,FR
2988512904,2988512907,GB
-2988512908,2988513003,FR
+2988512908,2988512911,DE
+2988512912,2988512963,FR
+2988512964,2988512967,PL
+2988512968,2988513003,FR
2988513004,2988513007,ES
-2988513008,2988513747,FR
+2988513008,2988513015,FR
+2988513016,2988513019,PT
+2988513020,2988513023,GB
+2988513024,2988513135,FR
+2988513136,2988513151,IT
+2988513152,2988513207,FR
+2988513208,2988513219,GB
+2988513220,2988513231,FR
+2988513232,2988513235,GB
+2988513236,2988513239,FR
+2988513240,2988513247,IT
+2988513248,2988513327,FR
+2988513328,2988513331,PL
+2988513332,2988513351,FR
+2988513352,2988513359,DE
+2988513360,2988513363,ES
+2988513364,2988513503,FR
+2988513504,2988513511,GB
+2988513512,2988513711,FR
+2988513712,2988513715,GB
+2988513716,2988513743,FR
+2988513744,2988513747,DE
2988513748,2988513751,IT
-2988513752,2988515327,FR
+2988513752,2988513919,FR
+2988513920,2988513951,PL
+2988513952,2988513967,FR
+2988513968,2988513983,NL
+2988513984,2988513999,BE
+2988514000,2988514015,FR
+2988514016,2988514023,GB
+2988514024,2988514131,FR
+2988514132,2988514135,DE
+2988514136,2988514239,FR
+2988514240,2988514243,DE
+2988514244,2988514335,FR
+2988514336,2988514339,GB
+2988514340,2988514359,FR
+2988514360,2988514367,ES
+2988514368,2988514399,FR
+2988514400,2988514431,NL
+2988514432,2988514463,FR
+2988514464,2988514495,GB
+2988514496,2988514527,NL
+2988514528,2988514543,GB
+2988514544,2988514559,PT
+2988514560,2988514591,FR
+2988514592,2988514623,PL
+2988514624,2988514687,FR
+2988514688,2988514719,FI
+2988514720,2988514735,FR
+2988514736,2988514739,DE
+2988514740,2988514747,FR
+2988514748,2988514751,NL
+2988514752,2988514819,FR
+2988514820,2988514823,NL
+2988514824,2988514847,FR
+2988514848,2988514879,DE
+2988514880,2988514991,FR
+2988514992,2988514995,IT
+2988514996,2988515007,FR
+2988515008,2988515023,BE
+2988515024,2988515031,FR
+2988515032,2988515035,ES
+2988515036,2988515327,FR
2988515328,2988517375,DE
2988517376,2988519423,FR
2988519424,2988521471,PL
-2988521472,2988524075,FR
+2988521472,2988523523,FR
+2988523524,2988523527,GB
+2988523528,2988523603,FR
+2988523604,2988523607,LT
+2988523608,2988523631,FR
+2988523632,2988523639,IT
+2988523640,2988523651,FR
+2988523652,2988523655,IT
+2988523656,2988523663,ES
+2988523664,2988523667,FR
+2988523668,2988523671,NL
+2988523672,2988523711,FR
+2988523712,2988523727,ES
+2988523728,2988523735,FI
+2988523736,2988524047,FR
+2988524048,2988524055,NL
+2988524056,2988524063,FR
+2988524064,2988524071,PL
+2988524072,2988524075,FR
2988524076,2988524079,ES
-2988524080,2988524271,FR
+2988524080,2988524143,FR
+2988524144,2988524147,GB
+2988524148,2988524175,FR
+2988524176,2988524183,IT
+2988524184,2988524271,FR
2988524272,2988524287,DE
-2988524288,2988525887,FR
+2988524288,2988524299,FR
+2988524300,2988524303,DE
+2988524304,2988524367,FR
+2988524368,2988524383,NL
+2988524384,2988524479,FR
+2988524480,2988524483,NL
+2988524484,2988524511,FR
+2988524512,2988524543,IT
+2988524544,2988524559,ES
+2988524560,2988524575,BE
+2988524576,2988524591,PL
+2988524592,2988524639,FR
+2988524640,2988524671,PL
+2988524672,2988524767,FR
+2988524768,2988524799,CH
+2988524800,2988524815,FR
+2988524816,2988524831,GB
+2988524832,2988524863,FR
+2988524864,2988524895,PL
+2988524896,2988524911,FR
+2988524912,2988524919,DE
+2988524920,2988525579,FR
+2988525580,2988525583,IT
+2988525584,2988525631,FR
+2988525632,2988525647,ES
+2988525648,2988525819,FR
+2988525820,2988525823,IT
+2988525824,2988525847,FR
+2988525848,2988525851,CZ
+2988525852,2988525887,FR
2988525888,2988525951,GB
-2988525952,2988526415,FR
-2988526416,2988526423,ES
-2988526424,2988527527,FR
+2988525952,2988526079,FR
+2988526080,2988526087,DE
+2988526088,2988526091,IT
+2988526092,2988526143,FR
+2988526144,2988526175,CH
+2988526176,2988526367,FR
+2988526368,2988526383,IT
+2988526384,2988526423,ES
+2988526424,2988526427,GB
+2988526428,2988526431,FR
+2988526432,2988526435,IT
+2988526436,2988526575,FR
+2988526576,2988526579,GB
+2988526580,2988526927,FR
+2988526928,2988526935,DE
+2988526936,2988526939,IT
+2988526940,2988526947,FR
+2988526948,2988526951,BE
+2988526952,2988526999,FR
+2988527000,2988527003,IT
+2988527004,2988527039,FR
+2988527040,2988527055,NL
+2988527056,2988527087,FR
+2988527088,2988527095,IT
+2988527096,2988527167,FR
+2988527168,2988527175,ES
+2988527176,2988527191,FR
+2988527192,2988527195,NL
+2988527196,2988527411,FR
+2988527412,2988527415,ES
+2988527416,2988527527,FR
2988527528,2988527531,NL
-2988527532,2988527831,FR
+2988527532,2988527535,FR
+2988527536,2988527543,PL
+2988527544,2988527583,FR
+2988527584,2988527591,IT
+2988527592,2988527615,FR
+2988527616,2988527623,DE
+2988527624,2988527671,FR
+2988527672,2988527675,IT
+2988527676,2988527747,FR
+2988527748,2988527751,IT
+2988527752,2988527755,FR
+2988527756,2988527759,IT
+2988527760,2988527823,FR
+2988527824,2988527831,PL
2988527832,2988527839,ES
2988527840,2988527887,FR
2988527888,2988527891,ES
-2988527892,2988529351,FR
+2988527892,2988528015,FR
+2988528016,2988528031,GB
+2988528032,2988528111,FR
+2988528112,2988528115,PL
+2988528116,2988528187,FR
+2988528188,2988528191,IT
+2988528192,2988528219,FR
+2988528220,2988528223,PT
+2988528224,2988528279,FR
+2988528280,2988528287,DE
+2988528288,2988528351,FR
+2988528352,2988528383,PL
+2988528384,2988528639,FR
+2988528640,2988528647,ES
+2988528648,2988528655,FR
+2988528656,2988528659,BE
+2988528660,2988528699,FR
+2988528700,2988528703,CZ
+2988528704,2988528751,FR
+2988528752,2988528759,NL
+2988528760,2988528835,FR
+2988528836,2988528839,IT
+2988528840,2988528931,FR
+2988528932,2988528935,NL
+2988528936,2988528943,FR
+2988528944,2988528959,ES
+2988528960,2988528983,FR
+2988528984,2988528991,GB
+2988528992,2988529031,FR
+2988529032,2988529039,GB
+2988529040,2988529087,FR
+2988529088,2988529095,GB
+2988529096,2988529159,FR
+2988529160,2988529163,ES
+2988529164,2988529215,FR
+2988529216,2988529247,IE
+2988529248,2988529251,FR
+2988529252,2988529255,PT
+2988529256,2988529263,IT
+2988529264,2988529315,FR
+2988529316,2988529319,PL
+2988529320,2988529323,FR
+2988529324,2988529327,BE
+2988529328,2988529343,FR
+2988529344,2988529351,ES
2988529352,2988529359,GB
2988529360,2988529375,FR
2988529376,2988529383,GB
2988529384,2988529387,ES
-2988529388,2988535807,FR
+2988529388,2988529599,FR
+2988529600,2988529607,IT
+2988529608,2988529787,FR
+2988529788,2988529791,ES
+2988529792,2988529915,FR
+2988529916,2988529919,DE
+2988529920,2988529935,NL
+2988529936,2988529947,FR
+2988529948,2988529951,BE
+2988529952,2988529955,FR
+2988529956,2988529959,ES
+2988529960,2988530031,FR
+2988530032,2988530039,GB
+2988530040,2988530255,FR
+2988530256,2988530271,IT
+2988530272,2988530311,FR
+2988530312,2988530319,CH
+2988530320,2988530407,FR
+2988530408,2988530415,ES
+2988530416,2988530695,FR
+2988530696,2988530703,IE
+2988530704,2988530735,FR
+2988530736,2988530739,IT
+2988530740,2988530847,FR
+2988530848,2988530863,ES
+2988530864,2988530871,FR
+2988530872,2988530879,ES
+2988530880,2988530927,FR
+2988530928,2988530943,BE
+2988530944,2988531027,FR
+2988531028,2988531031,CZ
+2988531032,2988531039,FR
+2988531040,2988531043,DE
+2988531044,2988531075,FR
+2988531076,2988531079,GB
+2988531080,2988531247,FR
+2988531248,2988531255,GB
+2988531256,2988531259,FR
+2988531260,2988531263,ES
+2988531264,2988531291,FR
+2988531292,2988531295,DE
+2988531296,2988531311,GB
+2988531312,2988531315,CZ
+2988531316,2988531319,FR
+2988531320,2988531323,GB
+2988531324,2988531327,FR
+2988531328,2988531351,GB
+2988531352,2988531391,FR
+2988531392,2988531399,NL
+2988531400,2988531423,FR
+2988531424,2988531427,NL
+2988531428,2988531431,FR
+2988531432,2988531439,ES
+2988531440,2988535807,FR
2988535808,2988537855,ES
2988537856,2988539971,FR
2988539972,2988539975,ES
-2988539976,2988540503,FR
+2988539976,2988540007,FR
+2988540008,2988540015,ES
+2988540016,2988540019,FR
+2988540020,2988540023,DE
+2988540024,2988540231,FR
+2988540232,2988540235,ES
+2988540236,2988540239,DE
+2988540240,2988540303,FR
+2988540304,2988540319,IT
+2988540320,2988540359,FR
+2988540360,2988540363,DE
+2988540364,2988540495,FR
+2988540496,2988540503,IE
2988540504,2988540507,NL
-2988540508,2988544671,FR
+2988540508,2988540563,FR
+2988540564,2988540567,CZ
+2988540568,2988540631,FR
+2988540632,2988540635,CZ
+2988540636,2988540639,FR
+2988540640,2988540647,IT
+2988540648,2988540667,FR
+2988540668,2988540671,DE
+2988540672,2988540783,FR
+2988540784,2988540787,PL
+2988540788,2988541119,FR
+2988541120,2988541127,BE
+2988541128,2988541315,FR
+2988541316,2988541319,FI
+2988541320,2988541343,FR
+2988541344,2988541347,NL
+2988541348,2988541367,FR
+2988541368,2988541371,GB
+2988541372,2988541439,FR
+2988541440,2988541443,ES
+2988541444,2988541455,FR
+2988541456,2988541463,DE
+2988541464,2988541547,FR
+2988541548,2988541551,GB
+2988541552,2988541659,FR
+2988541660,2988541663,ES
+2988541664,2988541691,FR
+2988541692,2988541695,DE
+2988541696,2988541735,FR
+2988541736,2988541743,DE
+2988541744,2988541815,FR
+2988541816,2988541819,IE
+2988541820,2988541855,FR
+2988541856,2988541863,PL
+2988541864,2988541867,BE
+2988541868,2988541895,FR
+2988541896,2988541903,NL
+2988541904,2988541927,FR
+2988541928,2988541935,LT
+2988541936,2988542027,FR
+2988542028,2988542031,ES
+2988542032,2988542047,PT
+2988542048,2988542143,FR
+2988542144,2988542175,IT
+2988542176,2988542431,FR
+2988542432,2988542439,BE
+2988542440,2988542443,GB
+2988542444,2988542447,IE
+2988542448,2988542539,FR
+2988542540,2988542543,DE
+2988542544,2988542607,FR
+2988542608,2988542611,PL
+2988542612,2988542615,FR
+2988542616,2988542623,IT
+2988542624,2988542627,FR
+2988542628,2988542631,NL
+2988542632,2988542911,FR
+2988542912,2988542919,IE
+2988542920,2988542927,FR
+2988542928,2988542931,IT
+2988542932,2988542935,PL
+2988542936,2988542939,FR
+2988542940,2988542943,ES
+2988542944,2988543023,FR
+2988543024,2988543039,BE
+2988543040,2988543051,FR
+2988543052,2988543055,NL
+2988543056,2988543063,FR
+2988543064,2988543067,ES
+2988543068,2988543103,FR
+2988543104,2988543135,CH
+2988543136,2988543167,BE
+2988543168,2988543191,FR
+2988543192,2988543195,NL
+2988543196,2988543379,FR
+2988543380,2988543383,ES
+2988543384,2988543407,FR
+2988543408,2988543411,CZ
+2988543412,2988543439,FR
+2988543440,2988543447,GB
+2988543448,2988543551,FR
+2988543552,2988543559,ES
+2988543560,2988543563,PT
+2988543564,2988543615,FR
+2988543616,2988543647,CZ
+2988543648,2988543679,FR
+2988543680,2988543711,NL
+2988543712,2988543935,FR
+2988543936,2988543939,GB
+2988543940,2988544003,FR
+2988544004,2988544007,PL
+2988544008,2988544015,FR
+2988544016,2988544023,DE
+2988544024,2988544039,FR
+2988544040,2988544043,IT
+2988544044,2988544047,BE
+2988544048,2988544183,FR
+2988544184,2988544187,DE
+2988544188,2988544223,FR
+2988544224,2988544227,ES
+2988544228,2988544231,FR
+2988544232,2988544239,GB
+2988544240,2988544271,FR
+2988544272,2988544275,CH
+2988544276,2988544303,FR
+2988544304,2988544307,DE
+2988544308,2988544327,FR
+2988544328,2988544331,PT
+2988544332,2988544495,FR
+2988544496,2988544511,GB
+2988544512,2988544655,FR
+2988544656,2988544659,ES
+2988544660,2988544671,FR
2988544672,2988544687,GB
2988544688,2988544691,NL
-2988544692,2988546727,FR
+2988544692,2988544727,FR
+2988544728,2988544735,DE
+2988544736,2988544935,FR
+2988544936,2988544943,NL
+2988544944,2988544987,FR
+2988544988,2988544991,IE
+2988544992,2988544999,ES
+2988545000,2988545003,DE
+2988545004,2988545007,IT
+2988545008,2988545015,FR
+2988545016,2988545019,DE
+2988545020,2988545031,FR
+2988545032,2988545039,FI
+2988545040,2988545051,FR
+2988545052,2988545055,GB
+2988545056,2988545215,FR
+2988545216,2988545223,ES
+2988545224,2988545227,NL
+2988545228,2988545383,FR
+2988545384,2988545387,DE
+2988545388,2988545455,FR
+2988545456,2988545471,IT
+2988545472,2988545487,GB
+2988545488,2988545551,FR
+2988545552,2988545555,GB
+2988545556,2988545559,NL
+2988545560,2988545583,FR
+2988545584,2988545599,IT
+2988545600,2988545871,FR
+2988545872,2988545887,ES
+2988545888,2988545931,FR
+2988545932,2988545935,PL
+2988545936,2988546015,FR
+2988546016,2988546031,NL
+2988546032,2988546035,GB
+2988546036,2988546291,FR
+2988546292,2988546295,ES
+2988546296,2988546555,FR
+2988546556,2988546559,ES
+2988546560,2988546583,FR
+2988546584,2988546591,DE
+2988546592,2988546619,FR
+2988546620,2988546623,ES
+2988546624,2988546687,FR
+2988546688,2988546691,CH
+2988546692,2988546695,FR
+2988546696,2988546699,ES
+2988546700,2988546703,FR
+2988546704,2988546719,DE
+2988546720,2988546727,FR
2988546728,2988546731,ES
-2988546732,2988547067,FR
+2988546732,2988546735,DE
+2988546736,2988546863,FR
+2988546864,2988546867,CH
+2988546868,2988546871,FR
+2988546872,2988546879,DE
+2988546880,2988546995,FR
+2988546996,2988546999,IT
+2988547000,2988547063,FR
+2988547064,2988547067,GB
2988547068,2988547071,ES
2988547072,2988547095,FR
2988547096,2988547099,ES
-2988547100,2988547655,FR
+2988547100,2988547167,FR
+2988547168,2988547175,GB
+2988547176,2988547263,FR
+2988547264,2988547267,NL
+2988547268,2988547479,FR
+2988547480,2988547487,GB
+2988547488,2988547507,FR
+2988547508,2988547511,NL
+2988547512,2988547543,FR
+2988547544,2988547547,NL
+2988547548,2988547567,FR
+2988547568,2988547583,DE
+2988547584,2988547655,FR
2988547656,2988547663,PL
-2988547664,2988547871,FR
+2988547664,2988547807,FR
+2988547808,2988547823,GB
+2988547824,2988547839,FR
+2988547840,2988547855,DE
+2988547856,2988547871,FR
2988547872,2988547903,GB
-2988547904,2988548015,FR
+2988547904,2988547979,FR
+2988547980,2988547983,ES
+2988547984,2988548015,FR
2988548016,2988548019,ES
2988548020,2988548095,FR
2988548096,2988550143,ES
-2988550144,2988550359,FR
+2988550144,2988550175,FR
+2988550176,2988550179,DE
+2988550180,2988550207,FR
+2988550208,2988550239,DE
+2988550240,2988550247,FR
+2988550248,2988550251,PL
+2988550252,2988550259,FR
+2988550260,2988550263,PL
+2988550264,2988550359,FR
2988550360,2988550363,ES
-2988550364,2988550438,FR
+2988550364,2988550367,FR
+2988550368,2988550399,FI
+2988550400,2988550431,FR
+2988550432,2988550438,ES
2988550439,2988550439,GB
-2988550440,2988550463,FR
+2988550440,2988550447,ES
+2988550448,2988550451,FR
+2988550452,2988550455,IE
+2988550456,2988550463,FR
2988550464,2988550527,DE
-2988550528,2988551443,FR
+2988550528,2988550627,FR
+2988550628,2988550631,CZ
+2988550632,2988550679,FR
+2988550680,2988550687,GB
+2988550688,2988550911,FR
+2988550912,2988550927,NL
+2988550928,2988551135,FR
+2988551136,2988551167,ES
+2988551168,2988551443,FR
2988551444,2988551447,ES
-2988551448,2988551535,FR
+2988551448,2988551511,FR
+2988551512,2988551519,ES
+2988551520,2988551535,FI
2988551536,2988551551,DE
-2988551552,2988553531,FR
+2988551552,2988551871,FR
+2988551872,2988551887,PL
+2988551888,2988552543,FR
+2988552544,2988552551,PL
+2988552552,2988552567,FR
+2988552568,2988552575,GB
+2988552576,2988552603,FR
+2988552604,2988552607,GB
+2988552608,2988552647,FR
+2988552648,2988552655,NL
+2988552656,2988552659,FR
+2988552660,2988552663,PT
+2988552664,2988552671,NL
+2988552672,2988552711,FR
+2988552712,2988552719,IE
+2988552720,2988552735,GB
+2988552736,2988552831,FR
+2988552832,2988552847,ES
+2988552848,2988552883,FR
+2988552884,2988552887,IT
+2988552888,2988552891,DE
+2988552892,2988552915,FR
+2988552916,2988552919,NL
+2988552920,2988552927,FR
+2988552928,2988552943,ES
+2988552944,2988553087,FR
+2988553088,2988553119,GB
+2988553120,2988553399,FR
+2988553400,2988553407,NL
+2988553408,2988553415,FR
+2988553416,2988553423,DE
+2988553424,2988553455,FR
+2988553456,2988553471,GB
+2988553472,2988553531,FR
2988553532,2988553535,ES
-2988553536,2988554035,FR
+2988553536,2988553551,GB
+2988553552,2988553567,FR
+2988553568,2988553575,PL
+2988553576,2988553659,FR
+2988553660,2988553663,NL
+2988553664,2988554015,FR
+2988554016,2988554031,BE
+2988554032,2988554035,FR
2988554036,2988554039,ES
-2988554040,2988555527,FR
+2988554040,2988554063,FR
+2988554064,2988554067,DE
+2988554068,2988554071,FR
+2988554072,2988554075,ES
+2988554076,2988554127,FR
+2988554128,2988554131,IT
+2988554132,2988554175,FR
+2988554176,2988554183,CZ
+2988554184,2988554499,FR
+2988554500,2988554503,GB
+2988554504,2988554547,FR
+2988554548,2988554551,IT
+2988554552,2988554787,FR
+2988554788,2988554791,CH
+2988554792,2988554795,FI
+2988554796,2988554919,FR
+2988554920,2988554927,BE
+2988554928,2988555055,FR
+2988555056,2988555063,FI
+2988555064,2988555115,FR
+2988555116,2988555119,ES
+2988555120,2988555123,BE
+2988555124,2988555127,IT
+2988555128,2988555167,FR
+2988555168,2988555183,ES
+2988555184,2988555187,IT
+2988555188,2988555211,FR
+2988555212,2988555215,GB
+2988555216,2988555231,FR
+2988555232,2988555263,PL
+2988555264,2988555527,FR
2988555528,2988555531,ES
-2988555532,2988556207,FR
+2988555532,2988555563,FR
+2988555564,2988555567,PL
+2988555568,2988555719,FR
+2988555720,2988555723,IE
+2988555724,2988555727,CZ
+2988555728,2988556179,FR
+2988556180,2988556183,ES
+2988556184,2988556191,FR
+2988556192,2988556195,ES
+2988556196,2988556199,CH
+2988556200,2988556207,FR
2988556208,2988556211,DE
-2988556212,2988556359,FR
+2988556212,2988556215,FR
+2988556216,2988556219,DE
+2988556220,2988556223,PL
+2988556224,2988556359,FR
2988556360,2988556363,ES
-2988556364,2988557507,FR
+2988556364,2988556463,FR
+2988556464,2988556479,CH
+2988556480,2988556483,GB
+2988556484,2988556539,FR
+2988556540,2988556543,BE
+2988556544,2988556891,FR
+2988556892,2988556895,IT
+2988556896,2988556967,FR
+2988556968,2988556975,DE
+2988556976,2988557051,FR
+2988557052,2988557055,PT
+2988557056,2988557063,FR
+2988557064,2988557071,GB
+2988557072,2988557079,FR
+2988557080,2988557087,IT
+2988557088,2988557095,FI
+2988557096,2988557247,FR
+2988557248,2988557251,DE
+2988557252,2988557263,FR
+2988557264,2988557279,BE
+2988557280,2988557287,FR
+2988557288,2988557291,PL
+2988557292,2988557295,FR
+2988557296,2988557299,IE
+2988557300,2988557303,ES
+2988557304,2988557311,DE
+2988557312,2988557439,FR
+2988557440,2988557471,GB
+2988557472,2988557491,FR
+2988557492,2988557495,GB
+2988557496,2988557499,DE
+2988557500,2988557507,FR
2988557508,2988557511,ES
-2988557512,2988557539,FR
+2988557512,2988557531,FR
+2988557532,2988557535,ES
+2988557536,2988557539,FR
2988557540,2988557543,ES
-2988557544,2988558203,FR
+2988557544,2988557559,FR
+2988557560,2988557563,DE
+2988557564,2988557643,FR
+2988557644,2988557651,DE
+2988557652,2988557767,FR
+2988557768,2988557771,DE
+2988557772,2988558063,FR
+2988558064,2988558067,BE
+2988558068,2988558071,DE
+2988558072,2988558111,FR
+2988558112,2988558119,IT
+2988558120,2988558143,FR
+2988558144,2988558159,GB
+2988558160,2988558175,FR
+2988558176,2988558191,NL
+2988558192,2988558203,FR
2988558204,2988558207,DE
-2988558208,2988558803,FR
+2988558208,2988558591,FR
+2988558592,2988558623,DE
+2988558624,2988558655,NL
+2988558656,2988558719,PL
+2988558720,2988558727,NL
+2988558728,2988558731,BE
+2988558732,2988558803,FR
2988558804,2988558807,ES
2988558808,2988558815,NL
-2988558816,2988561583,FR
+2988558816,2988558831,GB
+2988558832,2988558863,FR
+2988558864,2988558879,NL
+2988558880,2988558891,FR
+2988558892,2988558895,DE
+2988558896,2988558907,FR
+2988558908,2988558911,DE
+2988558912,2988558927,FR
+2988558928,2988558935,CZ
+2988558936,2988558939,IT
+2988558940,2988559011,FR
+2988559012,2988559015,BE
+2988559016,2988559023,DE
+2988559024,2988559247,FR
+2988559248,2988559255,GB
+2988559256,2988559631,FR
+2988559632,2988559647,GB
+2988559648,2988559663,IT
+2988559664,2988559695,FR
+2988559696,2988559703,GB
+2988559704,2988559735,FR
+2988559736,2988559743,GB
+2988559744,2988560287,FR
+2988560288,2988560319,ES
+2988560320,2988560351,FR
+2988560352,2988560383,ES
+2988560384,2988560387,CZ
+2988560388,2988560431,FR
+2988560432,2988560439,CH
+2988560440,2988560463,FR
+2988560464,2988560479,NL
+2988560480,2988560511,FR
+2988560512,2988560527,IT
+2988560528,2988560531,FR
+2988560532,2988560535,ES
+2988560536,2988560543,IT
+2988560544,2988560595,FR
+2988560596,2988560599,ES
+2988560600,2988560607,FR
+2988560608,2988560623,PL
+2988560624,2988560635,FR
+2988560636,2988560639,DE
+2988560640,2988560703,PT
+2988560704,2988560711,NL
+2988560712,2988560719,FR
+2988560720,2988560735,DE
+2988560736,2988560895,FR
+2988560896,2988560919,PL
+2988560920,2988561039,FR
+2988561040,2988561043,GB
+2988561044,2988561055,FR
+2988561056,2988561059,ES
+2988561060,2988561063,FR
+2988561064,2988561071,PL
+2988561072,2988561075,BE
+2988561076,2988561095,FR
+2988561096,2988561099,NL
+2988561100,2988561103,ES
+2988561104,2988561179,FR
+2988561180,2988561183,NL
+2988561184,2988561203,FR
+2988561204,2988561207,PT
+2988561208,2988561215,PL
+2988561216,2988561231,ES
+2988561232,2988561283,FR
+2988561284,2988561287,PT
+2988561288,2988561291,IE
+2988561292,2988561295,DE
+2988561296,2988561343,FR
+2988561344,2988561375,PL
+2988561376,2988561391,NL
+2988561392,2988561583,FR
2988561584,2988561591,GB
-2988561592,2988561763,FR
+2988561592,2988561599,FR
+2988561600,2988561631,PL
+2988561632,2988561663,FR
+2988561664,2988561671,PL
+2988561672,2988561747,FR
+2988561748,2988561751,FI
+2988561752,2988561759,FR
+2988561760,2988561763,LT
2988561764,2988561767,IT
-2988561768,2988562847,FR
+2988561768,2988561847,FR
+2988561848,2988561855,IT
+2988561856,2988561871,GB
+2988561872,2988561875,IE
+2988561876,2988561887,FR
+2988561888,2988561903,GB
+2988561904,2988562143,FR
+2988562144,2988562151,IE
+2988562152,2988562159,DE
+2988562160,2988562495,FR
+2988562496,2988562527,GB
+2988562528,2988562559,FR
+2988562560,2988562575,PL
+2988562576,2988562599,FR
+2988562600,2988562607,DE
+2988562608,2988562615,PT
+2988562616,2988562843,FR
+2988562844,2988562847,DE
2988562848,2988562863,GB
-2988562864,2988564143,FR
+2988562864,2988563015,FR
+2988563016,2988563023,IE
+2988563024,2988563075,FR
+2988563076,2988563079,ES
+2988563080,2988563135,FR
+2988563136,2988563151,PT
+2988563152,2988563167,FR
+2988563168,2988563183,GB
+2988563184,2988563199,FR
+2988563200,2988563263,PT
+2988563264,2988564011,FR
+2988564012,2988564015,IE
+2988564016,2988564019,ES
+2988564020,2988564023,FR
+2988564024,2988564027,IE
+2988564028,2988564143,FR
2988564144,2988564159,ES
-2988564160,2988572671,FR
+2988564160,2988564187,FR
+2988564188,2988564191,PL
+2988564192,2988564199,FR
+2988564200,2988564207,IT
+2988564208,2988564471,FR
+2988564472,2988564479,CZ
+2988564480,2988572671,FR
2988572672,2988703743,RU
2988703744,2988834815,PL
2988834816,2988965887,CH
@@ -48122,10 +53836,12 @@
2990211072,2990276607,GR
2990276608,2990342143,ES
2990342144,2990407679,KW
-2990407680,2990421728,US
+2990407680,2990407935,US
+2990407936,2990408191,GB
+2990408192,2990421728,US
2990421729,2990421729,GB
2990421730,2990440447,US
-2990440448,2990473215,NL
+2990440448,2990473215,GB
2990473216,2990475674,DE
2990475675,2990475675,HR
2990475676,2990500113,DE
@@ -48143,7 +53859,9 @@
2991161344,2991177727,FR
2991177728,2991179503,SE
2991179504,2991179507,ES
-2991179508,2991194111,SE
+2991179508,2991191807,SE
+2991191808,2991192063,FI
+2991192064,2991194111,SE
2991194112,2991210495,NO
2991210496,2991243263,RU
2991243264,2991259647,UA
@@ -48305,28 +54023,12 @@
2997878784,2998140927,RU
2998140928,2998403071,PL
2998403072,2998665215,RU
-2998665216,2998710451,AT
-2998710452,2998710455,DE
-2998710456,2998712975,AT
-2998712976,2998712979,DE
-2998712980,2998720227,AT
-2998720228,2998720231,CZ
-2998720232,2998820735,AT
-2998820736,2998820863,CZ
-2998820864,2998834559,AT
-2998834560,2998834687,HU
-2998834688,2998841343,AT
-2998841344,2998841599,DE
-2998841600,2998875391,AT
-2998875392,2998875519,CZ
-2998875520,2998927359,AT
-2998927360,2998991615,CH
-2998991616,2998991871,DE
-2998991872,2999026943,CH
-2999026944,2999027071,DE
-2999027072,2999380223,CH
-2999380224,2999380479,DE
-2999380480,2999451647,CH
+2998665216,2998679039,AT
+2998679040,2998679295,SI
+2998679296,2998902527,AT
+2998902528,2998902783,SI
+2998902784,2998927359,AT
+2998927360,2999451647,CH
2999451648,2999713791,DE
2999713792,2999975935,RU
2999975936,2999984127,FR
@@ -48365,8 +54067,7 @@
3000246272,3000248319,RO
3000248320,3000252415,PL
3000252416,3000254463,RO
-3000254464,3000256511,UA
-3000256512,3000260607,RU
+3000254464,3000260607,RU
3000260608,3000262655,RS
3000262656,3000266751,UA
3000266752,3000268799,DE
@@ -48537,7 +54238,9 @@
3001901056,3001905151,FR
3001905152,3001909247,GB
3001909248,3001917439,ES
-3001917440,3001921535,GB
+3001917440,3001919743,GB
+3001919744,3001919999,AU
+3001920000,3001921535,GB
3001921536,3001929727,RU
3001929728,3001933823,RS
3001933824,3001937919,ES
@@ -48720,7 +54423,8 @@
3003076608,3003078143,GB
3003078144,3003078151,US
3003078152,3003078155,IN
-3003078156,3003080703,GB
+3003078156,3003078399,US
+3003078400,3003080703,GB
3003080704,3003082751,FR
3003082752,3003084799,ES
3003086848,3003088895,RU
@@ -48762,29 +54466,43 @@
3003129088,3003129343,CO
3003129344,3003129599,BO
3003129600,3003129855,HN
-3003129856,3003138559,CR
+3003129856,3003130111,MX
+3003130112,3003130367,CR
+3003130368,3003130623,MX
+3003130624,3003131647,CR
+3003131648,3003133183,MX
+3003133184,3003133695,CR
+3003133696,3003134719,MX
+3003134720,3003134975,CR
+3003134976,3003135487,MX
+3003135488,3003136255,CR
+3003136256,3003137279,MX
+3003137280,3003137791,CR
+3003137792,3003138047,MX
+3003138048,3003138559,HN
3003138560,3003139071,PA
-3003139072,3003139583,CR
+3003139072,3003139583,HN
3003139584,3003140351,PA
-3003140352,3003140607,CR
+3003140352,3003140607,HN
3003140608,3003141375,PA
-3003141376,3003141631,CR
+3003141376,3003141631,HN
3003141632,3003141887,PA
-3003141888,3003143679,CR
+3003141888,3003143679,HN
3003143680,3003144447,PA
-3003144448,3003146239,CR
+3003144448,3003146239,HN
3003146240,3003146495,PA
-3003146496,3003147007,CR
+3003146496,3003147007,GT
3003147008,3003147263,PA
-3003147264,3003148031,CR
+3003147264,3003148031,GT
3003148032,3003148543,PA
-3003148544,3003148799,CR
+3003148544,3003148799,GT
3003148800,3003149311,PA
-3003149312,3003151871,CR
+3003149312,3003150335,GT
+3003150336,3003151871,SV
3003151872,3003152383,PA
-3003152384,3003152639,CR
+3003152384,3003152639,SV
3003152640,3003152895,PA
-3003152896,3003154431,CR
+3003152896,3003154431,SV
3003154432,3003154687,CL
3003154688,3003154943,EC
3003154944,3003159039,AR
@@ -48833,33 +54551,39 @@
3005888000,3005888255,CO
3005888256,3005890047,PA
3005890048,3005890303,CO
-3005890304,3005891071,PA
-3005891072,3005891327,CO
+3005890304,3005890559,PA
+3005890560,3005891327,CO
3005891328,3005893119,PA
3005893120,3005893631,CO
3005893632,3005893887,PA
3005893888,3005894143,CO
-3005894144,3005894655,PA
-3005894656,3005894911,CO
+3005894144,3005894399,PA
+3005894400,3005894911,CO
3005894912,3005896703,PA
3005896704,3005896959,CO
-3005896960,3005899263,PA
-3005899264,3005899519,CO
-3005899520,3005900031,PA
-3005900032,3005900287,CO
-3005900288,3005902591,PA
+3005896960,3005897215,PA
+3005897216,3005897727,CO
+3005897728,3005897983,PA
+3005897984,3005898239,CO
+3005898240,3005899007,PA
+3005899008,3005900287,CO
+3005900288,3005901055,PA
+3005901056,3005901311,CO
+3005901312,3005902591,PA
3005902592,3005902847,CO
-3005902848,3005903359,PA
-3005903360,3005903871,CO
-3005903872,3005905151,PA
-3005905152,3005905407,CO
-3005905408,3005905919,PA
-3005905920,3005906943,CO
+3005902848,3005903103,PA
+3005903104,3005903871,CO
+3005903872,3005904895,PA
+3005904896,3005905407,CO
+3005905408,3005905663,PA
+3005905664,3005906943,CO
3005906944,3005911039,PA
3005911040,3005911295,CO
3005911296,3005911551,PA
3005911552,3005911807,CO
-3005911808,3005913343,PA
+3005911808,3005912831,PA
+3005912832,3005913087,CO
+3005913088,3005913343,PA
3005913344,3005913599,CO
3005913600,3005913855,PA
3005913856,3005914623,CO
@@ -48895,8 +54619,8 @@
3006279168,3006279423,NI
3006279424,3006283519,PA
3006283520,3006283775,NI
-3006283776,3006284287,CR
-3006284288,3006284799,PA
+3006283776,3006284543,CR
+3006284544,3006284799,PA
3006284800,3006285055,CR
3006285056,3006285311,PA
3006285312,3006285567,CR
@@ -48904,33 +54628,35 @@
3006285824,3006286079,CR
3006286080,3006287103,PA
3006287104,3006287359,CR
-3006287360,3006288639,PA
+3006287360,3006287871,PA
+3006287872,3006288127,CR
+3006288128,3006288639,PA
3006288640,3006289151,CR
-3006289152,3006289663,PA
-3006289664,3006289919,CR
-3006289920,3006291455,PA
-3006291456,3006291711,CR
-3006291712,3006292991,PA
+3006289152,3006289407,PA
+3006289408,3006289919,CR
+3006289920,3006291199,PA
+3006291200,3006291967,CR
+3006291968,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
+3006310144,3006310655,CR
+3006310656,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
+3006311680,3006312447,CR
+3006312448,3006312703,PA
+3006312704,3006313215,CR
+3006313216,3006313727,PA
+3006313728,3006314495,CR
3006314496,3006315263,PA
3006315264,3006315775,CR
-3006315776,3006320895,PA
+3006315776,3006316031,PA
+3006316032,3006316287,CR
+3006316288,3006320895,PA
3006320896,3006321151,CR
3006321152,3006321663,PA
3006321664,3006322175,CR
@@ -48938,9 +54664,11 @@
3006322432,3006323199,CR
3006323200,3006323455,PA
3006323456,3006323711,CR
-3006323712,3006329343,PA
-3006329344,3006329855,NI
-3006329856,3006330367,PA
+3006323712,3006328831,PA
+3006328832,3006329087,NI
+3006329088,3006329343,PA
+3006329344,3006330111,NI
+3006330112,3006330367,PA
3006330368,3006330623,NI
3006330624,3006330879,PA
3006330880,3006331903,CR
@@ -48971,11 +54699,13 @@
3006513152,3006513663,PA
3006513664,3006514431,CR
3006514432,3006514687,PA
-3006514688,3006517503,CR
+3006514688,3006516479,CR
+3006516480,3006516735,PA
+3006516736,3006517503,CR
3006517504,3006517759,NI
3006517760,3006518527,CR
-3006518528,3006519039,NI
-3006519040,3006521343,CR
+3006518528,3006519295,NI
+3006519296,3006521343,CR
3006521344,3006528511,AR
3006528512,3006529535,BZ
3006529536,3006660607,DO
@@ -49014,85 +54744,225 @@
3007123456,3007143935,AR
3007143936,3007148031,CL
3007148032,3007152127,CO
-3007152128,3007152383,CL
+3007152128,3007152143,CL
+3007152144,3007152159,DE
+3007152160,3007152383,CL
3007152384,3007152639,US
-3007152640,3007152895,CL
+3007152640,3007152655,CL
+3007152656,3007152671,DE
+3007152672,3007152895,CL
3007152896,3007153151,US
-3007153152,3007153407,CL
-3007153408,3007153663,US
-3007153664,3007153919,CL
+3007153152,3007153167,CL
+3007153168,3007153183,DE
+3007153184,3007153279,CL
+3007153280,3007153663,US
+3007153664,3007153679,CL
+3007153680,3007153695,DE
+3007153696,3007153919,CL
3007153920,3007154175,US
-3007154176,3007154431,CL
-3007154432,3007154687,US
-3007154688,3007154943,CL
+3007154176,3007154191,CL
+3007154192,3007154207,DE
+3007154208,3007154303,CL
+3007154304,3007154687,US
+3007154688,3007154703,CL
+3007154704,3007154719,DE
+3007154720,3007154943,CL
3007154944,3007155199,US
-3007155200,3007155455,CL
+3007155200,3007155215,CL
+3007155216,3007155231,DE
+3007155232,3007155327,CL
+3007155328,3007155455,US
3007155456,3007155711,GB
-3007155712,3007155967,CL
+3007155712,3007155727,CL
+3007155728,3007155743,DE
+3007155744,3007155967,CL
3007155968,3007156223,DE
-3007156224,3007156479,CL
+3007156224,3007156239,CL
+3007156240,3007156255,DE
+3007156256,3007156351,CL
+3007156352,3007156479,US
3007156480,3007156495,ES
-3007156496,3007156991,CL
+3007156496,3007156511,DE
+3007156512,3007156543,CL
+3007156544,3007156607,GB
+3007156608,3007156751,CL
+3007156752,3007156767,DE
+3007156768,3007156991,CL
3007156992,3007157007,HR
-3007157008,3007157503,CL
+3007157008,3007157055,CL
+3007157056,3007157119,GB
+3007157120,3007157247,DE
+3007157248,3007157263,CL
+3007157264,3007157279,DE
+3007157280,3007157375,CL
+3007157376,3007157503,US
3007157504,3007157519,IE
-3007157520,3007158015,CL
+3007157520,3007157567,CL
+3007157568,3007157631,GB
+3007157632,3007157759,US
+3007157760,3007157775,CL
+3007157776,3007157791,DE
+3007157792,3007158015,CL
3007158016,3007158031,BE
-3007158032,3007158527,CL
+3007158032,3007158079,CL
+3007158080,3007158143,GB
+3007158144,3007158271,DE
+3007158272,3007158287,CL
+3007158288,3007158303,DE
+3007158304,3007158399,CL
+3007158400,3007158527,US
3007158528,3007158543,GB
-3007158544,3007159039,CL
+3007158544,3007158591,CL
+3007158592,3007158655,GB
+3007158656,3007158783,DE
+3007158784,3007158799,CL
+3007158800,3007158815,DE
+3007158816,3007159039,CL
3007159040,3007159055,GB
-3007159056,3007159551,CL
+3007159056,3007159103,CL
+3007159104,3007159167,GB
+3007159168,3007159295,US
+3007159296,3007159311,CL
+3007159312,3007159327,DE
+3007159328,3007159423,CL
+3007159424,3007159551,US
3007159552,3007159567,RU
-3007159568,3007160063,CL
+3007159568,3007159615,CL
+3007159616,3007159679,GB
+3007159680,3007159807,DE
+3007159808,3007159823,CL
+3007159824,3007159839,DE
+3007159840,3007160063,CL
3007160064,3007160079,HR
-3007160080,3007160575,CL
+3007160080,3007160127,CL
+3007160128,3007160191,GB
+3007160192,3007160319,DE
+3007160320,3007160335,CL
+3007160336,3007160351,DE
+3007160352,3007160447,CL
+3007160448,3007160575,US
3007160576,3007160591,IE
3007160592,3007160607,US
-3007160608,3007161087,CL
+3007160608,3007160703,CL
+3007160704,3007160831,US
+3007160832,3007160847,CL
+3007160848,3007160863,DE
+3007160864,3007161087,CL
3007161088,3007161103,GB
-3007161104,3007161599,CL
+3007161104,3007161215,CL
+3007161216,3007161343,DE
+3007161344,3007161359,CL
+3007161360,3007161375,DE
+3007161376,3007161471,CL
+3007161472,3007161599,US
3007161600,3007161615,GB
-3007161616,3007162111,CL
+3007161616,3007161727,CL
+3007161728,3007161855,DE
+3007161856,3007161871,CL
+3007161872,3007161887,DE
+3007161888,3007162111,CL
3007162112,3007162127,ES
-3007162128,3007162623,CL
+3007162128,3007162239,CL
+3007162240,3007162367,US
+3007162368,3007162383,CL
+3007162384,3007162399,DE
+3007162400,3007162495,CL
+3007162496,3007162623,US
3007162624,3007162639,NL
-3007162640,3007163135,CL
+3007162640,3007162751,CL
+3007162752,3007162879,DE
+3007162880,3007162895,CL
+3007162896,3007162911,DE
+3007162912,3007163135,CL
3007163136,3007163151,GB
-3007163152,3007163647,CL
+3007163152,3007163199,CL
+3007163200,3007163263,DE
+3007163264,3007163407,CL
+3007163408,3007163423,DE
+3007163424,3007163519,CL
+3007163520,3007163647,US
3007163648,3007163663,ES
-3007163664,3007164159,CL
+3007163664,3007163711,CL
+3007163712,3007163775,DE
+3007163776,3007163903,US
+3007163904,3007163919,CL
+3007163920,3007163935,DE
+3007163936,3007164159,CL
3007164160,3007164175,SK
-3007164176,3007164671,CL
+3007164176,3007164223,CL
+3007164224,3007164287,DE
+3007164288,3007164431,CL
+3007164432,3007164447,DE
+3007164448,3007164543,CL
+3007164544,3007164671,US
3007164672,3007164687,SE
-3007164688,3007165183,CL
+3007164688,3007164735,CL
+3007164736,3007164799,DE
+3007164800,3007164943,CL
+3007164944,3007164959,DE
+3007164960,3007165183,CL
3007165184,3007165199,GB
-3007165200,3007165695,CL
+3007165200,3007165247,CL
+3007165248,3007165311,DE
+3007165312,3007165439,US
+3007165440,3007165455,CL
+3007165456,3007165471,DE
+3007165472,3007165567,CL
+3007165568,3007165695,US
3007165696,3007165711,DK
-3007165712,3007166207,CL
+3007165712,3007165759,CL
+3007165760,3007165823,DE
+3007165824,3007165967,CL
+3007165968,3007165983,DE
+3007165984,3007166207,CL
3007166208,3007166223,TR
-3007166224,3007166719,CL
+3007166224,3007166271,CL
+3007166272,3007166335,DE
+3007166336,3007166479,CL
+3007166480,3007166495,DE
+3007166496,3007166591,CL
+3007166592,3007166719,US
3007166720,3007166735,GB
-3007166736,3007167231,CL
+3007166736,3007166751,DE
+3007166752,3007166847,CL
+3007166848,3007166975,US
+3007166976,3007166991,CL
+3007166992,3007167007,DE
+3007167008,3007167231,CL
3007167232,3007167247,ES
-3007167248,3007167743,CL
+3007167248,3007167263,DE
+3007167264,3007167503,CL
+3007167504,3007167519,DE
+3007167520,3007167615,CL
+3007167616,3007167743,US
3007167744,3007167759,AU
-3007167760,3007168255,CL
+3007167760,3007167775,DE
+3007167776,3007168015,CL
+3007168016,3007168031,DE
+3007168032,3007168127,CL
+3007168128,3007168255,US
3007168256,3007168271,GR
-3007168272,3007168511,CL
+3007168272,3007168287,DE
+3007168288,3007168383,CL
+3007168384,3007168511,US
3007168512,3007168767,QA
3007168768,3007169023,CL
3007169024,3007169151,US
-3007169152,3007171855,CL
+3007169152,3007169279,CL
+3007169280,3007169535,US
+3007169536,3007170559,CL
+3007170560,3007171071,DE
+3007171072,3007171855,CL
3007171856,3007171871,US
-3007171872,3007175679,CL
+3007171872,3007172607,CL
+3007172608,3007175679,BR
3007175680,3007175935,GB
-3007175936,3007183359,CL
+3007175936,3007183359,BR
3007183360,3007183615,AU
3007183616,3007183871,IE
3007183872,3007184127,JO
3007184128,3007184383,KW
-3007184384,3007184895,CL
+3007184384,3007184895,BR
3007184896,3007250431,AR
3007250432,3007268095,CR
3007268096,3007268607,PA
@@ -49118,8 +54988,8 @@
3007283456,3007283711,PA
3007283712,3007283967,CR
3007283968,3007284223,PA
-3007284224,3007286015,CR
-3007286016,3007286271,PA
+3007284224,3007285759,CR
+3007285760,3007286271,PA
3007286272,3007286783,CR
3007286784,3007287295,PA
3007287296,3007287551,CR
@@ -49160,7 +55030,9 @@
3025403904,3025600511,CN
3025600512,3025603071,IN
3025603072,3025603087,HK
-3025603088,3025603839,IN
+3025603088,3025603103,IN
+3025603104,3025603199,HK
+3025603200,3025603839,IN
3025603840,3025604095,HK
3025604096,3025604381,IN
3025604382,3025606655,SG
@@ -49173,7 +55045,9 @@
3025608192,3025608203,JP
3025608204,3025610751,IN
3025610752,3025612799,SG
-3025612800,3025616895,IN
+3025612800,3025612895,IN
+3025612896,3025612927,SG
+3025612928,3025616895,IN
3025616896,3025617407,SG
3025617408,3025618943,IN
3025618944,3025619487,SG
@@ -49191,7 +55065,8 @@
3025625400,3025625407,TH
3025625408,3025625471,SG
3025625472,3025625503,MY
-3025625504,3025625535,IN
+3025625504,3025625519,SG
+3025625520,3025625535,IN
3025625536,3025625599,CA
3025625600,3025625855,SG
3025625856,3025629439,IN
@@ -49205,7 +55080,11 @@
3025631240,3025631247,AU
3025631248,3025632255,IN
3025632256,3025632271,SG
-3025632272,3025633535,IN
+3025632272,3025632287,IN
+3025632288,3025632351,SG
+3025632352,3025632511,IN
+3025632512,3025632767,SG
+3025632768,3025633535,IN
3025633536,3025633791,HK
3025633792,3025633807,AU
3025633808,3025637151,IN
@@ -49224,18 +55103,27 @@
3025639176,3025639423,IN
3025639424,3025639679,SG
3025639680,3025639935,HK
-3025639936,3025640447,IN
+3025639936,3025640191,IN
+3025640192,3025640447,JP
3025640448,3025640799,MY
3025640800,3025641727,IN
3025641728,3025641743,HK
3025641744,3025641759,IN
3025641760,3025641775,HK
-3025641776,3025647103,IN
+3025641776,3025641983,IN
+3025641984,3025642495,HK
+3025642496,3025642751,SG
+3025642752,3025647103,IN
3025647104,3025647359,SG
3025647360,3025647615,AU
3025647616,3025647775,IN
3025647776,3025647791,SG
-3025647792,3025648079,IN
+3025647792,3025647839,IN
+3025647840,3025647871,SG
+3025647872,3025647903,HK
+3025647904,3025647935,IN
+3025647936,3025647967,SG
+3025647968,3025648079,IN
3025648080,3025648087,SG
3025648088,3025648091,US
3025648092,3025649151,IN
@@ -49352,9 +55240,7 @@
3031695360,3031760895,TH
3031760896,3031826431,AU
3031826432,3031891967,KR
-3031891968,3031913983,TH
-3031913984,3031914239,SG
-3031914240,3031957503,TH
+3031891968,3031957503,TH
3031957504,3032252415,CN
3032252416,3032271871,HK
3032271872,3032272895,AU
@@ -49452,7 +55338,8 @@
3035324416,3035326463,JP
3035326464,3035328511,AU
3035332608,3035333631,AU
-3035333632,3035334655,HK
+3035333632,3035333887,JP
+3035333888,3035334655,HK
3035335680,3035337727,JP
3035337728,3035338751,ID
3035338752,3035339007,SG
@@ -49479,8 +55366,8 @@
3039232000,3039297535,EC
3039297536,3039363071,PY
3039363072,3039412223,BZ
-3039412224,3039412991,CL
-3039412992,3039413247,BR
+3039412224,3039412735,CL
+3039412736,3039413247,BR
3039413248,3039413503,CL
3039413504,3039414015,BR
3039414016,3039414271,CL
@@ -49492,14 +55379,13 @@
3039416716,3039416735,CL
3039416736,3039416739,US
3039416740,3039416831,CL
-3039416832,3039417343,BR
-3039417344,3039417855,CL
+3039416832,3039417599,BR
+3039417600,3039417855,CL
3039417856,3039418111,BR
3039418112,3039418367,CL
3039418368,3039418879,BR
3039418880,3039419135,CL
-3039419136,3039420159,BR
-3039420160,3039420415,CL
+3039419136,3039420415,BR
3039420416,3039428607,AR
3039428608,3039559679,CL
3039559680,3039821823,AR
@@ -49631,7 +55517,9 @@
3050708480,3050708495,FR
3050708496,3050708991,CL
3050708992,3050709007,AT
-3050709008,3050709503,CL
+3050709008,3050709247,CL
+3050709248,3050709375,DE
+3050709376,3050709503,CL
3050709504,3050709519,TH
3050709520,3050710015,CL
3050710016,3050710031,ES
@@ -49647,7 +55535,11 @@
3050712576,3050712591,PL
3050712592,3050713087,CL
3050713088,3050713103,LV
-3050713104,3050766335,CL
+3050713104,3050714367,CL
+3050714368,3050714623,GB
+3050714624,3050715647,CL
+3050715648,3050718719,US
+3050718720,3050766335,CL
3050766336,3050766351,NO
3050766352,3050766847,CL
3050766848,3050766863,KR
@@ -49697,9 +55589,15 @@
3050778112,3050778127,KR
3050778128,3050778623,CL
3050778624,3050778639,TR
-3050778640,3050831871,CL
+3050778640,3050786815,CL
+3050786816,3050788863,US
+3050788864,3050790911,CL
+3050790912,3050807295,US
+3050807296,3050831871,CL
3050831872,3051356159,BR
-3051356160,3051373055,CR
+3051356160,3051372543,CR
+3051372544,3051372799,PA
+3051372800,3051373055,CR
3051373056,3051373311,PA
3051373312,3051374335,CR
3051374336,3051374591,PA
@@ -49899,7 +55797,6 @@
3068986368,3068987391,AU
3068987392,3068990463,IN
3068990464,3068991487,VN
-3068991488,3068991743,IN
3068993536,3069018111,KR
3069018112,3069034495,IN
3069034496,3069050879,KR
@@ -49974,7 +55871,8 @@
3078619136,3081437183,CN
3081437184,3081502719,MY
3081502720,3081764863,CN
-3081764864,3081846783,JP
+3081764864,3081844735,JP
+3081844736,3081846783,AU
3081846784,3081847807,TW
3081847808,3081848831,KR
3081848832,3081850879,SG
@@ -49991,7 +55889,9 @@
3082158080,3082166271,CN
3082166272,3082174463,JP
3082174464,3082178559,BZ
-3082178560,3082179583,HK
+3082178560,3082178823,HK
+3082178824,3082178824,SG
+3082178825,3082179583,HK
3082179584,3082181631,IN
3082181632,3082182655,ID
3082182656,3082190847,LA
@@ -50001,9 +55901,7 @@
3088605184,3088609279,NL
3088609280,3088629759,US
3088629760,3088633855,NL
-3088633856,3088924671,US
-3088924672,3088925695,NL
-3088925696,3088998399,US
+3088633856,3088998399,US
3088998400,3089002495,NL
3089002496,3089027071,US
3089027072,3089031167,NL
@@ -50019,9 +55917,7 @@
3091955712,3091959807,CA
3091959808,3091976191,US
3091976192,3091980287,CA
-3091980288,3092569343,US
-3092569344,3092569599,AU
-3092569600,3092578303,US
+3091980288,3092578303,US
3092578304,3092582399,NL
3092582400,3092615167,US
3092615168,3092619263,NL
@@ -50107,11 +56003,11 @@
3098263552,3098271743,CA
3098271744,3098278847,US
3098278848,3098278911,CA
-3098278912,3098411007,US
+3098278912,3098350383,US
+3098350384,3098350391,BR
+3098350392,3098411007,US
3098411008,3098415103,PK
-3098415104,3098439679,US
-3098439680,3098443775,CA
-3098443776,3098476543,US
+3098415104,3098476543,US
3098476544,3098492927,CA
3098492928,3098494719,US
3098494720,3098495743,CA
@@ -50145,6 +56041,8 @@
3103857408,3103857663,RS
3103857664,3103857919,FR
3103857920,3103858175,PL
+3103858176,3103858431,BG
+3103858432,3103858687,AT
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
@@ -50206,8 +56104,8 @@
3103974400,3103974911,SE
3103974912,3103974919,LT
3103974920,3103974943,SE
-3103974944,3103975039,LT
-3103975040,3103975423,SE
+3103974944,3103975071,LT
+3103975072,3103975423,SE
3103975424,3103976447,SA
3103976448,3103977471,GB
3103977472,3103978495,NL
@@ -50239,7 +56137,9 @@
3104009216,3104010239,IT
3104010240,3104011263,PL
3104011264,3104012287,ES
-3104012288,3104013311,BH
+3104012288,3104012799,BH
+3104012800,3104013055,SA
+3104013056,3104013311,BH
3104013312,3104014335,IR
3104014336,3104015359,FR
3104015360,3104016383,SE
@@ -50650,7 +56550,15 @@
3104451584,3104452607,RU
3104452608,3104453631,NL
3104453632,3104454655,CH
-3104454656,3104455679,NL
+3104454656,3104454660,NL
+3104454661,3104454782,SE
+3104454783,3104455050,NL
+3104455051,3104455082,SE
+3104455083,3104455146,NL
+3104455147,3104455162,SE
+3104455163,3104455294,NL
+3104455295,3104455423,SE
+3104455424,3104455679,NL
3104455680,3104456703,RU
3104456704,3104457727,IL
3104457728,3104458751,DE
@@ -50994,7 +56902,6 @@
3104826368,3104827391,CH
3104827392,3104828415,PL
3104828416,3104829439,AT
-3104829440,3104830463,DK
3104830464,3104831487,DE
3104831488,3104832511,NL
3104832512,3104833535,CZ
@@ -51014,7 +56921,9 @@
3104848896,3104849919,DE
3104849920,3104850943,RU
3104850944,3104851199,JE
-3104851200,3104851967,GB
+3104851200,3104851455,GB
+3104851456,3104851711,GG
+3104851712,3104851967,GB
3104851968,3104852991,DE
3104852992,3104854015,AT
3104854016,3104855039,GI
@@ -51420,7 +57329,6 @@
3105289216,3105290239,AT
3105290240,3105291263,TR
3105291264,3105292287,CH
-3105292288,3105293311,DE
3105293312,3105294335,GB
3105294336,3105295359,RU
3105295360,3105296383,PL
@@ -51458,6 +57366,7 @@
3105331200,3105332223,IQ
3105332224,3105333247,DE
3105333248,3105334271,LV
+3105334272,3105335295,UA
3105335296,3105336319,GR
3105336320,3105337343,IL
3105337344,3105339391,GB
@@ -51507,8 +57416,7 @@
3105386496,3105387519,RU
3105387520,3105388543,IT
3105388544,3105389567,GB
-3105389568,3105389823,LB
-3105389824,3105390591,TR
+3105389568,3105390591,TR
3105390592,3105391615,JO
3105391616,3105392639,NL
3105392640,3105393663,IR
@@ -51556,7 +57464,9 @@
3105441792,3105442815,IT
3105442816,3105443839,FI
3105443840,3105444863,NL
-3105444864,3105445887,GB
+3105444864,3105445119,GB
+3105445120,3105445631,US
+3105445632,3105445887,GB
3105445888,3105446911,RU
3105446912,3105447935,CH
3105447936,3105448959,DE
@@ -51640,9 +57550,7 @@
3105532928,3105533951,RS
3105533952,3105534975,BA
3105534976,3105535231,GB
-3105535232,3105535773,NO
-3105535774,3105535774,RU
-3105535775,3105535999,NO
+3105535232,3105535999,NO
3105536000,3105537023,AZ
3105537024,3105538047,AT
3105538048,3105539071,RU
@@ -51720,7 +57628,10 @@
3105614848,3105615871,NL
3105615872,3105616895,SE
3105616896,3105617919,GB
-3105617920,3105618943,NL
+3105617920,3105617953,US
+3105617954,3105617954,NL
+3105617955,3105618175,US
+3105618176,3105618943,NL
3105618944,3105619967,DE
3105619968,3105620991,TR
3105620992,3105622015,DE
@@ -51763,7 +57674,8 @@
3105655808,3105656831,ES
3105656832,3105657855,SK
3105657856,3105658879,NL
-3105658880,3105659903,IL
+3105658880,3105659135,GB
+3105659136,3105659903,IL
3105659904,3105660927,DE
3105660928,3105661951,TR
3105661952,3105662975,GB
@@ -51771,7 +57683,13 @@
3105664000,3105665023,DE
3105665024,3105666047,PL
3105667072,3105668095,DE
-3105668096,3105669119,NL
+3105668096,3105668131,US
+3105668132,3105668159,NL
+3105668160,3105668191,US
+3105668192,3105668351,NL
+3105668352,3105668863,US
+3105668864,3105668879,NL
+3105668880,3105669119,US
3105669120,3105670143,CZ
3105670144,3105671167,IE
3105671168,3105673215,GB
@@ -52018,9 +57936,9 @@
3105933344,3105933359,IT
3105933360,3105933463,GB
3105933464,3105933471,IT
-3105933472,3105934127,GB
-3105934128,3105934135,IT
-3105934136,3105934215,GB
+3105933472,3105933871,GB
+3105933872,3105933879,IT
+3105933880,3105934215,GB
3105934216,3105934223,IT
3105934224,3105934231,GB
3105934232,3105934239,IT
@@ -52033,7 +57951,9 @@
3105939456,3105940479,BY
3105940480,3105941503,GR
3105941504,3105942527,NL
-3105942528,3105943551,LU
+3105942528,3105943039,LU
+3105943040,3105943295,BE
+3105943296,3105943551,LU
3105943552,3105944575,NL
3105944576,3105945599,DE
3105945600,3105946623,RU
@@ -52163,7 +58083,9 @@
3106067456,3106068479,DE
3106068480,3106070527,NL
3106070528,3106071551,UA
-3106071552,3106072575,BH
+3106071552,3106072063,BH
+3106072064,3106072319,US
+3106072320,3106072575,BH
3106072576,3106073599,GB
3106073600,3106074623,PL
3106074624,3106076671,RU
@@ -52290,7 +58212,8 @@
3106202624,3106203647,RU
3106203648,3106204671,GR
3106204672,3106205695,MT
-3106205696,3106206719,NO
+3106205696,3106205951,SE
+3106205952,3106206719,NO
3106206720,3106207743,GE
3106207744,3106208767,GB
3106208768,3106209791,RO
@@ -52327,9 +58250,11 @@
3106239488,3106240511,IT
3106240512,3106241535,IE
3106241536,3106242559,NL
+3106242560,3106243583,RU
3106243584,3106244607,FI
3106244608,3106245631,DE
-3106245632,3106246655,SE
+3106245632,3106245887,DK
+3106245888,3106246655,SE
3106246656,3106247679,DE
3106247680,3106248703,NO
3106248704,3106249727,DE
@@ -52355,7 +58280,7 @@
3106271232,3106272255,SK
3106272256,3106273279,NL
3106273280,3106274303,DE
-3106274304,3106275327,FR
+3106274304,3106275327,CH
3106275328,3106276351,FI
3106276352,3106277375,AT
3106277376,3106278399,DE
@@ -52404,7 +58329,9 @@
3106324480,3106325503,AL
3106325504,3106326527,FR
3106326528,3106326783,NL
-3106326784,3106327551,IL
+3106326784,3106327039,US
+3106327040,3106327295,GB
+3106327296,3106327551,NL
3106327552,3106328575,RU
3106328576,3106329599,UA
3106329600,3106330623,IQ
@@ -52477,7 +58404,7 @@
3106403328,3106405375,GB
3106405376,3106406399,DE
3106406400,3106407423,RU
-3106407424,3106409471,GB
+3106408448,3106409471,GB
3106409472,3106411519,IT
3106411520,3106412543,HU
3106412544,3106413567,GB
@@ -52706,12 +58633,14 @@
3106656256,3106657279,GB
3106657280,3106658303,NL
3106658304,3106659327,GB
-3106659328,3106660351,NL
+3106659328,3106660351,CZ
3106660352,3106661375,UA
3106661376,3106662399,TR
3106662400,3106663423,IE
3106663424,3106664447,UA
-3106664448,3106666495,FR
+3106664448,3106665727,FR
+3106665728,3106665983,CH
+3106665984,3106666495,FR
3106666496,3106667519,UA
3106667520,3106668543,ES
3106668544,3106669567,RU
@@ -52850,7 +58779,10 @@
3106817024,3106818047,IT
3106818048,3106819071,IE
3106819072,3106820095,BE
-3106820096,3106824191,CH
+3106820096,3106821631,CH
+3106821632,3106821887,HK
+3106821888,3106822143,RU
+3106822144,3106824191,CH
3106824192,3106825215,RU
3106825216,3106826239,IT
3106826240,3106827263,PL
@@ -52901,12 +58833,12 @@
3106872320,3106873343,BE
3106873344,3106874367,ES
3106874368,3106875391,RU
-3106875392,3106876415,SE
+3106875392,3106876415,NO
3106876416,3106877439,CZ
3106877440,3106878463,IR
3106878464,3106879487,RU
3106879488,3106880511,MK
-3106880512,3106881535,GB
+3106880512,3106881535,NL
3106881536,3106882559,PL
3106882560,3106883583,BE
3106883584,3106884607,GB
@@ -52966,7 +58898,7 @@
3106940928,3106941951,HU
3106941952,3106943999,FR
3106944000,3106945023,IT
-3106945024,3106946047,DE
+3106945024,3106946047,NL
3106946048,3106947071,GB
3106947072,3106948095,AE
3106948096,3106949119,NL
@@ -53367,6 +59299,7 @@
3107374261,3107374280,US
3107374321,3107374332,MX
3107374334,3107374335,MX
+3107374337,3107374340,US
3107375104,3107376127,GB
3107376128,3107377151,NL
3107377152,3107378175,AT
@@ -53479,8 +59412,12 @@
3107496064,3107496191,FR
3107496192,3107496255,DE
3107496256,3107496287,BS
-3107496288,3107496319,FR
-3107496320,3107496703,NL
+3107496288,3107496319,VG
+3107496320,3107496447,NL
+3107496448,3107496463,CL
+3107496464,3107496479,ES
+3107496480,3107496511,GB
+3107496512,3107496703,NL
3107496704,3107496719,PE
3107496720,3107496735,KP
3107496736,3107496751,FJ
@@ -53492,7 +59429,8 @@
3107496832,3107496847,BR
3107496848,3107496863,KP
3107496864,3107496879,HK
-3107496880,3107496911,IS
+3107496880,3107496895,IS
+3107496896,3107496911,US
3107496912,3107496927,PL
3107496928,3107496959,FR
3107496960,3107497983,DK
@@ -53509,7 +59447,8 @@
3107508224,3107509247,PL
3107509248,3107510271,SE
3107510272,3107511295,IT
-3107511296,3107512319,SI
+3107511296,3107511807,RS
+3107511808,3107512319,SI
3107512320,3107513343,NL
3107513344,3107514367,DE
3107514368,3107515391,US
@@ -53538,7 +59477,7 @@
3107540992,3107542015,RO
3107542016,3107543039,SE
3107543040,3107544063,DE
-3107544064,3107545087,IR
+3107544064,3107545087,GB
3107545088,3107546111,NL
3107546112,3107547135,GB
3107547136,3107548159,SE
@@ -53923,7 +59862,7 @@
3107961856,3107962879,RU
3107962880,3107963903,FR
3107963904,3107964927,RU
-3107964928,3107965951,ES
+3107964928,3107965951,PL
3107965952,3107966975,DE
3107966976,3107967999,NO
3107968000,3107969023,DE
@@ -53951,7 +59890,7 @@
3107991552,3107992575,AT
3107992576,3107993599,RU
3107993600,3107994623,RO
-3107994624,3107995647,DE
+3107994624,3107995647,AT
3107995648,3107996671,BE
3107996672,3107997695,IT
3107997696,3107998719,SE
@@ -53962,7 +59901,7 @@
3108002816,3108003839,RO
3108003840,3108004863,DE
3108004864,3108005887,RU
-3108005888,3108006911,RO
+3108005888,3108006911,LT
3108006912,3108007935,NL
3108007936,3108008959,DE
3108008960,3108009983,CH
@@ -54039,13 +59978,14 @@
3108085760,3108086783,LV
3108086784,3108087807,GB
3108087808,3108088831,CH
-3108088832,3108089855,NL
+3108088832,3108089855,RU
3108089856,3108090879,SE
3108090880,3108091903,BE
3108091904,3108092927,ES
3108092928,3108093951,SE
3108093952,3108095999,DE
-3108096000,3108097023,RU
+3108096000,3108096767,RU
+3108096768,3108097023,ES
3108097024,3108098047,TR
3108098048,3108099071,DE
3108099072,3108100095,NL
@@ -54061,10 +60001,571 @@
3108109312,3108110335,IQ
3108110336,3108111359,DK
3108111360,3108112383,GB
-3108112384,3108113407,UA
+3108112384,3108113407,US
3108113408,3108114431,RU
3108114432,3108115455,AE
3108115456,3108116479,GB
+3108116480,3108117503,IT
+3108117504,3108118527,RU
+3108118528,3108119551,GB
+3108119552,3108120575,CZ
+3108120576,3108122623,ES
+3108122624,3108123647,AT
+3108123648,3108124671,HU
+3108124672,3108125695,ES
+3108125696,3108126719,CH
+3108126720,3108127743,DE
+3108127744,3108128767,BY
+3108128768,3108129791,ES
+3108129792,3108130815,DE
+3108130816,3108131839,NL
+3108131840,3108132863,RU
+3108132864,3108133887,GB
+3108133888,3108134911,NL
+3108134912,3108135935,LU
+3108135936,3108136959,FR
+3108136960,3108137983,NL
+3108137984,3108139007,CH
+3108139008,3108141055,GB
+3108141056,3108142079,PL
+3108142080,3108143103,TR
+3108143104,3108144127,AL
+3108144128,3108145151,DE
+3108145152,3108146175,RO
+3108146176,3108147199,NL
+3108147200,3108148223,RU
+3108148224,3108149247,SI
+3108149248,3108150271,FR
+3108150272,3108151295,CH
+3108151296,3108152319,CY
+3108152320,3108153343,GB
+3108153344,3108154367,NL
+3108154368,3108155391,ES
+3108155392,3108156415,DE
+3108156416,3108157439,GB
+3108157440,3108158463,DK
+3108158464,3108159487,CZ
+3108159488,3108161535,DE
+3108161536,3108162559,SK
+3108162560,3108164607,GB
+3108164608,3108165631,PL
+3108165632,3108166655,RU
+3108166656,3108167679,DE
+3108167680,3108169727,IR
+3108169728,3108170751,FR
+3108170752,3108171775,DE
+3108171776,3108172799,GB
+3108172800,3108173823,DE
+3108173824,3108174847,NL
+3108174848,3108175871,KG
+3108175872,3108176895,UA
+3108176896,3108177919,NL
+3108177920,3108178943,PL
+3108178944,3108179967,IR
+3108179968,3108180991,NO
+3108180992,3108182015,IE
+3108182016,3108183039,DE
+3108183040,3108184063,ES
+3108184064,3108185087,TR
+3108185088,3108186111,DE
+3108186112,3108187135,NO
+3108187136,3108188159,NL
+3108188160,3108189183,GB
+3108189184,3108190207,RU
+3108191232,3108193279,NL
+3108193280,3108194303,PL
+3108194304,3108195327,FR
+3108195328,3108196351,GB
+3108196352,3108197375,FI
+3108197376,3108198399,IS
+3108198400,3108199423,FR
+3108199424,3108200447,RU
+3108200448,3108201471,ES
+3108201472,3108202495,IR
+3108202496,3108203519,ES
+3108203520,3108204543,AT
+3108204544,3108205567,ES
+3108205568,3108206591,NO
+3108206592,3108208639,TR
+3108208640,3108209663,DK
+3108209664,3108210687,CZ
+3108210688,3108211711,BR
+3108211712,3108212735,GB
+3108212736,3108213759,FR
+3108213760,3108214783,GB
+3108214784,3108215807,FR
+3108215808,3108216831,DE
+3108216832,3108217855,RU
+3108217856,3108218879,GB
+3108218880,3108219903,RU
+3108219904,3108220927,AT
+3108220928,3108221951,AL
+3108221952,3108222975,IS
+3108222976,3108223999,GB
+3108224000,3108225023,CZ
+3108225024,3108227071,CH
+3108227072,3108228095,NL
+3108228096,3108229119,TR
+3108229120,3108230143,ES
+3108230144,3108231167,IR
+3108231168,3108232191,PL
+3108232192,3108233215,DE
+3108233216,3108234239,NL
+3108234240,3108235263,AT
+3108235264,3108236287,GB
+3108236288,3108237311,IT
+3108237312,3108238335,LT
+3108238336,3108239359,RU
+3108239360,3108240383,GB
+3108240384,3108241407,CZ
+3108241408,3108242431,GB
+3108242432,3108243455,AT
+3108243456,3108244479,GE
+3108244480,3108245503,PL
+3108245504,3108246527,UA
+3108246528,3108247551,RU
+3108247552,3108248575,PL
+3108248576,3108249599,CZ
+3108249600,3108250623,CH
+3108250624,3108251647,LT
+3108251648,3108252671,DE
+3108252672,3108253695,LU
+3108253696,3108254719,ME
+3108254720,3108255743,CH
+3108255744,3108256767,FI
+3108256768,3108257791,RS
+3108257792,3108258815,CH
+3108258816,3108259839,CZ
+3108259840,3108260863,HU
+3108260864,3108261887,DE
+3108261888,3108262911,AE
+3108262912,3108263935,GB
+3108263936,3108264959,NL
+3108264960,3108265983,RU
+3108265984,3108267007,NL
+3108267008,3108268031,RU
+3108268032,3108269055,GB
+3108269056,3108270079,ES
+3108270080,3108271103,GB
+3108271104,3108272127,RU
+3108272128,3108273151,RO
+3108273152,3108274175,DE
+3108274176,3108275199,CY
+3108275200,3108276223,HR
+3108276224,3108277247,DE
+3108277248,3108278271,GB
+3108278272,3108279295,RU
+3108279296,3108280319,FR
+3108280320,3108281343,RU
+3108281344,3108282367,CZ
+3108282368,3108283391,NL
+3108283392,3108284415,CZ
+3108284416,3108285439,NO
+3108285440,3108286463,NL
+3108286464,3108287487,IT
+3108287488,3108288511,NL
+3108288512,3108289535,RU
+3108289536,3108290559,RO
+3108290560,3108291583,IT
+3108291584,3108292607,NL
+3108292608,3108293631,GB
+3108293632,3108294655,CH
+3108294656,3108295679,EE
+3108295680,3108297727,CZ
+3108297728,3108298751,TR
+3108298752,3108300799,FR
+3108300800,3108301823,GB
+3108301824,3108302847,CH
+3108302848,3108303871,NL
+3108303872,3108304895,RU
+3108304896,3108305919,GB
+3108305920,3108306943,IE
+3108306944,3108307967,PL
+3108307968,3108308991,IQ
+3108308992,3108310015,FR
+3108310016,3108312063,GB
+3108312064,3108313087,PL
+3108313088,3108314111,LV
+3108314112,3108315135,BA
+3108315136,3108316159,NL
+3108316160,3108317183,FI
+3108317184,3108318207,CH
+3108318208,3108319231,SE
+3108319232,3108320255,SK
+3108320256,3108321279,FR
+3108321280,3108322303,RO
+3108322304,3108323327,NL
+3108323328,3108324351,GB
+3108324352,3108325375,CZ
+3108325376,3108326399,FI
+3108326400,3108327423,FR
+3108327424,3108328447,RU
+3108328448,3108329471,GB
+3108329472,3108330495,NL
+3108330496,3108331519,CH
+3108331520,3108332543,HU
+3108332544,3108333567,NL
+3108333568,3108334591,SK
+3108334592,3108335615,IR
+3108335616,3108336639,NL
+3108336640,3108337663,GB
+3108337664,3108338687,IR
+3108338688,3108339711,RU
+3108339712,3108340735,NL
+3108340736,3108341759,RU
+3108341760,3108342783,CH
+3108342784,3108343807,FI
+3108343808,3108344831,GB
+3108344832,3108345855,SI
+3108345856,3108346879,UA
+3108346880,3108347903,NL
+3108347904,3108348927,AT
+3108348928,3108349951,BE
+3108349952,3108350975,SE
+3108350976,3108351999,GE
+3108352000,3108354047,DE
+3108354048,3108355071,TM
+3108355072,3108356095,IT
+3108356096,3108358143,PL
+3108358144,3108359167,RO
+3108359168,3108360191,NL
+3108360192,3108361215,RU
+3108361216,3108362239,IE
+3108362240,3108363263,LU
+3108363264,3108364287,RU
+3108364288,3108365311,LU
+3108365312,3108366335,FR
+3108366336,3108367359,NL
+3108367360,3108368383,AT
+3108368384,3108369407,RO
+3108369408,3108370431,BE
+3108370432,3108371455,FR
+3108371456,3108372479,ES
+3108372480,3108373503,SK
+3108373504,3108374527,NL
+3108374528,3108375551,GB
+3108375552,3108376575,BY
+3108376576,3108377599,UA
+3108377600,3108378623,DE
+3108378624,3108379647,CZ
+3108379648,3108380671,IE
+3108380672,3108381695,GB
+3108381696,3108382719,PL
+3108382720,3108383743,CH
+3108383744,3108384767,BE
+3108384768,3108385791,CH
+3108385792,3108386815,GE
+3108386816,3108387839,GB
+3108387840,3108388863,IQ
+3108388864,3108389887,NL
+3108389888,3108390911,CH
+3108390912,3108391935,BE
+3108391936,3108392959,GR
+3108392960,3108393983,LI
+3108393984,3108395007,TR
+3108395008,3108396031,GB
+3108396032,3108397055,ES
+3108397056,3108398079,TR
+3108398080,3108399103,PT
+3108399104,3108400127,RU
+3108400128,3108401151,UA
+3108401152,3108402175,NL
+3108402176,3108403199,KZ
+3108403200,3108404223,DE
+3108404224,3108405247,SE
+3108405248,3108406271,UA
+3108406272,3108407295,GB
+3108407296,3108408319,ES
+3108408320,3108409343,TR
+3108409344,3108410367,DE
+3108410368,3108411391,IT
+3108411392,3108412415,ES
+3108412416,3108414463,GB
+3108414464,3108415487,RU
+3108415488,3108416511,GB
+3108416512,3108417535,ES
+3108417536,3108418559,FR
+3108418560,3108419583,PL
+3108419584,3108420607,NL
+3108420608,3108421631,MD
+3108421632,3108422655,GB
+3108422656,3108423679,IR
+3108423680,3108424703,IT
+3108424704,3108425727,DE
+3108425728,3108427775,NL
+3108427776,3108428799,CZ
+3108428800,3108429823,DE
+3108429824,3108430847,LB
+3108430848,3108433919,NL
+3108433920,3108434943,GB
+3108434944,3108435967,CH
+3108435968,3108436991,IL
+3108436992,3108438015,GB
+3108438016,3108439039,UA
+3108439040,3108440063,DE
+3108440064,3108441087,IT
+3108441088,3108443135,CH
+3108443136,3108444159,PL
+3108444160,3108445183,GB
+3108445184,3108446207,ES
+3108446208,3108447231,DE
+3108447232,3108448255,GB
+3108448256,3108449279,CZ
+3108449280,3108450303,IT
+3108450304,3108451327,GB
+3108451328,3108452351,RU
+3108452352,3108453375,LU
+3108453376,3108454399,NL
+3108454400,3108456447,RU
+3108456448,3108457471,GB
+3108457472,3108459519,RU
+3108459520,3108460543,DE
+3108460544,3108461567,RO
+3108461568,3108462591,GB
+3108462592,3108463615,RU
+3108463616,3108464639,GB
+3108464640,3108465663,HU
+3108465664,3108466687,GB
+3108466688,3108467711,CH
+3108467712,3108468735,TR
+3108468736,3108470783,DE
+3108470784,3108471807,LV
+3108471808,3108472831,YE
+3108472832,3108473855,GB
+3108473856,3108474879,PS
+3108474880,3108475903,RU
+3108475904,3108476927,FR
+3108476928,3108477951,IR
+3108477952,3108478975,FR
+3108478976,3108479999,IE
+3108480000,3108481023,AT
+3108481024,3108482047,DE
+3108482048,3108483071,SI
+3108483072,3108484095,SE
+3108484096,3108485119,AL
+3108485120,3108486143,GB
+3108486144,3108487167,FR
+3108487168,3108488191,IR
+3108488192,3108489215,RU
+3108489216,3108490239,ES
+3108490240,3108491263,AE
+3108491264,3108492287,NO
+3108492288,3108493311,RU
+3108493312,3108494335,CY
+3108494336,3108496383,NL
+3108496384,3108497407,DE
+3108497408,3108498431,CZ
+3108498432,3108499455,HR
+3108499456,3108500479,PL
+3108500480,3108501503,IT
+3108501504,3108502527,DE
+3108502528,3108503551,AT
+3108503552,3108504575,CH
+3108504576,3108505599,FR
+3108505600,3108506623,RU
+3108506624,3108507647,ES
+3108507648,3108508671,HU
+3108508672,3108509695,CH
+3108509696,3108510719,IR
+3108510720,3108511743,SI
+3108511744,3108512767,RU
+3108512768,3108513791,DK
+3108513792,3108514815,IT
+3108514816,3108515839,ES
+3108515840,3108516863,UA
+3108516864,3108517887,ES
+3108517888,3108518911,BG
+3108518912,3108519935,SI
+3108519936,3108520959,CH
+3108520960,3108521983,CZ
+3108521984,3108523007,AT
+3108523008,3108524031,IT
+3108524032,3108525055,FR
+3108525056,3108526079,LV
+3108526080,3108527103,FR
+3108527104,3108528127,GB
+3108528128,3108529151,NO
+3108529152,3108530175,JO
+3108530176,3108531199,SI
+3108531200,3108532223,GB
+3108532224,3108533247,ES
+3108533248,3108534271,FI
+3108534272,3108536319,NL
+3108536320,3108537343,GB
+3108537344,3108538367,NL
+3108538368,3108539391,AT
+3108539392,3108540415,DK
+3108540416,3108541439,RU
+3108541440,3108542463,GR
+3108542464,3108543487,PT
+3108543488,3108544511,US
+3108544512,3108546559,NL
+3108546560,3108547583,BE
+3108547584,3108548607,GB
+3108548608,3108549631,RO
+3108549632,3108550655,NL
+3108550656,3108551679,PL
+3108551680,3108552703,RU
+3108552704,3108553727,CH
+3108553728,3108554751,PL
+3108554752,3108555775,DE
+3108555776,3108556799,LV
+3108556800,3108557823,DK
+3108557824,3108558847,ES
+3108558848,3108559871,LB
+3108559872,3108560895,NO
+3108560896,3108562943,RU
+3108562944,3108563967,DE
+3108563968,3108564991,CH
+3108564992,3108566015,RO
+3108566016,3108567039,DE
+3108567040,3108568063,FR
+3108568064,3108569087,TR
+3108569088,3108570111,IR
+3108570112,3108571135,SI
+3108571136,3108572159,GB
+3108572160,3108573183,NO
+3108573184,3108574207,RU
+3108574208,3108575231,DE
+3108575232,3108576255,NO
+3108576256,3108578303,NL
+3108578304,3108579327,GB
+3108579328,3108580351,GR
+3108580352,3108581375,GB
+3108581376,3108582399,DE
+3108582400,3108583423,FR
+3108583424,3108584447,BG
+3108584448,3108585471,PL
+3108585472,3108586495,GB
+3108586496,3108587519,EE
+3108587520,3108588543,DK
+3108588544,3108589567,IR
+3108589568,3108590591,DE
+3108590592,3108591615,GB
+3108591616,3108592639,PL
+3108592640,3108593663,NL
+3108593664,3108594687,ES
+3108594688,3108597759,CZ
+3108597760,3108598783,IR
+3108598784,3108600831,CH
+3108600832,3108601855,NL
+3108601856,3108602879,TR
+3108602880,3108603903,EE
+3108603904,3108604927,IT
+3108604928,3108605951,GB
+3108605952,3108606975,NL
+3108606976,3108609023,GB
+3108609024,3108610047,LI
+3108610048,3108611071,CZ
+3108611072,3108612095,IT
+3108612096,3108615167,ES
+3108615168,3108616191,RU
+3108616192,3108618239,GB
+3108618240,3108619263,RU
+3108619264,3108620287,DK
+3108620288,3108621311,TR
+3108621312,3108622335,FR
+3108622336,3108623359,PL
+3108623360,3108625407,RU
+3108625408,3108626431,NL
+3108626432,3108627455,CZ
+3108627456,3108628479,PL
+3108628480,3108629503,FR
+3108629504,3108630527,BG
+3108630528,3108631551,CH
+3108631552,3108633599,IT
+3108633600,3108634623,FR
+3108634624,3108635647,AT
+3108635648,3108636671,UZ
+3108636672,3108637695,FR
+3108637696,3108638719,DE
+3108638720,3108639743,ES
+3108639744,3108640767,HU
+3108640768,3108641791,GB
+3108641792,3108642815,CH
+3108642816,3108643839,FR
+3108643840,3108644863,IT
+3108644864,3108645887,FR
+3108645888,3108646911,NL
+3108646912,3108647935,DK
+3108647936,3108648959,FR
+3108648960,3108649983,IM
+3108649984,3108651007,CZ
+3108651008,3108652031,DE
+3108652032,3108653055,CH
+3108653056,3108654079,GI
+3108654080,3108655103,NL
+3108655104,3108656127,ES
+3108656128,3108657151,PL
+3108657152,3108658175,RS
+3108658176,3108659199,GE
+3108659200,3108660223,FR
+3108660224,3108661247,UZ
+3108661248,3108662271,RU
+3108662272,3108676607,CH
+3108676608,3108677631,IR
+3108677632,3108678655,GB
+3108678656,3108679679,RU
+3108679680,3108680703,GB
+3108680704,3108681727,DE
+3108681728,3108682751,RU
+3108682752,3108683775,IT
+3108683776,3108684799,ES
+3108684800,3108685823,SK
+3108685824,3108686847,FR
+3108686848,3108687871,CZ
+3108687872,3108688895,FO
+3108688896,3108689919,CH
+3108689920,3108690943,DE
+3108690944,3108691967,RU
+3108691968,3108692991,DE
+3108692992,3108694015,RU
+3108694016,3108696063,GB
+3108696064,3108697087,ES
+3108697088,3108698111,DE
+3108698112,3108699135,IT
+3108699136,3108700159,RU
+3108700160,3108701183,PL
+3108701184,3108702207,RU
+3108702208,3108703231,AT
+3108703232,3108704255,ES
+3108704256,3108705279,SA
+3108705280,3108706303,GB
+3108706304,3108707327,DE
+3108707328,3108708351,GB
+3108708352,3108709375,CH
+3108709376,3108710399,PL
+3108710400,3108711423,SE
+3108711424,3108712447,RU
+3108712448,3108713471,BG
+3108713472,3108714495,RO
+3108714496,3108715519,RS
+3108715520,3108716543,GB
+3108716544,3108717567,RU
+3108717568,3108718591,FR
+3108718592,3108719615,RU
+3108719616,3108720639,IT
+3108720640,3108721663,MD
+3108721664,3108723711,RU
+3108723712,3108724735,GB
+3108724736,3108725759,IQ
+3108725760,3108726783,DE
+3108726784,3108727807,GB
+3108727808,3108728831,IT
+3108728832,3108729855,NL
+3108729856,3108730879,CZ
+3108730880,3108731903,GB
+3108731904,3108732927,FR
+3108732928,3108733951,FI
+3108733952,3108734975,RU
+3108734976,3108735999,CZ
+3108736000,3108737023,FR
+3108737024,3108738047,IE
+3108738048,3108739071,DE
+3108739072,3108740095,CH
+3108740096,3108741119,NL
+3108741120,3108742143,PL
+3108743168,3108744191,NL
3120562176,3120594943,CO
3120594944,3120599039,AR
3120599040,3120601087,EC
@@ -54164,7 +60665,9 @@
3123707904,3124232191,UY
3124232192,3124760751,AR
3124760752,3124760759,MX
-3124760760,3124783103,AR
+3124760760,3124765183,AR
+3124765184,3124765439,MX
+3124765440,3124783103,AR
3124783104,3124785151,GT
3124785152,3124788223,CL
3124788224,3124789247,PE
@@ -54178,7 +60681,9 @@
3124846592,3124848639,AR
3124848640,3124849663,PA
3124849664,3124850687,AR
-3124850688,3124853887,HN
+3124850688,3124852175,HN
+3124852176,3124852191,PH
+3124852192,3124853887,HN
3124853888,3124853903,FR
3124853904,3124854783,HN
3124854784,3124887551,CL
@@ -54186,9 +60691,7 @@
3124953088,3125018623,CL
3125018624,3125280767,EC
3125280768,3125542911,PA
-3125542912,3125658111,NI
-3125658112,3125658367,MX
-3125658368,3125673983,NI
+3125542912,3125673983,NI
3125673984,3125805055,CL
3125805056,3126329343,CO
3126329344,3126853631,VE
@@ -54282,7 +60785,8 @@
3154124800,3154126847,PL
3154126848,3154128895,RU
3154128896,3154132991,EE
-3154132992,3154157567,UA
+3154132992,3154149375,UA
+3154149376,3154157567,KZ
3154157568,3154173951,RU
3154173952,3154182143,MD
3154182144,3154247679,DE
@@ -54294,31 +60798,7 @@
3154575360,3154640895,FR
3154640896,3155165183,IT
3155165184,3155427327,RU
-3155427328,3155536647,AT
-3155536648,3155536655,DE
-3155536656,3155540735,AT
-3155540736,3155540991,HU
-3155540992,3155542323,AT
-3155542324,3155542327,CH
-3155542328,3155598079,AT
-3155598080,3155598335,DE
-3155598336,3155628031,AT
-3155628032,3155628287,HU
-3155628288,3155663743,AT
-3155663744,3155663871,CH
-3155663872,3155675647,AT
-3155675648,3155675775,DE
-3155675776,3155676415,AT
-3155676416,3155676671,HU
-3155676672,3155681791,AT
-3155681792,3155682047,HU
-3155682048,3155684095,AT
-3155684096,3155684223,HU
-3155684224,3155685119,AT
-3155685120,3155685247,HU
-3155685248,3155685375,AT
-3155685376,3155685631,CZ
-3155685632,3155689471,AT
+3155427328,3155689471,AT
3155689472,3155951615,RO
3155951616,3156213759,GB
3156213760,3156279295,RU
@@ -54333,7 +60813,9 @@
3156759432,3156759432,GB
3156759433,3156803583,DE
3156803584,3156869119,TR
-3156869120,3156930559,LU
+3156869120,3156926463,LU
+3156926464,3156928511,NL
+3156928512,3156930559,LU
3156930560,3156933631,US
3156933632,3156934655,SG
3156934656,3157000191,RU
@@ -54347,9 +60829,9 @@
3157196800,3157262335,PL
3157262336,3157786623,SA
3157786624,3158048767,TR
-3158048768,3158214911,CH
-3158214912,3158215167,DE
-3158215168,3158310911,CH
+3158048768,3158092031,CH
+3158092032,3158092287,DE
+3158092288,3158310911,CH
3158310912,3158312959,FI
3158312960,3158315007,AZ
3158315008,3158317055,DE
@@ -54421,13 +60903,23 @@
3158458368,3158474751,GB
3158474752,3158507519,OM
3158507520,3158573055,FI
-3158573056,3158630399,RU
+3158573056,3158581247,RU
+3158581248,3158589439,DE
+3158589440,3158615039,RU
+3158615040,3158616063,GB
+3158616064,3158630399,RU
3158630400,3158638591,PL
3158638592,3158704127,LT
3158704128,3158835199,KW
3158835200,3158851583,IQ
3158851584,3158859775,RU
-3158859776,3158861567,NL
+3158859776,3158860031,NL
+3158860032,3158860287,GB
+3158860288,3158860543,NL
+3158860544,3158860799,GB
+3158860800,3158861055,NL
+3158861056,3158861311,UA
+3158861312,3158861567,IE
3158861568,3158861823,AE
3158861824,3158862079,IN
3158862080,3158862335,GB
@@ -54446,7 +60938,8 @@
3158865408,3158865663,AL
3158865664,3158865919,CY
3158865920,3158866943,IT
-3158866944,3158867455,NL
+3158866944,3158867199,DE
+3158867200,3158867455,HU
3158867456,3158867711,DE
3158867712,3158867967,NL
3158867968,3158884351,AZ
@@ -54614,38 +61107,27 @@
3161620480,3161636863,DK
3161636864,3161653247,RU
3161653248,3161669631,LU
-3161669632,3161669887,FR
-3161669888,3161670143,RE
-3161670144,3161670399,FR
-3161670400,3161670655,RE
-3161670656,3161671167,FR
+3161669632,3161669887,RE
+3161669888,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
+3161671424,3161672959,FR
+3161672960,3161673215,RE
+3161673216,3161673471,FR
+3161673472,3161673727,RE
+3161673728,3161677823,FR
3161677824,3161678079,MQ
-3161678080,3161678335,FR
-3161678336,3161679359,MQ
-3161679360,3161679615,FR
-3161679616,3161679871,MQ
+3161678080,3161678847,FR
+3161678848,3161679103,MQ
+3161679104,3161679871,FR
3161679872,3161680639,GP
3161680640,3161681151,FR
-3161681152,3161681919,GP
-3161681920,3161682175,GF
-3161682176,3161682431,FR
+3161681152,3161681663,GP
+3161681664,3161682431,FR
3161682432,3161682943,GF
-3161682944,3161683967,MQ
-3161683968,3161684223,FR
-3161684224,3161684479,MQ
-3161684480,3161685503,FR
-3161685504,3161685759,MQ
-3161685760,3161686015,FR
+3161682944,3161683711,MQ
+3161683712,3161684735,FR
+3161684736,3161684991,MQ
+3161684992,3161686015,FR
3161686016,3161702399,UA
3161702400,3161718783,AM
3161718784,3161735167,PL
@@ -54680,18 +61162,14 @@
3162071040,3162087423,IR
3162087424,3162095615,SK
3162095616,3162103807,GE
-3162103808,3162105087,FR
-3162105088,3162105855,NL
-3162105856,3162106111,FR
-3162106112,3162106367,NL
-3162106368,3162106623,FR
-3162106624,3162107391,NL
+3162103808,3162104831,FR
+3162104832,3162105343,NL
+3162105344,3162105599,FR
+3162105600,3162107391,NL
3162107392,3162107647,FR
3162107648,3162108415,NL
3162108416,3162108671,FR
-3162108672,3162108927,NL
-3162108928,3162109183,FR
-3162109184,3162111103,NL
+3162108672,3162111103,NL
3162111104,3162111167,FR
3162111168,3162111999,NL
3162112000,3162120191,PL
@@ -54826,85 +61304,460 @@
3164936192,3164937749,LT
3164937750,3164937750,FR
3164937751,3164938239,LT
-3164938240,3164947579,FR
+3164938240,3164946431,FR
+3164946432,3164946435,BE
+3164946436,3164946463,FR
+3164946464,3164946471,IT
+3164946472,3164946655,FR
+3164946656,3164946671,BE
+3164946672,3164946727,FR
+3164946728,3164946731,NL
+3164946732,3164946751,FR
+3164946752,3164946783,ES
+3164946784,3164947567,FR
+3164947568,3164947575,ES
+3164947576,3164947579,DE
3164947580,3164947583,IT
-3164947584,3164949135,FR
+3164947584,3164947631,FR
+3164947632,3164947635,IT
+3164947636,3164947727,FR
+3164947728,3164947743,GB
+3164947744,3164948671,FR
+3164948672,3164948703,IT
+3164948704,3164948851,FR
+3164948852,3164948855,IT
+3164948856,3164948959,FR
+3164948960,3164948991,ES
+3164948992,3164949103,FR
+3164949104,3164949107,LT
+3164949108,3164949135,FR
3164949136,3164949151,NL
-3164949152,3164950695,FR
+3164949152,3164949171,FR
+3164949172,3164949175,LT
+3164949176,3164949183,FR
+3164949184,3164949191,IT
+3164949192,3164949195,FR
+3164949196,3164949199,IE
+3164949200,3164949311,FR
+3164949312,3164949327,NL
+3164949328,3164949331,DE
+3164949332,3164949407,FR
+3164949408,3164949439,GB
+3164949440,3164949479,FR
+3164949480,3164949487,PL
+3164949488,3164950063,FR
+3164950064,3164950079,IT
+3164950080,3164950407,FR
+3164950408,3164950411,DE
+3164950412,3164950451,FR
+3164950452,3164950455,FI
+3164950456,3164950511,FR
+3164950512,3164950515,NL
+3164950516,3164950519,FR
+3164950520,3164950523,ES
+3164950524,3164950559,FR
+3164950560,3164950591,GB
+3164950592,3164950687,FR
+3164950688,3164950695,PL
3164950696,3164950703,NL
-3164950704,3164951663,FR
+3164950704,3164950707,IT
+3164950708,3164950751,FR
+3164950752,3164950759,NL
+3164950760,3164950767,GB
+3164950768,3164951167,FR
+3164951168,3164951199,PT
+3164951200,3164951247,FR
+3164951248,3164951263,ES
+3164951264,3164951295,PL
+3164951296,3164951455,ES
+3164951456,3164951523,FR
+3164951524,3164951527,PL
+3164951528,3164951547,FR
+3164951548,3164951559,IT
+3164951560,3164951567,NL
+3164951568,3164951583,FR
+3164951584,3164951591,DE
+3164951592,3164951663,FR
3164951664,3164951671,PL
-3164951672,3164952224,FR
+3164951672,3164951675,FR
+3164951676,3164951679,ES
+3164951680,3164951683,FR
+3164951684,3164951687,GB
+3164951688,3164951743,FR
+3164951744,3164951775,PL
+3164951776,3164951807,DE
+3164951808,3164952224,FR
3164952225,3164952231,GB
3164952232,3164952233,FR
3164952234,3164952235,GB
3164952236,3164952236,FR
3164952237,3164952237,GB
-3164952238,3164953255,FR
+3164952238,3164952271,FR
+3164952272,3164952287,DE
+3164952288,3164952303,FR
+3164952304,3164952319,LT
+3164952320,3164952399,FR
+3164952400,3164952415,NL
+3164952416,3164952431,FR
+3164952432,3164952447,ES
+3164952448,3164952479,FR
+3164952480,3164952511,ES
+3164952512,3164952527,IE
+3164952528,3164952831,FR
+3164952832,3164952895,GB
+3164952896,3164953247,FR
+3164953248,3164953255,BE
3164953256,3164953263,CZ
-3164953264,3164953391,FR
+3164953264,3164953383,FR
+3164953384,3164953387,PL
+3164953388,3164953391,FR
3164953392,3164953399,NL
-3164953400,3164953583,FR
+3164953400,3164953443,FR
+3164953444,3164953447,BE
+3164953448,3164953451,PL
+3164953452,3164953463,FR
+3164953464,3164953467,NL
+3164953468,3164953503,FR
+3164953504,3164953511,IT
+3164953512,3164953571,FR
+3164953572,3164953575,ES
+3164953576,3164953583,FR
3164953584,3164953599,ES
-3164953600,3164954511,FR
+3164953600,3164953663,FR
+3164953664,3164953727,CH
+3164953728,3164953855,DE
+3164953856,3164954207,FR
+3164954208,3164954223,LT
+3164954224,3164954255,FR
+3164954256,3164954271,NL
+3164954272,3164954495,FR
+3164954496,3164954499,IT
+3164954500,3164954511,FR
3164954512,3164954515,IT
-3164954516,3164960439,FR
+3164954516,3164954527,FR
+3164954528,3164954543,IE
+3164954544,3164954583,FR
+3164954584,3164954591,IT
+3164954592,3164958815,FR
+3164958816,3164958847,ES
+3164958848,3164958911,BE
+3164958912,3164959039,FR
+3164959040,3164959103,IT
+3164959104,3164959135,PT
+3164959136,3164959239,FR
+3164959240,3164959247,ES
+3164959248,3164959263,FR
+3164959264,3164959279,IT
+3164959280,3164959375,FR
+3164959376,3164959383,DE
+3164959384,3164959387,ES
+3164959388,3164959391,FR
+3164959392,3164959407,ES
+3164959408,3164959663,FR
+3164959664,3164959679,IT
+3164959680,3164959743,PT
+3164959744,3164959935,FR
+3164959936,3164959999,BE
+3164960000,3164960263,FR
+3164960264,3164960267,ES
+3164960268,3164960303,FR
+3164960304,3164960319,CH
+3164960320,3164960335,FR
+3164960336,3164960339,LT
+3164960340,3164960363,FR
+3164960364,3164960367,ES
+3164960368,3164960439,FR
3164960440,3164960443,DE
-3164960444,3164960715,FR
+3164960444,3164960471,FR
+3164960472,3164960479,CH
+3164960480,3164960495,ES
+3164960496,3164960599,FR
+3164960600,3164960607,FI
+3164960608,3164960631,FR
+3164960632,3164960639,ES
+3164960640,3164960715,FR
3164960716,3164960719,NL
-3164960720,3164960843,FR
+3164960720,3164960799,FR
+3164960800,3164960831,PT
+3164960832,3164960843,FR
3164960844,3164960847,NL
-3164960848,3164961391,FR
+3164960848,3164960943,FR
+3164960944,3164960959,GB
+3164960960,3164960999,FR
+3164961000,3164961003,PL
+3164961004,3164961015,FR
+3164961016,3164961023,NL
+3164961024,3164961151,FR
+3164961152,3164961167,PL
+3164961168,3164961175,IE
+3164961176,3164961335,FR
+3164961336,3164961343,DE
+3164961344,3164961359,FR
+3164961360,3164961363,FI
+3164961364,3164961391,FR
3164961392,3164961395,ES
-3164961396,3164961511,FR
+3164961396,3164961407,FR
+3164961408,3164961471,PT
+3164961472,3164961503,FR
+3164961504,3164961511,IT
3164961512,3164961519,GB
3164961520,3164961551,FR
-3164961552,3164961555,ES
-3164961556,3164962471,FR
+3164961552,3164961559,ES
+3164961560,3164961563,FR
+3164961564,3164961567,CH
+3164961568,3164961759,FR
+3164961760,3164961763,NL
+3164961764,3164961767,IT
+3164961768,3164961775,FR
+3164961776,3164961783,GB
+3164961784,3164961815,FR
+3164961816,3164961823,IT
+3164961824,3164961859,FR
+3164961860,3164961863,ES
+3164961864,3164961871,FR
+3164961872,3164961887,PL
+3164961888,3164961979,FR
+3164961980,3164961983,IE
+3164961984,3164962015,FR
+3164962016,3164962031,NL
+3164962032,3164962111,FR
+3164962112,3164962143,CH
+3164962144,3164962151,FR
+3164962152,3164962159,BE
+3164962160,3164962247,FR
+3164962248,3164962255,DE
+3164962256,3164962279,FR
+3164962280,3164962283,PL
+3164962284,3164962443,FR
+3164962444,3164962447,CZ
+3164962448,3164962463,FR
+3164962464,3164962471,IT
3164962472,3164962475,ES
-3164962476,3164962815,FR
+3164962476,3164962631,FR
+3164962632,3164962639,DE
+3164962640,3164962719,FR
+3164962720,3164962723,GB
+3164962724,3164962815,FR
3164962816,3164964863,ES
3164964864,3164966911,FI
-3164966912,3164968319,FR
+3164966912,3164968255,FR
+3164968256,3164968271,DE
+3164968272,3164968287,GB
+3164968288,3164968319,IT
3164968320,3164968447,GB
3164968448,3164968455,FR
3164968456,3164968459,NL
-3164968460,3164968835,FR
+3164968460,3164968463,FR
+3164968464,3164968471,IT
+3164968472,3164968687,FR
+3164968688,3164968703,IT
+3164968704,3164968831,FR
+3164968832,3164968835,PL
3164968836,3164968839,ES
-3164968840,3164969019,FR
+3164968840,3164968903,FR
+3164968904,3164968911,IT
+3164968912,3164969019,FR
3164969020,3164969023,BE
-3164969024,3164969039,FR
+3164969024,3164969027,IT
+3164969028,3164969039,FR
3164969040,3164969047,NL
-3164969048,3164970413,FR
+3164969048,3164969191,FR
+3164969192,3164969199,ES
+3164969200,3164969203,DE
+3164969204,3164969503,FR
+3164969504,3164969535,IT
+3164969536,3164969647,FR
+3164969648,3164969655,GB
+3164969656,3164969663,FR
+3164969664,3164969695,BE
+3164969696,3164969895,FR
+3164969896,3164969899,ES
+3164969900,3164969919,FR
+3164969920,3164969951,DE
+3164969952,3164970207,FR
+3164970208,3164970215,PL
+3164970216,3164970219,GB
+3164970220,3164970287,FR
+3164970288,3164970291,ES
+3164970292,3164970295,FR
+3164970296,3164970299,ES
+3164970300,3164970303,FR
+3164970304,3164970335,NL
+3164970336,3164970347,FR
+3164970348,3164970351,ES
+3164970352,3164970359,PL
+3164970360,3164970371,FR
+3164970372,3164970375,CH
+3164970376,3164970383,FR
+3164970384,3164970387,PL
+3164970388,3164970413,FR
3164970414,3164970415,IT
-3164970416,3164970923,FR
+3164970416,3164970495,FR
+3164970496,3164970527,BE
+3164970528,3164970543,FR
+3164970544,3164970551,IE
+3164970552,3164970599,FR
+3164970600,3164970603,BE
+3164970604,3164970607,FR
+3164970608,3164970615,DE
+3164970616,3164970639,FR
+3164970640,3164970647,DE
+3164970648,3164970687,FR
+3164970688,3164970691,DE
+3164970692,3164970879,FR
+3164970880,3164970883,ES
+3164970884,3164970911,FR
+3164970912,3164970915,ES
+3164970916,3164970923,FR
3164970924,3164970927,LT
-3164970928,3164971791,FR
+3164970928,3164971455,FR
+3164971456,3164971459,CZ
+3164971460,3164971567,FR
+3164971568,3164971571,DE
+3164971572,3164971679,FR
+3164971680,3164971711,NL
+3164971712,3164971791,FR
3164971792,3164971799,IT
-3164971800,3164973419,FR
+3164971800,3164971967,FR
+3164971968,3164971983,PT
+3164971984,3164972027,FR
+3164972028,3164972031,DE
+3164972032,3164972499,FR
+3164972500,3164972503,IT
+3164972504,3164972511,FR
+3164972512,3164972527,IT
+3164972528,3164972687,FR
+3164972688,3164972695,PT
+3164972696,3164972703,FR
+3164972704,3164972719,IT
+3164972720,3164973419,FR
3164973420,3164973423,ES
-3164973424,3164973663,FR
-3164973664,3164973695,GB
-3164973696,3164974335,FR
+3164973424,3164973627,FR
+3164973628,3164973631,IT
+3164973632,3164973695,GB
+3164973696,3164973759,FR
+3164973760,3164973791,IE
+3164973792,3164973843,FR
+3164973844,3164973847,IE
+3164973848,3164973855,PL
+3164973856,3164973863,FR
+3164973864,3164973867,BE
+3164973868,3164973871,GB
+3164973872,3164973879,FR
+3164973880,3164973883,PL
+3164973884,3164974111,FR
+3164974112,3164974119,ES
+3164974120,3164974127,FR
+3164974128,3164974135,NL
+3164974136,3164974239,FR
+3164974240,3164974271,PT
+3164974272,3164974303,FR
+3164974304,3164974335,NL
3164974336,3164974463,GB
3164974464,3164974527,FR
3164974528,3164974559,ES
-3164974560,3164976143,FR
+3164974560,3164974647,FR
+3164974648,3164974655,DE
+3164974656,3164974667,FR
+3164974668,3164974671,BE
+3164974672,3164974727,FR
+3164974728,3164974731,CH
+3164974732,3164974887,FR
+3164974888,3164974895,GB
+3164974896,3164975039,FR
+3164975040,3164975103,GB
+3164975104,3164975135,PT
+3164975136,3164975167,FR
+3164975168,3164975199,NL
+3164975200,3164975739,FR
+3164975740,3164975743,BE
+3164975744,3164975815,FR
+3164975816,3164975823,IT
+3164975824,3164975939,FR
+3164975940,3164975943,DE
+3164975944,3164975999,FR
+3164976000,3164976015,ES
+3164976016,3164976063,FR
+3164976064,3164976095,GB
+3164976096,3164976127,FR
+3164976128,3164976135,GB
+3164976136,3164976143,FR
3164976144,3164976159,BE
-3164976160,3164976295,FR
+3164976160,3164976175,IT
+3164976176,3164976191,FR
+3164976192,3164976207,DE
+3164976208,3164976239,FR
+3164976240,3164976255,GB
+3164976256,3164976263,FR
+3164976264,3164976271,ES
+3164976272,3164976295,FR
3164976296,3164976303,IT
-3164976304,3164995583,FR
+3164976304,3164976315,FR
+3164976316,3164976319,GB
+3164976320,3164976327,ES
+3164976328,3164976463,FR
+3164976464,3164976479,ES
+3164976480,3164976535,FR
+3164976536,3164976539,ES
+3164976540,3164976571,FR
+3164976572,3164976575,DE
+3164976576,3164976583,FR
+3164976584,3164976591,IT
+3164976592,3164976663,FR
+3164976664,3164976671,ES
+3164976672,3164976831,FR
+3164976832,3164976839,DE
+3164976840,3164977415,FR
+3164977416,3164977423,GB
+3164977424,3164977503,FR
+3164977504,3164977535,CZ
+3164977536,3164977551,PT
+3164977552,3164977599,FR
+3164977600,3164977631,GB
+3164977632,3164977647,IE
+3164977648,3164977855,FR
+3164977856,3164977871,LT
+3164977872,3164977883,FR
+3164977884,3164977887,PL
+3164977888,3164977903,FR
+3164977904,3164977907,GB
+3164977908,3164977911,FR
+3164977912,3164977919,IT
+3164977920,3164978063,FR
+3164978064,3164978067,ES
+3164978068,3164978151,FR
+3164978152,3164978155,CH
+3164978156,3164978159,FR
+3164978160,3164978175,ES
+3164978176,3164978607,FR
+3164978608,3164978623,IT
+3164978624,3164978719,FR
+3164978720,3164978751,ES
+3164978752,3164978975,FR
+3164978976,3164978979,PL
+3164978980,3164978983,FR
+3164978984,3164978991,IT
+3164978992,3164978999,FR
+3164979000,3164979003,ES
+3164979004,3164979103,FR
+3164979104,3164979111,IT
+3164979112,3164979159,FR
+3164979160,3164979167,IT
+3164979168,3164995583,FR
3164995584,3165061119,RU
3165061120,3165126655,SK
3165126656,3165192191,RU
3165192192,3165257727,GE
3165257728,3165323263,RO
3165323264,3165388799,ES
-3165388800,3165417471,RO
+3165388800,3165417471,MT
3165417472,3165421567,DE
3165421568,3165425663,IE
-3165425664,3165437951,RO
-3165437952,3165454335,AT
+3165425664,3165429759,GB
+3165429760,3165437951,RO
+3165437952,3165439487,AT
+3165439488,3165439743,GB
+3165439744,3165454335,AT
3165454336,3165519871,RO
3165519872,3165585407,DE
3165585408,3165650943,CZ
@@ -54940,11 +61793,7 @@
3166697472,3166699519,RO
3166699520,3166961663,DE
3166961664,3167223807,SI
-3167223808,3167321095,NL
-3167321096,3167321099,DE
-3167321100,3167476583,NL
-3167476584,3167476591,DE
-3167476592,3167748095,NL
+3167223808,3167748095,NL
3167748096,3167762431,RO
3167762432,3167764479,MD
3167764480,3167772671,RO
@@ -54962,16 +61811,31 @@
3167799296,3167803391,MD
3167803392,3167813631,RO
3167813632,3167815679,MD
-3167815680,3167868927,RO
+3167815680,3167842303,RO
+3167842304,3167843327,ES
+3167843328,3167846399,RO
+3167846400,3167851519,IR
+3167851520,3167852543,DE
+3167852544,3167862783,RO
+3167862784,3167866879,IR
+3167866880,3167868927,RO
3167868928,3167879167,MD
3167879168,3167895551,DE
-3167895552,3167938559,RO
+3167895552,3167899647,IR
+3167899648,3167902719,RO
+3167902720,3167902975,BE
+3167902976,3167928319,RO
+3167928320,3167932415,IR
+3167932416,3167934463,RO
+3167934464,3167935487,ES
+3167935488,3167938559,RO
3167938560,3167939583,MD
3167939584,3167940607,RO
3167940608,3167943679,MD
3167943680,3167944447,RO
3167944448,3167944703,GB
-3167944704,3167987711,RO
+3167944704,3167948799,IR
+3167948800,3167987711,RO
3167987712,3167989759,MD
3167989760,3168005887,RO
3168005888,3168006143,NL
@@ -54983,12 +61847,17 @@
3168016384,3168018431,MD
3168018432,3168020479,RO
3168020480,3168022527,MD
-3168022528,3168038911,RO
+3168022528,3168026623,IR
+3168026624,3168038911,RO
3168038912,3168039935,MD
3168039936,3168040959,BE
3168040960,3168050431,RO
3168050432,3168050687,MD
-3168050688,3168081919,RO
+3168050688,3168071679,RO
+3168071680,3168073727,IR
+3168073728,3168077823,RO
+3168077824,3168079871,ES
+3168079872,3168081919,RO
3168081920,3168083967,FR
3168083968,3168084991,RO
3168084992,3168086015,MD
@@ -54996,9 +61865,13 @@
3168088064,3168089087,RO
3168089088,3168090111,MD
3168090112,3168092159,ES
-3168092160,3168096255,RO
+3168092160,3168096255,IR
3168096256,3168100351,MD
-3168100352,3168129023,RO
+3168100352,3168111615,RO
+3168111616,3168112639,FR
+3168112640,3168124927,RO
+3168124928,3168126975,IR
+3168126976,3168129023,RO
3168129024,3168130047,MD
3168130048,3168132095,RO
3168132096,3168133119,MD
@@ -55008,7 +61881,10 @@
3168138240,3168139263,MD
3168139264,3168156671,RO
3168156672,3168157695,MD
-3168157696,3168165887,RO
+3168157696,3168161791,IR
+3168161792,3168165119,RO
+3168165120,3168165375,DE
+3168165376,3168165887,RO
3168165888,3168166911,MD
3168166912,3168169983,RO
3168169984,3168172031,ES
@@ -55022,7 +61898,7 @@
3168192512,3168194559,MD
3168194560,3168199679,RO
3168199680,3168200703,MD
-3168200704,3168202751,RO
+3168200704,3168202751,IR
3168202752,3168203775,ES
3168203776,3168267263,RO
3168267264,3168269311,MD
@@ -55153,7 +62029,10 @@
3187910656,3187914751,CL
3187914752,3187916799,BO
3187916800,3187933183,CO
-3187933184,3187935519,GT
+3187933184,3187933311,HN
+3187933312,3187933341,GT
+3187933342,3187933342,HN
+3187933343,3187935519,GT
3187935520,3187935527,HN
3187935528,3187935607,GT
3187935608,3187935615,HN
@@ -55161,15 +62040,23 @@
3187936048,3187936063,HN
3187936064,3187936711,GT
3187936712,3187936719,HN
-3187936720,3187940351,GT
-3187940352,3187940607,HN
-3187940608,3187940963,GT
+3187936720,3187939847,GT
+3187939848,3187939855,HN
+3187939856,3187940479,GT
+3187940480,3187940543,HN
+3187940544,3187940963,GT
3187940964,3187940967,HN
3187940968,3187943055,GT
3187943056,3187943063,HN
3187943064,3187943127,GT
3187943128,3187943135,HN
-3187943136,3187945971,GT
+3187943136,3187943399,GT
+3187943400,3187943403,HN
+3187943404,3187944671,GT
+3187944672,3187944679,HN
+3187944680,3187944773,GT
+3187944774,3187944774,HN
+3187944775,3187945971,GT
3187945972,3187945975,HN
3187945976,3187946111,GT
3187946112,3187946239,HN
@@ -55177,7 +62064,11 @@
3187946640,3187946647,HN
3187946648,3187947983,GT
3187947984,3187947987,HN
-3187947988,3187948799,GT
+3187947988,3187948031,GT
+3187948032,3187948159,HN
+3187948160,3187948479,GT
+3187948480,3187948543,HN
+3187948544,3187948799,GT
3187948800,3187948927,HN
3187948928,3187949567,GT
3187949568,3187950126,BQ
@@ -55212,7 +62103,7 @@
3188137184,3188146175,AR
3188146176,3188170751,CO
3188170752,3188174847,CR
-3188174848,3188178943,AR
+3188174848,3188178943,BR
3188178944,3188187135,CR
3188187136,3188203519,AR
3188203520,3188207615,DO
@@ -55221,7 +62112,8 @@
3188228096,3188236287,PE
3188236288,3188237311,PA
3188237312,3188239359,VE
-3188239360,3188240383,PE
+3188239360,3188239615,BR
+3188239616,3188240383,PE
3188240384,3188241407,CO
3188241408,3188242431,EC
3188242432,3188244479,AR
@@ -55236,7 +62128,7 @@
3188270080,3188270335,MX
3188270336,3188270847,VE
3188270848,3188271103,BR
-3188271104,3188273151,VE
+3188271104,3188273151,MX
3188273152,3188275199,PA
3188275200,3188277247,CL
3188277248,3188293631,CO
@@ -55254,11 +62146,17 @@
3188473856,3188482047,PE
3188482048,3188490239,AR
3188490240,3188498431,CO
-3188498432,3188513407,AR
+3188498432,3188512127,AR
+3188512128,3188512255,US
+3188512256,3188513407,AR
3188513408,3188513535,US
-3188513536,3188517119,AR
+3188513536,3188516095,AR
+3188516096,3188516223,US
+3188516224,3188517119,AR
3188517120,3188517247,US
-3188517248,3188518271,AR
+3188517248,3188517759,AR
+3188517760,3188517887,US
+3188517888,3188518271,AR
3188518272,3188518399,US
3188518400,3188523007,AR
3188523008,3188539391,CO
@@ -55326,27 +62224,25 @@
3191193600,3191209983,HN
3191209984,3191275519,CL
3191275520,3191341055,AR
-3191341056,3191405951,GT
-3191405952,3191406335,SV
+3191341056,3191406079,GT
+3191406080,3191406335,SV
3191406336,3191406591,GT
3191406592,3191439359,SV
3191439360,3191455743,EC
3191455744,3191472127,AR
3191472128,3191603199,TT
-3191603200,3191607807,CO
+3191603200,3191603519,CO
+3191603520,3191603583,PR
+3191603584,3191607807,CO
3191607808,3191608319,CL
3191608320,3191610623,CO
3191610624,3191610879,PE
3191610880,3191611391,CO
3191611392,3191619583,VE
-3191619584,3191624703,CL
-3191624704,3191624959,CO
-3191624960,3191626239,CL
-3191626240,3191626495,CO
-3191626496,3191633663,CL
-3191633664,3191633919,CO
-3191633920,3191635967,CL
-3191635968,3191647743,CO
+3191619584,3191635967,CL
+3191635968,3191637759,CO
+3191637760,3191638015,AR
+3191638016,3191647743,CO
3191647744,3191647807,AR
3191647808,3191648255,CO
3191648256,3191649791,US
@@ -55358,27 +62254,25 @@
3191670016,3191670271,AR
3191670272,3191670783,CO
3191670784,3191672831,CL
-3191672832,3191674879,CO
-3191674880,3191676927,CL
+3191672832,3191673855,CO
+3191673856,3191676927,CL
3191676928,3191677951,US
3191677952,3191678207,AR
3191678208,3191678719,US
3191678720,3191678975,AR
-3191678976,3191680255,US
-3191680256,3191680511,AR
-3191680512,3191680767,US
+3191678976,3191680767,US
3191680768,3191681279,AR
3191681280,3191681535,US
-3191681536,3191683327,AR
-3191683328,3191684607,US
-3191684608,3191684863,AR
-3191684864,3191685119,US
+3191681536,3191682303,AR
+3191682304,3191682559,US
+3191682560,3191683327,AR
+3191683328,3191685119,US
3191685120,3191685631,AR
3191685632,3191685887,US
3191685888,3191687167,AR
3191687168,3191688703,CO
3191688704,3191693311,US
-3191693312,3191695871,CO
+3191693312,3191695871,CL
3191695872,3191696127,US
3191696128,3191696383,CO
3191696384,3191701503,US
@@ -55392,23 +62286,28 @@
3191705600,3191705855,US
3191705856,3191706111,CO
3191706112,3191706623,US
-3191706624,3191719935,CO
-3191719936,3191721215,AR
-3191721216,3191721471,CO
-3191721472,3191722495,AR
-3191722496,3191725055,CO
+3191706624,3191707647,CO
+3191707648,3191719935,CL
+3191719936,3191722495,AR
+3191722496,3191724031,CL
+3191724032,3191725055,CO
3191725056,3191725311,AR
-3191725312,3191726079,CO
+3191725312,3191725567,CL
+3191725568,3191726079,CO
3191726080,3191726335,AR
3191726336,3191726591,CO
3191726592,3191726847,AR
3191726848,3191727103,CO
3191727104,3191727359,AR
-3191727360,3191730431,CO
+3191727360,3191729919,CO
+3191729920,3191730431,CL
3191730432,3191730687,AR
3191730688,3191730943,CO
3191730944,3191731199,AR
-3191731200,3191732479,CO
+3191731200,3191731711,CO
+3191731712,3191731967,AR
+3191731968,3191732223,CO
+3191732224,3191732479,CL
3191732480,3191732735,AR
3191732736,3191734079,CO
3191734080,3191734143,US
@@ -55428,15 +62327,21 @@
3193438208,3193450495,CW
3193450496,3193450751,SR
3193450752,3193569279,CW
-3193569280,3193579263,CO
+3193569280,3193573087,CO
+3193573088,3193573095,US
+3193573096,3193579263,CO
3193579264,3193579519,EC
3193579520,3193582591,CO
3193582592,3193583103,EC
-3193583104,3193595391,CO
+3193583104,3193592319,CO
+3193592320,3193592575,EC
+3193592576,3193595391,CO
3193595392,3193595647,EC
-3193595648,3193599999,CO
-3193600000,3193600255,EC
-3193600256,3193605375,CO
+3193595648,3193599743,CO
+3193599744,3193600255,EC
+3193600256,3193604351,CO
+3193604352,3193605119,EC
+3193605120,3193605375,CO
3193605376,3193605631,EC
3193605632,3193606143,CO
3193606144,3193606399,EC
@@ -55466,10 +62371,8 @@
3193736448,3193737471,AR
3193737472,3193739007,US
3193739008,3193739263,AR
-3193739264,3193739519,US
-3193739520,3193739775,AR
-3193739776,3193740287,US
-3193740288,3193741311,AR
+3193739264,3193740543,US
+3193740544,3193741311,AR
3193741312,3193741823,US
3193741824,3193742079,AR
3193742080,3193742335,US
@@ -55481,29 +62384,27 @@
3193743744,3193743871,US
3193743872,3193743999,AR
3193744000,3193744127,US
-3193744128,3193745279,AR
-3193745280,3193745407,US
+3193744128,3193744639,AR
+3193744640,3193744895,US
+3193744896,3193745151,AR
+3193745152,3193745407,US
3193745408,3193746431,AR
3193746432,3193746687,US
3193746688,3193746751,AR
3193746752,3193746815,US
3193746816,3193746879,AR
-3193746880,3193746943,US
-3193746944,3193747199,AR
-3193747200,3193747455,US
+3193746880,3193747455,US
3193747456,3193747583,AR
-3193747584,3193748223,US
-3193748224,3193748863,AR
-3193748864,3193748991,US
-3193748992,3193749247,AR
-3193749248,3193749759,US
+3193747584,3193748479,US
+3193748480,3193748863,AR
+3193748864,3193749759,US
3193749760,3193750015,AR
3193750016,3193750271,US
3193750272,3193750527,AR
3193750528,3193750783,US
3193750784,3193751807,AR
-3193751808,3193752319,US
-3193752320,3193752831,AR
+3193751808,3193752703,US
+3193752704,3193752831,AR
3193752832,3193752959,US
3193752960,3193753087,AR
3193753088,3193753343,US
@@ -55511,9 +62412,13 @@
3193754624,3193754751,US
3193754752,3193755135,AR
3193755136,3193755263,US
-3193755264,3193756415,AR
+3193755264,3193755647,AR
+3193755648,3193755775,US
+3193755776,3193756415,AR
3193756416,3193756543,US
-3193756544,3193757055,AR
+3193756544,3193756799,AR
+3193756800,3193756927,US
+3193756928,3193757055,AR
3193757056,3193757183,US
3193757184,3193765887,AR
3193765888,3193774079,TT
@@ -55544,8 +62449,9 @@
3194028032,3194044415,AR
3194044416,3194052607,CO
3194052608,3194056703,TT
-3194056704,3194058495,CW
-3194058496,3194058751,CA
+3194056704,3194057727,CW
+3194057728,3194057983,CA
+3194057984,3194058751,CW
3194058752,3194060799,AR
3194060800,3194068991,CO
3194068992,3194071039,PA
@@ -55557,11 +62463,13 @@
3194126336,3194127359,GT
3194127360,3194129407,PE
3194129408,3194129663,AR
-3194129664,3194129671,BR
-3194129672,3194130431,AR
+3194129664,3194129919,BR
+3194129920,3194130431,AR
3194130432,3194134527,BR
3194134528,3194135551,AR
-3194135552,3194136575,GT
+3194135552,3194136063,GT
+3194136064,3194136319,BR
+3194136320,3194136575,GT
3194136576,3194137087,BR
3194137088,3194140159,AR
3194140160,3194142719,CR
@@ -55621,7 +62529,10 @@
3194596352,3194597375,HT
3194597376,3194601471,AR
3194601472,3194602495,CW
-3194602496,3194613759,AR
+3194602496,3194610943,AR
+3194610944,3194611199,CO
+3194611200,3194613503,AR
+3194613504,3194613759,CL
3194613760,3194617855,PE
3194617856,3194626047,NI
3194626048,3194630143,AR
@@ -55699,7 +62610,9 @@
3194925056,3194929151,AR
3194929152,3194937343,EC
3194937344,3194945535,AR
-3194945536,3194953727,GT
+3194945536,3194953215,GT
+3194953216,3194953343,NI
+3194953344,3194953727,GT
3194953728,3194959871,AR
3194959872,3194961919,US
3194961920,3194970111,EC
@@ -55735,7 +62648,22 @@
3195067392,3195068415,CR
3195068416,3195076607,CW
3195076608,3195084799,CL
-3195084800,3195092991,CR
+3195084800,3195085055,CR
+3195085056,3195086335,NI
+3195086336,3195087359,CR
+3195087360,3195087615,NI
+3195087616,3195088127,CR
+3195088128,3195088639,NI
+3195088640,3195088895,CR
+3195088896,3195089919,NI
+3195089920,3195090431,CR
+3195090432,3195090687,NI
+3195090688,3195091199,CR
+3195091200,3195091455,NI
+3195091456,3195092223,CR
+3195092224,3195092479,NI
+3195092480,3195092735,CR
+3195092736,3195092991,NI
3195092992,3195097087,DO
3195097088,3195099135,CR
3195099136,3195100159,GT
@@ -55747,7 +62675,8 @@
3195138048,3195139071,DO
3195139072,3195140095,CL
3195140096,3195142143,CR
-3195142144,3195150335,VE
+3195142144,3195142399,MX
+3195142400,3195150335,VE
3195150336,3195158527,CL
3195158528,3195199487,AR
3195199488,3195201535,PY
@@ -55769,9 +62698,7 @@
3195256832,3195265023,AR
3195265024,3195273215,CO
3195273216,3195535359,PE
-3195535360,3195536639,SV
-3195536640,3195536895,FR
-3195536896,3195543551,SV
+3195535360,3195543551,SV
3195547648,3195551743,AR
3195551744,3195559935,EC
3195559936,3195568127,AR
@@ -55809,7 +62736,9 @@
3195738112,3195740159,HN
3195740160,3195740415,US
3195740416,3195740927,PA
-3195740928,3195741951,US
+3195740928,3195741055,US
+3195741056,3195741087,HN
+3195741088,3195741951,US
3195741952,3195744255,PA
3195744256,3195748351,EC
3195748352,3195752447,CL
@@ -55828,7 +62757,9 @@
3195805696,3195807743,NI
3195807744,3195808639,BZ
3195808640,3195808767,CO
-3195808768,3195809791,BZ
+3195808768,3195809151,BZ
+3195809152,3195809279,US
+3195809280,3195809791,BZ
3195809792,3195811839,PE
3195811840,3195813887,AR
3195813888,3195822079,DO
@@ -55921,7 +62852,9 @@
3200614400,3200647167,AR
3200647168,3201302527,VE
3201302528,3201433599,CL
-3201433600,3201441791,AR
+3201433600,3201435135,AR
+3201435136,3201435263,US
+3201435264,3201441791,AR
3201441792,3201442047,US
3201442048,3201499135,AR
3201499136,3201515519,CL
@@ -55956,12 +62889,14 @@
3201869856,3201869871,PE
3201869872,3201871743,AR
3201871744,3201871807,PE
-3201871808,3201871871,AR
+3201871808,3201871811,AR
+3201871812,3201871815,PE
+3201871816,3201871871,AR
3201871872,3201875967,PE
3201875968,3201880063,CO
3201880064,3201884159,EC
-3201884160,3201892351,VE
-3201892352,3201925119,AR
+3201884160,3201894399,VE
+3201894400,3201925119,AR
3201925120,3201957887,CL
3201957888,3202088959,PA
3202088960,3202220031,AR
@@ -55997,9 +62932,11 @@
3203556864,3203557119,DO
3203557120,3203561471,CO
3203561472,3203562495,SV
-3203562496,3203564031,CO
-3203564032,3203564287,PA
-3203564288,3203566591,CO
+3203562496,3203563775,CO
+3203563776,3203564287,PA
+3203564288,3203564799,CO
+3203564800,3203565055,DO
+3203565056,3203566591,CO
3203566592,3203566847,PA
3203566848,3203568639,CO
3203568640,3203569663,SV
@@ -56018,12 +62955,18 @@
3210740736,3210742015,BR
3210742016,3210742031,IT
3210742032,3210742047,US
-3210742048,3210742271,BR
+3210742048,3210742063,BR
+3210742064,3210742079,US
+3210742080,3210742271,BR
3210742272,3210742527,CL
3210742528,3210742543,KR
-3210742544,3210743039,CL
+3210742544,3210742567,CL
+3210742568,3210742575,US
+3210742576,3210743039,CL
3210743040,3210743055,GR
-3210743056,3210743295,CL
+3210743056,3210743079,CL
+3210743080,3210743087,US
+3210743088,3210743295,CL
3210743296,3210743551,US
3210743552,3210743567,TH
3210743568,3210743583,US
@@ -56036,7 +62979,7 @@
3210745360,3210745375,US
3210745376,3210745855,CL
3210745856,3210745871,IT
-3210745872,3210746367,CL
+3210745872,3210746367,BR
3210746368,3210746383,SE
3210746384,3210746879,CL
3210746880,3210746895,CH
@@ -56069,11 +63012,13 @@
3210773504,3210773519,PL
3210773520,3210774271,CL
3210774272,3210774287,NO
-3210774288,3210774783,CL
+3210774288,3210774527,CL
+3210774528,3210774783,BR
3210774784,3210774799,IT
-3210774800,3210775295,CL
+3210774800,3210775295,BR
3210775296,3210775311,CH
-3210775312,3210776319,CL
+3210775312,3210775551,BR
+3210775552,3210776319,CL
3210776320,3210776575,US
3210776576,3210776831,CL
3210776832,3210777087,US
@@ -56093,7 +63038,9 @@
3210786560,3210786575,GR
3210786576,3210803071,CL
3210803072,3210803087,US
-3210803088,3210803327,CL
+3210803088,3210803199,CL
+3210803200,3210803201,US
+3210803202,3210803327,CL
3210803328,3210803455,BR
3210803456,3210805247,CL
3210805248,3210809343,PA
@@ -56120,77 +63067,212 @@
3210926080,3210928127,AR
3210928128,3210936319,NI
3210936320,3211067391,EC
-3211067392,3211073023,US
+3211067392,3211071487,US
+3211071488,3211071999,DE
+3211072000,3211073023,US
3211073024,3211073279,CA
3211073280,3211073535,US
-3211073536,3211075583,CL
+3211073536,3211075583,NL
3211075584,3211075839,US
-3211075840,3211080703,CL
+3211075840,3211076095,CL
+3211076096,3211076607,LT
+3211076608,3211079167,CL
+3211079168,3211079423,NL
+3211079424,3211080703,CL
3211080704,3211080959,NL
3211080960,3211081215,CL
3211081216,3211081727,CH
3211081728,3211083775,CL
3211083776,3211083791,RU
-3211083792,3211084287,CL
+3211083792,3211083855,CL
+3211083856,3211083871,DE
+3211083872,3211084287,CL
3211084288,3211084303,NL
-3211084304,3211084671,CL
+3211084304,3211084367,CL
+3211084368,3211084383,DE
+3211084384,3211084559,CL
+3211084560,3211084575,DE
+3211084576,3211084671,CL
3211084672,3211084799,BY
3211084800,3211084815,AT
-3211084816,3211085311,CL
+3211084816,3211084879,CL
+3211084880,3211084895,DE
+3211084896,3211084927,CL
+3211084928,3211085055,US
+3211085056,3211085071,CL
+3211085072,3211085087,DE
+3211085088,3211085311,CL
3211085312,3211085327,GB
-3211085328,3211085695,CL
+3211085328,3211085391,CL
+3211085392,3211085407,DE
+3211085408,3211085583,CL
+3211085584,3211085599,DE
+3211085600,3211085695,CL
3211085696,3211085823,GE
3211085824,3211085839,TH
-3211085840,3211086095,CL
+3211085840,3211085903,CL
+3211085904,3211085919,DE
+3211085920,3211086095,CL
3211086096,3211086111,US
3211086112,3211086335,CL
3211086336,3211086351,FR
-3211086352,3211086847,CL
+3211086352,3211086367,DE
+3211086368,3211086463,CL
+3211086464,3211086591,US
+3211086592,3211086607,CL
+3211086608,3211086623,DE
+3211086624,3211086847,CL
3211086848,3211086863,PL
-3211086864,3211087359,CL
+3211086864,3211086879,DE
+3211086880,3211087119,CL
+3211087120,3211087135,DE
+3211087136,3211087359,CL
3211087360,3211087375,GB
-3211087376,3211087871,CL
+3211087376,3211087391,DE
+3211087392,3211087631,CL
+3211087632,3211087647,DE
+3211087648,3211087871,CL
3211087872,3211087887,ES
-3211087888,3211088383,CL
+3211087888,3211087903,DE
+3211087904,3211087999,CL
+3211088000,3211088127,US
+3211088128,3211088143,CL
+3211088144,3211088159,DE
+3211088160,3211088383,CL
3211088384,3211088399,BE
-3211088400,3211088895,CL
+3211088400,3211088415,DE
+3211088416,3211088655,CL
+3211088656,3211088671,DE
+3211088672,3211088895,CL
3211088896,3211088911,DK
-3211088912,3211089407,CL
+3211088912,3211088927,DE
+3211088928,3211089167,CL
+3211089168,3211089183,DE
+3211089184,3211089407,CL
3211089408,3211089423,GB
-3211089424,3211089919,CL
+3211089424,3211089439,DE
+3211089440,3211089535,CL
+3211089536,3211089663,US
+3211089664,3211089679,CL
+3211089680,3211089695,DE
+3211089696,3211089919,CL
3211089920,3211089935,GB
-3211089936,3211090431,CL
+3211089936,3211089951,DE
+3211089952,3211090191,CL
+3211090192,3211090207,DE
+3211090208,3211090431,CL
3211090432,3211090447,GR
-3211090448,3211090943,CL
+3211090448,3211090463,DE
+3211090464,3211090703,CL
+3211090704,3211090719,DE
+3211090720,3211090943,CL
3211090944,3211090959,TR
-3211090960,3211091455,CL
+3211090960,3211090975,DE
+3211090976,3211091071,CL
+3211091072,3211091199,US
+3211091200,3211091215,CL
+3211091216,3211091231,DE
+3211091232,3211091455,CL
3211091456,3211091471,FI
-3211091472,3211091967,CL
+3211091472,3211091487,DE
+3211091488,3211091727,CL
+3211091728,3211091743,DE
+3211091744,3211091967,CL
3211091968,3211091983,RU
-3211091984,3211092479,CL
+3211091984,3211091999,DE
+3211092000,3211092239,CL
+3211092240,3211092255,DE
+3211092256,3211092479,CL
3211092480,3211092495,BE
-3211092496,3211092991,CL
+3211092496,3211092511,DE
+3211092512,3211092607,CL
+3211092608,3211092735,US
+3211092736,3211092751,CL
+3211092752,3211092767,DE
+3211092768,3211092991,CL
3211092992,3211093007,SK
-3211093008,3211093503,CL
+3211093008,3211093023,DE
+3211093024,3211093263,CL
+3211093264,3211093279,DE
+3211093280,3211093503,CL
3211093504,3211093519,HR
-3211093520,3211094015,CL
+3211093520,3211093535,DE
+3211093536,3211093775,CL
+3211093776,3211093791,DE
+3211093792,3211094015,CL
3211094016,3211094031,CZ
-3211094032,3211094527,CL
+3211094032,3211094047,DE
+3211094048,3211094143,CL
+3211094144,3211094271,US
+3211094272,3211094287,CL
+3211094288,3211094303,DE
+3211094304,3211094527,CL
3211094528,3211094543,HR
-3211094544,3211095039,CL
+3211094544,3211094559,DE
+3211094560,3211094799,CL
+3211094800,3211094815,DE
+3211094816,3211095039,CL
3211095040,3211095055,ES
-3211095056,3211095551,CL
+3211095056,3211095071,DE
+3211095072,3211095311,CL
+3211095312,3211095327,DE
+3211095328,3211095551,CL
3211095552,3211095567,GB
-3211095568,3211096063,CL
+3211095568,3211095583,DE
+3211095584,3211095679,CL
+3211095680,3211095807,US
+3211095808,3211095823,CL
+3211095824,3211095839,DE
+3211095840,3211096063,CL
3211096064,3211096079,GB
-3211096080,3211096575,CL
+3211096080,3211096095,DE
+3211096096,3211096335,CL
+3211096336,3211096351,DE
+3211096352,3211096575,CL
3211096576,3211096831,GB
-3211096832,3211097087,CL
+3211096832,3211096847,CL
+3211096848,3211096863,DE
+3211096864,3211097087,CL
3211097088,3211097103,DE
-3211097104,3211099647,CL
+3211097104,3211097151,GB
+3211097152,3211097215,CL
+3211097216,3211097343,GB
+3211097344,3211097359,CL
+3211097360,3211097375,DE
+3211097376,3211097599,CL
+3211097600,3211097855,US
+3211097856,3211097871,CL
+3211097872,3211097887,DE
+3211097888,3211098111,CL
+3211098112,3211098367,US
+3211098368,3211098383,CL
+3211098384,3211098399,DE
+3211098400,3211098623,CL
+3211098624,3211098879,US
+3211098880,3211098895,CL
+3211098896,3211098911,DE
+3211098912,3211099135,CL
+3211099136,3211099391,DE
+3211099392,3211099407,CL
+3211099408,3211099423,DE
+3211099424,3211099647,CL
3211099648,3211099663,DE
-3211099664,3211129599,CL
-3211129600,3211129855,BR
+3211099664,3211099679,GB
+3211099680,3211099711,CL
+3211099712,3211099775,DE
+3211099776,3211099903,GB
+3211099904,3211099919,CL
+3211099920,3211099935,DE
+3211099936,3211101951,CL
+3211101952,3211102207,AR
+3211102208,3211104767,AU
+3211104768,3211106303,CL
+3211106304,3211108351,US
+3211108352,3211124735,CL
+3211124736,3211128831,US
+3211128832,3211129343,CL
+3211129344,3211129599,SG
+3211129600,3211129855,NL
3211129856,3211132927,CL
3211132928,3211137023,CO
3211137024,3211141119,AR
@@ -56307,7 +63389,7 @@
3220164608,3220168703,IE
3220168704,3220172799,US
3220172800,3221225471,BR
-3221225480,3221225727,GB
+3221225480,3221225727,US
3221226240,3221226495,US
3221226496,3221227519,KY
3221227520,3221242879,US
@@ -56367,7 +63449,13 @@
3221806080,3221806335,IN
3221806336,3221806591,US
3221806592,3221806847,IN
-3221806848,3222011903,US
+3221806848,3221991167,US
+3221991168,3221991423,NZ
+3221991424,3221993727,US
+3221993728,3221993983,FR
+3221993984,3222003967,US
+3222003968,3222004223,FR
+3222004224,3222011903,US
3222011904,3222012159,CA
3222012160,3222012415,NL
3222012416,3222023935,US
@@ -56475,8 +63563,7 @@
3223223296,3223223551,AI
3223223552,3223227903,US
3223227904,3223228159,CA
-3223228160,3223228415,US
-3223228928,3223229695,US
+3223228160,3223229695,US
3223229696,3223229951,CA
3223229952,3223236607,US
3223236608,3223237631,GB
@@ -56494,9 +63581,7 @@
3223262976,3223263231,BE
3223263232,3223263743,US
3223263744,3223264255,NL
-3223264256,3223264511,US
-3223264512,3223264767,CA
-3223264768,3223265023,US
+3223264256,3223265023,US
3223265024,3223265279,NL
3223265280,3223266559,US
3223266560,3223266815,AU
@@ -56579,16 +63664,12 @@
3223473232,3223474175,CA
3223474176,3223477247,US
3223477248,3223478271,CA
-3223478272,3223480319,US
-3223480832,3223481087,US
+3223478272,3223481087,US
3223481088,3223481343,SE
3223481344,3223483391,US
3223483392,3223483647,NL
-3223483648,3223483903,US
-3223484416,3223491071,US
-3223491584,3223497215,US
-3223497728,3223498751,US
-3223499264,3223499519,US
+3223483904,3223491071,US
+3223491584,3223499519,US
3223499520,3223499775,FI
3223499776,3223500031,US
3223500032,3223503871,CA
@@ -56620,8 +63701,7 @@
3223556608,3223556863,NL
3223556864,3223557375,US
3223557376,3223558655,DE
-3223558656,3223559679,US
-3223559936,3223563263,US
+3223558656,3223563263,US
3223563264,3223563519,NL
3223563520,3223566079,US
3223566080,3223568639,NL
@@ -56635,7 +63715,9 @@
3223578112,3223580671,US
3223580672,3223581951,AT
3223581952,3223582207,US
-3223582208,3223582719,NL
+3223582208,3223582212,NL
+3223582213,3223582213,PT
+3223582214,3223582719,NL
3223582720,3223582975,AU
3223582976,3223584767,US
3223584768,3223585023,GB
@@ -56694,38 +63776,36 @@
3223650048,3223650303,GB
3223650304,3223715839,CH
3223715840,3223781375,DK
-3223781376,3223847935,US
-3223848448,3223855103,US
+3223781376,3223855103,US
3223855104,3223857151,CA
-3223857152,3223862783,US
-3223863296,3223863807,US
+3223857152,3223863807,US
+3223863808,3223864319,CA
3223864320,3223864575,US
3223864576,3223864831,AE
3223864832,3223865343,HR
3223865344,3223867391,FI
3223867392,3223867647,GB
3223867648,3223867903,CA
+3223867904,3223868415,US
3223868416,3223869439,BM
3223869440,3223871487,US
3223871488,3223873535,CA
-3223873536,3223875071,US
-3223875584,3223877119,US
-3223877632,3223881727,US
+3223873536,3223881727,US
3223881728,3223882751,CA
+3223882752,3223883263,US
3223883264,3223883519,CA
-3223883520,3223898623,US
-3223899136,3223902207,US
+3223883520,3223902463,US
3223902464,3223902719,CA
-3223903232,3223905279,US
+3223902720,3223905279,US
3223905280,3223905535,FI
3223905536,3223905791,US
3223906304,3223909375,CA
-3223909376,3223910911,US
+3223909376,3223911935,US
3223911936,3223912191,CA
-3223912192,3223938815,US
+3223912448,3223938815,US
3223938816,3223946239,GB
3223946240,3223947519,CH
-3223947520,3223947775,US
+3223947520,3223948287,US
3223948288,3223948543,NL
3223948544,3223949823,CH
3223949824,3223950079,AU
@@ -56734,10 +63814,10 @@
3223950592,3223953663,CH
3223953664,3223955967,US
3223955968,3223956223,AU
-3223956224,3223957759,US
+3223956224,3223958015,US
3223958016,3223963135,JP
3223963136,3223963647,US
-3223963904,3223964159,CA
+3223963648,3223964159,CA
3223964160,3223964415,US
3223964416,3223964671,AU
3223964672,3223965183,US
@@ -56765,7 +63845,9 @@
3223994112,3223994623,DE
3223994880,3223995391,US
3223995392,3223995647,CA
-3223995648,3223999487,US
+3223995648,3223996415,US
+3223996416,3223996927,CA
+3223996928,3223999487,US
3224000256,3224000511,NL
3224000512,3224001023,US
3224001024,3224001279,CA
@@ -56779,8 +63861,7 @@
3224006912,3224012031,NL
3224012032,3224014591,US
3224014592,3224014847,NL
-3224014848,3224015615,US
-3224015872,3224016639,US
+3224014848,3224016639,US
3224016640,3224016895,AU
3224016896,3224024063,US
3224024064,3224029695,CH
@@ -56789,8 +63870,7 @@
3224030720,3224030975,CA
3224030976,3224038655,US
3224038656,3224038911,AU
-3224038912,3224039679,US
-3224039936,3224042751,US
+3224038912,3224042751,US
3224042752,3224043007,DE
3224043008,3224084991,US
3224084992,3224087551,SE
@@ -56798,7 +63878,7 @@
3224088064,3224088319,AU
3224088320,3224090879,US
3224090880,3224091135,AU
-3224091648,3224091903,US
+3224091136,3224091903,US
3224091904,3224092159,AU
3224092160,3224092415,CA
3224092416,3224092671,US
@@ -56814,25 +63894,22 @@
3224097792,3224098047,NL
3224098048,3224099583,US
3224099584,3224099839,CA
-3224099840,3224100863,US
-3224101120,3224101375,US
+3224099840,3224101375,US
3224101376,3224102399,AU
+3224102912,3224103423,US
3224103424,3224103679,NL
3224103680,3224104703,US
3224104704,3224104959,AU
-3224104960,3224105471,US
-3224105728,3224106495,US
-3224106752,3224109055,US
+3224104960,3224109055,US
3224109056,3224109311,NL
3224109312,3224119551,DE
3224119552,3224126463,FR
-3224126976,3224127231,US
+3224126464,3224127231,US
3224127232,3224129791,FR
3224129792,3224132351,DE
3224132352,3224170495,US
3224170496,3224173567,SE
-3224173568,3224174335,US
-3224174592,3224288255,US
+3224173568,3224288255,US
3224288256,3224289023,DE
3224289024,3224302335,US
3224302336,3224302591,CA
@@ -56840,54 +63917,56 @@
3224305664,3224367615,JP
3224367616,3224368127,US
3224368128,3224369663,CH
-3224369664,3224373247,US
+3224369664,3224370431,US
+3224370432,3224370687,CA
+3224370688,3224370943,US
+3224370944,3224371199,CA
+3224371200,3224373247,US
3224373248,3224373503,AU
-3224373504,3224379135,US
+3224373504,3224373759,US
+3224373760,3224374015,AU
+3224374016,3224379135,US
3224379136,3224379391,NL
-3224379392,3224392191,US
-3224392704,3224398079,US
-3224398336,3224398591,US
+3224379392,3224398591,US
3224398592,3224398847,DE
3224398848,3224399103,US
3224399104,3224399615,AU
-3224399616,3224407039,US
+3224399616,3224407295,US
3224407296,3224407551,CA
-3224407808,3224408319,US
+3224407552,3224408319,US
3224408320,3224408575,NL
-3224408576,3224424959,US
-3224425216,3224427007,US
-3224427520,3224428543,US
+3224408576,3224427519,US
+3224427520,3224427775,CA
+3224427776,3224428543,US
3224428544,3224428799,NL
-3224428800,3224430079,US
+3224428800,3224430335,US
3224430336,3224430591,NL
-3224430592,3224430847,US
+3224430592,3224431103,US
3224431104,3224431359,CA
3224431360,3224431615,US
-3224432128,3224432383,US
-3224433152,3224433407,US
-3224433664,3224434687,US
+3224432128,3224434687,US
3224434688,3224434943,AU
3224434944,3224435967,US
3224435968,3224436223,MU
-3224436224,3224436479,US
+3224436224,3224436735,US
3224436736,3224502271,FI
3224502272,3224567807,JP
3224567808,3224571903,NO
-3224571904,3224633343,JP
+3224571904,3224580095,JP
+3224580096,3224580351,US
+3224580352,3224633343,JP
3224633344,3224646399,DE
3224646400,3224651775,US
3224651776,3224652287,AU
-3224652800,3224660991,US
+3224652288,3224660991,US
3224660992,3224661247,CA
-3224661504,3224662527,US
-3224663040,3224663551,US
+3224661248,3224663807,US
3224672000,3224672255,US
3224672256,3224672511,NL
-3224672512,3224673791,US
+3224672512,3224674047,US
3224674048,3224674559,DE
3224674560,3224674815,GB
-3224675072,3224675839,US
-3224676864,3224677119,US
+3224674816,3224677119,US
3224677120,3224678655,AU
3224678656,3224680703,US
3224680704,3224680959,AU
@@ -56900,22 +63979,21 @@
3224692736,3224692991,NL
3224692992,3224694527,US
3224694528,3224694783,CA
-3224694784,3224695039,US
-3224695808,3224697343,US
-3224697856,3224698111,US
+3224694784,3224698111,US
3224698112,3224698623,NL
-3224698880,3224699135,US
+3224698624,3224699135,US
3224699136,3224699647,BE
3224699648,3224725247,US
-3224725248,3224725503,DE
-3224725504,3224725759,NL
+3224725248,3224725759,NL
3224725760,3224739071,US
3224739072,3224739327,FI
3224739328,3224772351,US
-3224772352,3224778751,DE
+3224772352,3224776447,DE
+3224776448,3224776703,GB
+3224776704,3224777983,DE
+3224777984,3224778239,US
3224779776,3224785151,DE
-3224785152,3224787967,US
-3224788480,3224791039,US
+3224785152,3224791039,US
3224791040,3224791295,NL
3224791296,3224791807,AU
3224791808,3224793343,US
@@ -56924,7 +64002,7 @@
3224793856,3224795391,DK
3224795392,3224795647,CA
3224795648,3224795903,CH
-3224796160,3224796415,US
+3224795904,3224796415,US
3224796416,3224797439,DE
3224797440,3224797695,US
3224797696,3224797951,AU
@@ -56932,9 +64010,11 @@
3224798208,3224798463,NL
3224798464,3224798975,US
3224798976,3224799231,AU
+3224799232,3224799487,US
3224799488,3224799743,AU
3224799744,3224799999,US
3224800000,3224800255,NL
+3224800256,3224800511,US
3224800512,3224816639,FR
3224816640,3224816895,IL
3224816896,3224820735,FR
@@ -56942,8 +64022,7 @@
3224820992,3224821247,DE
3224821248,3224822015,US
3224822016,3224822271,NL
-3224822272,3224822527,US
-3224822784,3224823039,US
+3224822272,3224823039,US
3224823296,3224826367,US
3224826368,3224826623,CA
3224826624,3224826879,US
@@ -56952,25 +64031,23 @@
3224827648,3224827903,AU
3224827904,3224828671,US
3224828672,3224828927,AU
-3224829184,3224829439,US
+3224828928,3224829439,US
3224829440,3224829695,NL
-3224829952,3224834047,US
+3224829696,3224834047,US
3224834048,3224834303,SG
3224834304,3224834559,US
3224834560,3224834815,TH
3224834816,3224850175,US
3224850176,3224850431,IN
-3224850432,3224850943,US
-3224851200,3224851455,US
+3224850432,3224851455,US
3224851456,3224851711,NL
-3224851968,3224852735,US
+3224851712,3224852735,US
3224852736,3224852991,NL
-3224852992,3224854527,US
-3224854784,3224855039,US
+3224852992,3224855039,US
3224855040,3224855551,AU
3224855552,3224855807,US
3224855808,3224856063,IT
-3224856064,3224856575,US
+3224856064,3224856831,US
3224856832,3224857087,NL
3224857088,3224857855,US
3224857856,3224858111,PL
@@ -56981,8 +64058,10 @@
3224859392,3224859647,NL
3224859648,3224860159,US
3224860160,3224860415,AU
-3224860928,3224862719,US
+3224860416,3224860671,CA
+3224860672,3224862975,US
3224862976,3224863231,NL
+3224863232,3224863487,CA
3224863488,3224863743,US
3224863744,3224863999,NL
3224864000,3224870655,US
@@ -56991,32 +64070,31 @@
3224878080,3224878335,NL
3224878336,3224878591,US
3224878592,3224878847,AU
+3224878848,3224879359,US
3224879360,3224879615,NL
3224879616,3224879871,CA
3224879872,3224880383,US
3224880384,3224880639,NL
3224880640,3224880895,AU
-3224880896,3224882431,US
+3224880896,3224882687,US
3224882688,3224882943,CA
3224882944,3224883455,US
3224883456,3224883711,AU
3224883712,3224884223,US
3224884224,3224884479,NL
-3224884480,3224884991,US
+3224884480,3224885247,US
3224885248,3224885503,CA
-3224885760,3224886015,US
+3224885504,3224886015,US
3224886016,3224886527,AU
3224886528,3224887295,US
3224887296,3224887551,CA
-3224887808,3224889087,US
+3224887552,3224889343,US
3224889344,3224889599,AU
3224889600,3224890879,US
3224890880,3224891135,AU
-3224891136,3224891647,US
-3224892160,3224892415,CA
+3224891136,3224892415,US
3224892416,3224892671,NL
-3224892928,3224893183,US
-3224893440,3224893951,US
+3224892672,3224893951,US
3224894464,3224899071,US
3224899072,3224899327,AT
3224899328,3224908543,US
@@ -57034,64 +64112,60 @@
3225034752,3225035775,BG
3225035776,3225037055,US
3225037056,3225049599,FI
-3225050112,3225051135,US
-3225052672,3225056767,US
-3225057024,3225057535,US
+3225049600,3225057535,US
3225057536,3225057791,CA
-3225057792,3225060351,US
-3225060352,3225061631,AU
+3225057792,3225060607,US
+3225060608,3225061631,AU
+3225061632,3225062399,US
3225062400,3225063423,VC
-3225063424,3225064447,US
-3225064704,3225075967,US
+3225063424,3225076223,US
3225076224,3225076479,CA
3225076480,3225076991,US
3225076992,3225077247,SE
-3225077504,3225081087,US
+3225077248,3225081087,US
3225081088,3225081343,CA
-3225081600,3225082367,US
+3225081344,3225082367,US
3225082368,3225082623,NL
-3225082880,3225084671,US
+3225082624,3225084671,US
3225084672,3225085183,NL
3225085184,3225085439,ES
3225085440,3225089279,US
3225089280,3225089535,CA
-3225089536,3225091071,US
-3225091584,3225091839,US
-3225092096,3225314303,US
+3225089536,3225314303,US
3225314304,3225314559,GB
-3225314560,3225419775,US
-3225420032,3225420287,US
+3225314560,3225420799,US
3225420800,3225423871,CA
3225423872,3225424383,US
3225424896,3225426943,US
3225426944,3225427199,NL
+3225427200,3225427455,US
+3225427456,3225427967,CA
3225427968,3225428991,US
-3225429504,3225429759,CA
-3225430016,3225431039,CA
+3225428992,3225431039,CA
3225431040,3225431551,NL
3225431552,3225434111,US
3225434112,3225436159,CA
-3225436160,3225437695,US
-3225438208,3225442559,US
-3225443328,3225444607,US
+3225436160,3225445375,US
3225445376,3225446399,BE
3225446400,3225450495,US
3225450496,3225451263,AG
3225451264,3225451519,MS
+3225451520,3225451775,US
3225451776,3225452031,NL
3225452544,3225456639,CA
3225456640,3225459711,US
+3225459712,3225459967,CA
3225459968,3225460479,US
-3225460480,3225462783,CA
-3225462784,3225468927,US
+3225460480,3225462015,CA
+3225462016,3225468927,US
3225468928,3225469951,CA
-3225470464,3225470719,US
+3225470464,3225471487,US
3225471488,3225471743,NL
-3225471744,3225472511,US
-3225473024,3225498111,US
+3225471744,3225472255,HK
+3225472256,3225472511,US
+3225473024,3225498367,US
3225498368,3225503487,NL
-3225503488,3225505535,US
-3225505792,3225506047,US
+3225503488,3225506303,US
3225506304,3225508863,AU
3225508864,3225509631,CH
3225509632,3225509887,US
@@ -57099,39 +64173,40 @@
3225510144,3225518591,US
3225518592,3225518847,AU
3225518848,3225519359,NL
-3225519872,3225520639,US
+3225519360,3225520895,US
3225520896,3225521151,NL
3225521152,3225522175,US
3225522176,3225522943,GB
3225522944,3225524223,US
3225524224,3225524479,VE
3225524480,3225524735,GB
-3225525248,3225526271,US
+3225524736,3225526271,US
3225526272,3225528319,BB
3225529088,3225529343,US
3225529600,3225530367,US
3225530368,3225530623,PR
-3225530624,3225530879,US
-3225531136,3225531647,US
+3225530624,3225531903,US
3225531904,3225532159,AU
3225532160,3225535999,CH
3225536000,3225540863,US
3225540864,3225541119,AU
3225541120,3225541375,US
-3225541376,3225544703,GB
+3225541376,3225543935,GB
+3225543936,3225544703,US
3225544704,3225546751,CA
-3225546752,3225548543,US
+3225546752,3225548799,US
3225548800,3225549055,AU
3225549056,3225549311,US
3225549312,3225549567,AU
-3225549568,3225550591,US
+3225549568,3225550847,US
3225550848,3225616383,DK
+3225616384,3225616639,US
3225616640,3225616895,AU
+3225616896,3225617151,US
3225617152,3225617663,NL
-3225617920,3225618175,US
-3225618432,3225618687,US
+3225617664,3225618687,US
3225618688,3225618943,CA
-3225619200,3225619455,US
+3225618944,3225619455,US
3225619456,3225619711,AU
3225619712,3225624575,US
3225624576,3225625599,CA
@@ -57146,14 +64221,11 @@
3225629184,3225629439,NL
3225629440,3225629695,US
3225629696,3225629951,NL
-3225629952,3225630207,US
+3225629952,3225630463,US
3225630464,3225630719,NL
3225630720,3225631231,US
3225631232,3225631487,NL
-3225631488,3225632767,US
-3225633536,3225633791,US
-3225634048,3225634815,US
-3225635072,3225635583,US
+3225631488,3225635839,US
3225635840,3225636095,NL
3225636096,3225636607,US
3225636608,3225636863,NL
@@ -57166,35 +64238,35 @@
3225640704,3225641983,US
3225641984,3225643263,GB
3225643264,3225643775,CA
-3225643776,3225649919,US
-3225650176,3225650943,US
+3225643776,3225650943,US
3225650944,3225651199,GB
-3225651200,3225658367,US
-3225658624,3225658879,US
+3225651200,3225659135,US
3225659136,3225659391,DE
3225659392,3225659647,AU
+3225659648,3225659903,US
3225659904,3225660159,DE
3225660160,3225660415,AU
-3225660416,3225664511,US
-3225664512,3225669887,DE
+3225660416,3225664767,US
+3225664768,3225669887,DE
3225669888,3225671935,US
3225671936,3225672191,AU
3225672192,3225672447,DE
3225672448,3225672703,US
3225672704,3225673215,NL
+3225673216,3225673471,CA
3225673472,3225673727,IE
3225673728,3225679871,US
3225679872,3225680127,AU
3225680128,3225680383,GR
-3225680640,3225681151,US
-3225681408,3225681663,US
+3225680384,3225680639,CA
+3225680640,3225681663,US
+3225681664,3225681919,CA
3225681920,3225682943,DE
3225682944,3225683199,AT
3225683200,3225687039,DE
3225687040,3225687807,US
3225687808,3225688063,NL
-3225688064,3225689343,US
-3225689600,3225689855,US
+3225688064,3225689855,US
3225689856,3225694975,NL
3225694976,3225695231,PL
3225695232,3225695487,US
@@ -57213,8 +64285,7 @@
3225717504,3225717759,AU
3225717760,3225720063,US
3225720576,3225721343,GB
-3225721344,3225722111,US
-3225722624,3225723903,US
+3225721344,3225723903,US
3225723904,3225725439,DE
3225725440,3225725695,GB
3225725696,3225726207,AU
@@ -57302,13 +64373,17 @@
3225874944,3225875199,GB
3225875456,3225875967,US
3225876480,3225878271,US
-3225878528,3225881343,SE
+3225878528,3225880319,SE
+3225880320,3225880575,US
+3225880576,3225881343,SE
3225881344,3225881599,IT
3225881600,3225885183,SE
3225885184,3225885695,AT
3225885696,3225887999,SE
3225888000,3225888255,GB
-3225888256,3225905407,SE
+3225888256,3225894399,SE
+3225894400,3225894911,GB
+3225894912,3225905407,SE
3225905408,3225905663,IT
3225905664,3225913855,SE
3225913856,3225914111,DE
@@ -57351,7 +64426,7 @@
3225942528,3225944063,SE
3225944064,3226008831,TW
3226008832,3226009343,US
-3226009856,3226010879,US
+3226009600,3226010879,US
3226010880,3226011135,CA
3226011136,3226012671,US
3226012672,3226012927,AU
@@ -57397,7 +64472,6 @@
3226194944,3226201087,CA
3226201088,3226201343,US
3226201344,3226201855,CA
-3226201856,3226202111,US
3226202112,3226205439,CA
3226205440,3226205695,AE
3226205696,3226205951,CA
@@ -57451,8 +64525,7 @@
3226393600,3226393855,DE
3226393856,3226397695,US
3226397696,3226400255,DE
-3226400256,3226470399,US
-3226470656,3226473471,US
+3226400256,3226473471,US
3226473472,3226473727,NL
3226473728,3226473983,PT
3226473984,3226474495,US
@@ -57477,7 +64550,7 @@
3226547200,3226548223,CA
3226548992,3226549247,BE
3226549248,3226550271,NL
-3226551040,3226551807,US
+3226550272,3226552319,US
3226552832,3226553087,US
3226553344,3226555391,US
3226555648,3226555903,CA
@@ -57556,9 +64629,7 @@
3226695680,3226695935,US
3226695936,3226696191,CA
3226696192,3226696703,AU
-3226696704,3226698495,US
-3226698496,3226698751,CA
-3226698752,3226704895,US
+3226696704,3226704895,US
3226705152,3226705407,AU
3226705408,3226705919,US
3226705920,3226706175,FR
@@ -57592,7 +64663,8 @@
3226733824,3226734079,NL
3226734080,3226734335,US
3226734336,3226734591,NL
-3226734592,3226736383,US
+3226734592,3226735615,US
+3226735872,3226736383,US
3226736896,3226737407,US
3226737408,3226737663,AT
3226737664,3226738175,US
@@ -57623,8 +64695,7 @@
3226775040,3226775295,US
3226775552,3226782463,FI
3226782720,3226783743,FI
-3226783744,3226783999,US
-3226784256,3226784767,US
+3226783744,3226784767,US
3226784768,3226785023,GB
3226785024,3226786559,US
3226786560,3226786815,AU
@@ -57703,7 +64774,7 @@
3227013120,3227013375,AU
3227013376,3227013887,US
3227013888,3227014399,NL
-3227014400,3227014655,NZ
+3227014400,3227014655,AU
3227014656,3227014911,NL
3227014912,3227017215,US
3227017472,3227017983,NL
@@ -57750,7 +64821,7 @@
3227237120,3227237631,US
3227237632,3227237887,NO
3227237888,3227238143,US
-3227238144,3227238399,GB
+3227238144,3227238399,NL
3227238400,3227239935,US
3227240192,3227240447,GB
3227240704,3227240959,GB
@@ -57841,7 +64912,7 @@
3227425792,3227427583,DK
3227427584,3227427839,ES
3227427840,3227429119,US
-3227429120,3227429375,NZ
+3227429120,3227429375,AU
3227429376,3227429887,US
3227429888,3227430143,NL
3227430144,3227430399,US
@@ -57921,9 +64992,7 @@
3227526656,3227526911,ZA
3227526912,3227533311,MU
3227533312,3227534335,US
-3227534336,3227539455,MU
-3227539456,3227539711,ZA
-3227539712,3227541503,MU
+3227534336,3227541503,MU
3227541504,3227541759,ZA
3227541760,3227557887,MU
3227557888,3227558911,US
@@ -57944,13 +65013,19 @@
3227722522,3227722522,US
3227722523,3227724031,CA
3227724032,3227724287,US
-3227724288,3227748035,CA
+3227724288,3227738879,CA
+3227738880,3227739135,US
+3227739136,3227748035,CA
3227748036,3227748039,US
3227748040,3227751868,CA
3227751869,3227751869,US
-3227751870,3227756505,CA
+3227751870,3227755775,CA
+3227755776,3227756031,US
+3227756032,3227756505,CA
3227756506,3227756506,US
-3227756507,3227765503,CA
+3227756507,3227762655,CA
+3227762656,3227762671,US
+3227762672,3227765503,CA
3227765504,3227765759,US
3227765760,3227777759,CA
3227777760,3227777763,US
@@ -58017,11 +65092,11 @@
3227834368,3227837439,MX
3227837440,3227837951,BR
3227837952,3227842303,MX
-3227842560,3227842815,BR
+3227842304,3227842815,BR
3227842816,3227843327,MX
3227843328,3227843583,BR
3227844096,3227844351,AR
-3227844864,3227845119,ES
+3227844864,3227845119,NL
3227845120,3227845631,US
3227845632,3227845887,NL
3227846144,3227846655,US
@@ -58091,7 +65166,7 @@
3227934720,3227947519,US
3227947520,3227955711,DE
3227955712,3227964927,US
-3227964928,3227965183,GB
+3227964928,3227965183,NL
3227965184,3227966975,US
3227967232,3227967487,US
3227967488,3227967999,NL
@@ -58163,7 +65238,8 @@
3228061696,3228061951,AU
3228061952,3228062207,US
3228062208,3228062463,GB
-3228062464,3228077055,US
+3228062464,3228069631,US
+3228069888,3228077055,US
3228077056,3228077311,NL
3228077312,3228077567,US
3228077568,3228077823,NL
@@ -58171,7 +65247,7 @@
3228078848,3228079103,GR
3228079104,3228080639,US
3228080640,3228081151,NL
-3228081152,3228081919,US
+3228081152,3228082175,US
3228082944,3228083967,US
3228083968,3228084479,NL
3228084480,3228085247,US
@@ -58281,8 +65357,7 @@
3228347392,3228348159,SK
3228348160,3228353279,US
3228353280,3228358399,SE
-3228358400,3228361471,US
-3228361728,3228362239,US
+3228358400,3228362239,US
3228362240,3228362495,AU
3228362496,3228362751,US
3228363008,3228363263,US
@@ -58298,7 +65373,8 @@
3228405504,3228405759,SG
3228405760,3228406015,IN
3228406016,3228406271,US
-3228406272,3228407039,FR
+3228406272,3228406527,IN
+3228406528,3228407039,FR
3228407040,3228420095,DE
3228420608,3228424703,DE
3228424704,3228424959,US
@@ -58380,20 +65456,16 @@
3228628992,3228630527,US
3228630528,3228630783,NL
3228631040,3228696575,NL
-3228696576,3228826371,IL
+3228696576,3228714764,IL
+3228714765,3228714765,CA
+3228714766,3228826371,IL
3228826372,3228826372,US
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,3229064951,CA
-3229064952,3229064955,US
-3229064956,3229065215,CA
-3229065216,3229092095,US
+3229058816,3229092095,US
3229092096,3229093887,AU
3229093888,3229104895,US
3229104896,3229105151,ES
@@ -58411,9 +65483,11 @@
3229160960,3229161471,DE
3229161472,3229161727,SE
3229161728,3229161983,GB
-3229161984,3229164543,SE
+3229161984,3229164287,SE
+3229164288,3229164543,DK
3229164544,3229165055,GB
-3229165056,3229167103,SE
+3229165056,3229165311,NO
+3229165312,3229167103,SE
3229167104,3229167615,IT
3229167616,3229171711,SE
3229171712,3229172223,GB
@@ -58421,15 +65495,20 @@
3229182464,3229182975,GB
3229182976,3229183999,SE
3229184000,3229184511,GB
-3229184512,3229195263,SE
+3229184512,3229186815,SE
+3229186816,3229187327,ES
+3229187328,3229187583,SE
+3229187584,3229187839,DK
+3229187840,3229195263,SE
3229195264,3229196287,DE
3229196288,3229196799,SE
3229196800,3229197311,NL
3229197312,3229197823,SE
3229197824,3229198335,GB
-3229198336,3229198847,SE
+3229198336,3229198591,SE
+3229198592,3229198847,ES
3229198848,3229199103,CH
-3229199104,3229199359,AT
+3229199104,3229199359,IT
3229199360,3229200383,SE
3229200384,3229200895,GB
3229200896,3229201151,DE
@@ -58452,7 +65531,7 @@
3229264896,3229265919,US
3229265920,3229266175,AU
3229266176,3229266943,US
-3229266944,3229267199,NZ
+3229266944,3229267199,AU
3229267200,3229272319,US
3229273856,3229274623,US
3229274624,3229274879,AU
@@ -58539,7 +65618,9 @@
3229844736,3229844991,US
3229845248,3229845503,US
3229845504,3229847295,CA
-3229847296,3229870335,US
+3229847296,3229849599,US
+3229849600,3229849855,AU
+3229849856,3229870335,US
3229870848,3229874943,US
3229874944,3229875455,AU
3229875456,3229875967,US
@@ -58583,9 +65664,7 @@
3229940736,3229940991,CH
3229940992,3229941247,AU
3229941248,3229941503,US
-3229942272,3229942783,US
-3229943040,3229943295,US
-3229943552,3229944319,US
+3229941760,3229944319,US
3229944320,3229944575,AU
3229944576,3229945087,US
3229945344,3229945599,AU
@@ -58595,7 +65674,7 @@
3229947392,3229948927,US
3229948928,3229949183,IT
3229949184,3229949695,US
-3229949696,3229949951,NZ
+3229949696,3229949951,AU
3229949952,3229950207,NL
3229950208,3229950975,US
3229950976,3229951231,NL
@@ -58626,7 +65705,7 @@
3230004224,3230004479,NL
3230004480,3230004991,US
3230005760,3230006015,MU
-3230006016,3230007295,US
+3230006016,3230007039,US
3230007296,3230072831,FR
3230072832,3230074623,US
3230074624,3230074879,DE
@@ -58719,8 +65798,7 @@
3230156544,3230164991,FI
3230165504,3230167295,US
3230167552,3230168063,CA
-3230168832,3230174463,US
-3230175232,3230177791,US
+3230168832,3230177791,US
3230177792,3230178303,GB
3230178304,3230178559,CH
3230179328,3230210047,US
@@ -58792,15 +65870,13 @@
3230295040,3230295295,AU
3230295296,3230296319,US
3230296320,3230297343,NO
-3230297344,3230299647,SE
+3230297344,3230300159,SE
3230301696,3230302207,US
-3230302464,3230302719,CA
3230302976,3230307327,US
3230307584,3230309119,US
3230309120,3230309375,NO
3230309376,3230310143,GB
-3230310144,3230310655,US
-3230310912,3230316287,US
+3230310144,3230316287,US
3230316288,3230316543,NL
3230316544,3230316799,US
3230316800,3230317311,CA
@@ -58837,9 +65913,12 @@
3230372864,3230383359,CA
3230383616,3230384127,CA
3230384384,3230387455,CA
-3230387712,3230400255,CA
+3230387712,3230390015,CA
+3230390016,3230390271,US
+3230390272,3230400255,CA
3230681088,3230683135,FR
-3230787584,3230797311,US
+3230787584,3230793727,US
+3230793984,3230797311,US
3230797312,3230797567,SG
3230797568,3230823679,US
3230823680,3230823935,NL
@@ -58874,7 +65953,7 @@
3230842112,3230842367,AU
3230842624,3230843135,US
3230843136,3230843391,NL
-3230843392,3230844671,US
+3230843392,3230844927,US
3230844928,3230845183,AU
3230845184,3230845951,US
3230845952,3230846207,CZ
@@ -59233,6 +66312,7 @@
3231285248,3231291647,US
3231291648,3231291903,NL
3231291904,3231292159,US
+3231292160,3231292415,MX
3231292416,3231292927,US
3231292928,3231293183,AU
3231293184,3231294975,US
@@ -59247,7 +66327,7 @@
3231300352,3231300607,US
3231300608,3231301119,NL
3231301120,3231302143,US
-3231302144,3231302399,NO
+3231302144,3231302399,NL
3231302400,3231302655,US
3231302656,3231303167,AU
3231303168,3231307007,US
@@ -59263,11 +66343,16 @@
3231319040,3231322111,US
3231322112,3231324671,SG
3231325184,3231326207,CA
-3231326208,3231352831,US
+3231326208,3231349759,US
+3231350528,3231352831,US
3231352832,3231358975,CA
-3231358976,3231383551,US
+3231358976,3231369215,US
+3231369216,3231369471,TW
+3231369472,3231383551,US
3231383552,3231385599,NO
-3231385600,3231477759,US
+3231385600,3231444071,US
+3231444072,3231444079,CA
+3231444080,3231477759,US
3231477760,3231478015,CA
3231478016,3231482879,US
3231482880,3231483135,BE
@@ -59312,9 +66397,7 @@
3231513600,3231514367,US
3231514624,3231515647,NO
3231515648,3231516159,US
-3231516672,3231518719,SE
-3231518720,3231518975,BR
-3231518976,3231519231,SE
+3231516672,3231519231,SE
3231519744,3231521791,US
3231522560,3231528959,US
3231528960,3231528991,CA
@@ -59367,8 +66450,8 @@
3231588864,3231589119,GB
3231589120,3231591679,US
3231591680,3231591935,AU
-3231591936,3231593983,US
-3231593984,3231594495,GB
+3231591936,3231594239,US
+3231594240,3231594495,GB
3231594496,3231641855,US
3231641856,3231642111,SG
3231642112,3231644927,US
@@ -59406,7 +66489,7 @@
3231711232,3231713023,US
3231713024,3231713279,CA
3231713280,3231713791,US
-3231713792,3231714047,GB
+3231713792,3231714047,NL
3231714048,3231715071,US
3231715072,3231715327,NL
3231715328,3231715583,AU
@@ -59429,8 +66512,7 @@
3231723008,3231723519,US
3231723776,3231724031,US
3231724032,3231724287,BR
-3231724288,3231725055,US
-3231725312,3231727871,US
+3231724288,3231727871,US
3231727872,3231728127,NL
3231728384,3231728639,NL
3231728640,3231729407,US
@@ -59441,7 +66523,8 @@
3231737600,3231738367,US
3231738368,3231738623,NL
3231738624,3231739135,US
-3231739136,3231739647,NL
+3231739136,3231739391,GB
+3231739392,3231739647,NL
3231739648,3231739903,BR
3231739904,3231742719,US
3231742720,3231742975,NL
@@ -59491,8 +66574,7 @@
3231800320,3231801343,CN
3231801344,3231809535,CA
3231809536,3231810047,AU
-3231810560,3231825919,US
-3231825920,3231842303,CA
+3231810560,3231842303,US
3231842304,3231843327,RU
3231843328,3231844351,NO
3231844352,3231845375,RU
@@ -59571,7 +66653,9 @@
3232065792,3232066303,GB
3232066304,3232066559,SE
3232066560,3232066815,NO
-3232066816,3232079871,SE
+3232066816,3232070399,SE
+3232070400,3232070655,ES
+3232070656,3232079871,SE
3232079872,3232080895,GB
3232080896,3232082687,SE
3232082688,3232083199,GB
@@ -59594,11 +66678,16 @@
3232098304,3232100095,SE
3232100096,3232100351,IE
3232100352,3232101119,GB
-3232101120,3232104447,SE
+3232101120,3232102143,SE
+3232102144,3232102144,DK
+3232102145,3232102145,SE
+3232102146,3232102399,DK
+3232102400,3232104447,SE
3232104448,3232106495,DE
3232107520,3232108543,RU
3232108544,3232112639,DE
-3232116736,3232129023,DE
+3232116736,3232125183,DE
+3232125952,3232129023,DE
3232129024,3232130047,NL
3232130048,3232131071,UA
3232131072,3232133119,DE
@@ -59676,9 +66765,9 @@
3232724152,3232724159,US
3232724160,3232727039,CA
3232727040,3232759807,US
-3232759808,3232772095,SE
-3232772096,3232774143,IT
-3232774144,3232774911,SE
+3232759808,3232765951,SE
+3232765952,3232766207,NO
+3232766208,3232774911,SE
3232774912,3232775167,IE
3232775168,3232794879,SE
3232794880,3232795135,DE
@@ -59771,8 +66860,7 @@
3233590528,3233590783,PR
3233590784,3233591295,AU
3233591552,3233593599,US
-3233593600,3233593855,NZ
-3233593856,3233594111,AU
+3233593600,3233594111,AU
3233594112,3233594367,NL
3233594368,3233594623,US
3233594624,3233594879,NL
@@ -59806,7 +66894,7 @@
3233625600,3233625855,AU
3233625856,3233626111,NL
3233626112,3233626879,US
-3233627136,3233628671,US
+3233627136,3233628415,US
3233628672,3233628927,FR
3233628928,3233629439,CA
3233629440,3233629695,GB
@@ -59839,7 +66927,7 @@
3233654272,3233655551,GB
3233655552,3233662975,US
3233663488,3233663999,NL
-3233664256,3233665023,US
+3233664000,3233665023,US
3233665024,3233666047,AU
3233666048,3233668863,US
3233668864,3233669119,AU
@@ -59852,6 +66940,7 @@
3233677312,3233679103,US
3233679360,3233682431,US
3233682944,3233684991,US
+3233684992,3233685247,MX
3233685248,3233685503,BR
3233685760,3233688063,US
3233688576,3233688831,NL
@@ -59955,11 +67044,7 @@
3233808384,3233873919,TW
3233873920,3233874175,US
3233874176,3233874687,AU
-3233874688,3233903615,US
-3233903616,3233903743,GB
-3233903744,3233903807,US
-3233903808,3233903871,GB
-3233903872,3233926294,US
+3233874688,3233926294,US
3233926295,3233926295,MX
3233926296,3233939455,US
3233939456,3234004991,FI
@@ -60065,13 +67150,16 @@
3234232576,3234232831,US
3234232832,3234233087,BR
3234233088,3234238975,US
-3234238976,3234239487,MY
-3234239488,3234240383,US
+3234238976,3234239231,MY
+3234239232,3234239327,US
+3234239328,3234239329,MY
+3234239330,3234240383,US
3234240384,3234240387,IE
3234240388,3234240607,US
3234240608,3234240611,IL
3234240612,3234247167,US
-3234247680,3234269695,US
+3234247680,3234267135,US
+3234267392,3234269695,US
3234270208,3234271231,CA
3234271232,3234275327,PT
3234275328,3234279423,AU
@@ -60083,7 +67171,14 @@
3234316288,3234320383,CA
3234320384,3234332671,US
3234332928,3234334975,US
-3234335744,3234349055,US
+3234335744,3234338815,US
+3234338816,3234339071,CN
+3234339072,3234339327,MT
+3234339328,3234339583,LB
+3234339584,3234339839,PA
+3234339840,3234340095,US
+3234340096,3234340351,IN
+3234340352,3234349055,US
3234349056,3234353151,NZ
3234353152,3234549759,US
3234549760,3234550015,RU
@@ -60129,7 +67224,8 @@
3234726144,3234726399,CA
3234726400,3234726911,US
3234726912,3234727935,CA
-3234727936,3234733055,US
+3234727936,3234730495,US
+3234730752,3234733055,US
3234733056,3234733311,CA
3234733312,3234735103,US
3234735616,3234737407,US
@@ -60160,7 +67256,8 @@
3234781440,3234781951,CA
3234781952,3234782719,US
3234782720,3234783999,IL
-3234784000,3234791167,US
+3234784000,3234786815,US
+3234787328,3234791167,US
3234791424,3234794495,US
3234794752,3234795007,US
3234795008,3234795263,NL
@@ -60227,15 +67324,15 @@
3234861056,3234886143,US
3234886656,3234926847,US
3234927616,3234988031,US
-3234988032,3234990847,CA
+3234988032,3234991103,CA
3234991104,3234998783,US
3234999296,3235004415,US
3235004416,3235021823,CA
3235021824,3235026943,US
-3235026944,3235028991,CA
-3235028992,3235045375,US
-3235045376,3235046143,CA
-3235046144,3235085311,US
+3235026944,3235027967,CA
+3235027968,3235045375,US
+3235045376,3235045887,CA
+3235045888,3235085311,US
3235085312,3235086335,CA
3235086336,3235184639,US
3235184640,3235184895,CA
@@ -60345,7 +67442,12 @@
3236233216,3236238591,US
3236239360,3236241407,CA
3236241408,3236302847,US
-3236306944,3236364287,US
+3236306944,3236312063,US
+3236312064,3236312319,MO
+3236312320,3236312575,GH
+3236312576,3236312831,GR
+3236312832,3236313087,QA
+3236313088,3236364287,US
3236364544,3236365567,US
3236365824,3236368127,US
3236368128,3236368383,AU
@@ -60475,10 +67577,7 @@
3236826112,3236827135,CA
3236827136,3236958207,US
3236958208,3236962303,AU
-3236962304,3236966143,US
-3236966400,3237021695,US
-3237021696,3237023743,CA
-3237023744,3237038079,US
+3236962304,3237038079,US
3237038080,3237038335,CA
3237038336,3237043967,US
3237043968,3237044223,CH
@@ -60525,8 +67624,7 @@
3237308672,3237310719,AU
3237310720,3237312767,US
3237312768,3237313023,BO
-3237313024,3237317631,US
-3237317888,3237319679,US
+3237313024,3237319679,US
3237319680,3237319935,MU
3237319936,3237320703,US
3237320704,3237320959,UA
@@ -60586,7 +67684,9 @@
3237634310,3237634310,GB
3237634311,3237647103,US
3237647104,3237647359,AU
-3237647360,3237679359,US
+3237647360,3237648639,US
+3237648640,3237648895,AU
+3237648896,3237679359,US
3237679872,3237681663,US
3237681664,3237682943,CA
3237682944,3237684991,US
@@ -60621,7 +67721,7 @@
3237781504,3237785599,CA
3237785600,3237797887,US
3237797888,3237801983,CA
-3237806080,3237857535,US
+3237801984,3237857535,US
3237858304,3237863423,CA
3237863424,3237867519,US
3237867520,3237867775,HK
@@ -60662,7 +67762,7 @@
3237961472,3237961727,HT
3237961728,3238002687,US
3238002688,3238008831,NL
-3238008832,3238010879,PL
+3238008832,3238010879,GB
3238010880,3238017023,CH
3238017024,3238018303,DK
3238018304,3238018559,UA
@@ -60743,7 +67843,7 @@
3238536192,3238537215,DK
3238537216,3238538495,CH
3238538496,3238538751,PL
-3238538752,3238539263,RU
+3238538752,3238539263,UA
3238539264,3238541567,CH
3238541568,3238541823,PL
3238541824,3238542591,CH
@@ -60826,8 +67926,8 @@
3238867968,3238887423,SE
3238887424,3238888447,NL
3238888448,3238893567,SE
-3238893568,3238894591,NL
-3238894592,3238897663,SE
+3238893568,3238895615,NL
+3238895616,3238897663,SE
3238897664,3238899711,NL
3238899712,3238901759,SE
3238901760,3238902783,NL
@@ -60856,7 +67956,9 @@
3238993920,3238995967,HR
3238995968,3239001087,SE
3239001088,3239002111,NL
-3239002112,3239008255,SE
+3239002112,3239006207,SE
+3239006208,3239007231,NL
+3239007232,3239008255,SE
3239008256,3239009279,NL
3239009280,3239018495,SE
3239018496,3239020543,HR
@@ -60866,7 +67968,6 @@
3239026688,3239028735,HR
3239028736,3239051263,SE
3239051264,3239053311,DE
-3239054336,3239054847,DE
3239055360,3239059455,DE
3239062272,3239062527,ES
3239062528,3239062783,CH
@@ -61044,9 +68145,7 @@
3239275520,3239276543,UA
3239276544,3239277055,LU
3239277056,3239277567,DE
-3239277568,3239278079,RU
-3239278080,3239278591,UA
-3239278592,3239279103,RU
+3239277568,3239279103,RU
3239279104,3239280127,PL
3239280128,3239280639,RU
3239281664,3239282687,RU
@@ -61104,7 +68203,7 @@
3239468288,3239468543,RO
3239468544,3239468799,NO
3239468800,3239469055,RO
-3239469056,3239470591,DE
+3239470080,3239470591,DE
3239470592,3239470847,CH
3239470848,3239471103,BG
3239471872,3239472127,FR
@@ -61114,7 +68213,7 @@
3239480320,3239480575,UA
3239480832,3239481087,CH
3239481088,3239481343,FR
-3239481344,3239486719,DE
+3239485440,3239486719,DE
3239486720,3239486975,ES
3239486976,3239487487,DE
3239487744,3239487999,PL
@@ -61166,9 +68265,8 @@
3239541248,3239541503,UA
3239541504,3239541759,FR
3239541760,3239542015,GB
-3239542016,3239542271,PL
3239542272,3239542527,RU
-3239542784,3239544831,DE
+3239543808,3239544831,DE
3239544832,3239545087,GB
3239545088,3239545343,SI
3239545344,3239545855,HU
@@ -61202,7 +68300,9 @@
3239574016,3239574783,DE
3239575040,3239575295,DE
3239575296,3239575551,DK
-3239575552,3239578879,DE
+3239576064,3239576319,DE
+3239576576,3239576831,DE
+3239577088,3239578879,DE
3239579136,3239579391,PL
3239579392,3239581695,DE
3239581696,3239581951,PL
@@ -61215,7 +68315,8 @@
3239583744,3239584767,DE
3239585024,3239585279,DE
3239587840,3239591935,DE
-3239591936,3239592447,FI
+3239591936,3239592191,FI
+3239592192,3239592447,CN
3239592448,3239592703,US
3239592704,3239593983,FI
3239593984,3239624703,DE
@@ -61447,7 +68548,7 @@
3239896064,3239896575,DE
3239896576,3239896831,PL
3239896832,3239897087,HU
-3239897088,3239897343,IE
+3239897088,3239897343,GB
3239897344,3239897599,FR
3239897600,3239897855,RU
3239897856,3239898111,FR
@@ -61460,7 +68561,7 @@
3239902464,3239902719,RU
3239902720,3239902975,EE
3239903232,3239904255,DE
-3239904512,3239904767,DE
+3239904512,3239904767,GB
3239905024,3239907327,DE
3239907328,3239907583,UA
3239907584,3239907839,DE
@@ -61477,11 +68578,8 @@
3239916800,3239917055,KZ
3239917056,3239917311,DE
3239917312,3239917567,BG
-3239919616,3239922687,DE
-3239922688,3239922724,LU
-3239922725,3239922725,DE
-3239922726,3239922943,LU
-3239922944,3239935999,DE
+3239919616,3239927807,DE
+3239931904,3239935999,DE
3239936512,3239938815,DE
3239938816,3239939071,NL
3239939072,3239949311,DE
@@ -61501,7 +68599,8 @@
3239960064,3239960319,FR
3239960320,3239960575,GB
3239960576,3239966719,DE
-3239967232,3239968255,DE
+3239967232,3239967487,DE
+3239967744,3239968255,DE
3239968512,3239968767,PL
3239968768,3239969023,NO
3239969536,3239971839,DE
@@ -61514,7 +68613,8 @@
3239978752,3239979007,RU
3239979264,3239979519,GB
3239979520,3239979775,DE
-3239980032,3239996415,DE
+3239980032,3239993343,DE
+3239995392,3239996415,DE
3239996416,3239996671,GB
3239996928,3239997183,BE
3239997184,3239997439,GB
@@ -61549,7 +68649,7 @@
3240085504,3240087551,KZ
3240087552,3240097791,DE
3240098816,3240099327,CH
-3240100352,3240100863,GB
+3240100608,3240100863,GB
3240101376,3240101887,GB
3240102144,3240102399,GB
3240102912,3240103935,UA
@@ -61580,11 +68680,7 @@
3240120832,3240121343,GB
3240122368,3240123391,GB
3240125440,3240125695,RO
-3240125696,3240132607,GB
-3240140800,3240142847,GB
-3240153600,3240154111,GB
-3240161536,3240161791,GB
-3240163840,3240165375,GB
+3240125696,3240165375,GB
3240165376,3240165887,PL
3240165888,3240166399,ES
3240166400,3240166911,PL
@@ -61756,7 +68852,6 @@
3240280704,3240280831,RU
3240280832,3240280959,GB
3240280960,3240281215,PL
-3240281216,3240281343,FR
3240281344,3240281471,PL
3240281472,3240281599,FR
3240281600,3240281727,JO
@@ -61852,7 +68947,7 @@
3240423424,3240435711,GB
3240436480,3240436735,GB
3240436736,3240437759,DE
-3240438784,3240443903,GB
+3240438784,3240439807,GB
3240450048,3240454911,GB
3240454912,3240455167,IN
3240456192,3240460287,GB
@@ -61882,7 +68977,8 @@
3240467968,3240468223,DE
3240468224,3240468479,CH
3240468480,3240476671,GB
-3240484864,3240486911,GB
+3240485120,3240485375,GB
+3240485632,3240486399,GB
3240487424,3240487935,GB
3240487936,3240488191,CH
3240488192,3240488447,GB
@@ -61899,7 +68995,8 @@
3240534016,3240536640,GB
3240536641,3240536641,US
3240536642,3240550399,GB
-3240558592,3240575487,GB
+3240558592,3240560127,GB
+3240560640,3240575487,GB
3240575488,3240575743,RO
3240575744,3240575999,GB
3240576000,3240576255,DE
@@ -61922,7 +69019,7 @@
3240588800,3240589055,UA
3240589056,3240589311,RO
3240589312,3240593407,SE
-3240593408,3240594175,GB
+3240593408,3240593663,GB
3240594176,3240594431,DK
3240594432,3240599551,GB
3240602624,3240605695,GB
@@ -61931,7 +69028,6 @@
3240615936,3240622079,GB
3240622080,3240622591,RU
3240622592,3240623103,GB
-3240623872,3240624127,GB
3240624128,3240689663,EE
3240689664,3240690175,GB
3240690176,3240690687,TR
@@ -62037,7 +69133,8 @@
3240754176,3240755199,DE
3240755200,3240759295,IT
3240771584,3240779775,IT
-3240788992,3240791551,IT
+3240788992,3240790015,IT
+3240790528,3240791551,IT
3240791552,3240791807,RU
3240791808,3240792063,ES
3240792064,3240792319,GB
@@ -62065,11 +69162,7 @@
3240812288,3240812543,KW
3240813568,3240814591,PL
3240814592,3240816639,IT
-3240818688,3240819711,NL
-3240819712,3240819715,GB
-3240819716,3240819716,NL
-3240819717,3240819967,GB
-3240819968,3240820735,NL
+3240818688,3240820735,NL
3240820736,3240820799,FR
3240820800,3240820831,CY
3240820832,3240820863,GB
@@ -62082,7 +69175,7 @@
3240827392,3240827647,BG
3240827648,3240827903,CH
3240828160,3240828415,DE
-3240828416,3240837119,IT
+3240828928,3240837119,IT
3240839424,3240839679,IT
3240840192,3240840447,IT
3240840448,3240840703,PL
@@ -62096,7 +69189,8 @@
3240845312,3240845823,IT
3240846336,3240846847,IT
3240846848,3240847359,VA
-3240847360,3240852735,IT
+3240847360,3240848895,IT
+3240849152,3240852735,IT
3240852736,3240852991,GB
3240853248,3240853503,RU
3240853504,3240854527,VA
@@ -62131,7 +69225,8 @@
3240886272,3241017343,SE
3241017344,3241017855,AT
3241017856,3241018111,RU
-3241018112,3241029119,AT
+3241018112,3241018367,FR
+3241018368,3241029119,AT
3241029120,3241029375,UA
3241029376,3241029631,PL
3241029632,3241031679,AT
@@ -62254,15 +69349,19 @@
3241146624,3241146879,RO
3241146880,3241147903,CH
3241148160,3241148415,CH
-3241148416,3241476095,FR
-3241476608,3241477631,BE
+3241148416,3241416767,FR
+3241416768,3241416831,US
+3241416832,3241476095,FR
+3241476608,3241477375,BE
3241477632,3241477887,GB
3241478144,3241481727,BE
3241481728,3241481983,PT
3241481984,3241482239,DE
3241482240,3241484799,SE
3241484800,3241485055,BE
-3241485312,3241496575,BE
+3241485312,3241486591,BE
+3241486592,3241487615,SE
+3241487616,3241496575,BE
3241496576,3241496831,AT
3241497344,3241497599,UA
3241497600,3241497855,SE
@@ -62284,8 +69383,10 @@
3241508864,3241541375,BE
3241541376,3241541631,PL
3241541632,3241672703,FR
-3241673472,3241689087,FR
-3241691136,3241699327,FR
+3241673728,3241678847,FR
+3241680896,3241689087,FR
+3241691136,3241692159,FR
+3241693184,3241699327,FR
3241699584,3241699839,FR
3241699840,3241700095,SE
3241700096,3241723903,FR
@@ -62316,7 +69417,6 @@
3241842688,3241843455,BE
3241843456,3241843711,CH
3241843712,3241848063,BE
-3241851904,3241852927,GB
3241852928,3241854463,SK
3241854464,3241854975,GB
3241854976,3241855999,DE
@@ -62368,9 +69468,7 @@
3243238400,3243245567,NL
3243245568,3243376639,AT
3243376640,3243442175,GB
-3243442176,3243443199,AT
-3243443200,3243443455,DE
-3243443456,3243507711,AT
+3243442176,3243507711,AT
3243507712,3243507967,GB
3243509248,3243509759,CZ
3243509760,3243510015,RU
@@ -62735,7 +69833,6 @@
3244882176,3244882431,UA
3244882432,3244882687,IT
3244882688,3244882943,PL
-3244882944,3244883199,NL
3244883200,3244883455,RU
3244883456,3244883711,CZ
3244883712,3244883967,NL
@@ -62963,7 +70060,6 @@
3244945664,3244945919,NL
3244945920,3244946175,PL
3244946176,3244946431,TR
-3244946432,3244946687,RO
3244946688,3244946943,RU
3244946944,3244947455,DE
3244947456,3244947711,PL
@@ -63142,10 +70238,7 @@
3245126656,3245126911,FR
3245126912,3245127167,DE
3245127168,3245127423,RU
-3245127424,3245127679,AT
-3245127680,3245127742,US
-3245127743,3245127743,DE
-3245127744,3245127935,US
+3245127680,3245127935,DE
3245127936,3245128191,LV
3245128192,3245128447,IT
3245128448,3245128703,CH
@@ -63161,7 +70254,6 @@
3245132288,3245132543,PL
3245132544,3245132799,FR
3245132800,3245133311,IT
-3245133312,3245133567,PL
3245134080,3245134335,UA
3245134336,3245134591,NL
3245134848,3245135103,AT
@@ -63216,7 +70308,6 @@
3245169152,3245169407,IT
3245169408,3245169663,PL
3245169920,3245170175,PT
-3245170176,3245170431,GB
3245170432,3245170687,CH
3245170688,3245171711,DE
3245172736,3245173759,IT
@@ -63291,8 +70382,7 @@
3245219840,3245221887,FI
3245221888,3245223935,DE
3245223936,3245225471,NL
-3245225472,3245225727,GB
-3245225728,3245225983,NL
+3245225472,3245225983,GB
3245225984,3245228031,HU
3245228032,3245229055,FI
3245229056,3245230079,DE
@@ -63323,7 +70413,7 @@
3245243392,3245244415,UA
3245244416,3245244671,ES
3245244672,3245244927,AT
-3245244928,3245245183,BE
+3245244928,3245245183,US
3245245440,3245245695,BG
3245245696,3245245951,DE
3245246720,3245246975,PL
@@ -63470,8 +70560,6 @@
3246129152,3246260223,RU
3246260224,3246325759,PT
3246351616,3246352639,ES
-3246374400,3246374655,ES
-3246376960,3246377215,ES
3246378752,3246379007,ES
3246379008,3246381055,GB
3246391296,3246613503,GB
@@ -63479,8 +70567,7 @@
3246614528,3246744543,GB
3246744544,3246744559,NG
3246744560,3246784511,GB
-3246784512,3246825727,CH
-3246825728,3246825983,GB
+3246784512,3246825983,CH
3246825984,3246826239,US
3246826240,3246915583,CH
3246915584,3247046655,PT
@@ -63574,9 +70661,9 @@
3247112192,3247177727,FR
3247177728,3247243263,TR
3247243264,3247244287,DE
-3247244288,3247252319,NL
-3247252320,3247252327,DE
-3247252328,3247253503,NL
+3247244288,3247250175,NL
+3247250176,3247250431,DE
+3247250432,3247253503,NL
3247253504,3247254527,DE
3247254528,3247267839,NL
3247267840,3247268351,DE
@@ -63590,7 +70677,8 @@
3247309824,3247313663,FI
3247313664,3247313919,AM
3247313920,3247316479,FI
-3247316480,3247316991,RU
+3247316480,3247316735,IR
+3247316736,3247316991,RU
3247321600,3247322111,FI
3247322368,3247322623,DE
3247322624,3247323135,FI
@@ -63618,7 +70706,7 @@
3247341312,3247341567,DE
3247343616,3247345663,FI
3247345920,3247346175,HU
-3247346176,3247346943,FI
+3247346432,3247346943,FI
3247346944,3247347199,SI
3247347200,3247347455,FI
3247347456,3247347711,IL
@@ -63675,7 +70763,7 @@
3247438848,3247439871,FI
3247439872,3247702015,ES
3247702016,3247702271,RO
-3247702528,3247703551,ES
+3247702528,3247703295,ES
3247703552,3247704063,FR
3247705856,3247706111,RU
3247708160,3247711743,ES
@@ -63772,7 +70860,8 @@
3247909888,3247910911,DE
3247910912,3247912959,PL
3247912960,3247913983,UA
-3247913984,3247915007,DE
+3247913984,3247914495,DE
+3247914496,3247915007,AT
3247915008,3247917055,PL
3247917056,3247918079,NL
3247918080,3247919103,PL
@@ -63813,7 +70902,6 @@
3248521984,3248522239,RU
3248522240,3248522751,NO
3248523264,3248524287,NO
-3248525312,3248525567,DE
3248526336,3248527359,NO
3248528384,3248528895,NO
3248528896,3248529151,RU
@@ -63827,30 +70915,31 @@
3248551936,3248553215,NO
3248553728,3248553983,RU
3248553984,3248554239,RO
-3248554496,3248557055,NO
3248557056,3248558079,UA
3248558080,3248575487,NO
3248575488,3248576511,CZ
-3248576512,3248591871,NO
-3248592384,3248599039,NO
+3248576512,3248582655,NO
+3248584704,3248586751,NO
+3248589312,3248589823,NO
+3248590848,3248591871,NO
+3248592896,3248599039,NO
3248599040,3248603135,SE
3248603136,3248603391,BG
3248603392,3248603647,RU
3248603648,3248604159,NO
-3248604928,3248608767,NO
-3248609280,3248619519,NO
+3248606208,3248608255,NO
+3248609280,3248610303,NO
+3248611328,3248619519,NO
3248619520,3248624383,DK
3248624384,3248624639,US
3248624640,3248750591,DK
3248750592,3248750847,PT
-3248751616,3248752127,PL
3248752640,3248752895,DE
3248752896,3248753151,TR
3248753408,3248753663,GB
3248753664,3248753919,FR
3248753920,3248754431,GB
3248754432,3248754687,AT
-3248754688,3248758783,PL
3248758784,3248774143,SE
3248774144,3248775167,UA
3248775168,3248783615,GB
@@ -63896,10 +70985,8 @@
3248807936,3248808447,AT
3248808448,3248808959,GR
3248808960,3248810111,FR
-3248810112,3248810143,RU
3248810144,3248810175,CY
3248810176,3248810207,FR
-3248810208,3248810239,GB
3248810240,3248810495,CH
3248810496,3248812543,AT
3248812544,3248813055,GB
@@ -63910,12 +70997,12 @@
3248816128,3248881663,CZ
3248881664,3249012735,FI
3249012736,3249012991,DE
-3249012992,3249014271,LU
+3249012992,3249014015,LU
3249014272,3249014783,DE
3249014784,3249025023,LU
3249025536,3249025791,FR
3249026560,3249026815,PL
-3249026816,3249045503,LU
+3249027584,3249045503,LU
3249045504,3249078271,DE
3249078272,3249078783,RU
3249078784,3249079295,CH
@@ -64022,28 +71109,28 @@
3249141760,3249142271,RU
3249142784,3249143295,UA
3249143296,3249143807,GB
-3249143808,3249242879,AT
-3249242880,3249243135,DE
-3249243136,3249274879,AT
+3249143808,3249274879,AT
3249274880,3249405951,NL
3249405952,3249521279,DE
3249521280,3249521343,UA
3249521344,3249537023,DE
3249537024,3249537279,PT
-3249537536,3249537791,NL
3249537792,3249538047,GB
-3249538048,3249551359,NL
+3249538048,3249541119,NL
+3249545216,3249551359,NL
3249551360,3249552639,GB
-3249552640,3249565695,NL
+3249552640,3249553407,NL
+3249561600,3249565695,NL
3249569792,3249574143,NL
3249574144,3249574399,RU
3249574400,3249574655,GB
3249574656,3249574911,UA
-3249574912,3249583103,NL
-3249583616,3249590527,NL
+3249574912,3249576191,NL
+3249577728,3249583103,NL
+3249584128,3249590527,NL
3249590528,3249590783,FR
-3249590784,3249591295,NL
-3249591808,3249600255,NL
+3249591808,3249595391,NL
+3249595904,3249600255,NL
3249600256,3249600511,AT
3249600512,3249601535,UA
3249601536,3249601791,RU
@@ -64056,9 +71143,11 @@
3249677056,3249677311,SE
3249677312,3249678847,IE
3249679104,3249679359,CH
-3249679360,3249683455,IE
+3249679360,3249682943,IE
3249683456,3249684479,SE
-3249684480,3249698047,IE
+3249684480,3249696767,IE
+3249697280,3249697535,IE
+3249697792,3249698047,IE
3249698048,3249698303,PL
3249698304,3249698559,RU
3249698560,3249698815,HU
@@ -64069,8 +71158,8 @@
3249702144,3249702399,FI
3249702400,3249702655,FR
3249702656,3249702911,RU
-3249702912,3249703679,FR
-3249703680,3249703935,GB
+3249702912,3249703167,FR
+3249703424,3249703679,FR
3249703936,3249704191,FR
3249704192,3249704447,RO
3249704704,3249704959,PL
@@ -64090,7 +71179,6 @@
3249710592,3249710847,BG
3249710848,3249711103,PL
3249711104,3249711359,HU
-3249711360,3249711615,DE
3249711872,3249712127,AT
3249712384,3249712639,GB
3249712896,3249713151,DK
@@ -64113,7 +71201,6 @@
3249723392,3249723647,IT
3249723648,3249723903,GB
3249724160,3249724415,LU
-3249724416,3249724671,IL
3249724672,3249724927,RU
3249724928,3249725183,BG
3249725184,3249725439,GB
@@ -64223,7 +71310,9 @@
3250010368,3250010879,CH
3250010880,3250012159,SE
3250012160,3250013183,DE
-3250013184,3250020863,SE
+3250013184,3250015231,SE
+3250015232,3250015743,FI
+3250015744,3250020863,SE
3250020864,3250021375,IT
3250021376,3250022399,FR
3250022400,3250023423,SE
@@ -64239,7 +71328,9 @@
3250035456,3250035711,US
3250035712,3250038271,SE
3250038272,3250039295,ES
-3250039296,3250042623,SE
+3250039296,3250039807,SE
+3250039808,3250040319,GB
+3250040320,3250042623,SE
3250042624,3250043135,FR
3250043136,3250061311,SE
3250061312,3250192383,FI
@@ -64254,7 +71345,7 @@
3250194688,3250194943,UA
3250194944,3250195199,RO
3250195456,3250195711,DE
-3250195712,3250196223,GB
+3250195712,3250195967,GB
3250196224,3250196479,UA
3250196480,3250200575,AT
3250200576,3250200831,HU
@@ -64312,8 +71403,7 @@
3250357904,3250357919,FR
3250357920,3250357927,PL
3250357928,3250357959,CY
-3250357960,3250357967,GB
-3250357976,3250358015,GB
+3250357984,3250357999,GB
3250358016,3250358527,LB
3250358528,3250358783,HU
3250359296,3250359807,HU
@@ -64390,7 +71480,6 @@
3250588928,3250589183,GB
3250589184,3250589439,DE
3250589504,3250589567,HR
-3250589632,3250589695,NO
3250589696,3250593791,CH
3250593792,3250594815,GB
3250594816,3250595327,UA
@@ -64415,7 +71504,6 @@
3250667520,3250675711,PL
3250675712,3250683903,GB
3250683904,3250692095,CH
-3250692096,3250692351,NO
3250692352,3250692607,NL
3250693376,3250693631,UA
3250693632,3250694143,DE
@@ -64457,7 +71545,7 @@
3250751488,3250751999,DE
3250752000,3250752511,CH
3250752512,3250753023,BG
-3250753024,3250754047,DE
+3250753536,3250754047,DE
3250754048,3250754303,AT
3250754560,3250755071,DE
3250755584,3250755839,FR
@@ -64477,11 +71565,10 @@
3251111168,3251111423,CH
3251111424,3251111679,AT
3251111680,3251111935,ES
-3251111936,3251112191,BG
3251112192,3251112447,SK
3251112448,3251112703,RU
3251112704,3251112959,SE
-3251112960,3251113983,BG
+3251113472,3251113983,BG
3251114496,3251114751,RU
3251114752,3251115007,RO
3251115008,3251115263,PL
@@ -64510,7 +71597,6 @@
3251126784,3251127295,PL
3251127296,3251127807,UA
3251127808,3251128319,NL
-3251128832,3251129343,SE
3251129344,3251129855,UA
3251129856,3251130367,CH
3251130368,3251130879,GB
@@ -64567,7 +71653,6 @@
3251152128,3251152639,RO
3251152640,3251152895,UA
3251152896,3251153151,RU
-3251153152,3251153407,UA
3251153408,3251153663,TR
3251153664,3251153919,FR
3251153920,3251154175,DE
@@ -64578,7 +71663,7 @@
3251155456,3251155711,NL
3251155712,3251155967,UA
3251155968,3251156223,TR
-3251156224,3251156735,FR
+3251156480,3251156735,FR
3251156736,3251156991,UA
3251156992,3251157247,FR
3251157248,3251157503,BE
@@ -64589,7 +71674,6 @@
3251158784,3251159295,GB
3251159296,3251159551,DE
3251159808,3251160063,DE
-3251160064,3251160319,JO
3251160320,3251160575,PL
3251160576,3251160831,NL
3251160832,3251161087,RU
@@ -64630,7 +71714,6 @@
3251171840,3251172095,RO
3251172096,3251172351,ES
3251172608,3251172863,GB
-3251172864,3251173119,UA
3251173120,3251173375,SA
3251173376,3251173631,UA
3251173632,3251173887,DE
@@ -64652,7 +71735,6 @@
3251183872,3251184127,CH
3251184128,3251184383,PL
3251184640,3251184895,PL
-3251184896,3251185151,DE
3251185408,3251185663,DK
3251185664,3251185919,IT
3251185920,3251186175,AT
@@ -64660,7 +71742,6 @@
3251186432,3251186687,SE
3251186688,3251186943,RO
3251186944,3251187199,SI
-3251187200,3251187455,GR
3251187456,3251187711,GB
3251187712,3251188735,NL
3251188736,3251189759,DE
@@ -64711,13 +71792,11 @@
3251213312,3251213375,CY
3251213376,3251213439,DE
3251213504,3251213567,NL
-3251213568,3251213631,FR
3251213632,3251213695,PL
3251213760,3251213823,CY
3251213824,3251213887,GB
3251213888,3251214015,CY
3251214080,3251214143,CY
-3251214144,3251214207,AF
3251214272,3251214335,DE
3251214336,3251214463,RU
3251214464,3251214591,UA
@@ -64744,11 +71823,9 @@
3251220224,3251220479,UA
3251220480,3251222527,DE
3251222528,3251224575,GB
-3251225088,3251225599,FR
3251225600,3251226111,GB
3251226112,3251226623,UA
3251226624,3251227135,GB
-3251227136,3251227647,DE
3251227648,3251228159,GB
3251228160,3251228671,UA
3251229696,3251230719,SI
@@ -64759,7 +71836,6 @@
3251234816,3251235839,RO
3251235840,3251236863,DE
3251236864,3251237887,BG
-3251238912,3251239935,FR
3251240960,3251241215,BE
3251241216,3251243007,GB
3251245056,3251245311,DE
@@ -64775,7 +71851,7 @@
3251252736,3251256831,CH
3251256832,3251257343,GB
3251257344,3251259903,BE
-3251260672,3251261439,FR
+3251260416,3251261439,FR
3251261440,3251264255,CH
3251264256,3251265535,FR
3251265536,3251267839,NL
@@ -64805,23 +71881,25 @@
3251302400,3251306495,LI
3251306496,3251306751,AT
3251306752,3251307007,MK
-3251307008,3251307519,RS
3251307520,3251307775,MK
3251307776,3251308031,GB
3251308032,3251308543,RS
-3251310592,3251311103,SI
3251311104,3251311615,RS
3251311616,3251312127,GB
3251312384,3251312639,CH
-3251312640,3251314687,RS
+3251313152,3251313663,RS
3251314688,3251315711,FR
3251315712,3251317759,RU
3251317760,3251318783,PL
3251318784,3251319807,UA
3251320832,3251321855,PL
3251321856,3251322879,RU
-3251322880,3251331327,GB
-3251331328,3251331583,FR
+3251322880,3251331071,GB
+3251331072,3251331262,FR
+3251331263,3251331263,GB
+3251331264,3251331321,FR
+3251331322,3251331322,GB
+3251331323,3251331583,FR
3251331584,3251332095,PL
3251332096,3251333119,RU
3251333120,3251333631,CH
@@ -64850,7 +71928,6 @@
3251362304,3251362815,UA
3251362816,3251363327,NL
3251363328,3251363839,PL
-3251363840,3251364095,MK
3251364096,3251364607,NL
3251364608,3251364863,RO
3251364864,3251366911,IT
@@ -64872,8 +71949,8 @@
3252167680,3252176127,NL
3252176128,3252177919,SE
3252177920,3252178943,HR
-3252178944,3252179455,SE
-3252179456,3252189183,NL
+3252178944,3252179199,SE
+3252179200,3252189183,NL
3252189184,3252190719,SE
3252190720,3252190975,NO
3252190976,3252191231,SE
@@ -64919,9 +71996,9 @@
3252318976,3252319231,PL
3252319232,3252319743,AT
3252319744,3252319999,RU
-3252320000,3252320255,GR
3252320256,3252320511,CZ
-3252320768,3252321791,GR
+3252320768,3252321023,GR
+3252321280,3252321791,GR
3252321792,3252322303,PL
3252322304,3252323327,NO
3252323328,3252324351,PL
@@ -64935,9 +72012,7 @@
3252336640,3252337663,UA
3252337664,3252338687,RU
3252338688,3252340735,BE
-3252340736,3252340991,TR
3252341248,3252341503,DE
-3252341504,3252341759,GR
3252342016,3252342079,GB
3252342080,3252342239,CY
3252342240,3252342271,CH
@@ -64948,7 +72023,6 @@
3252342608,3252342655,CY
3252342656,3252342783,IL
3252342784,3252346367,DE
-3252346368,3252346623,GB
3252346624,3252355071,GR
3252355072,3252356351,LT
3252357120,3252358911,LT
@@ -64988,21 +72062,30 @@
3252387584,3252387839,RU
3252387840,3252404223,LT
3252404224,3252405759,NO
-3252405760,3252409663,LT
+3252405760,3252406271,FR
+3252406272,3252407295,NO
+3252407296,3252409663,FR
3252409664,3252409679,CD
-3252409680,3252421631,LT
-3252421632,3252423679,NO
-3252423680,3252448511,LT
+3252409680,3252415487,FR
+3252415488,3252415743,LT
+3252415744,3252420607,FR
+3252420608,3252424703,NO
+3252424704,3252428799,FR
+3252428800,3252429823,NO
+3252429824,3252448511,FR
3252448512,3252448767,NO
-3252448768,3252449791,LT
+3252448768,3252449791,FR
3252449792,3252450047,DK
-3252450048,3252452543,LT
+3252450048,3252452543,FR
3252452544,3252452551,SS
-3252452552,3252455679,LT
+3252452552,3252455679,FR
3252455680,3252455807,BI
-3252455808,3252469759,LT
+3252455808,3252461567,FR
+3252461568,3252469759,NO
3252469760,3252473855,NL
-3252473856,3252486143,LT
+3252473856,3252475903,NO
+3252475904,3252477951,FR
+3252477952,3252486143,NO
3252486144,3252490239,BE
3252490240,3252496127,SE
3252496128,3252496383,AU
@@ -65032,7 +72115,8 @@
3252527104,3252535295,BE
3252540416,3252541951,NL
3252541952,3252542207,CI
-3252542208,3252551679,BE
+3252542208,3252542719,BE
+3252543488,3252551679,BE
3252551680,3252563967,CH
3252563968,3252564479,RU
3252564480,3252564735,GB
@@ -65120,7 +72204,6 @@
3252913152,3252913407,ES
3252913408,3252913663,FR
3252913664,3252913919,RU
-3252913920,3252914175,NO
3252914176,3252916223,FR
3252916224,3252920319,DE
3252920320,3252928511,LB
@@ -65140,7 +72223,6 @@
3252939264,3252939775,DE
3252940288,3252940799,PT
3252940800,3252941311,RU
-3252941312,3252941823,RO
3252941824,3252942847,GB
3252942848,3252943359,FR
3252943360,3252943871,UA
@@ -65149,7 +72231,7 @@
3252944896,3252945151,AT
3252945152,3252945407,GB
3252945408,3252945663,UA
-3252945664,3252980735,AT
+3252945664,3252976639,AT
3252980992,3252981247,GB
3252981248,3252981503,RU
3252981504,3252981759,SE
@@ -65165,11 +72247,12 @@
3252984832,3252985087,FR
3252985088,3252985343,SE
3252985344,3252985855,RU
-3252985856,3252989439,AT
+3252985856,3252989183,AT
3252989440,3252989695,PL
3252989696,3253004799,AT
3253004800,3253005055,CZ
-3253005056,3253010431,AT
+3253005056,3253006335,AT
+3253006336,3253010431,DE
3253010432,3253075967,FI
3253075968,3253207039,RO
3253207040,3253270527,RU
@@ -65200,11 +72283,15 @@
3253403648,3253403903,PL
3253403904,3253409791,SE
3253409792,3253410047,GB
-3253410048,3253412351,SE
+3253410048,3253411327,SE
+3253411328,3253411583,NO
+3253411584,3253412351,SE
3253412352,3253412607,US
3253412608,3253416447,SE
3253416448,3253416703,GB
-3253416704,3253428223,SE
+3253416704,3253419519,SE
+3253419520,3253419775,GB
+3253419776,3253428223,SE
3253428224,3253428479,DE
3253428480,3253429247,SE
3253429248,3253429759,JP
@@ -65222,7 +72309,8 @@
3253436416,3253440511,SE
3253440512,3253440767,FR
3253440768,3253441023,SE
-3253441024,3253441535,AT
+3253441024,3253441279,CL
+3253441280,3253441535,NL
3253441536,3253443839,SE
3253443840,3253444351,NO
3253444352,3253453311,SE
@@ -65291,7 +72379,6 @@
3253658624,3253659647,DE
3253659648,3253660671,GB
3253661696,3253662719,NL
-3253662720,3253663743,RO
3253663744,3253664767,NL
3253664768,3253665791,DE
3253665792,3253666815,CZ
@@ -65313,7 +72400,6 @@
3253683200,3253685247,UA
3253685248,3253686271,FR
3253686272,3253687295,PL
-3253687296,3253688319,RU
3253688320,3253690367,NL
3253690368,3253691391,DK
3253691392,3253692415,PL
@@ -65385,7 +72471,11 @@
3253737856,3253738559,GB
3253738560,3253738567,CZ
3253738568,3253738575,BE
-3253738576,3253741679,GB
+3253738576,3253739263,GB
+3253739264,3253739519,FR
+3253739520,3253741055,GB
+3253741056,3253741311,BE
+3253741312,3253741679,GB
3253741680,3253741695,RU
3253741696,3253745151,GB
3253745152,3253745279,NO
@@ -65415,7 +72505,9 @@
3253765280,3253765295,NL
3253765296,3253765311,BE
3253765312,3253765375,TR
-3253765376,3253796863,GB
+3253765376,3253767711,GB
+3253767712,3253767743,DE
+3253767744,3253796863,GB
3253796864,3253862399,SE
3253862400,3253862655,GB
3253862656,3253882879,FR
@@ -65423,14 +72515,12 @@
3253886976,3253887231,GB
3253887232,3253887487,NL
3253887488,3253887743,ES
-3253887744,3253887999,GB
3253888000,3253888255,PL
3253888256,3253888511,BE
3253888512,3253888767,GB
3253888768,3253889023,SE
3253889024,3253889279,RO
3253889280,3253889535,CH
-3253889536,3253889791,DE
3253889792,3253890047,DK
3253890048,3253890303,NL
3253890560,3253890815,GB
@@ -65508,23 +72598,30 @@
3253967872,3253968895,UA
3253968896,3253969151,DE
3253969408,3253969919,AT
-3253969920,3253970431,NL
3253970432,3253970687,RU
3253970688,3253970943,UA
3253970944,3253971967,RS
3253971968,3253972991,RU
3253972992,3253974527,GB
-3253974784,3253974847,NO
-3253974848,3253974911,SE
-3253974976,3253975039,SE
+3253974784,3253975039,SE
3253975040,3253977087,DE
3253977088,3253985279,TR
3253985280,3253993471,GB
-3253993472,3254124543,BE
+3253993472,3254001919,BE
+3254001920,3254002175,NL
+3254002176,3254079743,BE
+3254079744,3254079999,HU
+3254080000,3254124543,BE
3254124544,3254255615,CH
-3254255616,3254263807,FR
-3254263808,3254264063,GF
-3254264064,3254488431,FR
+3254255616,3254256127,FR
+3254256128,3254256383,GP
+3254256384,3254260991,FR
+3254260992,3254262015,YT
+3254262016,3254266367,FR
+3254266368,3254266623,RE
+3254266624,3254277119,FR
+3254277120,3254278143,YT
+3254278144,3254488431,FR
3254488432,3254488447,MG
3254488448,3254489407,FR
3254489408,3254489439,MR
@@ -65556,27 +72653,23 @@
3254508800,3254508831,MQ
3254508832,3254521855,FR
3254521856,3254522111,GB
-3254522112,3254607871,FR
-3254607872,3254610175,RE
-3254610176,3254610431,FR
-3254610432,3254610687,RE
-3254610688,3254611455,FR
-3254611456,3254611456,YT
-3254611457,3254611711,FR
-3254611712,3254611712,YT
-3254611713,3254611967,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,3254648831,FR
-3254648832,3254649087,GB
-3254649088,3254649855,AL
+3254522112,3254608895,FR
+3254608896,3254609151,RE
+3254609152,3254609407,FR
+3254609408,3254609663,RE
+3254609664,3254609919,FR
+3254609920,3254610431,RE
+3254610432,3254610687,FR
+3254610688,3254610943,RE
+3254610944,3254611199,FR
+3254611200,3254611455,RE
+3254611456,3254611967,YT
+3254611968,3254612991,FR
+3254612992,3254613247,RE
+3254613248,3254615551,FR
+3254615552,3254616063,YT
+3254616064,3254648831,FR
+3254648832,3254649855,AL
3254649856,3254650879,SE
3254653440,3254654847,DE
3254654848,3254654975,DK
@@ -65584,7 +72677,8 @@
3254656256,3254656511,BG
3254656512,3254656767,DE
3254656768,3254657023,GB
-3254657024,3254665215,RO
+3254657024,3254661119,ES
+3254661120,3254665215,RO
3254681600,3254697983,DE
3254697984,3254698495,SE
3254698496,3254699007,GB
@@ -65698,7 +72792,6 @@
3254822144,3254822399,DE
3254822400,3254822655,FR
3254822656,3254822911,PL
-3254822912,3254823167,CH
3254823168,3254823423,NO
3254823424,3254823679,NL
3254823680,3254823935,PL
@@ -65729,7 +72822,6 @@
3254832128,3254832383,RO
3254832384,3254832639,BE
3254832640,3254832895,UA
-3254832896,3254833151,LV
3254833152,3254833407,DE
3254833408,3254833663,RU
3254833664,3254833919,GB
@@ -65759,7 +72851,6 @@
3254841344,3254841599,PL
3254841600,3254841855,IE
3254841856,3254842111,LV
-3254842624,3254842879,RU
3254842880,3254843135,SE
3254843136,3254843391,DE
3254843648,3254843903,FR
@@ -65831,7 +72922,6 @@
3254901760,3254902271,UA
3254902272,3254904831,SK
3254904832,3254907903,RU
-3254907904,3254908159,SK
3254908160,3254908415,CH
3254908416,3254908671,PL
3254908672,3254908927,MT
@@ -65841,34 +72931,30 @@
3254910976,3255044095,FR
3255044608,3255056383,FR
3255058432,3255067647,FR
-3255068672,3255114751,FR
+3255068672,3255081727,FR
+3255081984,3255114751,FR
3255115264,3255117823,FR
3255118336,3255120127,FR
3255120384,3255120639,FR
3255120640,3255120895,DE
3255120896,3255123711,FR
3255123712,3255123967,DE
-3255123968,3255127551,FR
+3255123968,3255125503,FR
+3255126016,3255127551,FR
3255127808,3255128575,FR
3255129856,3255130111,HR
-3255130112,3255146495,FR
+3255130112,3255134207,FR
+3255135232,3255146495,FR
3255148544,3255153151,FR
-3255153664,3255166975,FR
-3255167488,3255172351,FR
+3255153664,3255164927,FR
+3255166720,3255166975,FR
+3255167488,3255171071,FR
3255172352,3255172607,DE
3255172608,3255173119,FR
3255173120,3255173631,SH
3255173648,3255173711,GB
3255173760,3255173823,GB
-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
+3255173840,3255175167,GB
3255175200,3255175231,GB
3255175248,3255175263,GB
3255175280,3255175295,GB
@@ -65936,7 +73022,7 @@
3255304192,3255304447,DE
3255304448,3255305215,LV
3255305216,3255305471,BG
-3255305472,3255307775,LV
+3255305472,3255307263,LV
3255307776,3255308031,PL
3255308032,3255308287,CH
3255308288,3255311359,LV
@@ -66076,7 +73162,7 @@
3255562240,3255563263,CH
3255563776,3255564031,CH
3255564032,3255564287,RU
-3255564288,3255565311,CH
+3255564288,3255564799,CH
3255565312,3255565955,DE
3255565956,3255565956,CH
3255565957,3255566079,DE
@@ -66104,7 +73190,11 @@
3255743232,3255743487,IT
3255743488,3255743743,DE
3255743744,3255743999,US
-3255744000,3255762943,SE
+3255744000,3255745535,SE
+3255745536,3255745791,DK
+3255745792,3255752959,SE
+3255752960,3255753215,LI
+3255753216,3255762943,SE
3255762944,3255771135,DE
3255779328,3255791615,DE
3255791616,3255792639,UA
@@ -66121,8 +73211,11 @@
3255817472,3255817727,ES
3255817728,3255820287,DE
3255821312,3255822335,CH
-3255822336,3255828479,DE
-3255828480,3256025087,SE
+3255822336,3255826943,DE
+3255827456,3255828479,DE
+3255828480,3255939623,SE
+3255939624,3255939624,GB
+3255939625,3256025087,SE
3256025088,3256057855,NO
3256057856,3256082431,DK
3256082432,3256090623,LV
@@ -66161,7 +73254,6 @@
3256415232,3256415743,PL
3256415744,3256416255,UA
3256416256,3256416767,RS
-3256417024,3256417279,GB
3256417280,3256417791,NO
3256417792,3256418303,GB
3256418304,3256483839,DE
@@ -66174,7 +73266,6 @@
3256513280,3256524287,NL
3256524288,3256524799,DE
3256524800,3256528895,NL
-3256530688,3256530943,DE
3256530944,3256549375,NL
3256549376,3256614911,TR
3256614912,3256615935,FI
@@ -66233,6 +73324,7 @@
3256692736,3256693759,GR
3256694784,3256695807,DE
3256695808,3256696831,UA
+3256698368,3256698623,NL
3256699392,3256699647,GB
3256705024,3256705279,IE
3256705536,3256705791,BE
@@ -66254,7 +73346,6 @@
3256745984,3256778751,ES
3256778752,3256786943,CY
3256786944,3256787199,NL
-3256787200,3256787455,RO
3256787456,3256787711,DE
3256787712,3256787967,UA
3256787968,3256788223,PL
@@ -66298,7 +73389,9 @@
3256827136,3256827391,IS
3256827392,3256827647,GB
3256827648,3256827903,PL
-3256827904,3256864511,DE
+3256827904,3256844287,DE
+3256860672,3256863743,DE
+3256864256,3256864511,DE
3256864512,3256864767,CH
3256864768,3256870911,DE
3256870912,3256871167,RU
@@ -66316,7 +73409,8 @@
3256899584,3256915455,GB
3256915456,3256915711,RS
3256915712,3256915967,SE
-3256915968,3256945663,GB
+3256915968,3256944639,GB
+3256944896,3256945151,GB
3256945664,3256945919,SI
3256945920,3256946175,GB
3256946176,3256946431,RO
@@ -66352,8 +73446,7 @@
3256973312,3256973823,DE
3256973824,3256975359,IR
3256975360,3256988671,GB
-3256988672,3256988927,RU
-3256988928,3256989183,UA
+3256988672,3256989183,UA
3256989440,3256989695,GB
3256989696,3256989951,HU
3256989952,3256990207,PL
@@ -66368,12 +73461,14 @@
3257024512,3257032703,AU
3257032704,3257040895,GB
3257042944,3257051135,GB
-3257052160,3257057279,GB
+3257052160,3257052927,GB
+3257053184,3257057279,GB
3257058816,3257059071,PL
3257059072,3257092607,GB
3257092608,3257092863,RO
-3257092864,3257121535,GB
-3257121792,3257139199,GB
+3257092864,3257095167,GB
+3257097472,3257097983,GB
+3257098240,3257139199,GB
3257139200,3257139455,DK
3257139456,3257143295,GB
3257143296,3257143807,RU
@@ -66396,7 +73491,7 @@
3257181440,3257181695,PL
3257181696,3257181951,FR
3257182208,3257182463,PL
-3257182464,3257186303,GB
+3257182720,3257186303,GB
3257188352,3257196543,GB
3257196544,3257200639,LU
3257200640,3257204735,GB
@@ -66414,7 +73509,7 @@
3257303040,3257311231,PT
3257311232,3257335807,CH
3257335808,3257355775,DE
-3257356288,3257357311,DE
+3257356288,3257356799,DE
3257357312,3257357567,PT
3257357568,3257357823,SI
3257357824,3257371903,DE
@@ -66423,16 +73518,19 @@
3257372672,3257382911,DE
3257382912,3257383167,NL
3257383168,3257383679,DE
-3257383936,3257388799,DE
+3257383936,3257387007,DE
+3257388544,3257388799,DE
3257388800,3257389055,FR
3257389056,3257390079,DE
-3257390592,3257401343,DE
+3257390592,3257395199,DE
+3257396224,3257401343,DE
3257401344,3257453567,CH
3257453568,3257454591,RO
3257454592,3257455103,IT
3257455104,3257455359,RO
3257455360,3257455615,SI
-3257455616,3257466879,CH
+3257455616,3257461759,CH
+3257462016,3257466879,CH
3257466880,3257467135,DE
3257467392,3257467903,SE
3257467904,3257468927,IT
@@ -66442,8 +73540,7 @@
3257470976,3257471999,FI
3257472000,3257472511,SG
3257472512,3257475071,FI
-3257476096,3257477119,DE
-3257480192,3257480447,GB
+3257476864,3257477119,DE
3257481216,3257481471,GB
3257481472,3257481727,DE
3257481728,3257481983,FI
@@ -66468,9 +73565,7 @@
3257546688,3257546719,DE
3257546720,3257546751,DK
3257546752,3257548799,IE
-3257548800,3257555199,GB
-3257555200,3257555455,CH
-3257555456,3257556991,GB
+3257548800,3257556991,GB
3257557504,3257558015,LU
3257558016,3257559039,RO
3257559552,3257560063,UA
@@ -66505,23 +73600,42 @@
3257742336,3257743359,DE
3257743360,3257748479,NL
3257748480,3257749503,DE
-3257749504,3257753087,NL
-3257753088,3257753343,DE
-3257753344,3257759631,NL
-3257759632,3257759639,DE
-3257759640,3257765887,NL
+3257749504,3257765887,NL
3257765888,3257767935,DE
3257767936,3257782271,NL
3257782272,3257784319,DE
3257784320,3257794559,NL
3257794560,3257835519,GB
-3257835520,3257843711,IE
-3257843712,3257844735,GB
+3257835520,3257836287,IE
+3257836288,3257836543,GB
+3257836544,3257836799,IE
+3257836800,3257837055,GB
+3257837056,3257837311,IE
+3257837312,3257837567,GB
+3257837568,3257837823,IE
+3257837824,3257838335,GB
+3257838336,3257838591,IE
+3257838592,3257839103,GB
+3257839104,3257839359,IE
+3257839360,3257839615,GB
+3257839616,3257839871,IE
+3257839872,3257840127,GB
+3257840128,3257840383,IE
+3257840384,3257840639,GB
+3257840640,3257840895,IE
+3257840896,3257841151,GB
+3257841152,3257841407,IE
+3257841408,3257841663,GB
+3257841664,3257841919,IE
+3257841920,3257842943,GB
+3257842944,3257843199,IE
+3257843200,3257844735,GB
3257844736,3257860095,IE
3257860096,3257925631,SE
3257925632,3257925887,AT
3257925888,3257926143,SE
-3257926144,3257977855,AT
+3257926144,3257926399,AT
+3257926656,3257977855,AT
3257977856,3257978111,GB
3257978112,3257978367,SE
3257978368,3257978623,BG
@@ -66529,7 +73643,6 @@
3257978880,3257979135,FR
3257979136,3257979391,UA
3257979392,3257979647,GB
-3257979648,3257979903,DE
3257979904,3257980159,UA
3257980160,3257980415,SE
3257980416,3257980671,NL
@@ -66538,15 +73651,16 @@
3257981184,3257981439,GB
3257981440,3257981695,RU
3257981696,3257981951,PL
-3257981952,3257987327,AT
+3257986048,3257987327,AT
3257987328,3257987583,CZ
-3257987584,3257988095,AT
+3257987840,3257988095,AT
3257989120,3257991167,AT
-3257991168,3257995519,DE
+3257991168,3257995263,DE
3257996032,3258003967,DE
3258003968,3258004479,RU
-3258004480,3258018815,DE
-3258019328,3258021887,DE
+3258004992,3258018815,DE
+3258019328,3258019583,DE
+3258019840,3258021887,DE
3258021888,3258022911,RU
3258022912,3258023167,PL
3258023168,3258023423,DE
@@ -66555,12 +73669,12 @@
3258023936,3258056703,DE
3258057216,3258057471,CZ
3258058240,3258058495,RU
-3258058496,3258059007,RO
+3258058496,3258058751,RO
3258059008,3258059263,UA
3258059264,3258059519,RU
3258059520,3258059775,RO
3258062848,3258063103,RU
-3258063104,3258063871,CZ
+3258063360,3258063871,CZ
3258063872,3258064127,AT
3258064128,3258064383,FR
3258064384,3258065151,GB
@@ -66583,7 +73697,6 @@
3258070528,3258071295,GB
3258071296,3258071551,DK
3258071552,3258071807,DE
-3258071808,3258072063,GB
3258072064,3258072319,FR
3258072320,3258072575,PL
3258072576,3258072831,BE
@@ -66622,7 +73735,6 @@
3258084352,3258084607,GB
3258084608,3258084863,AT
3258084864,3258085119,PL
-3258085120,3258085375,LT
3258085376,3258085631,NL
3258085632,3258085887,DE
3258085888,3258086143,UA
@@ -66672,14 +73784,14 @@
3258103040,3258103295,SE
3258103296,3258103551,DE
3258103552,3258103807,AE
-3258104064,3258104319,GB
3258104320,3258104575,PL
3258104576,3258104831,DE
3258105088,3258105599,CZ
3258105600,3258105855,DE
3258105856,3258109951,CZ
3258109952,3258110207,DK
-3258110208,3258111487,CZ
+3258110208,3258110975,CZ
+3258111232,3258111487,CZ
3258111488,3258111743,PL
3258111744,3258118399,CZ
3258118400,3258118655,UA
@@ -66734,11 +73846,15 @@
3258368000,3258384383,KW
3258384384,3258385407,DE
3258386432,3258411007,DE
-3258411520,3258427647,DE
+3258411520,3258423295,DE
+3258424320,3258424575,DE
+3258424832,3258426367,DE
+3258427392,3258427647,DE
3258427648,3258427903,RO
3258427904,3258428159,DE
3258428416,3258449919,DE
-3258449920,3258486783,CH
+3258449920,3258468351,CH
+3258474496,3258486783,CH
3258486784,3258487807,LI
3258487808,3258503935,CH
3258503936,3258504191,PL
@@ -66750,11 +73866,12 @@
3258507008,3258515455,CH
3258515456,3258580991,FR
3258580992,3258646527,RU
-3258646528,3258691583,DE
+3258646528,3258660351,DE
+3258660864,3258681343,DE
+3258683136,3258691583,DE
3258691840,3258692351,AT
3258692352,3258692607,DE
3258692608,3258692863,FR
-3258692864,3258693119,DE
3258693120,3258693375,SI
3258693376,3258693631,DE
3258693632,3258693887,RU
@@ -66780,10 +73897,11 @@
3258732544,3258732799,SE
3258732800,3258733055,CH
3258733056,3258733311,RO
-3258733312,3258734591,GB
+3258733312,3258734079,GB
+3258734336,3258734591,GB
3258735104,3258735359,GB
3258736640,3258745855,GB
-3258746880,3258762751,GB
+3258746880,3258762239,GB
3258763264,3258764287,GB
3258764288,3258764543,DE
3258764800,3258765055,BE
@@ -66816,17 +73934,21 @@
3258796032,3258802175,GB
3258802176,3258806271,LU
3258806272,3258813439,GB
-3258814464,3258818047,GB
+3258814464,3258817535,GB
+3258817792,3258818047,GB
3258818048,3258818303,SE
3258818560,3258843135,GB
3258843136,3258843391,RU
-3258843648,3258847231,GB
+3258844672,3258847231,GB
3258848256,3258848767,GB
3258848768,3258849023,RO
3258849024,3258849279,DE
3258849280,3258859519,GB
3258859520,3258859775,BY
-3258859776,3258900479,GB
+3258859776,3258860031,GB
+3258860288,3258882047,GB
+3258883072,3258883327,GB
+3258884096,3258900479,GB
3258901504,3258902783,GB
3258903040,3258903295,FR
3258903296,3258903551,GB
@@ -66850,16 +73972,15 @@
3259226112,3259227391,RU
3259227392,3259227647,KZ
3259227648,3259236351,RU
-3259236352,3259236863,SE
-3259236864,3259237119,CH
-3259237120,3259237887,SE
+3259236352,3259237887,SE
3259237888,3259238143,FR
3259238144,3259243007,SE
3259243008,3259243519,AT
3259243520,3259244543,US
3259244544,3259246591,SE
3259246592,3259247615,IT
-3259247616,3259248127,SE
+3259247616,3259247871,LI
+3259247872,3259248127,SE
3259248128,3259248383,GB
3259248384,3259248895,SE
3259248896,3259249151,GB
@@ -66881,7 +74002,9 @@
3259285760,3259286015,GB
3259286016,3259290879,SE
3259290880,3259291135,US
-3259291136,3259297535,SE
+3259291136,3259293951,SE
+3259293952,3259294207,LI
+3259294208,3259297535,SE
3259297536,3259297791,GB
3259297792,3259301887,SE
3259301888,3259302143,DE
@@ -66912,7 +74035,9 @@
3259438080,3259438335,ES
3259438336,3259457279,SE
3259457280,3259457535,IT
-3259457536,3259470847,SE
+3259457536,3259466239,SE
+3259466240,3259466495,LI
+3259466496,3259470847,SE
3259470848,3259471871,US
3259471872,3259479807,SE
3259479808,3259480063,DK
@@ -66920,11 +74045,15 @@
3259480832,3259481087,ES
3259481088,3259490303,SE
3259490304,3259490815,IN
-3259490816,3259498495,SE
+3259490816,3259491071,SE
+3259491072,3259491327,LI
+3259491328,3259498495,SE
3259498496,3259541503,GB
3259541504,3259543551,NL
3259543552,3259760639,GB
-3259760640,3259814399,DE
+3259761152,3259767807,DE
+3259768064,3259787263,DE
+3259787520,3259814399,DE
3259814400,3259814655,AT
3259814656,3259816447,DE
3259816704,3259821055,DE
@@ -66933,8 +74062,7 @@
3259823104,3259823615,RO
3259823616,3259823871,NO
3259823872,3259824127,IE
-3259824128,3259825919,DE
-3259826176,3259891711,DE
+3259824128,3259891711,DE
3259891712,3259957247,BE
3259957248,3259958271,DE
3259958272,3259959295,RU
@@ -66977,7 +74105,6 @@
3260549376,3260549631,CH
3260549632,3260549887,DE
3260550144,3260550399,PL
-3260550400,3260550655,DE
3260550656,3260551167,RU
3260551168,3260553983,DE
3260553984,3260554239,GB
@@ -67030,8 +74157,7 @@
3260678144,3260743679,IL
3260743680,3260809215,IT
3260809216,3260874751,PL
-3260891136,3260893439,DK
-3260893440,3260894207,SE
+3260893184,3260894207,SE
3260894208,3260895231,AT
3260895232,3260898303,SE
3260898304,3260899327,ES
@@ -67041,7 +74167,7 @@
3260900608,3260901119,NL
3260901120,3260903423,DE
3260903424,3260906239,CH
-3260906240,3260906495,DE
+3260906368,3260906495,DE
3260906496,3260907519,PL
3260907520,3260915711,GB
3260915712,3260923903,UA
@@ -67072,10 +74198,11 @@
3261534720,3261534975,US
3261534976,3261539327,SE
3261539328,3261540351,SG
-3261540352,3261595647,SE
+3261540352,3261554175,SE
+3261554176,3261554431,DK
+3261554432,3261595647,SE
3261595648,3261599743,NL
-3261600768,3261627903,NL
-3261628160,3261632511,NL
+3261600768,3261632511,NL
3261633536,3261636095,NL
3261636352,3261643775,NL
3261644800,3261661183,NL
@@ -67088,9 +74215,7 @@
3261677568,3261685759,GB
3261685760,3261687807,DE
3261687808,3261689855,RO
-3261689856,3261690623,GB
-3261690624,3261690879,AU
-3261690880,3261691903,GB
+3261689856,3261691903,GB
3261691904,3261692997,NL
3261692998,3261692998,US
3261692999,3261694463,NL
@@ -67143,14 +74268,17 @@
3261797632,3261797887,RU
3261797888,3261798143,TR
3261798144,3261798399,RU
-3261798400,3261812735,AT
+3261798400,3261805567,AT
+3261805568,3261806591,DE
+3261806592,3261810687,AT
3261812736,3261812991,RU
-3261812992,3261816575,AT
+3261812992,3261815807,AT
+3261816064,3261816575,AT
3261816576,3261816831,DE
3261816832,3261820927,AT
3261820928,3261821183,RO
3261821184,3261821439,AT
-3261821440,3261821695,NL
+3261821440,3261821695,GB
3261821696,3261821951,UA
3261821952,3261822207,RU
3261822208,3261822463,UA
@@ -67163,21 +74291,19 @@
3261824000,3261824255,RU
3261824512,3261824767,FR
3261824768,3261825023,PT
-3261825024,3261837311,AT
-3261839360,3261855743,AT
+3261825280,3261855743,AT
3261857792,3261923327,CZ
3261923328,3261988863,NL
3261988864,3261989119,SE
-3261989120,3261989631,FI
-3261990144,3261990399,FI
+3261989120,3261989375,FI
3261990400,3261990655,UA
-3261990656,3261990911,FI
-3261992448,3261993215,FI
+3261992448,3261992703,FI
3261993472,3261993727,RU
-3261993728,3261995263,FI
+3261993728,3261993983,FI
+3261994752,3261995263,FI
3261995264,3261995519,DE
3261995520,3261995775,PL
-3261995776,3262005247,FI
+3261996800,3262005247,FI
3262005248,3262005759,PL
3262005760,3262006015,RU
3262006016,3262006271,NL
@@ -67191,20 +74317,17 @@
3262008576,3262008831,PL
3262008832,3262009087,AT
3262009088,3262009343,UA
-3262009344,3262010367,FI
-3262011392,3262013439,FI
+3262010112,3262010367,FI
3262013440,3262017535,SE
-3262017536,3262018559,FI
+3262018304,3262018559,FI
3262018560,3262018815,PL
-3262018816,3262019071,FI
-3262020096,3262021119,FI
3262021120,3262021375,UA
3262021376,3262021631,PL
3262021632,3262021887,CH
3262021888,3262022143,UA
3262022912,3262023167,DE
3262023680,3262023935,DK
-3262023936,3262025727,FI
+3262025216,3262025471,FI
3262027264,3262027519,TR
3262027520,3262027775,BE
3262027776,3262028287,RU
@@ -67295,10 +74418,11 @@
3262185472,3262191615,DE
3262192128,3262192383,DE
3262192640,3262196479,DE
-3262196736,3262203903,DE
-3262204928,3262224383,DE
+3262196736,3262200319,DE
+3262200576,3262218239,DE
+3262219264,3262224383,DE
3262224896,3262225151,AT
-3262225152,3262227711,DE
+3262225408,3262227455,DE
3262227712,3262227967,RO
3262227968,3262229247,DE
3262229248,3262229503,NL
@@ -67376,7 +74500,6 @@
3262461312,3262461439,NO
3262461440,3262461567,DE
3262461568,3262461695,GB
-3262461696,3262461823,UA
3262461824,3262461951,RO
3262461952,3262463999,IQ
3262464000,3262472191,RU
@@ -67456,7 +74579,9 @@
3262478308,3262478311,ES
3262478312,3262478319,DE
3262478320,3262478323,GB
-3262478324,3262478389,DE
+3262478324,3262478345,DE
+3262478346,3262478346,PT
+3262478347,3262478389,DE
3262478390,3262478390,ES
3262478391,3262478404,DE
3262478405,3262478405,GB
@@ -67490,7 +74615,6 @@
3262480384,3262488575,GB
3262488576,3262496767,SE
3262496768,3262504959,FR
-3262504960,3262505471,DE
3262505472,3262505983,GB
3262505984,3262506495,PL
3262506496,3262507007,RO
@@ -67502,11 +74626,7 @@
3262511104,3262511615,GB
3262512128,3262512639,UA
3262512640,3262513151,DE
-3262513152,3262550271,AT
-3262550272,3262550527,DE
-3262550528,3262562815,AT
-3262562816,3262563071,HU
-3262563072,3262578687,AT
+3262513152,3262578687,AT
3262578688,3262611455,FR
3262611456,3262627839,GB
3262627840,3262636031,IT
@@ -67515,9 +74635,7 @@
3262648320,3262648575,DE
3262648576,3262654463,NL
3262654464,3262654719,DE
-3262654720,3262658967,NL
-3262658968,3262658975,DE
-3262658976,3262664703,NL
+3262654720,3262664703,NL
3262664704,3262670847,DE
3262670848,3262690815,NL
3262690816,3262691583,DE
@@ -67525,9 +74643,7 @@
3262693376,3262701567,DE
3262701568,3262715135,NL
3262715136,3262715391,DE
-3262715392,3262718463,NL
-3262718464,3262718471,DE
-3262718472,3262722815,NL
+3262715392,3262722815,NL
3262722816,3262723071,DE
3262723072,3262732799,NL
3262732800,3262733055,DE
@@ -67538,7 +74654,8 @@
3262840320,3262906367,NL
3262906368,3262954495,CH
3262954496,3262955519,LI
-3262955520,3262964991,CH
+3262955520,3262958591,CH
+3262959104,3262964991,CH
3262964992,3262965247,DE
3262965248,3262971903,CH
3262971904,3263029247,IE
@@ -67557,7 +74674,6 @@
3263062016,3263070207,EE
3263070208,3263070719,FR
3263070720,3263070975,NL
-3263070976,3263071487,DE
3263072256,3263074303,LB
3263074304,3263074815,CH
3263074816,3263075327,RO
@@ -67573,7 +74689,7 @@
3263085568,3263086591,CH
3263086592,3263086847,DK
3263086848,3263087103,NL
-3263087104,3263087871,DE
+3263087360,3263087871,DE
3263087872,3263088127,SI
3263088128,3263088383,DE
3263088384,3263088639,LV
@@ -67599,12 +74715,12 @@
3263094784,3263095039,UA
3263095040,3263095295,ES
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
@@ -67632,11 +74748,13 @@
3263104042,3263121420,DE
3263121421,3263121421,BE
3263121422,3263131647,DE
-3263132672,3263137791,DE
+3263133184,3263133439,DE
+3263133696,3263137791,DE
3263137792,3263138303,PL
3263138304,3263138551,DE
3263138552,3263138815,AT
-3263138816,3263168511,DE
+3263138816,3263165439,DE
+3263166464,3263168511,DE
3263168512,3263430655,GB
3263430656,3263436543,SE
3263436544,3263436799,ES
@@ -67652,9 +74770,7 @@
3263478528,3263478783,ES
3263478784,3263480831,SE
3263480832,3263481855,JP
-3263481856,3263482879,SE
-3263482880,3263483903,IT
-3263483904,3263496191,SE
+3263481856,3263496191,SE
3263496192,3263501519,GB
3263501520,3263501527,IE
3263501528,3263503103,GB
@@ -67683,7 +74799,11 @@
3263692800,3263823871,FI
3263823872,3263826943,DE
3263826944,3263827199,AT
-3263827200,3263878145,DE
+3263827200,3263833855,DE
+3263833856,3263833903,GB
+3263833904,3263833919,DE
+3263833920,3263834111,GB
+3263834112,3263878145,DE
3263878146,3263878146,US
3263878147,3263886079,DE
3263886080,3263886335,SG
@@ -67692,7 +74812,8 @@
3263979520,3263987711,DE
3263987712,3264004095,ES
3264004096,3264012287,HU
-3264012544,3264013055,GB
+3264012544,3264012799,FR
+3264012800,3264013055,GB
3264013056,3264013311,TR
3264013312,3264013567,UA
3264013824,3264014079,NL
@@ -67746,18 +74867,15 @@
3264307200,3264311295,PL
3264311808,3264312063,DE
3264312064,3264312319,CH
-3264312320,3264312575,PL
3264312576,3264312831,UA
3264312832,3264313087,DE
3264313088,3264313343,NL
3264313344,3264313599,RO
3264313600,3264313855,PT
3264313856,3264314623,DE
-3264314624,3264314879,SE
3264314880,3264315135,GB
3264315392,3264317439,IE
3264318464,3264318975,ES
-3264318976,3264319487,DE
3264319488,3264319743,FR
3264319744,3264319999,SE
3264320000,3264320255,DE
@@ -67765,7 +74883,6 @@
3264321024,3264321535,DE
3264321792,3264322047,RS
3264322048,3264322303,FR
-3264322304,3264322559,RO
3264322560,3264322815,HU
3264322816,3264323071,CH
3264323072,3264323327,RU
@@ -67808,7 +74925,8 @@
3264345088,3264346111,NL
3264346112,3264347135,SE
3264347136,3264348159,DE
-3264348672,3264372223,FR
+3264348160,3264360191,FR
+3264360448,3264372223,FR
3264372736,3264375039,FR
3264375040,3264376063,SE
3264376064,3264376319,HR
@@ -67852,26 +74970,28 @@
3264411648,3264413695,PL
3264417536,3264419327,CH
3264423424,3264428031,CH
-3264430592,3264431103,CH
+3264430592,3264430847,CH
3264431104,3264431615,LI
3264431616,3264431871,CH
3264432128,3264434687,CH
3264434944,3264438783,CH
3264439296,3264439551,CH
-3264439808,3264441343,CH
+3264439808,3264440831,CH
3264441344,3264441599,PL
-3264442112,3264444415,CH
-3264444672,3264444927,CH
+3264442368,3264444415,CH
3264444928,3264445183,DE
3264445184,3264445439,CH
3264447488,3264447743,CH
3264447744,3264447999,DE
-3264448000,3264452607,CH
+3264448000,3264448511,CH
+3264449536,3264450047,CH
+3264450304,3264452607,CH
3264454656,3264456191,CH
3264456704,3264463871,CH
3264463872,3264466943,LI
3264466944,3264474623,CH
-3264474880,3264476671,CH
+3264475136,3264475391,CH
+3264476416,3264476671,CH
3264476672,3264477183,RU
3264477184,3264477439,PL
3264477440,3264477695,RU
@@ -67912,7 +75032,7 @@
3264624640,3264624671,US
3264624672,3264626687,GB
3264626688,3264627711,EE
-3264628736,3264630783,UA
+3264628736,3264629759,UA
3264630784,3264631807,DE
3264631808,3264632831,RO
3264632832,3264633855,RU
@@ -68038,19 +75158,16 @@
3264846208,3264846335,AE
3264846336,3264846463,GB
3264846464,3264846591,NO
-3264846592,3264846719,US
3264846720,3264846847,RU
3264846848,3264846911,DK
3264846912,3264847103,CY
3264847168,3264847199,IE
-3264847200,3264847231,NO
3264847232,3264847263,CH
3264847264,3264847295,LI
3264847296,3264847359,CY
3264847488,3264847615,RU
3264847616,3264847679,PL
3264847680,3264847743,FI
-3264847744,3264847807,BE
3264847808,3264847871,SE
3264847872,3264849919,DE
3264849920,3264850431,GB
@@ -68078,24 +75195,29 @@
3264921600,3264929791,LU
3264929792,3264937983,SK
3264937984,3265003519,GB
-3265003520,3265018879,DE
+3265003520,3265006591,DE
+3265007616,3265018879,DE
3265018880,3265019903,HK
3265036288,3265042943,DE
-3265043456,3265045759,DE
+3265043456,3265044991,DE
+3265045504,3265045759,DE
3265045760,3265046015,TR
-3265046016,3265055231,DE
+3265046016,3265048575,DE
+3265050624,3265054719,DE
3265055232,3265055743,FR
3265055744,3265069055,DE
3265069056,3265134591,FI
3265134592,3265137983,CH
3265137984,3265138047,NL
-3265138048,3265138863,CH
+3265138048,3265138599,CH
+3265138600,3265138607,NL
+3265138608,3265138863,CH
3265138864,3265138879,SE
3265138880,3265139999,CH
3265140000,3265140015,BE
-3265140016,3265140991,CH
-3265140992,3265141247,GB
-3265141248,3265141551,CH
+3265140016,3265141135,CH
+3265141136,3265141151,GB
+3265141152,3265141551,CH
3265141552,3265141555,IE
3265141556,3265141759,CH
3265141760,3265141775,GB
@@ -68125,7 +75247,7 @@
3265371136,3265376255,DE
3265377280,3265378303,GB
3265378304,3265379327,NL
-3265380352,3265382399,GB
+3265380352,3265382911,GB
3265386496,3265386751,NL
3265387008,3265387263,NL
3265388544,3265392639,GB
@@ -68137,7 +75259,6 @@
3265593344,3265594367,RU
3265594880,3265595391,UA
3265595392,3265595903,PL
-3265595904,3265596415,RU
3265596416,3265596927,GB
3265596928,3265597439,FR
3265597440,3265599999,RU
@@ -68149,7 +75270,6 @@
3265602048,3265602303,NL
3265602560,3265602815,IT
3265602816,3265603071,IE
-3265603072,3265603327,DK
3265603328,3265603583,MD
3265603584,3265603839,DE
3265603840,3265604095,PL
@@ -68184,7 +75304,8 @@
3265824768,3265825023,US
3265825024,3265877247,GB
3265877504,3265879039,GB
-3265880064,3265887487,GB
+3265880064,3265886207,GB
+3265887232,3265887487,GB
3265887488,3265887743,PT
3265887744,3265888255,PL
3265888256,3265902335,GB
@@ -68214,7 +75335,6 @@
3265911808,3265912063,PL
3265912064,3265912319,GB
3265912320,3265912575,DE
-3265912576,3265912831,RO
3265912832,3265913087,CZ
3265913088,3265913343,SE
3265913344,3265914367,PL
@@ -68297,17 +75417,18 @@
3266420736,3266428927,GB
3266428928,3266437119,GR
3266437120,3266445311,GL
-3266445312,3266472959,NL
-3266472960,3266473215,SE
-3266473216,3266510847,NL
+3266445312,3266510847,NL
3266510848,3266543615,ES
3266543616,3266576383,IT
3266576384,3266582783,DE
3266583040,3266588927,DE
-3266589184,3266603519,DE
-3266604032,3266617327,DE
+3266589440,3266603007,DE
+3266603264,3266603519,DE
+3266604032,3266617279,DE
+3266617312,3266617327,DE
3266617328,3266617343,GB
-3266617344,3266634383,DE
+3266617344,3266621439,DE
+3266624512,3266634383,DE
3266634392,3266634399,EE
3266634400,3266634431,DE
3266634464,3266634751,DE
@@ -68318,9 +75439,7 @@
3266772992,3266781183,IT
3266781184,3266789375,PL
3266789376,3266797567,SM
-3266797568,3266797823,GB
-3266797824,3266798079,ES
-3266798080,3266805759,GB
+3266797568,3266805759,GB
3266805760,3266813951,AT
3266813952,3266822143,UA
3266822144,3266830335,FR
@@ -68406,6 +75525,7 @@
3267537920,3267538943,FR
3267549184,3267550207,DK
3267559424,3267624959,DE
+3267628400,3267628415,FR
3267630080,3267631095,GB
3267631096,3267631103,IT
3267631104,3267631615,GB
@@ -68413,11 +75533,19 @@
3267636864,3267636991,ZA
3267648320,3267648335,GB
3267650320,3267650335,AT
+3267657576,3267657583,RO
+3267657696,3267657703,RO
+3267657712,3267657727,RO
3267660608,3267660671,ES
+3267661904,3267661967,ES
+3267662896,3267662911,IE
3267665920,3267666943,GB
3267667456,3267667967,GB
3267670016,3267671039,ZA
3267674208,3267674239,GB
+3267681312,3267681327,FR
+3267681888,3267681903,FR
+3267683936,3267683967,PL
3267684352,3267684863,GB
3267690496,3267691519,FI
3267691520,3267692543,SE
@@ -68449,7 +75577,7 @@
3268223200,3268223231,GB
3268224768,3268225023,US
3268226368,3268226399,GB
-3268226496,3268226663,GB
+3268226496,3268226655,GB
3268226688,3268226815,GB
3268227328,3268227391,GB
3268227520,3268227615,GB
@@ -68471,12 +75599,13 @@
3268235520,3268235775,GB
3268235936,3268236031,GB
3268236192,3268236207,GB
-3268236544,3268236607,GB
-3268236672,3268236799,GB
+3268236544,3268236799,GB
3268238336,3268238359,GB
3268238368,3268238399,GB
3268238472,3268238543,GB
-3268238552,3268238847,GB
+3268238552,3268238591,GB
+3268238608,3268238623,GB
+3268238632,3268238847,GB
3268239584,3268240127,GB
3268240160,3268240191,GB
3268240384,3268240399,GB
@@ -68501,9 +75630,7 @@
3268249600,3268251311,GB
3268251312,3268251327,IE
3268251328,3268251647,GB
-3268254464,3268254543,GB
-3268254592,3268254607,GB
-3268254624,3268254639,GB
+3268254464,3268254719,GB
3268254896,3268254903,GB
3268255824,3268255863,GB
3268255896,3268255919,GB
@@ -68562,9 +75689,7 @@
3268345856,3268411391,GB
3268411392,3268426751,AT
3268426752,3268427775,CH
-3268427776,3268463615,AT
-3268463616,3268463871,CH
-3268463872,3268464127,AT
+3268427776,3268464127,AT
3268464128,3268464383,LI
3268464384,3268476927,AT
3268476928,3268537087,CH
@@ -69005,8 +76130,9 @@
3271933440,3271933695,SE
3271933696,3271933951,DE
3271933952,3272015871,FR
-3272015872,3272017407,RO
-3272017664,3272018943,RO
+3272015872,3272016639,RO
+3272016896,3272017919,RO
+3272018176,3272018431,RO
3272019968,3272020991,IT
3272020992,3272024063,DK
3272024064,3272032255,IE
@@ -69233,15 +76359,15 @@
3272392704,3272400895,AT
3272400912,3272400919,GB
3272402432,3272402687,GB
-3272402688,3272402815,SE
3272403968,3272404991,FR
3272404992,3272406015,DE
3272406016,3272407039,NL
3272409088,3272417279,BE
-3272417280,3272418687,FR
-3272418688,3272419327,PL
+3272417280,3272418303,FR
+3272418304,3272418559,GB
+3272418560,3272418687,FR
+3272418816,3272419327,PL
3272419328,3272420351,DE
-3272420608,3272420863,DE
3272420864,3272420991,PL
3272420992,3272421119,DK
3272421376,3272421887,RO
@@ -69275,7 +76401,6 @@
3272479744,3272480255,SE
3272480256,3272480511,FR
3272480512,3272480767,CH
-3272480768,3272481023,DE
3272481024,3272481279,SE
3272481792,3272482047,IT
3272482048,3272482303,NL
@@ -69336,7 +76461,7 @@
3272884224,3272892415,DE
3272892416,3272892927,UA
3272893440,3272893951,SE
-3272893952,3272894463,UA
+3272893952,3272894463,RU
3272894976,3272895487,RO
3272895488,3272895999,GB
3272896000,3272896511,PL
@@ -69448,7 +76573,6 @@
3273261056,3273261567,NO
3273261568,3273262079,BE
3273262080,3273262591,LU
-3273262592,3273263103,RU
3273263616,3273264127,SE
3273264128,3273264639,PL
3273264640,3273265151,AT
@@ -69503,9 +76627,8 @@
3273333056,3273333119,DE
3273334272,3273334783,DE
3273334784,3273335039,AE
-3273335040,3273335295,DE
3273335296,3273335423,GB
-3273335432,3273335439,GB
+3273335432,3273335447,GB
3273335936,3273335999,DE
3273336848,3273336863,DE
3273336864,3273336871,GB
@@ -69639,17 +76762,14 @@
3273687040,3273719807,DE
3273719808,3273720831,NL
3273720832,3273720847,IE
-3273720848,3273726719,NL
-3273726720,3273726975,GB
-3273726976,3273727087,DK
+3273720848,3273727087,NL
3273727088,3273727088,GB
3273727089,3273727095,ES
-3273727096,3273727119,DK
+3273727096,3273727119,NL
3273727120,3273727127,PT
-3273727128,3273727135,DK
+3273727128,3273727135,NL
3273727136,3273727167,IT
-3273727168,3273727231,DK
-3273727232,3273732095,NL
+3273727168,3273732095,NL
3273732096,3273736191,GB
3273736192,3273744383,FR
3273744384,3273746943,GB
@@ -69660,7 +76780,9 @@
3273762304,3273762559,NL
3273762560,3273768959,DE
3273768960,3273785343,TR
-3273785344,3273801727,RU
+3273785344,3273792511,RU
+3273792512,3273793023,UZ
+3273793024,3273801727,RU
3273801728,3273802239,DE
3273802752,3273803263,SA
3273803776,3273804287,CH
@@ -69732,7 +76854,6 @@
3274051584,3274052351,UA
3274052352,3274052607,GB
3274052608,3274052863,DE
-3274052864,3274053119,GB
3274053120,3274053375,KZ
3274053376,3274053631,RU
3274053632,3274054655,DE
@@ -69751,7 +76872,6 @@
3274163200,3274163711,UA
3274163712,3274164223,BG
3274164224,3274164735,AT
-3274165248,3274165759,GB
3274165760,3274166271,RU
3274166272,3274166783,AT
3274166784,3274167295,UA
@@ -69811,7 +76931,6 @@
3274368512,3274368767,AT
3274368768,3274369023,FR
3274370048,3274371071,GB
-3274371072,3274373375,NL
3274373376,3274373631,PL
3274373632,3274374143,FR
3274374144,3274375167,DE
@@ -69940,8 +77059,7 @@
3274471680,3274471935,GB
3274472960,3274483711,GB
3274489600,3274489855,GB
-3274490176,3274490895,GB
-3274490912,3274491199,GB
+3274490176,3274491199,GB
3274491208,3274491247,GB
3274491256,3274491295,GB
3274491304,3274491319,GB
@@ -70003,7 +77121,6 @@
3274695424,3274695679,PL
3274695680,3274695935,SI
3274695936,3274696191,DE
-3274696192,3274696447,DK
3274696448,3274696703,CH
3274696704,3274696959,IT
3274696960,3274697215,GR
@@ -70041,11 +77158,7 @@
3274814464,3274815487,GB
3274815488,3274816511,RU
3274816512,3274817535,SK
-3274817536,3274819839,RU
-3274819840,3274820095,UA
-3274820096,3274821119,RU
-3274821120,3274821375,UA
-3274821376,3274821631,RU
+3274817536,3274821631,RU
3274821632,3274823679,KZ
3274823680,3274825727,TR
3274825728,3274827775,DE
@@ -70113,16 +77226,15 @@
3275415552,3275423743,UA
3275423744,3275423751,GB
3275423808,3275423839,GB
-3275423872,3275424735,GB
-3275424752,3275425343,GB
-3275425536,3275425559,GB
-3275425568,3275425583,GB
-3275425792,3275426559,GB
+3275423872,3275424719,GB
+3275424728,3275424735,GB
+3275424752,3275425311,GB
+3275425328,3275425343,GB
+3275425536,3275426559,GB
3275426576,3275428367,GB
3275428376,3275428407,GB
3275428416,3275428447,GB
3275429888,3275430143,GB
-3275430272,3275430399,GB
3275430592,3275430631,GB
3275430656,3275430911,GB
3275431936,3275432959,GB
@@ -70143,20 +77255,30 @@
3275443840,3275443967,GB
3275444224,3275444735,GB
3275446272,3275446783,GB
-3275446800,3275446823,GB
+3275446800,3275446815,GB
3275446848,3275447039,GB
3275447056,3275447151,GB
-3275448320,3275450207,GB
+3275448320,3275449359,GB
+3275449376,3275449399,GB
+3275449408,3275449519,GB
+3275449520,3275449527,FR
+3275449528,3275449567,GB
+3275449584,3275450207,GB
3275450224,3275450879,GB
3275451232,3275451263,GB
3275451392,3275451663,GB
3275451680,3275451711,GB
3275451720,3275451727,GB
3275451744,3275451767,GB
-3275452416,3275455231,GB
+3275451776,3275451779,GB
+3275452416,3275453695,GB
+3275453824,3275453839,GB
+3275453848,3275454063,GB
+3275454080,3275454127,GB
+3275454144,3275455231,GB
3275455248,3275456407,GB
-3275456416,3275457535,GB
-3275457536,3275457791,FK
+3275456416,3275457279,GB
+3275457280,3275457791,FK
3275457792,3275458559,GB
3275458560,3275460095,IE
3275460096,3275460223,GB
@@ -70172,20 +77294,18 @@
3275468768,3275468799,IE
3275468800,3275474951,GB
3275474960,3275475039,GB
-3275475044,3275476223,GB
-3275476288,3275476479,GB
-3275476656,3275476687,GB
-3275476704,3275476735,GB
+3275475044,3275475711,GB
+3275475720,3275475791,GB
+3275475800,3275475879,GB
+3275475968,3275476735,GB
3275476992,3275477567,GB
3275477760,3275478271,GB
3275478528,3275481087,GB
+3275481344,3275481599,GB
+3275482112,3275482367,GB
3275483136,3275483647,GB
3275484160,3275484415,GB
-3275485184,3275485215,GB
-3275485224,3275485231,GB
-3275485248,3275485375,GB
-3275485408,3275485423,GB
-3275485440,3275485759,GB
+3275485184,3275485759,GB
3275488768,3275489279,CZ
3275489280,3275497471,GB
3275497472,3275505663,DE
@@ -70225,7 +77345,6 @@
3275512320,3275512447,FI
3275512448,3275512575,DK
3275512576,3275512703,BE
-3275512704,3275512831,PL
3275512832,3275512895,SE
3275512896,3275512959,AT
3275512960,3275513023,PL
@@ -70241,7 +77360,6 @@
3275530240,3275530751,DK
3275530752,3275531263,AT
3275531264,3275531775,GB
-3275531776,3275532287,IE
3275532288,3275532799,UA
3275532800,3275533311,GB
3275533824,3275534335,UA
@@ -70422,30 +77540,24 @@
3275931648,3275939839,UA
3275939840,3275948031,GB
3275948032,3276013567,SE
-3276013568,3276014239,GB
-3276014240,3276014247,FR
-3276014248,3276014799,GB
+3276013568,3276014079,GB
+3276014080,3276014335,FR
+3276014336,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
+3276014960,3276020129,GB
3276020130,3276020130,FR
-3276020131,3276020735,GB
-3276020736,3276020991,FR
-3276020992,3276025159,GB
+3276020131,3276023039,GB
+3276023040,3276023295,FR
+3276023296,3276025159,GB
3276025160,3276025167,FR
3276025168,3276026367,GB
3276026368,3276026623,FR
-3276026624,3276027647,GB
-3276027648,3276027903,FR
-3276027904,3276029375,GB
-3276029376,3276029439,FR
+3276026624,3276027391,GB
+3276027392,3276027647,FR
+3276027648,3276029183,GB
+3276029184,3276029439,FR
3276029440,3276030591,GB
3276030592,3276030607,FR
3276030608,3276031479,GB
@@ -70460,11 +77572,13 @@
3276042016,3276042031,FR
3276042032,3276042079,GB
3276042080,3276042095,FR
-3276042096,3276042495,GB
-3276042496,3276042751,FR
-3276042752,3276045247,GB
+3276042096,3276042751,GB
+3276042752,3276043007,FR
+3276043008,3276045247,GB
3276045248,3276045255,FR
-3276045256,3276046335,GB
+3276045256,3276045823,GB
+3276045824,3276046079,FR
+3276046080,3276046335,GB
3276046336,3276062719,RU
3276062720,3276063231,PL
3276063232,3276063743,FR
@@ -70609,20 +77723,25 @@
3276455936,3276464127,BE
3276464128,3276472319,GR
3276473304,3276473311,AT
-3276480256,3276480511,FR
+3276474880,3276474927,IT
+3276478064,3276478095,CH
+3276478720,3276478975,FR
3276485632,3276486655,GB
+3276494336,3276494591,GB
+3276499504,3276499567,DE
3276503040,3276505087,DE
3276508680,3276508687,GB
-3276508928,3276509183,GB
3276509184,3276510207,IT
3276512256,3276513023,ZA
-3276517632,3276517887,NL
3276518368,3276518383,NL
+3276520704,3276520735,SE
3276522496,3276523519,NL
+3276524864,3276524895,PT
3276527616,3276527743,PK
+3276528128,3276528191,GB
3276528352,3276528359,GB
3276530688,3276531711,NL
-3276536688,3276536695,HU
+3276536752,3276536783,HU
3276537344,3276537599,AT
3276537856,3276668927,ES
3276668928,3276677119,MC
@@ -70713,42 +77832,33 @@
3276861184,3276861439,DE
3276861440,3276865535,DK
3276865536,3276866303,NL
-3276866304,3276866559,GB
-3276866560,3276866815,IT
-3276866816,3276870911,GB
-3276870912,3276871423,IT
-3276871424,3276873983,GB
+3276866304,3276870911,GB
+3276870912,3276871679,IT
+3276871680,3276873983,GB
3276873984,3276874239,ES
-3276874240,3276876383,GB
+3276874240,3276874959,GB
+3276874960,3276874975,NL
+3276874976,3276876383,GB
3276876384,3276876415,NL
-3276876416,3276882431,GB
-3276882432,3276882943,IT
-3276882944,3276883711,GB
-3276883712,3276883967,IT
-3276883968,3276886363,GB
+3276876416,3276883711,GB
+3276883712,3276883839,IT
+3276883840,3276886363,GB
3276886364,3276886367,DE
-3276886368,3276890111,GB
-3276890112,3276890367,US
-3276890368,3276892159,GB
+3276886368,3276892159,GB
3276892160,3276893183,IT
3276893184,3276893695,GB
3276893696,3276893951,IT
3276893952,3276898671,GB
3276898672,3276898687,CH
-3276898688,3276902141,GB
+3276898688,3276901613,GB
+3276901614,3276901614,CH
+3276901615,3276902141,GB
3276902142,3276902142,CH
3276902143,3276902655,GB
3276902656,3276902911,SE
-3276902912,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,3276911167,GB
+3276902912,3276907519,GB
+3276907520,3276907551,NL
+3276907552,3276911167,GB
3276911168,3276911199,IT
3276911200,3276911615,GB
3276911616,3276911871,IT
@@ -70770,9 +77880,7 @@
3276919488,3276919535,DE
3276919536,3276922879,GB
3276922880,3276923135,FR
-3276923136,3276923647,GB
-3276923648,3276924159,FR
-3276924160,3276925951,GB
+3276923136,3276925951,GB
3276925952,3276926207,FR
3276926208,3276931071,GB
3276931072,3276939263,KZ
@@ -70803,7 +77911,6 @@
3277178880,3277179135,ES
3277179392,3277179647,DE
3277179648,3277180159,BE
-3277180160,3277180415,NL
3277180416,3277180671,RU
3277180928,3277181183,UA
3277181184,3277181439,PL
@@ -70813,7 +77920,6 @@
3277182208,3277182463,RU
3277182464,3277182719,UA
3277182720,3277182975,BG
-3277182976,3277183231,UA
3277183232,3277183487,DE
3277183744,3277183999,UA
3277184000,3277184255,DE
@@ -70827,7 +77933,6 @@
3277186560,3277186815,PL
3277186816,3277187071,RU
3277187072,3277187327,GB
-3277187328,3277187583,UA
3277187584,3277188351,RU
3277188352,3277188607,DE
3277188608,3277188863,RU
@@ -70836,7 +77941,6 @@
3277189376,3277189631,PL
3277189632,3277189887,TR
3277189888,3277190143,PL
-3277190144,3277190399,SE
3277190400,3277190655,GB
3277190656,3277190911,BE
3277190912,3277191167,FR
@@ -70962,9 +78066,7 @@
3277389312,3277389823,AM
3277389824,3277394943,GB
3277394944,3277395455,US
-3277395456,3277402591,GB
-3277402592,3277402607,ES
-3277402608,3277403135,GB
+3277395456,3277403135,GB
3277403136,3277403215,FR
3277403216,3277403231,GB
3277403232,3277403279,FR
@@ -70972,15 +78074,13 @@
3277403296,3277403311,FR
3277403312,3277403327,GB
3277403328,3277403359,FR
-3277403360,3277403391,GB
-3277403392,3277403455,FR
+3277403360,3277403375,GB
+3277403376,3277403455,FR
3277403456,3277403647,GB
3277403648,3277403807,ES
3277403808,3277404159,GB
3277404160,3277404415,DE
-3277404416,3277404511,IT
-3277404512,3277404527,GB
-3277404528,3277404655,IT
+3277404416,3277404655,IT
3277404656,3277404671,GB
3277404672,3277404735,CH
3277404736,3277404927,GB
@@ -71007,7 +78107,7 @@
3277482496,3277483007,PL
3277483008,3277483519,IT
3277483520,3277484031,RO
-3277484032,3277486079,CH
+3277484032,3277484543,CH
3277486080,3277486591,GB
3277486592,3277487103,UA
3277487104,3277487615,RO
@@ -71077,13 +78177,13 @@
3277717504,3277725695,YE
3277725696,3277733887,CH
3277733888,3277742079,DE
-3277742080,3277746175,FI
+3277742080,3277745151,FI
+3277745152,3277746175,CH
3277746176,3277750271,GB
3277750272,3277766655,IT
3277766656,3277774847,PL
3277774848,3277783039,RU
3277783040,3277815807,BE
-3277815808,3277816063,RO
3277816064,3277816319,PL
3277816576,3277816831,GB
3277816832,3277817087,CH
@@ -71158,7 +78258,6 @@
3277843456,3277843967,PT
3277843968,3277845503,DK
3277845504,3277847039,NL
-3277847040,3277847551,DK
3277847552,3277848063,RU
3277848064,3277848575,RO
3277848576,3277856767,AT
@@ -71187,9 +78286,7 @@
3278061568,3278065663,NL
3278065664,3278110719,GB
3278110720,3278176255,SE
-3278176256,3278210559,FR
-3278210560,3278210815,MQ
-3278210816,3278241791,FR
+3278176256,3278241791,FR
3278241792,3278307327,GB
3278307328,3278372863,IT
3278372864,3278635007,GB
@@ -71234,7 +78331,9 @@
3278929920,3278938111,TR
3278938112,3278939611,DE
3278939612,3278939615,FR
-3278939616,3278940055,DE
+3278939616,3278939715,DE
+3278939716,3278939719,TR
+3278939720,3278940055,DE
3278940056,3278940059,SG
3278940060,3278940355,DE
3278940356,3278940359,NL
@@ -71382,7 +78481,6 @@
3279057408,3279057919,FR
3279058944,3279059455,UA
3279059456,3279060479,RU
-3279060480,3279060991,PL
3279060992,3279069183,UA
3279069184,3279077375,PL
3279077376,3279085567,ES
@@ -71409,7 +78507,9 @@
3279388672,3279396863,GR
3279421440,3279486975,IT
3279486976,3279552511,NL
-3279552512,3279560703,LV
+3279552512,3279559028,LV
+3279559029,3279559029,US
+3279559030,3279560703,LV
3279560704,3279568895,GB
3279568896,3279577087,IT
3279577088,3279585279,BE
@@ -71429,7 +78529,9 @@
3279601664,3279609855,CZ
3279609856,3279618047,RU
3279618048,3279683583,UA
-3279683584,3279946751,DE
+3279683584,3279794943,DE
+3279794944,3279795199,NO
+3279795200,3279946751,DE
3279946752,3279947775,SE
3279947776,3279948799,NL
3279949824,3279950847,UA
@@ -71566,7 +78668,6 @@
3280577792,3280578047,NL
3280578048,3280578303,RO
3280578304,3280578559,UA
-3280578560,3280578815,PL
3280578816,3280579071,NL
3280579072,3280579327,DE
3280579328,3280579583,RU
@@ -71717,7 +78818,7 @@
3280998656,3280999423,GB
3280999424,3280999679,HU
3280999680,3280999935,UA
-3280999936,3281000447,DE
+3280999936,3281000191,DE
3281000448,3281000703,FR
3281000704,3281000959,UA
3281000960,3281001215,SI
@@ -71757,7 +78858,7 @@
3281339648,3281339903,GB
3281339904,3281340159,UA
3281340160,3281340415,BG
-3281340416,3281340927,RO
+3281340416,3281340671,RO
3281340928,3281341183,DE
3281341184,3281341439,AT
3281341440,3281341695,DE
@@ -71770,7 +78871,7 @@
3281344000,3281344255,NL
3281344256,3281344511,RU
3281344512,3281344767,UA
-3281344768,3281345279,RU
+3281344768,3281345023,RU
3281345280,3281345535,SA
3281345536,3281345791,CH
3281346048,3281346303,SI
@@ -71948,7 +79049,6 @@
3282746112,3282746367,SE
3282746368,3282746623,PL
3282746624,3282746879,SE
-3282746880,3282747135,RO
3282747136,3282747391,PL
3282747392,3282763775,RU
3282763776,3282960383,GB
@@ -71959,10 +79059,8 @@
3283156992,3283173375,DE
3283173376,3283174399,PL
3283174400,3283176447,UA
-3283176448,3283177471,GB
3283177472,3283178495,BE
3283178496,3283179519,PL
-3283179520,3283180543,LU
3283180544,3283181567,UA
3283181568,3283182591,NO
3283182592,3283183615,PL
@@ -72020,7 +79118,6 @@
3283249152,3283249663,UA
3283249664,3283250175,RO
3283250176,3283250687,RU
-3283250688,3283251199,RO
3283251200,3283251711,FR
3283251712,3283252223,PL
3283252224,3283252735,BG
@@ -72048,11 +79145,9 @@
3283488256,3283488511,PL
3283488768,3283489279,FR
3283489280,3283489535,DE
-3283489536,3283489791,PL
3283489792,3283490047,RU
3283490048,3283490559,UA
3283490560,3283490815,PL
-3283490816,3283491071,CH
3283491072,3283491327,TR
3283491328,3283491583,AT
3283491584,3283491839,RO
@@ -72064,7 +79159,6 @@
3283493120,3283493375,IL
3283493376,3283493887,PL
3283493888,3283494143,DK
-3283494400,3283494655,PL
3283494656,3283494911,DK
3283494912,3283495167,PL
3283495168,3283495423,BG
@@ -72143,8 +79237,7 @@
3283944448,3283945471,AT
3283945472,3283946495,UA
3283946496,3283947519,GB
-3283947520,3283947775,UA
-3283947776,3283948543,RU
+3283947520,3283948543,RU
3283948544,3283949567,NL
3283949568,3283950591,SE
3283950592,3283951615,KZ
@@ -72196,7 +79289,6 @@
3283990016,3283990527,SE
3283991040,3283991551,RO
3283991552,3283992063,SE
-3283992064,3283992575,RO
3283992576,3283993087,IL
3283993088,3283993599,RO
3283993600,3283994111,UA
@@ -72255,10 +79347,14 @@
3284016384,3284016639,CH
3284016640,3284017151,DK
3284017152,3284025343,GR
-3284025344,3284030471,GB
+3284025344,3284029183,GB
+3284029184,3284029199,US
+3284029200,3284030471,GB
3284030472,3284030479,IL
3284030480,3284030495,FR
-3284030496,3284033535,GB
+3284030496,3284030615,GB
+3284030616,3284030623,SE
+3284030624,3284033535,GB
3284033536,3284041727,RU
3284041728,3284041983,DK
3284041984,3284042239,SI
@@ -72353,7 +79449,6 @@
3284108800,3284109311,FR
3284109312,3284109823,RU
3284109824,3284110335,UA
-3284110336,3284110847,RU
3284110848,3284111359,DK
3284111360,3284111871,SE
3284111872,3284112383,RU
@@ -72451,7 +79546,7 @@
3284717312,3284717567,DE
3284717568,3284717823,FR
3284717824,3284718079,RU
-3284718080,3284718591,GB
+3284718336,3284718591,GB
3284718592,3284718847,PL
3284718848,3284719103,RU
3284719104,3284719359,PL
@@ -72483,9 +79578,7 @@
3284811776,3284819967,KE
3284819968,3284828159,GB
3284828160,3284844543,AT
-3284844544,3284856063,CH
-3284856064,3284856191,DE
-3284856192,3284860927,CH
+3284844544,3284860927,CH
3284860928,3284926463,DE
3284926464,3284991999,NO
3284992000,3285057535,PL
@@ -72601,12 +79694,19 @@
3285453440,3285453567,GB
3285457072,3285457079,GB
3285461184,3285461215,NL
+3285461808,3285461839,NL
+3285463168,3285463199,LU
+3285465600,3285465855,GB
3285472256,3285472271,US
3285472272,3285472287,DE
3285472288,3285472511,US
+3285477136,3285477151,IT
3285480960,3285481215,CH
-3285501696,3285501951,GB
+3285495296,3285495807,ES
+3285501328,3285501359,CZ
3285510144,3285512191,GB
+3285515776,3285515799,GR
+3285515816,3285515823,GR
3285516288,3285516687,BE
3285516688,3285516691,NL
3285516692,3285517311,BE
@@ -72715,23 +79815,26 @@
3285913648,3285913655,IE
3285913656,3285913703,GB
3285913708,3285913711,FI
+3285913712,3285913719,GB
3285917696,3285917703,GB
-3285917712,3285917759,GB
+3285917712,3285917807,GB
+3285917952,3285918207,GB
3285919744,3285921791,QA
-3285922048,3285922303,FR
3285924912,3285924919,CH
+3285924920,3285924927,FI
+3285924928,3285924943,DE
3285925164,3285925171,CH
3285926432,3285926463,CH
3285926592,3285926623,DE
3285928304,3285928311,GB
3285931528,3285931535,DE
+3285934592,3285934847,ES
3285935872,3285936127,GB
3285939136,3285939175,GB
3285939184,3285939191,GB
3285939744,3285939759,GB
3285939840,3285939967,GB
3285941248,3285941503,ES
-3285946112,3285946367,ES
3285949856,3285949887,ES
3285950208,3285950463,IT
3285951648,3285951679,ES
@@ -72811,7 +79914,6 @@
3286355968,3286356991,DE
3286356992,3286358015,PL
3286358016,3286359039,GB
-3286359040,3286360063,PT
3286360064,3286361087,IT
3286361088,3286362111,UA
3286362112,3286363135,RU
@@ -72826,11 +79928,13 @@
3286403072,3286403327,GG
3286403328,3286404863,GB
3286404864,3286405375,GG
-3286405376,3286405887,GB
-3286405888,3286406143,GG
-3286406144,3286406399,GB
-3286406400,3286406655,GG
-3286406656,3286409215,GB
+3286405376,3286406399,GB
+3286406400,3286406911,GG
+3286406912,3286407167,GB
+3286407168,3286407423,GG
+3286407424,3286407679,GB
+3286407680,3286407935,GG
+3286407936,3286409215,GB
3286409216,3286417407,DE
3286417408,3286417663,UA
3286417664,3286417919,IT
@@ -72864,7 +79968,9 @@
3286425344,3286425599,IT
3286425600,3286433791,KW
3286433792,3286499327,DE
-3286499328,3286564863,HU
+3286499328,3286514431,HU
+3286514432,3286514687,RO
+3286514688,3286564863,HU
3286564864,3286566655,AE
3286566656,3286567423,KW
3286567424,3286630399,AE
@@ -72902,9 +80008,7 @@
3286662400,3286662655,UA
3286662656,3286662911,DE
3286662912,3286671359,UA
-3286671360,3286672639,AT
-3286672640,3286672895,HU
-3286672896,3286679551,AT
+3286671360,3286679551,AT
3286679552,3286695935,IT
3286695936,3286761471,DK
3286761472,3286773759,GB
@@ -72912,7 +80016,9 @@
3286777856,3286778111,GB
3286778112,3286781951,FR
3286781952,3286794239,GB
-3286794240,3286888447,DE
+3286794240,3286799103,DE
+3286799104,3286799359,IT
+3286799360,3286888447,DE
3286888448,3286889471,IE
3286889472,3286892543,DE
3286892544,3286893055,LI
@@ -72962,7 +80068,6 @@
3286917120,3286918143,RU
3286918144,3286919167,AT
3286919168,3286920191,DE
-3286920192,3286920447,RU
3286921216,3286922239,UA
3286922240,3286923263,GB
3286923264,3286924287,CM
@@ -72981,7 +80086,6 @@
3286929408,3286929663,LV
3286929664,3286929919,BE
3286929920,3286930175,SE
-3286930176,3286930431,RU
3286930432,3286930687,UA
3286930688,3286930943,DE
3286930944,3286931199,SE
@@ -73092,7 +80196,6 @@
3287218432,3287218687,GB
3287218688,3287218943,RU
3287218944,3287219199,FR
-3287219200,3287219455,DE
3287219456,3287219711,CH
3287219712,3287220223,SE
3287220224,3287285759,RU
@@ -73167,7 +80270,7 @@
3287465984,3287467007,DK
3287467008,3287468031,SA
3287468032,3287469055,UA
-3287469056,3287471103,DE
+3287469056,3287470079,DE
3287471104,3287472127,GB
3287472128,3287472639,RU
3287472640,3287473151,UA
@@ -73178,7 +80281,7 @@
3287479296,3287480319,RO
3287480320,3287481343,AT
3287481344,3287482367,PL
-3287482368,3287548927,DE
+3287482368,3287548415,DE
3287548928,3287549439,UA
3287549440,3287549951,SE
3287549952,3287550463,UA
@@ -73265,7 +80368,6 @@
3287675648,3287675903,DE
3287675904,3287676159,BE
3287676160,3287676415,DE
-3287676416,3287676671,RU
3287676672,3287676927,GB
3287676928,3287677183,ES
3287677184,3287677439,RU
@@ -73297,7 +80399,6 @@
3287728128,3287729407,IT
3287729664,3287729919,DK
3287729920,3287730175,HU
-3287731200,3287732223,DE
3287732224,3287734271,IT
3287734272,3287734527,PL
3287734528,3287734783,UA
@@ -73339,7 +80440,6 @@
3287830784,3287831039,GB
3287831040,3287831295,RU
3287831296,3287831551,CH
-3287831552,3287831807,RO
3287831808,3287832063,AT
3287832064,3287832319,FI
3287832320,3287832575,NL
@@ -73397,7 +80497,7 @@
3287954432,3287954687,CH
3287954688,3287954943,RO
3287954944,3287955199,PL
-3287955200,3287955711,RU
+3287955456,3287955711,RU
3287955712,3287955967,DE
3287955968,3287956223,SI
3287956224,3287956479,RO
@@ -73501,10 +80601,8 @@
3288466432,3288467455,SY
3288467456,3288469503,BI
3288469504,3288481791,ZA
-3288481792,3288482303,ZW
-3288482304,3288483071,ZA
-3288483072,3288483327,ZW
-3288483328,3288485631,ZA
+3288481792,3288482559,ZW
+3288482560,3288485631,ZA
3288485632,3288485887,ZW
3288485888,3288489983,MA
3288489984,3288514559,ZA
@@ -73559,9 +80657,7 @@
3288616960,3288617215,ZW
3288617216,3288661759,ZA
3288661760,3288662015,LS
-3288662016,3288727551,ZA
-3288727552,3288727807,MU
-3288727808,3288753919,ZA
+3288662016,3288753919,ZA
3288753920,3288754175,NG
3288758272,3288758527,EG
3288758528,3288772607,ZA
@@ -73582,7 +80678,9 @@
3288787968,3288788223,EG
3288788224,3288792831,ZA
3288792832,3288793087,AO
-3288793088,3289004031,ZA
+3288793088,3289002751,ZA
+3289002752,3289003007,AO
+3289003008,3289004031,ZA
3289004032,3289005055,NG
3289005056,3289005311,TZ
3289005312,3289014527,ZA
@@ -73602,7 +80700,8 @@
3289027584,3289027839,MZ
3289027840,3289041407,ZA
3289041408,3289041663,NG
-3289041664,3289044991,ZA
+3289041664,3289044735,ZA
+3289044736,3289044991,GH
3289044992,3289047039,ML
3289047040,3289048063,ZA
3289048064,3289048319,UG
@@ -73636,6 +80735,7 @@
3289108480,3289114367,ZA
3289114368,3289114623,NG
3289114624,3289115135,ZA
+3289115136,3289115391,AO
3289115392,3289120511,ZA
3289120512,3289120767,TZ
3289120768,3289123327,PR
@@ -73650,20 +80750,28 @@
3289169920,3289186303,MA
3289186304,3289212159,ZA
3289212160,3289212415,MZ
+3289212416,3289212927,NG
3289214976,3289215231,NG
3289215232,3289217279,ZA
3289217280,3289217535,KE
3289218560,3289220351,ZA
3289220352,3289220607,TZ
3289220608,3289221119,ZA
-3289221632,3289229311,ZA
+3289221120,3289221631,KE
+3289221632,3289227519,ZA
+3289227520,3289227775,NG
+3289227776,3289229311,ZA
3289229312,3289229567,SZ
-3289229824,3289230591,ZA
+3289229568,3289230591,ZA
+3289230592,3289230847,KE
3289233408,3289233919,ZA
3289233920,3289234175,TZ
3289234176,3289235199,ZA
3289235200,3289235455,KE
-3289237504,3289243391,ZA
+3289237504,3289237759,ZA
+3289238528,3289238783,AO
+3289238784,3289239039,ZA
+3289239552,3289243391,ZA
3289243392,3289243647,BI
3289243648,3289321471,ZA
3289321472,3289325567,IN
@@ -73754,9 +80862,11 @@
3290719232,3290955775,ZA
3290955776,3290980351,CR
3290980352,3290984447,ZA
+3290984448,3290988543,MZ
3290988544,3290992639,KE
3290992640,3290996735,GH
3290996736,3291000831,NG
+3291000832,3291004927,ZA
3291004928,3291021311,NG
3291021312,3291029503,ZA
3291029504,3291037695,TZ
@@ -73818,6 +80928,7 @@
3291215616,3291215871,BF
3291215872,3291216127,KE
3291216128,3291216383,LS
+3291216384,3291216639,ZA
3291216640,3291216895,NG
3291217920,3291230207,ZA
3291230208,3291234303,GH
@@ -73897,15 +81008,14 @@
3291546624,3291546879,SZ
3291546880,3291547135,TZ
3291547136,3291547391,AO
+3291547392,3291547647,RW
3291742208,3292004351,US
3292004352,3292266495,SC
3292397568,3292528639,ZA
3300917248,3300921343,MU
3300921344,3300925439,BJ
3300925440,3300929535,MG
-3300933632,3300935679,MU
-3300937728,3300938751,MU
-3300941824,3300950015,MU
+3300933632,3300950015,MU
3300953088,3300954111,MU
3300966400,3301113855,ZA
3301113856,3301146623,NG
@@ -73945,8 +81055,9 @@
3301471488,3301474047,NG
3301474048,3301474303,GH
3301474304,3301490687,MA
+3301490688,3301494783,ZA
3301494784,3301498879,ZM
-3301507328,3301507583,ZW
+3301507328,3301507583,MU
3301507584,3301507839,GH
3301507840,3301508095,EG
3301508608,3301509119,ZA
@@ -73993,6 +81104,7 @@
3302505472,3302506495,NA
3302506496,3302514687,KE
3302522880,3302523903,KE
+3302523904,3302525951,ZA
3302525952,3302526975,EG
3302526976,3302529023,NG
3302529024,3302530047,ZA
@@ -74023,8 +81135,8 @@
3302548992,3302549503,ZA
3302549504,3302550015,KE
3302550016,3302550527,TZ
-3302550528,3302551039,ZA
-3302551040,3302551551,MU
+3302550528,3302551295,ZA
+3302551296,3302551551,MU
3302551552,3302552063,EG
3302552064,3302552575,KE
3302552832,3302553087,KE
@@ -74035,7 +81147,6 @@
3302554368,3302554623,NG
3302554624,3302554879,EG
3302554880,3302555135,NG
-3302555136,3302555391,MU
3302555392,3302555647,NG
3302555648,3302621183,MA
3302621184,3302684671,EG
@@ -74048,6 +81159,7 @@
3302766592,3302768639,ZA
3302768640,3302776831,NG
3302776832,3302785023,ZW
+3302785024,3302793215,NG
3302801408,3302805503,NG
3302805504,3302809599,MW
3302809600,3302817791,NG
@@ -74085,16 +81197,13 @@
3302958080,3302958335,BI
3302958336,3302958591,SZ
3302958592,3302958847,DJ
+3302958848,3302959103,GA
3304062976,3304456191,SC
3304456192,3304521727,NG
3304521728,3304587263,SC
3304587264,3304718335,ZA
3304849408,3305111551,ZA
-3305111552,3305130239,TN
-3305130240,3305130495,GP
-3305130496,3305362687,TN
-3305362688,3305362943,GP
-3305362944,3307208703,TN
+3305111552,3307208703,TN
3307208704,3309305855,EG
3309305856,3312451583,ZA
3312451584,3312975871,DZ
@@ -74170,13 +81279,13 @@
3315463168,3315464191,SO
3315464192,3315465215,CD
3315465216,3315466239,CG
-3315466240,3315467263,MZ
-3315467264,3315467519,ZA
-3315467520,3315482623,MZ
+3315466240,3315482623,MZ
3315482624,3315499007,MG
3315499008,3315515391,ZM
3315515392,3315531775,SC
-3315531776,3315539967,CM
+3315531776,3315535871,CM
+3315535872,3315536127,TD
+3315536128,3315539967,CM
3315539968,3315548159,ZA
3315548160,3315552255,NG
3315552256,3315556351,GW
@@ -74194,9 +81303,7 @@
3317301248,3317432319,TZ
3317432320,3317497855,NA
3317497856,3317530623,CD
-3317530624,3317538815,LS
-3317538816,3317539071,ZA
-3317539072,3317547007,LS
+3317530624,3317547007,LS
3317547008,3317563391,ZA
3317563392,3317694463,GH
3317694464,3318218751,EG
@@ -74332,7 +81439,11 @@
3321790464,3321806847,LS
3321806848,3321823231,SD
3321823232,3321839615,NG
-3321839616,3321855999,GH
+3321839616,3321848831,GH
+3321848832,3321849855,ZA
+3321849856,3321850879,GH
+3321850880,3321851903,ZA
+3321851904,3321855999,GH
3321856000,3321860095,CV
3321860096,3321864191,ZA
3321864192,3321868287,NG
@@ -74461,14 +81572,14 @@
3323680329,3323680413,CA
3323680414,3323680414,US
3323680415,3323680511,CA
-3323680512,3323680767,US
-3323680768,3323681023,CA
-3323681024,3323681279,US
+3323680512,3323681279,US
3323681280,3323682955,CA
3323682956,3323682959,US
3323682960,3323684863,CA
3323684864,3323685375,US
-3323685376,3323685887,CA
+3323685376,3323685551,CA
+3323685552,3323685555,BY
+3323685556,3323685887,CA
3323685888,3323686399,US
3323686400,3323686911,CA
3323686912,3323687423,US
@@ -74476,7 +81587,7 @@
3323687936,3323687999,US
3323688000,3323688959,CA
3323688960,3323689199,US
-3323689200,3323689215,BY
+3323689200,3323689215,CA
3323689216,3323689471,US
3323689472,3323690495,CA
3323690496,3323741439,US
@@ -74603,11 +81714,7 @@
3324706304,3324706559,CA
3324706560,3324811047,US
3324811048,3324811055,AU
-3324811056,3324843775,US
-3324843776,3324843799,AU
-3324843800,3324843801,US
-3324843802,3324844031,AU
-3324844032,3324980223,US
+3324811056,3324980223,US
3324980224,3324981247,CA
3324981248,3325034495,US
3325034496,3325035519,NZ
@@ -74646,9 +81753,13 @@
3325211420,3325211423,US
3325211424,3325211647,CA
3325211648,3325211775,US
-3325211776,3325213687,CA
+3325211776,3325212647,CA
+3325212648,3325212655,US
+3325212656,3325213687,CA
3325213688,3325213695,US
-3325213696,3325216527,CA
+3325213696,3325216271,CA
+3325216272,3325216287,BY
+3325216288,3325216527,CA
3325216528,3325216531,US
3325216532,3325217939,CA
3325217940,3325217943,US
@@ -74664,7 +81775,11 @@
3325221452,3325221455,US
3325221456,3325221791,CA
3325221792,3325221795,FR
-3325221796,3325223647,CA
+3325221796,3325222203,CA
+3325222204,3325222207,BY
+3325222208,3325223083,CA
+3325223084,3325223087,BY
+3325223088,3325223647,CA
3325223648,3325223663,DE
3325223664,3325224671,CA
3325224672,3325224675,US
@@ -74678,7 +81793,9 @@
3325229592,3325229599,US
3325229600,3325230319,CA
3325230320,3325230323,US
-3325230324,3325231103,CA
+3325230324,3325230583,CA
+3325230584,3325230591,SN
+3325230592,3325231103,CA
3325231104,3325232127,US
3325233152,3325234175,US
3325234176,3325234431,SA
@@ -74706,9 +81823,10 @@
3325284864,3325285119,AU
3325285376,3325296383,US
3325296384,3325296639,CA
-3325296640,3325304063,US
-3325304064,3325304319,AS
-3325304320,3325304831,US
+3325296640,3325304127,US
+3325304128,3325304191,AS
+3325304192,3325304319,US
+3325304320,3325304831,AS
3325304832,3325307647,CA
3325307648,3325307903,BB
3325307904,3325313023,CA
@@ -74724,9 +81842,7 @@
3325438976,3325442559,MU
3325442560,3325443583,ZA
3325443584,3325444095,US
-3325444096,3325444351,MU
-3325444352,3325444607,ZA
-3325444608,3325448447,MU
+3325444096,3325448447,MU
3325448448,3325448959,US
3325448960,3325450239,MU
3325450240,3325451007,US
@@ -74808,7 +81924,9 @@
3326413824,3326414335,YE
3326414336,3326420991,US
3326420992,3326423039,PR
-3326423040,3326526463,US
+3326423040,3326499327,US
+3326499328,3326499583,IN
+3326499584,3326526463,US
3326526464,3326526719,CA
3326526720,3326613503,US
3326613504,3326615551,CA
@@ -74839,9 +81957,7 @@
3326738176,3326740479,US
3326741760,3326742015,US
3326742528,3326746623,US
-3326749184,3326796863,US
-3326796864,3326796927,GB
-3326796928,3326952191,US
+3326749184,3326952191,US
3326952192,3326952447,AS
3326952448,3326953983,US
3326953984,3326954495,AS
@@ -74947,7 +82063,11 @@
3328775936,3328788479,US
3328788480,3328789503,FR
3328789504,3328794623,US
-3328794624,3328802815,CA
+3328794624,3328801279,CA
+3328801280,3328801791,CZ
+3328801792,3328802047,CA
+3328802048,3328802303,DE
+3328802304,3328802815,AU
3328802816,3328826813,US
3328826814,3328826814,SG
3328826815,3329230335,US
@@ -75032,7 +82152,14 @@
3331102464,3331102719,CA
3331102720,3331194879,US
3331194880,3331260415,AU
-3331260416,3331356671,US
+3331260416,3331269375,US
+3331269376,3331269631,AU
+3331269632,3331269887,FR
+3331269888,3331270655,US
+3331270656,3331270911,FR
+3331270912,3331271423,US
+3331271424,3331271679,FR
+3331271680,3331356671,US
3331356672,3331357183,BZ
3331357184,3331362815,US
3331362816,3331366911,CA
@@ -75052,7 +82179,9 @@
3331632640,3331632895,CA
3331632896,3331633407,US
3331633408,3331633919,CH
-3331633920,3331647231,US
+3331633920,3331637247,US
+3331637248,3331638271,KR
+3331638272,3331647231,US
3331647232,3331647487,CA
3331647488,3331649279,US
3331649280,3331649535,CA
@@ -75069,9 +82198,7 @@
3331983360,3331988479,US
3331988480,3331989503,CA
3331989504,3332028415,US
-3332028416,3332028927,CA
-3332028928,3332029183,US
-3332029184,3332030463,CA
+3332028416,3332030463,CA
3332030464,3332083967,US
3332083968,3332084223,AU
3332084224,3332423423,US
@@ -75151,9 +82278,7 @@
3332898560,3332899071,US
3332899072,3332906495,CA
3332906496,3332909567,US
-3332909568,3332909823,CA
-3332909824,3332910079,US
-3332910080,3332922879,CA
+3332909568,3332922879,CA
3332922880,3332923391,US
3332923392,3332925695,CA
3332925696,3332929023,US
@@ -75184,16 +82309,21 @@
3333374976,3333375231,IN
3333375232,3333385983,US
3333385984,3333386239,JP
-3333386240,3333427967,US
+3333386240,3333396479,US
+3333396480,3333396689,GB
+3333396690,3333396691,US
+3333396692,3333396735,GB
+3333396736,3333427967,US
3333427968,3333428007,GB
3333428008,3333428008,US
3333428009,3333428223,GB
-3333428224,3333476607,US
-3333477376,3333480191,US
+3333428224,3333480191,US
3333480192,3333481471,DE
3333481472,3333517823,US
3333517824,3333518335,CA
-3333518336,3333583871,US
+3333518336,3333519359,US
+3333519360,3333521407,GB
+3333521408,3333583871,US
3333583872,3333584895,CA
3333584896,3333593855,US
3333593856,3333594111,CA
@@ -75275,7 +82405,7 @@
3335439616,3335439871,CH
3335439872,3335440383,US
3335440384,3335441151,CH
-3335441152,3335458815,US
+3335441152,3335456767,US
3335458816,3335460863,BM
3335460864,3335475199,US
3335475200,3335475455,DE
@@ -75291,7 +82421,9 @@
3336139776,3336140799,CA
3336140800,3336854015,US
3336854016,3336854271,CO
-3336854272,3336991231,US
+3336854272,3336896767,US
+3336896768,3336897023,VE
+3336897024,3336991231,US
3336991232,3336991487,CA
3336991488,3336993023,US
3336993024,3336993535,CA
@@ -75313,7 +82445,9 @@
3337055232,3337060351,CA
3337060352,3337069055,US
3337069056,3337069119,GB
-3337069120,3337289983,US
+3337069120,3337107711,US
+3337107712,3337107967,GB
+3337107968,3337289983,US
3337289984,3337293567,CA
3337293568,3337293823,US
3337293824,3337297919,CA
@@ -75464,12 +82598,18 @@
3338403840,3338424319,US
3338424320,3338428415,CA
3338428416,3338429439,US
-3338429440,3338429951,CA
+3338429440,3338429695,CA
+3338429696,3338429951,SG
3338429952,3338430719,US
-3338430720,3338432511,CA
+3338430720,3338430975,NL
+3338430976,3338431487,US
+3338431488,3338431743,CA
+3338431744,3338432255,US
+3338432256,3338432511,CA
3338432512,3338455039,US
3338455040,3338455295,GB
-3338455296,3338567679,US
+3338455296,3338541567,US
+3338542080,3338567679,US
3338567680,3338600447,CA
3338600448,3338686463,US
3338686464,3338688511,AW
@@ -75479,7 +82619,9 @@
3338825728,3338827775,AW
3338827776,3338912767,US
3338912768,3338913023,EC
-3338913024,3338935039,US
+3338913024,3338934015,US
+3338934016,3338934271,GB
+3338934272,3338935039,US
3338935040,3338935295,GB
3338935296,3338964991,US
3338964992,3338965247,CA
@@ -75581,9 +82723,7 @@
3339965440,3339968511,CA
3339968512,3339975935,US
3339975936,3339976191,CA
-3339976192,3339991807,US
-3339991808,3339992063,CA
-3339992064,3340080127,US
+3339976192,3340080127,US
3340080128,3340081151,CA
3340081152,3340084223,US
3340084224,3340085247,KN
@@ -75685,9 +82825,7 @@
3341518848,3341520895,CA
3341520896,3341521663,US
3341521664,3341531135,CA
-3341531392,3341531647,US
-3341531648,3341531903,IN
-3341531904,3341534207,US
+3341531136,3341534207,US
3341534976,3341537279,CA
3341537280,3341546239,US
3341546240,3341547007,CA
@@ -75752,7 +82890,8 @@
3342517248,3342526463,US
3342526464,3342528511,CA
3342528512,3342543359,US
-3342543872,3342552063,US
+3342543872,3342548991,US
+3342551040,3342552063,US
3342552064,3342553087,CA
3342553088,3342565375,US
3342565376,3342567423,CA
@@ -75768,17 +82907,15 @@
3342603264,3342604799,US
3342604800,3342605311,CA
3342605312,3342605567,US
-3342605568,3342614271,CA
-3342614528,3342623743,CA
-3342624256,3342627839,CA
-3342628096,3342663423,CA
+3342605568,3342663423,CA
3342663680,3342831103,US
3342831104,3342831359,IN
3342831360,3343013887,US
3343013888,3343015935,CA
3343015936,3343055871,US
3343055872,3343056895,CA
-3343056896,3343129087,US
+3343056896,3343126015,US
+3343126528,3343129087,US
3343129600,3343153151,US
3343153152,3343154943,CA
3343154944,3343167487,US
@@ -75809,7 +82946,9 @@
3343465472,3343466495,JM
3343466496,3343470847,US
3343471104,3343557119,US
-3343557376,3343858687,US
+3343557376,3343649791,US
+3343649792,3343650815,VI
+3343650816,3343858687,US
3343858688,3343859199,VG
3343859200,3344111871,US
3344112128,3344116223,US
@@ -75837,7 +82976,9 @@
3344242176,3344242687,US
3344242688,3344255999,CA
3344256000,3344261631,US
-3344261888,3344266239,CA
+3344261888,3344263430,CA
+3344263431,3344263431,US
+3344263432,3344266239,CA
3344266240,3344266751,US
3344266752,3344268543,CA
3344268544,3344268799,GB
@@ -75882,9 +83023,7 @@
3344656384,3344658431,US
3344658432,3344660479,CA
3344660480,3344670719,US
-3344670720,3344671231,GP
-3344671232,3344671487,MF
-3344671488,3344671743,GP
+3344670720,3344671743,GP
3344671744,3344676863,US
3344676864,3344677407,CA
3344677408,3344677423,US
@@ -75979,7 +83118,9 @@
3345447680,3345448447,FR
3345448448,3345448703,BE
3345448704,3345448959,DE
-3345448960,3346140671,US
+3345448960,3345659903,US
+3345659904,3345660159,CA
+3345660160,3346140671,US
3346141184,3346188799,US
3346189312,3346196479,US
3346196480,3346197503,CA
@@ -76069,8 +83210,8 @@
3349545728,3349545983,US
3349545984,3349549567,CA
3349550080,3349551103,CA
-3349551104,3349553663,US
-3349553664,3349605375,CA
+3349551104,3349553407,US
+3349553408,3349605375,CA
3349605632,3349607423,CA
3349607936,3349608447,CA
3349608448,3349609471,US
@@ -76193,7 +83334,8 @@
3351043072,3351043583,FR
3351043584,3351044095,CA
3351044096,3351058943,US
-3351059456,3351071743,US
+3351059456,3351068159,US
+3351068672,3351071743,US
3351071744,3351072767,CA
3351072768,3351074815,US
3351074816,3351076863,CA
@@ -76201,8 +83343,10 @@
3351080960,3351081983,AG
3351081984,3351086079,US
3351086080,3351087103,CA
-3351087104,3351094527,US
-3351094528,3351095295,CA
+3351087104,3351094271,US
+3351094272,3351094527,CA
+3351094528,3351095039,US
+3351095040,3351095295,CA
3351095296,3351103487,US
3351103488,3351104511,CA
3351104512,3351104639,JP
@@ -76233,8 +83377,7 @@
3351306240,3351307263,VC
3351307264,3351308287,US
3351308288,3351310335,CA
-3351310336,3351318015,US
-3351318528,3351326719,US
+3351310336,3351326719,US
3351326720,3351328767,CA
3351328768,3351336959,US
3351336960,3351339007,CA
@@ -76242,7 +83385,9 @@
3351357440,3351359487,CA
3351359488,3351372799,US
3351372800,3351373823,BM
-3351373824,3351380223,US
+3351373824,3351376127,US
+3351376128,3351376383,PR
+3351376384,3351380223,US
3351380224,3351380479,CA
3351380480,3351380735,US
3351380736,3351381759,CA
@@ -76345,14 +83490,18 @@
3351475712,3351475967,IS
3351475968,3351483391,US
3351483392,3351484415,CA
-3351484416,3351485439,US
-3351485440,3351488511,CA
+3351484416,3351486463,US
+3351486464,3351488511,CA
3351488512,3351494911,US
3351494912,3351495679,SG
3351495680,3351495935,US
-3351495936,3351496191,SG
+3351495936,3351495989,SG
+3351495990,3351495990,US
+3351495991,3351496191,SG
3351496192,3351496447,US
-3351496448,3351496703,SG
+3351496448,3351496675,SG
+3351496676,3351496679,US
+3351496680,3351496703,SG
3351496704,3351497727,US
3351497728,3351498751,CA
3351498752,3351501823,US
@@ -76438,8 +83587,8 @@
3353731504,3353732607,US
3353732608,3353732863,DE
3353732864,3353736191,US
-3353736192,3353736703,PR
-3353736704,3353737215,US
+3353736192,3353736959,PR
+3353736960,3353737215,US
3353737216,3353737471,GB
3353737472,3353741823,US
3353742336,3353780223,US
@@ -76450,9 +83599,7 @@
3353861120,3353862143,CA
3353862144,3353862719,US
3353862720,3353862751,CA
-3353862752,3353864447,US
-3353864448,3353864703,CA
-3353864704,3353864959,US
+3353862752,3353864959,US
3353864960,3353865215,CA
3353865216,3353884927,US
3353884928,3353885183,GB
@@ -76482,7 +83629,9 @@
3354656768,3354663423,US
3354663936,3354676223,US
3354676224,3354677247,CA
-3354677248,3354687487,US
+3354677248,3354686975,US
+3354686976,3354687231,HK
+3354687232,3354687487,US
3354687488,3354688511,CA
3354688512,3354720767,US
3354721280,3354758655,US
@@ -76504,8 +83653,7 @@
3354972160,3354972415,CA
3354972416,3355012607,US
3355013120,3355017215,CA
-3355017216,3355052031,US
-3355052032,3355052287,CA
+3355017216,3355052287,US
3355052288,3355052543,AU
3355052544,3355053311,CA
3355053312,3355053567,US
@@ -76530,11 +83678,13 @@
3355385856,3355407359,US
3355407360,3355408383,PR
3355408384,3355412479,US
-3355412480,3355412991,BE
+3355412480,3355412607,BE
+3355412608,3355412735,US
+3355412736,3355412991,BE
3355412992,3355432959,US
3355432960,3355435007,CA
3355435008,3355443199,US
-3355443200,3355443200,GB
+3355443200,3355443200,CN
3355443201,3355445247,CO
3355445248,3355447295,BR
3355447296,3355447551,CU
@@ -76550,7 +83700,6 @@
3355459584,3355459839,PA
3355459840,3355460095,VE
3355460096,3355460351,CL
-3355460352,3355460607,BR
3355460608,3355460863,UY
3355460864,3355461887,BR
3355461888,3355463423,EC
@@ -76714,8 +83863,7 @@
3355870720,3355871231,CR
3355871232,3355873279,BR
3355873280,3355875327,BQ
-3355875328,3355876351,MX
-3355876352,3355877375,VE
+3355875328,3355877375,MX
3355877376,3355885567,CO
3355885568,3355901951,GT
3355901952,3355902975,BR
@@ -76899,7 +84047,10 @@
3356180480,3356190719,CL
3356190720,3356192767,DO
3356192768,3356194815,AR
-3356196864,3356229631,VE
+3356196864,3356201471,KY
+3356201472,3356201727,VE
+3356201728,3356213247,KY
+3356213248,3356229631,VE
3356229632,3356233727,BR
3356233728,3356237823,CL
3356237824,3356246015,GT
@@ -76969,7 +84120,7 @@
3356368896,3356369407,BR
3356369408,3356369663,EC
3356369664,3356369919,BR
-3356370176,3356370943,AR
+3356369920,3356370943,AR
3356370944,3356372991,CO
3356372992,3356375039,CU
3356377088,3356379647,CL
@@ -76988,13 +84139,13 @@
3356391168,3356391423,PA
3356393472,3356413439,CL
3356413440,3356413823,CO
-3356413824,3356420607,CL
-3356420608,3356420991,CO
-3356420992,3356421247,CL
+3356413824,3356420863,CL
+3356420864,3356421119,CO
+3356421120,3356421247,CL
3356421248,3356421375,CO
-3356421376,3356421759,CL
-3356421760,3356422015,CO
-3356422016,3356425471,CL
+3356421376,3356421631,CL
+3356421632,3356422143,CO
+3356422144,3356425471,CL
3356425472,3356425599,CO
3356425600,3356426239,CL
3356426240,3356427263,BR
@@ -77035,7 +84186,8 @@
3356988672,3356989439,MX
3356989952,3356996607,MX
3356996608,3356997631,BR
-3356997632,3357003007,MX
+3356997632,3356998911,MX
+3356999168,3357003007,MX
3357003776,3357007871,MX
3357007872,3357011967,BR
3357011968,3357015551,MX
@@ -77128,9 +84280,8 @@
3357451144,3357451151,HN
3357451152,3357451263,GT
3357451264,3357451519,HN
-3357451520,3357451575,GT
-3357451576,3357451583,NI
-3357451584,3357452287,GT
+3357451520,3357451775,NI
+3357451776,3357452287,GT
3357452288,3357452799,HN
3357452800,3357453055,NI
3357453056,3357453071,GT
@@ -77151,7 +84302,9 @@
3357457712,3357457727,CR
3357457728,3357458431,GT
3357458432,3357474815,CL
-3357474816,3357475071,US
+3357474816,3357475015,US
+3357475016,3357475019,AR
+3357475020,3357475071,US
3357475072,3357475887,AR
3357475888,3357475903,VE
3357475904,3357475999,AR
@@ -77198,7 +84351,9 @@
3357480360,3357480367,CO
3357480368,3357480463,AR
3357480464,3357480479,CO
-3357480480,3357480719,AR
+3357480480,3357480511,AR
+3357480512,3357480543,CO
+3357480544,3357480719,AR
3357480720,3357480735,CO
3357480736,3357480959,AR
3357480960,3357483007,EC
@@ -77213,7 +84368,9 @@
3357556992,3357557247,AR
3357557248,3357557759,MX
3357557760,3357558783,EC
-3357558784,3357559039,AR
+3357558784,3357558895,AR
+3357558896,3357558903,EC
+3357558904,3357559039,AR
3357559040,3357559295,EC
3357559296,3357559551,CA
3357559552,3357559807,US
@@ -77237,8 +84394,7 @@
3357607168,3357613055,MX
3357613056,3357613311,AR
3357613312,3357616127,MX
-3357616384,3357618943,MX
-3357619200,3357623039,MX
+3357616384,3357623039,MX
3357623040,3357623295,AR
3357623296,3357626623,MX
3357627392,3357627647,MX
@@ -77266,9 +84422,9 @@
3357715456,3357715711,MX
3357715968,3357723903,MX
3357724416,3357725183,MX
-3357725440,3357726463,MX
+3357725440,3357726719,MX
3357726720,3357727743,BR
-3357728000,3357728767,MX
+3357727744,3357728767,MX
3357728768,3357736959,BR
3357736960,3357745151,VE
3357745152,3357753343,CO
@@ -77280,7 +84436,11 @@
3357776128,3357776383,UY
3357776384,3357776895,US
3357776896,3357777919,CL
-3357777920,3357786111,GT
+3357777920,3357778415,GT
+3357778416,3357778423,SV
+3357778424,3357784319,GT
+3357784320,3357784335,SV
+3357784336,3357786111,GT
3357786112,3357802495,VE
3357802496,3357868031,MX
3357868032,3357933567,PE
@@ -77301,8 +84461,8 @@
3358132128,3358132135,CO
3358132136,3358132607,AR
3358132608,3358132735,CO
-3358132736,3358132991,AR
-3358132992,3358133119,EC
+3358132736,3358132975,AR
+3358132976,3358133119,EC
3358133120,3358133247,AR
3358133248,3358133759,VE
3358133760,3358142719,AR
@@ -77310,19 +84470,20 @@
3358142976,3358143231,CO
3358143232,3358143487,AR
3358143488,3358143999,US
-3358144000,3358144255,AR
+3358144000,3358144127,CL
+3358144128,3358144255,AR
3358144256,3358144511,CL
3358144512,3358145023,VE
3358145024,3358149631,AR
-3358149632,3358149887,CO
-3358149888,3358150015,AR
-3358150016,3358150143,CO
-3358150144,3358150423,AR
+3358149632,3358150399,CO
+3358150400,3358150423,AR
3358150424,3358150431,CO
3358150432,3358150479,AR
3358150480,3358150655,CO
3358150656,3358150911,EC
-3358150912,3358151263,AR
+3358150912,3358151039,AR
+3358151040,3358151167,EC
+3358151168,3358151263,AR
3358151264,3358151271,EC
3358151272,3358151423,AR
3358151424,3358151551,EC
@@ -77334,8 +84495,8 @@
3358152560,3358152575,PE
3358152576,3358152703,AR
3358152704,3358152959,US
-3358152960,3358153087,EC
-3358153088,3358153279,AR
+3358152960,3358153215,EC
+3358153216,3358153279,AR
3358153280,3358153311,US
3358153312,3358153343,AR
3358153344,3358153535,US
@@ -77363,10 +84524,16 @@
3358326784,3358392319,VE
3358392320,3358457855,AR
3358457856,3358523391,PA
-3358523392,3358529535,VE
+3358523392,3358525951,VE
+3358525952,3358526463,AR
+3358526464,3358529535,VE
3358529536,3358530303,AR
-3358530304,3358532607,VE
-3358532608,3358532863,AR
+3358530304,3358530943,VE
+3358530944,3358531071,AR
+3358531072,3358531583,VE
+3358531584,3358531839,AR
+3358531840,3358532351,VE
+3358532352,3358532863,AR
3358532864,3358534399,VE
3358534400,3358534655,AR
3358534656,3358535167,VE
@@ -77381,9 +84548,13 @@
3358549760,3358550015,AR
3358550016,3358553599,VE
3358553600,3358553855,AR
-3358553856,3358558463,VE
+3358553856,3358556159,VE
+3358556160,3358558463,AR
3358558464,3358558591,PY
-3358558592,3358562303,VE
+3358558592,3358559231,AR
+3358559232,3358560255,VE
+3358560256,3358561791,AR
+3358561792,3358562303,VE
3358562304,3358563327,PE
3358563328,3358564095,CO
3358564096,3358564351,MX
@@ -77429,24 +84600,19 @@
3358567392,3358567407,VE
3358567408,3358567423,AR
3358567424,3358568959,CO
-3358568960,3358570495,VE
+3358568960,3358569471,AR
+3358569472,3358570495,VE
3358570496,3358570751,MX
3358570752,3358571263,PE
3358571264,3358572543,MX
-3358572544,3358573055,VE
-3358573056,3358573311,AR
-3358573312,3358574847,VE
-3358574848,3358576127,AR
-3358576128,3358577151,VE
+3358572544,3358577151,AR
3358577152,3358577407,PE
-3358577408,3358577919,AR
-3358577920,3358578175,VE
-3358578176,3358578431,AR
+3358577408,3358578431,AR
3358578432,3358578687,VE
3358578688,3358579967,CO
3358579968,3358580223,AR
3358580224,3358580735,MX
-3358580736,3358588927,VE
+3358580736,3358588927,AR
3358588928,3358654463,PE
3358654464,3358658559,AR
3358658560,3358660607,CL
@@ -77479,9 +84645,7 @@
3358892032,3358918655,MX
3358918656,3358924799,BR
3358924800,3358965759,MX
-3358965760,3358966783,BR
-3358966784,3358967039,MX
-3358967040,3358973951,BR
+3358965760,3358973951,BR
3358973952,3358982143,MX
3358982144,3359047679,CL
3359047680,3359080447,AR
@@ -77535,7 +84699,9 @@
3359520768,3359522815,US
3359522816,3359539199,NI
3359539200,3359571967,PE
-3359571968,3359582207,AR
+3359571968,3359573759,AR
+3359573760,3359574015,US
+3359574016,3359582207,AR
3359582208,3359584255,PA
3359584256,3359586303,AR
3359586304,3359588351,CL
@@ -77574,7 +84740,9 @@
3360251904,3360253951,BO
3360253952,3360255999,SV
3360256000,3360260095,CL
-3360260096,3360276479,AR
+3360260096,3360260351,AR
+3360260352,3360260607,US
+3360260608,3360276479,AR
3360276480,3360278527,VE
3360278528,3360280575,EC
3360280576,3360282623,CL
@@ -77584,9 +84752,7 @@
3360342016,3360354303,VE
3360354304,3360356351,PA
3360356352,3360358399,CR
-3360358400,3360358911,CL
-3360358912,3360358919,CO
-3360358920,3360366591,CL
+3360358400,3360366591,CL
3360366592,3360382975,CO
3360382976,3360399359,VE
3360399360,3360403455,BO
@@ -77610,7 +84776,9 @@
3360707584,3360708095,US
3360708096,3360708223,AR
3360708224,3360708351,US
-3360708352,3360708991,AR
+3360708352,3360708479,AR
+3360708480,3360708735,US
+3360708736,3360708991,AR
3360708992,3360709247,US
3360709248,3360709631,AR
3360709632,3360709759,US
@@ -77626,7 +84794,9 @@
3360765952,3360767999,CO
3360768000,3360772351,AR
3360772352,3360772479,BO
-3360772480,3360781839,AR
+3360772480,3360780399,AR
+3360780400,3360780415,BR
+3360780416,3360781839,AR
3360781840,3360781847,DO
3360781848,3360781943,AR
3360781944,3360781947,MX
@@ -77653,9 +84823,7 @@
3361072640,3361072767,VE
3361072768,3361072895,CO
3361072896,3361073151,VE
-3361073152,3361074175,CO
-3361074176,3361074431,VE
-3361074432,3361079295,CO
+3361073152,3361079295,CO
3361079296,3361144831,CL
3361144832,3361210367,BO
3361210368,3361275903,DO
@@ -77704,18 +84872,22 @@
3362258944,3362324479,CL
3362324480,3362324735,AR
3362324736,3362324991,US
-3362324992,3362328063,AR
+3362324992,3362327039,AR
+3362327040,3362327551,US
+3362327552,3362328063,AR
3362328064,3362328575,US
3362328576,3362337279,AR
3362337280,3362338047,US
-3362338048,3362342143,AR
+3362338048,3362338559,AR
+3362338560,3362338815,US
+3362338816,3362339327,AR
+3362339328,3362339583,US
+3362339584,3362342143,AR
3362342144,3362342399,PA
3362342400,3362343423,AR
3362343424,3362343679,US
3362343680,3362344447,AR
-3362344448,3362344703,US
-3362344704,3362344959,AR
-3362344960,3362346751,US
+3362344448,3362346751,US
3362346752,3362348799,AR
3362348800,3362349055,US
3362349056,3362351103,CR
@@ -77729,8 +84901,7 @@
3362426880,3362428927,PA
3362428928,3362430975,CL
3362430976,3362447359,CO
-3362447360,3362447871,SV
-3362447872,3362448895,HN
+3362447360,3362448895,HN
3362448896,3362449151,SV
3362449152,3362449407,HN
3362449408,3362451199,SV
@@ -77760,7 +84931,13 @@
3362529280,3362537471,PA
3362537472,3362545663,AR
3362545664,3362549759,PE
-3362549760,3362553855,AR
+3362549760,3362551871,AR
+3362551872,3362551887,MX
+3362551888,3362552143,AR
+3362552144,3362552159,PR
+3362552160,3362553023,AR
+3362553024,3362553039,PR
+3362553040,3362553855,AR
3362553856,3362557951,PY
3362557952,3362562047,AR
3362570240,3362586623,UY
@@ -77893,7 +85070,9 @@
3368086528,3368087551,CR
3368087552,3370188799,BR
3370188800,3370196991,MX
-3370196992,3370487807,BR
+3370196992,3370214399,BR
+3370214400,3370215423,AR
+3370215424,3370487807,BR
3370487808,3370488831,CR
3370488832,3370489855,AR
3370489856,3370490879,VE
@@ -77901,7 +85080,9 @@
3370506240,3370507263,VE
3370507264,3370514943,BR
3370515456,3370516479,AR
-3370516480,3376873471,BR
+3370516480,3371106303,BR
+3371106304,3371122687,MX
+3371122688,3376873471,BR
3376881664,3376922623,BR
3376926720,3377291263,BR
3377295360,3377303551,BR
@@ -77917,21 +85098,28 @@
3380761088,3380761599,VE
3380761600,3380764671,BR
3380764672,3380808191,MX
+3380808192,3380808703,CR
3380808704,3380811775,MX
3380811776,3380813823,BR
3380813824,3380815103,MX
3380815104,3380815359,CR
+3380815360,3380815871,CL
3380815872,3380816127,MX
3380816128,3380816383,BO
3380816896,3380817151,MX
+3380817152,3380817407,BO
3380817920,3380818175,MX
+3380818176,3380818431,PA
3380818944,3380822527,MX
3380823040,3380824063,BR
-3380824064,3380826111,MX
+3380824064,3380824319,MX
+3380825088,3380825343,MX
+3380825344,3380825599,HT
3380826112,3380828159,BR
3380828160,3380828671,MX
3380829184,3380830207,BR
3380830208,3380830463,MX
+3380830464,3380830719,CO
3380831232,3380831743,MX
3380832256,3380832767,MX
3380833280,3380833791,MX
@@ -77939,6 +85127,7 @@
3380835328,3380835839,MX
3380836352,3380836607,MX
3380836608,3380836863,PE
+3380836864,3380837375,SV
3380837376,3380840447,MX
3380840448,3380843519,BR
3380843520,3380844543,PA
@@ -78062,9 +85251,7 @@
3384410112,3384672255,CL
3384672256,3384688639,HN
3384688640,3384705023,CO
-3384705024,3384705535,US
-3384705536,3384706047,PA
-3384706048,3384707071,US
+3384705024,3384707071,US
3384707072,3384721407,PA
3384721408,3384725503,US
3384725504,3384732415,PA
@@ -78151,7 +85338,9 @@
3387424768,3387555839,CO
3387555840,3387568127,AR
3387568128,3387572223,PE
-3387572224,3387573375,AR
+3387572224,3387572539,AR
+3387572540,3387572543,CO
+3387572544,3387573375,AR
3387573376,3387573759,CO
3387573760,3387574015,AR
3387574016,3387574143,CO
@@ -78159,7 +85348,9 @@
3387574784,3387575039,CO
3387575040,3387575295,AR
3387575296,3387575423,CO
-3387575424,3387575807,AR
+3387575424,3387575551,AR
+3387575552,3387575567,CO
+3387575568,3387575807,AR
3387575808,3387576063,CO
3387576064,3387576319,AR
3387576320,3387578367,EC
@@ -78268,7 +85459,8 @@
3389143040,3389145087,AU
3389145088,3389151231,HK
3389151232,3389152255,JP
-3389152256,3389153279,AU
+3389152256,3389153023,US
+3389153024,3389153279,AU
3389153280,3389161471,TV
3389161472,3389194239,JP
3389194240,3389195775,AU
@@ -78291,8 +85483,7 @@
3389214720,3389218815,NZ
3389218816,3389222911,AU
3389222912,3389223935,US
-3389223936,3389225983,IN
-3389225984,3389226239,SG
+3389223936,3389226239,IN
3389226240,3389226495,AU
3389226496,3389227007,IN
3389227008,3389227519,CN
@@ -78414,7 +85605,7 @@
3389458432,3389460479,AU
3389460480,3389464575,JP
3389464576,3389469695,NZ
-3389469696,3389471743,IN
+3389471232,3389471487,IN
3389471744,3389472767,NZ
3389472768,3389480959,AU
3389480960,3389489151,JP
@@ -78543,7 +85734,10 @@
3389812736,3389813759,AU
3389813760,3389814015,CN
3389814016,3389814527,TH
-3389814528,3389846527,AU
+3389814528,3389815295,AU
+3389816064,3389816575,AU
+3389816576,3389816831,US
+3389816832,3389846527,AU
3389846528,3389847551,JP
3389847552,3389849599,NZ
3389849600,3389915135,JP
@@ -78890,7 +86084,9 @@
3391954944,3391971327,HK
3391971328,3391979519,AU
3391979520,3391979775,HK
-3391979776,3391980031,JP
+3391979776,3391979955,CN
+3391979956,3391979957,JP
+3391979958,3391980031,CN
3391980032,3391980543,HK
3391980544,3391983615,MY
3391983616,3391984639,NP
@@ -78991,7 +86187,6 @@
3392416256,3392416767,HK
3392416768,3392417023,IN
3392417024,3392417535,AU
-3392417536,3392417791,HK
3392417792,3392418559,ID
3392418560,3392418815,SG
3392418816,3392419071,ID
@@ -79073,9 +86268,7 @@
3392692224,3392700415,IN
3392700416,3392708607,SG
3392708608,3392712703,ID
-3392712704,3392714751,AF
-3392714752,3392715007,FR
-3392715008,3392716799,AF
+3392712704,3392716799,AF
3392716800,3392733183,IN
3392733184,3392741375,ID
3392741376,3392765951,PH
@@ -79237,9 +86430,7 @@
3393189888,3393190911,CN
3393190912,3393191167,IN
3393191424,3393191935,SB
-3393191936,3393222911,HK
-3393222912,3393223167,MY
-3393223168,3393257471,HK
+3393191936,3393257471,HK
3393257472,3393260031,CN
3393260032,3393260543,BD
3393260544,3393265663,AU
@@ -79356,7 +86547,9 @@
3393855744,3393855999,NZ
3393856000,3393856255,AU
3393856256,3393856511,HK
-3393856768,3393857023,SG
+3393856768,3393856896,AU
+3393856897,3393856897,SG
+3393856898,3393857023,AU
3393857024,3393857535,NZ
3393857536,3393858047,HK
3393858304,3393858559,ID
@@ -79553,7 +86746,9 @@
3394760704,3394764799,ID
3394764800,3394772991,HK
3394777088,3394781183,JP
-3394781184,3394789375,MP
+3394781184,3394785023,MP
+3394785024,3394785279,US
+3394785280,3394789375,MP
3394789376,3394797567,HK
3394797568,3394813951,IN
3394813952,3394815999,JP
@@ -79603,7 +86798,7 @@
3394904320,3394904575,IN
3394904576,3394905087,AU
3394905088,3394905343,BN
-3394905344,3394906111,AU
+3394905600,3394906111,AU
3394906112,3394906367,IN
3394906368,3394906623,AU
3394906624,3394907135,IN
@@ -79611,7 +86806,6 @@
3394908160,3394910207,AU
3394910208,3394912255,NZ
3394912256,3394920447,PF
-3394920448,3394924543,IN
3394924544,3394928639,CN
3394928640,3394936831,PH
3394936832,3394940927,AU
@@ -79745,9 +86939,9 @@
3397070848,3397074943,PH
3397074944,3397083135,HK
3397083136,3397087231,CN
-3397091328,3397097471,GU
-3397097472,3397097855,MP
-3397097856,3397099519,GU
+3397091328,3397095679,GU
+3397095680,3397095935,MP
+3397095936,3397099519,GU
3397099520,3397103615,HK
3397103616,3397105663,LA
3397105664,3397107711,JP
@@ -79789,7 +86983,7 @@
3397213184,3397213439,IN
3397213440,3397213695,AU
3397213696,3397214207,ID
-3397214208,3397214719,MN
+3397214208,3397214719,BD
3397214720,3397215231,AU
3397215232,3397215743,ID
3397215744,3397216255,PH
@@ -79870,7 +87064,8 @@
3397500928,3397501951,BD
3397501952,3397503999,IN
3397504000,3397505023,TH
-3397505024,3397506559,IN
+3397505280,3397505535,IN
+3397506048,3397506559,IN
3397506560,3397506815,AU
3397506816,3397507071,IN
3397507072,3397507583,ID
@@ -79958,8 +87153,8 @@
3397878784,3397881855,JP
3397881856,3397882111,HK
3397882112,3397887999,JP
-3397888000,3397888768,IN
-3397888769,3397910527,JP
+3397888000,3397889023,IN
+3397889024,3397910527,JP
3397910528,3397918719,SG
3397918720,3397922815,AU
3397922816,3397926911,CN
@@ -80070,9 +87265,7 @@
3398639904,3398639907,MY
3398639908,3398640671,JP
3398640672,3398640695,SG
-3398640696,3398641407,JP
-3398641408,3398641663,MY
-3398641664,3398641919,JP
+3398640696,3398641919,JP
3398641920,3398642175,AU
3398642176,3398642431,JP
3398642432,3398642943,AU
@@ -80108,8 +87301,7 @@
3398830080,3398831103,KH
3398831104,3398831359,JP
3398831360,3398831615,HK
-3398831616,3398831871,SG
-3398831872,3398832127,JP
+3398831616,3398832127,JP
3398832128,3398840319,CN
3398840320,3398842367,JP
3398842368,3398843391,CN
@@ -80291,9 +87483,7 @@
3399995392,3399999487,KR
3399999488,3400000255,SG
3400000256,3400000511,AU
-3400000512,3400002303,SG
-3400002304,3400002367,HK
-3400002368,3400004607,SG
+3400000512,3400004607,SG
3400004608,3400004863,AU
3400004864,3400005119,SG
3400005120,3400005375,AU
@@ -80400,7 +87590,9 @@
3400433664,3400435711,HK
3400435712,3400435967,BD
3400435968,3400441855,HK
-3400441856,3400450047,NZ
+3400441856,3400446975,NZ
+3400446976,3400447231,GB
+3400447232,3400450047,NZ
3400450048,3400458239,JP
3400458240,3400466431,AU
3400466432,3400499199,MO
@@ -80428,7 +87620,9 @@
3400648832,3400649943,SG
3400649944,3400649951,HK
3400649952,3400650239,SG
-3400650240,3400654847,AU
+3400650240,3400650495,AU
+3400650496,3400650751,SG
+3400650752,3400654847,AU
3400654848,3400663039,IN
3400663040,3400683519,MY
3400683520,3400691711,JP
@@ -80476,7 +87670,8 @@
3401400320,3401404415,AU
3401404416,3401408511,CN
3401408512,3401416703,HK
-3401416704,3401420799,KR
+3401416704,3401416959,KR
+3401417728,3401420799,SG
3401420800,3401424895,JP
3401424896,3401428991,NZ
3401428992,3401431039,JP
@@ -80500,7 +87695,9 @@
3401545728,3401547775,BD
3401547776,3401580543,IN
3401580544,3402629119,CN
-3402629120,3405774847,JP
+3402629120,3402917631,JP
+3402917632,3402917887,US
+3402917888,3405774847,JP
3405774848,3405775871,AU
3405775872,3405776895,CN
3405776896,3405777407,AU
@@ -80698,8 +87895,6 @@
3406208512,3406208767,AU
3406208768,3406209023,CN
3406209024,3406221311,AU
-3406221824,3406222079,IN
-3406222592,3406222847,IN
3406223360,3406225407,AU
3406225408,3406229503,CN
3406229504,3406231039,AU
@@ -81009,7 +88204,9 @@
3406864640,3406865151,CN
3406865152,3406865663,AU
3406865664,3406865919,IN
-3406865920,3406871039,AU
+3406865920,3406869759,AU
+3406869760,3406870015,JP
+3406870016,3406871039,AU
3406871040,3406871551,CN
3406871552,3406881791,AU
3406881792,3406882047,CN
@@ -81056,7 +88253,9 @@
3406948352,3406948607,AU
3406948608,3406948863,CN
3406948864,3406950655,AU
-3406950656,3406951423,NF
+3406950656,3406950911,NF
+3406950912,3406951167,AU
+3406951168,3406951423,NF
3406951424,3406952447,AU
3406952448,3406952703,CN
3406952960,3406954239,AU
@@ -81361,8 +88560,8 @@
3407377408,3407377663,CN
3407377664,3407378943,AU
3407378944,3407379455,CN
-3407379456,3407382271,AU
-3407382272,3407382527,JP
+3407379456,3407382015,AU
+3407382016,3407382527,JP
3407382528,3407384831,AU
3407384832,3407385087,CN
3407385088,3407386623,AU
@@ -81436,7 +88635,11 @@
3407473408,3407473919,CN
3407473920,3407475199,AU
3407475200,3407475455,CN
-3407475456,3407481855,AU
+3407475456,3407481087,AU
+3407481088,3407481223,JP
+3407481224,3407481231,AU
+3407481232,3407481599,JP
+3407481600,3407481855,AU
3407481856,3407482111,CN
3407482112,3407487487,AU
3407487488,3407487743,CN
@@ -82101,7 +89304,9 @@
3409871616,3409871871,CN
3409871872,3409873663,AU
3409873664,3409873919,CN
-3409873920,3409876991,AU
+3409873920,3409875967,AU
+3409875968,3409876735,JP
+3409876736,3409876991,AU
3409876992,3409878015,TH
3409878016,3409879295,AU
3409879296,3409879551,CN
@@ -82299,7 +89504,7 @@
3411641344,3411642367,IN
3411642368,3411643391,CN
3411643392,3411644415,VN
-3411644416,3411644927,AU
+3411644672,3411644927,AU
3411644928,3411645951,ID
3411645952,3411646207,SG
3411646208,3411647487,IN
@@ -82478,7 +89683,8 @@
3413180416,3413213183,TH
3413213184,3413229567,VN
3413229568,3413245951,AU
-3413245952,3413262335,MY
+3413245952,3413251071,MY
+3413251072,3413262335,JP
3413262336,3413263359,PH
3413270528,3413278719,TH
3413278720,3413295103,NZ
@@ -82495,11 +89701,7 @@
3413327872,3413344255,IN
3413344256,3413360639,PH
3413360640,3413377023,MY
-3413377024,3413395199,SG
-3413395200,3413395455,AU
-3413395456,3413415935,SG
-3413415936,3413416191,AU
-3413416192,3413524479,SG
+3413377024,3413524479,SG
3413524480,3413540863,TH
3413540864,3413557247,NZ
3413557248,3413565439,CN
@@ -82577,7 +89779,9 @@
3413934080,3413946367,IN
3413946368,3413950463,AU
3413950464,3413966847,IN
-3413966848,3414050303,SG
+3413966848,3414024191,SG
+3414024192,3414024447,AU
+3414024448,3414050303,SG
3414050304,3414050559,US
3414050560,3414155519,SG
3414155520,3414155775,PH
@@ -82748,7 +89952,6 @@
3416262656,3416264703,AU
3416264704,3416268799,JP
3416268800,3416272895,HK
-3416274688,3416274943,MN
3416274944,3416276991,ID
3416276992,3416285183,HK
3416285184,3416287231,VN
@@ -82777,8 +89980,6 @@
3416372224,3416372479,CN
3416372480,3416372735,SG
3416372736,3416372991,AU
-3416373248,3416373503,AU
-3416373504,3416373759,SG
3416373760,3416374271,AU
3416374272,3416374527,PH
3416374528,3416374783,IN
@@ -82790,12 +89991,13 @@
3416474584,3416474599,AU
3416474600,3416474639,JP
3416474640,3416474647,NZ
-3416474648,3416475391,JP
-3416475392,3416475647,NZ
-3416475648,3416482047,JP
-3416482048,3416482303,SG
-3416482304,3416489727,JP
-3416489728,3416489983,AU
+3416474648,3416475439,JP
+3416475440,3416475455,NZ
+3416475456,3416482047,JP
+3416482048,3416482055,SG
+3416482056,3416489755,JP
+3416489756,3416489759,AU
+3416489760,3416489983,JP
3416489984,3416506367,VN
3416506368,3416514559,TW
3416514560,3416522751,IN
@@ -82803,8 +90005,8 @@
3416588288,3416653823,JP
3416653824,3416667135,AU
3416667136,3416667647,US
-3416667648,3416667775,AU
-3416667776,3416668159,US
+3416667648,3416667903,AU
+3416667904,3416668159,US
3416668160,3416686591,AU
3416686592,3416694783,SG
3416694784,3416702975,CN
@@ -82887,7 +90089,7 @@
3417014272,3417022463,JP
3417022464,3417030655,KR
3417030656,3417034751,AU
-3417034752,3417035775,IN
+3417035008,3417035775,IN
3417035776,3417036799,JP
3417036800,3417037823,ID
3417037824,3417038079,AU
@@ -82912,14 +90114,11 @@
3417182208,3417184767,AU
3417184768,3417185023,MN
3417185024,3417185279,AF
-3417185280,3417185535,AU
-3417185536,3417185791,SG
+3417185280,3417185791,SG
3417185792,3417186303,NZ
3417186304,3417194495,HK
3417194496,3417198591,JP
-3417198592,3417200127,SG
-3417200128,3417200383,AU
-3417200384,3417200639,SG
+3417198592,3417200639,SG
3417200640,3417202687,JP
3417202688,3417210879,CN
3417210880,3417227263,AU
@@ -83034,7 +90233,9 @@
3418243072,3418251263,PH
3418251264,3418255359,CN
3418255360,3418257407,ID
-3418257408,3418259455,HK
+3418257408,3418257663,HK
+3418257664,3418257919,AU
+3418257920,3418259455,HK
3418259456,3418267647,IN
3418267648,3418271743,VN
3418271744,3418273791,SG
@@ -83045,9 +90246,7 @@
3418282240,3418282495,AU
3418282496,3418283519,PH
3418283520,3418284031,AU
-3418284032,3418286847,SG
-3418286848,3418287103,AU
-3418287104,3418288127,SG
+3418284032,3418288127,SG
3418288128,3418290175,ID
3418290176,3418290431,IN
3418290432,3418290687,CN
@@ -83066,7 +90265,6 @@
3418301440,3418302463,AU
3418302464,3418304511,ID
3418304512,3418306559,VN
-3418306560,3418307583,MN
3418308608,3418324991,CN
3418324992,3418326015,VU
3418326016,3418326271,AU
@@ -83094,7 +90292,9 @@
3418403584,3418403839,AU
3418403840,3418406911,JP
3418406912,3418423295,IN
-3418423296,3418444091,HK
+3418423296,3418434559,HK
+3418434560,3418434815,SG
+3418434816,3418444091,HK
3418444092,3418444095,CN
3418444096,3418456063,HK
3418456064,3418472447,IN
@@ -83156,7 +90356,13 @@
3419078656,3419209727,TW
3419209728,3419226111,VN
3419226112,3419234303,CN
-3419234304,3419242495,JP
+3419234304,3419239935,JP
+3419239936,3419240447,US
+3419240448,3419240959,JP
+3419240960,3419241471,US
+3419241472,3419241983,JP
+3419241984,3419242239,US
+3419242240,3419242495,JP
3419242496,3419275263,CN
3419275264,3419340799,AU
3419340800,3419344895,TW
@@ -83233,8 +90439,8 @@
3419897856,3419899903,JP
3419899904,3419900159,FR
3419900160,3419900415,BE
-3419900416,3419901439,AU
-3419901440,3419901951,NZ
+3419900416,3419901567,AU
+3419901568,3419901951,NZ
3419901952,3419902207,AU
3419902208,3419902463,HK
3419902464,3419902719,CN
@@ -83313,15 +90519,12 @@
3422000536,3422000536,IN
3422000537,3422552063,KR
3422552064,3422850559,US
-3422850560,3422851071,GB
-3422851072,3422955519,US
+3422850560,3422850815,GB
+3422850816,3422955519,US
3422955520,3422956799,FR
-3422956800,3423092735,US
-3423092736,3423092767,VI
-3423092768,3423092783,US
-3423092784,3423092831,VI
-3423092832,3423092847,US
-3423092848,3423093759,VI
+3422956800,3423076351,US
+3423077376,3423092735,US
+3423092736,3423093759,VI
3423093760,3423094783,US
3423094784,3423095807,CA
3423095808,3423128575,US
@@ -83333,10 +90536,8 @@
3423182848,3423184895,CA
3423184896,3423204095,US
3423204096,3423204351,CA
-3423204352,3423222271,US
-3423222272,3423222527,CA
-3423222528,3423229951,US
-3423232000,3423236095,US
+3423204352,3423229951,US
+3423230976,3423236095,US
3423238144,3423248383,US
3423248384,3423249407,CA
3423249408,3423258623,US
@@ -83368,9 +90569,7 @@
3423468544,3423469567,CA
3423469568,3423473663,US
3423473664,3423474687,CA
-3423474688,3423480063,US
-3423480064,3423480319,AU
-3423480320,3423480831,US
+3423474688,3423480831,US
3423480832,3423480987,NG
3423480988,3423480988,US
3423480989,3423481343,NG
@@ -83440,15 +90639,16 @@
3424507136,3424507391,CA
3424507392,3425173503,US
3425173504,3425304575,CA
-3425304576,3425471487,US
-3425472512,3425697791,US
+3425304576,3425697791,US
3425697792,3425699839,CA
3425699840,3425711615,US
3425713152,3425714175,US
3425714176,3425722367,CA
3425722368,3425726463,US
3425728512,3425828863,US
-3425828864,3425894399,CA
+3425828864,3425869167,CA
+3425869168,3425869183,US
+3425869184,3425894399,CA
3425894400,3426013183,US
3426013184,3426013439,IL
3426013440,3426306559,US
@@ -83767,9 +90967,7 @@
3429171200,3429236735,CA
3429236736,3429382143,US
3429382144,3429382399,DE
-3429382400,3429401855,US
-3429401856,3429402111,CA
-3429402112,3429500927,US
+3429382400,3429500927,US
3429500928,3429502975,CA
3429502976,3429517407,US
3429517408,3429517411,HK
@@ -83786,9 +90984,7 @@
3429892096,3429957631,CA
3429957632,3430073354,US
3430073355,3430073355,AU
-3430073356,3430074111,US
-3430074112,3430074367,AU
-3430074368,3430146047,US
+3430073356,3430146047,US
3430148096,3430328831,US
3430328832,3430329087,GH
3430329088,3430354943,US
@@ -83856,12 +91052,15 @@
3430845440,3430845951,MX
3430845952,3430849535,US
3430849536,3430850047,CA
-3430850048,3430973951,US
-3430974208,3431114495,US
+3430850048,3431114495,US
3431114496,3431114751,CA
3431114752,3431468031,US
3431468032,3431469055,CA
-3431469056,3431596287,US
+3431469056,3431526911,US
+3431526912,3431526921,CH
+3431526922,3431526922,US
+3431526923,3431527167,CH
+3431527168,3431596287,US
3431596288,3431602687,CA
3431602688,3431602943,US
3431602944,3431606271,CA
@@ -83951,7 +91150,8 @@
3432689152,3432689663,CA
3432689664,3432695807,US
3432697856,3432708095,US
-3432710144,3432807423,US
+3432710144,3432717311,US
+3432718336,3432807423,US
3432807424,3432808447,CA
3432808448,3433824511,US
3433824512,3433824767,DE
@@ -83969,7 +91169,8 @@
3434014720,3434015231,US
3434015232,3434020607,CA
3434020608,3434427391,US
-3434427392,3434428415,HR
+3434427392,3434428159,HR
+3434428160,3434428415,HN
3434428416,3434433279,US
3434433280,3434433535,PR
3434433536,3434553343,US
@@ -83981,7 +91182,9 @@
3434575616,3434583039,US
3434583040,3434584063,NL
3434584064,3434807551,US
-3434807552,3434831359,CA
+3434807552,3434810111,CA
+3434810112,3434810367,US
+3434810368,3434831359,CA
3434831360,3434831615,US
3434831616,3434872575,CA
3434872576,3434913791,US
@@ -84016,9 +91219,7 @@
3436290048,3436314367,CA
3436314368,3436476415,US
3436476416,3436478463,AW
-3436478464,3436492799,US
-3436492800,3436493055,NL
-3436493056,3436507135,US
+3436478464,3436507135,US
3436507136,3436509183,BB
3436509184,3436697087,US
3436697088,3436697343,VE
@@ -84140,8 +91341,8 @@
3437755904,3437756159,US
3437756160,3437756415,IE
3437756416,3437772799,US
-3437772800,3437776895,CA
-3437776896,3437789863,US
+3437772800,3437776639,CA
+3437776640,3437789863,US
3437789864,3437789871,AU
3437789872,3437961215,US
3437961216,3437964287,ZA
@@ -84290,8 +91491,8 @@
3449212928,3449213183,US
3449213184,3449213695,CA
3449213696,3449214975,US
-3449214976,3449215743,CA
-3449215744,3449215871,US
+3449214976,3449215487,CA
+3449215488,3449215871,US
3449215872,3449215999,CA
3449216000,3449220607,US
3449220608,3449221375,CA
@@ -84310,9 +91511,7 @@
3449575680,3449593855,US
3449593856,3449594111,AU
3449594112,3449638911,US
-3449638912,3449639167,GB
-3449639168,3449639423,US
-3449639424,3449639679,GB
+3449638912,3449639679,GB
3449639680,3449639935,US
3449639936,3449640191,GB
3449640192,3449640447,NL
@@ -84329,7 +91528,9 @@
3449843200,3449843711,YE
3449843712,3449874687,US
3449874688,3449874943,AG
-3449874944,3449923583,US
+3449874944,3449884159,US
+3449884160,3449884415,AS
+3449884416,3449923583,US
3449923584,3449923839,ES
3449923840,3449974783,US
3449974784,3449976831,CA
@@ -84380,17 +91581,13 @@
3450950656,3450951679,JP
3450951680,3450953727,US
3450953728,3450957823,DE
-3450957824,3450974207,US
-3450974208,3450974463,GB
-3450974464,3450975231,US
+3450957824,3450975231,US
3450975232,3450975743,LB
3450975744,3450982399,US
3450982400,3450984447,TW
3450984448,3450986495,PH
3450986496,3450986751,HK
-3450986752,3450987007,US
-3450987008,3450987263,CN
-3450987264,3451170303,US
+3450986752,3451170303,US
3451170304,3451170559,VE
3451170560,3451187967,US
3451187968,3451188223,AU
@@ -84467,9 +91664,7 @@
3452174336,3452180479,US
3452181504,3452436479,US
3452436480,3452502015,CA
-3452502016,3452678399,US
-3452678400,3452682239,BE
-3452682240,3452715007,US
+3452502016,3452715007,US
3452715008,3452723199,CA
3452723200,3452764671,US
3452764672,3452765183,CA
@@ -84491,9 +91686,7 @@
3452770304,3452770559,CA
3452770560,3452770815,US
3452770816,3452771071,CA
-3452771072,3452771327,US
-3452771328,3452771583,CA
-3452771584,3452771839,US
+3452771072,3452771839,US
3452771840,3452773119,CA
3452773120,3452773375,US
3452773376,3452773887,CA
@@ -84570,7 +91763,9 @@
3452813312,3452813567,US
3452813568,3452814079,CA
3452814080,3452814335,US
-3452814336,3452816127,CA
+3452814336,3452815359,CA
+3452815360,3452815615,US
+3452815616,3452816127,CA
3452816128,3452816511,US
3452816512,3452816527,CA
3452816528,3452816895,US
@@ -84588,7 +91783,9 @@
3452821504,3452822271,US
3452822272,3452822527,CA
3452822528,3452822783,US
-3452822784,3452824063,CA
+3452822784,3452823551,CA
+3452823552,3452823807,US
+3452823808,3452824063,CA
3452824064,3452824319,US
3452824320,3452824575,CA
3452824576,3452824831,US
@@ -84917,7 +92114,9 @@
3456303104,3456311295,JP
3456311296,3456360447,US
3456360448,3456364543,BG
-3456364544,3456892927,US
+3456364544,3456856063,US
+3456856064,3456856319,CA
+3456856320,3456892927,US
3456892928,3456958463,CA
3456958464,3457551871,US
3457551872,3457552127,CA
@@ -84965,7 +92164,7 @@
3458820096,3458820351,CA
3458820352,3458820863,US
3458820864,3458821119,JM
-3458822144,3459055615,US
+3458821120,3459055615,US
3459055616,3459121151,CA
3459121152,3459186687,US
3459186688,3459252223,CA
@@ -85091,14 +92290,12 @@
3459456512,3459456767,US
3459456768,3459457279,CA
3459457536,3459457791,CA
-3459457792,3459458047,PR
3459458048,3459512319,US
3459512320,3459513855,CA
3459513856,3459592191,US
3459592192,3459596287,CA
3459596288,3459614719,US
-3459616768,3459617023,CA
-3459617024,3459617791,US
+3459616768,3459617791,US
3459617792,3459617999,CA
3459618000,3459618000,ID
3459618001,3459618047,CA
@@ -85107,12 +92304,14 @@
3459619072,3459622911,US
3459624960,3459629055,BM
3459629056,3459631103,US
-3459633152,3459731455,US
+3459633152,3459686399,US
+3459686400,3459687167,NL
+3459687168,3459731455,US
3459731456,3459735551,CA
3459735552,3459745535,US
3459745536,3459745791,IT
3459745792,3459842815,US
-3459842816,3459843071,AR
+3459842816,3459843071,BR
3459843072,3459848959,US
3459848960,3459849215,FR
3459849216,3459850239,US
@@ -85441,7 +92640,9 @@
3464388608,3464391935,US
3464391936,3464392191,CA
3464392192,3464394751,US
-3464394752,3464396799,VC
+3464394752,3464395263,VC
+3464395264,3464395519,LC
+3464395520,3464396799,VC
3464396800,3464415231,US
3464417280,3464421631,US
3464421632,3464421887,CA
@@ -85510,9 +92711,9 @@
3465962496,3465962751,CA
3465962752,3466067967,US
3466067968,3466068223,CA
-3466068224,3466068991,US
-3466068992,3466069247,CA
-3466069248,3466069343,US
+3466068224,3466069071,US
+3466069072,3466069087,CA
+3466069088,3466069343,US
3466069344,3466069375,CA
3466069376,3466069447,US
3466069448,3466069455,CA
@@ -85556,11 +92757,13 @@
3466914304,3466914559,FR
3466914560,3466929407,US
3466929408,3466929663,IT
-3466929664,3466937663,US
+3466929664,3466937599,US
+3466937600,3466937663,ES
3466937664,3466937669,DE
3466937670,3466937670,US
3466937671,3466937727,DE
-3466937728,3466938444,US
+3466937728,3466937855,ES
+3466937856,3466938444,US
3466938445,3466938448,HK
3466938449,3466938807,US
3466938808,3466938811,GB
@@ -85700,9 +92903,7 @@
3469176320,3469176575,MX
3469176576,3469186303,US
3469186304,3469186559,MX
-3469186560,3469859583,US
-3469859584,3469859839,CA
-3469859840,3469893631,US
+3469186560,3469893631,US
3469893632,3469901823,CA
3469901824,3469989887,US
3469990400,3470131199,US
@@ -85802,7 +93003,9 @@
3473755392,3473755647,HN
3473755648,3473765887,US
3473765888,3473766399,EC
-3473766400,3473901055,US
+3473766400,3473786111,US
+3473786112,3473786127,PR
+3473786128,3473901055,US
3473901056,3473901311,EC
3473901312,3473917439,US
3473917440,3473917695,PR
@@ -85837,7 +93040,9 @@
3475670272,3475670527,AI
3475670528,3475670783,LC
3475670784,3475670847,DM
-3475670848,3475671039,AG
+3475670848,3475670857,AG
+3475670858,3475670858,DM
+3475670859,3475671039,AG
3475671040,3475681279,US
3475681280,3475685375,HN
3475685376,3475851263,US
@@ -86021,7 +93226,9 @@
3481843456,3481843711,GB
3481843712,3481951395,US
3481951396,3481951399,GB
-3481951400,3481964575,US
+3481951400,3481958271,US
+3481958272,3481958399,NL
+3481958400,3481964575,US
3481964576,3481964579,IE
3481964580,3481993791,US
3481993792,3481993799,CA
@@ -86105,9 +93312,9 @@
3482039296,3482039551,US
3482039552,3482040319,CA
3482040320,3482041087,US
-3482041088,3482041343,CA
-3482041344,3482041599,US
-3482041600,3482042367,CA
+3482041088,3482041855,CA
+3482041856,3482042111,US
+3482042112,3482042367,CA
3482042368,3482043903,US
3482043904,3482044927,CA
3482044928,3482045183,US
@@ -86125,7 +93332,11 @@
3482051584,3482051839,US
3482051840,3482052863,CA
3482052864,3482053631,US
-3482053632,3482054655,CA
+3482053632,3482053887,CA
+3482053888,3482053999,US
+3482054000,3482054015,CA
+3482054016,3482054143,US
+3482054144,3482054655,CA
3482054656,3482058239,US
3482058240,3482058495,CA
3482058496,3482583039,US
@@ -86246,9 +93457,9 @@
3485462528,3485464575,VC
3485464576,3485466623,LC
3485466624,3485597695,US
-3485597696,3485672543,CA
-3485672544,3485672551,US
-3485672552,3485695999,CA
+3485597696,3485694975,CA
+3485694976,3485695231,US
+3485695232,3485695999,CA
3485696000,3485721056,US
3485721057,3485721057,AE
3485721058,3485959423,US
@@ -86457,11 +93668,11 @@
3486702592,3486702847,CA
3486702848,3487039487,US
3487039488,3487105023,CA
-3487105024,3487175935,US
+3487105024,3487174143,US
+3487174144,3487174271,CH
+3487174272,3487175935,US
3487175936,3487176191,GB
-3487176192,3487177983,US
-3487177984,3487178239,GB
-3487178240,3487181359,US
+3487176192,3487181359,US
3487181360,3487181375,GB
3487181376,3487189247,US
3487189248,3487189503,DK
@@ -86551,7 +93762,7 @@
3489399040,3489464319,US
3489464320,3489529855,CA
3489529856,3489562623,US
-3489563136,3489563391,JM
+3489565440,3489565695,JM
3489566720,3489575935,US
3489575936,3489576959,CN
3489576960,3489577215,US
@@ -86581,7 +93792,9 @@
3490265344,3490267135,CO
3490267136,3490488319,US
3490488320,3490489343,PR
-3490489344,3490703615,US
+3490489344,3490702847,US
+3490702848,3490703103,AS
+3490703104,3490703615,US
3490703616,3490703871,PR
3490703872,3490786047,US
3490786048,3490786303,PR
@@ -86594,9 +93807,7 @@
3491478528,3491637247,US
3491637248,3491637759,CO
3491637760,3491651583,US
-3491651584,3491654655,VI
-3491654656,3491654911,US
-3491654912,3491659775,VI
+3491651584,3491659775,VI
3491659776,3491743743,US
3491743744,3491745791,CO
3491745792,3491969023,US
@@ -86609,21 +93820,27 @@
3492812760,3492812763,JP
3492812764,3492845823,US
3492845824,3492846079,CH
-3492846080,3492867071,US
+3492846080,3492858111,US
+3492858112,3492858367,SA
+3492858368,3492864767,US
+3492864768,3492865023,CA
+3492865024,3492865279,US
+3492865280,3492865359,GB
+3492865360,3492865375,US
+3492865376,3492865504,GB
+3492865505,3492865505,US
+3492865506,3492865535,GB
+3492865536,3492867071,US
3492867072,3492867327,FR
-3492867328,3492868607,US
-3492868608,3492868863,MX
-3492868864,3492869631,US
+3492867328,3492869631,US
3492869632,3492869887,BR
3492869888,3492877954,US
3492877955,3492877955,CA
-3492877956,3492886527,US
-3492886528,3492886559,GB
-3492886560,3492886591,US
-3492886592,3492886783,GB
-3492886784,3492894975,US
+3492877956,3492894975,US
3492894976,3492895231,BE
-3492895232,3492912127,US
+3492895232,3492910079,US
+3492910080,3492910207,GB
+3492910208,3492912127,US
3492912128,3492912151,GB
3492912152,3492912159,US
3492912160,3492912383,GB
@@ -86631,9 +93848,9 @@
3492913664,3492913919,CA
3492913920,3492917247,US
3492917248,3492917503,VI
-3492917504,3492923391,US
-3492923392,3492923647,GB
-3492923648,3492933375,US
+3492917504,3492921855,US
+3492921856,3492922111,VI
+3492922112,3492933375,US
3492933376,3492933376,CA
3492933377,3492933377,CH
3492933378,3492933631,CA
@@ -86645,17 +93862,15 @@
3492950864,3492950879,DE
3492950880,3492954623,US
3492954624,3492955135,GB
-3492955136,3492960255,US
-3492960256,3492960511,ES
-3492960512,3492962815,US
-3492962816,3492963071,GB
-3492963072,3492968191,US
+3492955136,3492957695,US
+3492957696,3492958207,VI
+3492958208,3492962559,US
+3492962560,3492962815,GB
+3492962816,3492968191,US
3492968192,3492968447,GB
-3492968448,3492969505,US
-3492969506,3492969506,VI
-3492969507,3492969535,US
-3492969536,3492969599,VI
-3492969600,3492994815,US
+3492968448,3492969471,US
+3492969472,3492969727,VI
+3492969728,3492994815,US
3492994816,3492995071,GB
3492995072,3492996127,US
3492996128,3492996136,GB
@@ -86665,15 +93880,15 @@
3493013760,3493014015,GB
3493014016,3493014627,US
3493014628,3493014628,GB
-3493014629,3493029341,US
-3493029342,3493029342,GB
-3493029343,3493039359,US
+3493014629,3493029119,US
+3493029120,3493029311,GB
+3493029312,3493029327,US
+3493029328,3493029375,GB
+3493029376,3493039359,US
3493039360,3493039615,AR
3493039616,3493061119,US
3493061120,3493061375,BR
-3493061376,3493062911,US
-3493062912,3493063167,DE
-3493063168,3493073151,US
+3493061376,3493073151,US
3493073152,3493073407,BO
3493073408,3493073663,US
3493073664,3493073919,BO
@@ -86708,10 +93923,10 @@
3493987328,3493990399,US
3493990400,3493991423,CA
3493991424,3493998591,US
-3493998592,3493998847,AI
-3493998848,3493999359,KN
+3493998592,3493999103,AI
+3493999104,3493999359,KN
3493999360,3494000639,AI
-3494000640,3494003711,US
+3494000640,3494002687,US
3494003712,3494004735,CA
3494004736,3494009855,US
3494009856,3494010879,CA
@@ -86757,7 +93972,7 @@
3494244352,3494246399,CA
3494246400,3494247423,US
3494247424,3494250495,CA
-3494250496,3494262783,US
+3494251520,3494262783,US
3494262784,3494264831,CA
3494264832,3494271999,US
3494272000,3494273023,KN
@@ -86780,7 +93995,8 @@
3494361088,3494362111,CA
3494362112,3494380543,US
3494380544,3494381567,CA
-3494381568,3494402559,US
+3494381568,3494386687,US
+3494387712,3494402559,US
3494402560,3494402815,GB
3494402816,3494410239,US
3494410240,3494412287,CA
@@ -86803,9 +94019,7 @@
3494496512,3494496767,US
3494498304,3494510591,US
3494510592,3494512639,CA
-3494512640,3494512895,US
-3494512896,3494513151,NO
-3494513152,3494516735,US
+3494512640,3494516735,US
3494516736,3494517759,CA
3494517760,3494540031,US
3494540032,3494540287,UG
@@ -86855,7 +94069,8 @@
3494788096,3494788351,NG
3494788352,3494788607,LY
3494788608,3494789119,CA
-3494789120,3494852607,US
+3494789120,3494812671,US
+3494813696,3494852607,US
3494852608,3494854655,CA
3494854656,3494862847,US
3494862848,3494863871,DM
@@ -86916,10 +94131,11 @@
3495215104,3495217151,VI
3495217152,3495219199,VC
3495219200,3495225343,US
+3495225856,3495226111,GB
3495226624,3495226879,US
3495227392,3495251967,US
3495251968,3495254015,CA
-3495254016,3495260159,US
+3495255040,3495260159,US
3495260160,3495261183,CA
3495261184,3495271423,US
3495272192,3495285759,US
@@ -86980,9 +94196,9 @@
3495620608,3495622655,CA
3495622656,3495635967,US
3495636992,3495647231,US
-3495648000,3495653887,US
-3495653888,3495654143,CA
-3495654144,3495673855,US
+3495648000,3495654143,US
+3495654144,3495654399,CA
+3495654400,3495673855,US
3495673856,3495674879,MF
3495674880,3495675391,VG
3495675392,3495688191,US
@@ -87018,9 +94234,10 @@
3495864320,3495864831,DM
3495864832,3495865343,MF
3495865344,3495866367,US
-3495866368,3495866623,VC
-3495866624,3495866879,LC
-3495866880,3495867391,VC
+3495866368,3495866623,LC
+3495866624,3495867050,VC
+3495867051,3495867051,LC
+3495867052,3495867391,VC
3495867392,3495867647,LC
3495867648,3495868415,VC
3495868416,3495871487,US
@@ -87046,8 +94263,10 @@
3496189952,3496190519,US
3496190520,3496190527,CA
3496190528,3496190719,US
-3496190720,3496190975,CA
-3496190976,3496296447,US
+3496190720,3496190735,CA
+3496190736,3496190751,US
+3496190752,3496190767,CA
+3496190768,3496296447,US
3496296448,3496312831,CA
3496312832,3496468479,US
3496468480,3496476671,CA
@@ -87294,7 +94513,9 @@
3507038208,3507040255,TW
3507040256,3507290111,US
3507290112,3507355647,AR
-3507355648,3507470335,US
+3507355648,3507427583,US
+3507427584,3507427839,CA
+3507427840,3507470335,US
3507470336,3507486719,CA
3507486720,3507585023,US
3507585024,3507598911,CA
@@ -87498,15 +94719,11 @@
3509522176,3509522431,CA
3509522432,3509522687,KW
3509522688,3509522943,CA
-3509522944,3509523679,US
-3509523680,3509523695,CA
-3509523696,3509524223,US
-3509524224,3509524735,CA
+3509522944,3509524479,US
+3509524480,3509524735,CA
3509524736,3509524991,US
3509524992,3509525759,CA
-3509525760,3509526015,US
-3509526016,3509526271,CA
-3509526272,3509526527,US
+3509525760,3509526527,US
3509526528,3509526783,CA
3509526784,3509527807,US
3509527808,3509528063,CA
@@ -87517,7 +94734,9 @@
3509532672,3509532927,US
3509532928,3509533439,CA
3509533440,3509534719,US
-3509534720,3509535999,CA
+3509534720,3509535487,CA
+3509535488,3509535743,US
+3509535744,3509535999,CA
3509536000,3509536255,US
3509536256,3509536767,CA
3509536768,3509537279,US
@@ -87526,9 +94745,11 @@
3509538560,3509538815,CA
3509538816,3509539071,US
3509539072,3509539327,CA
-3509539328,3509539583,US
-3509539584,3509540095,CA
-3509540096,3509540607,US
+3509539328,3509539631,US
+3509539632,3509539647,CA
+3509539648,3509539967,US
+3509539968,3509540031,CA
+3509540032,3509540607,US
3509540608,3509541503,CA
3509541504,3509541631,US
3509541632,3509541887,CA
@@ -87544,14 +94765,16 @@
3509546096,3509546111,CA
3509546112,3509546495,US
3509546496,3509547007,CA
-3509547008,3509551359,US
-3509551360,3509551871,CA
+3509547008,3509551615,US
+3509551616,3509551871,CA
3509551872,3509552127,US
3509552128,3509552639,CA
3509552640,3509553919,US
3509553920,3509554959,CA
3509554960,3509555199,US
-3509555200,3509556735,CA
+3509555200,3509555455,CA
+3509555456,3509555711,US
+3509555712,3509556735,CA
3509556736,3509557759,US
3509557760,3509558015,CA
3509558016,3509559039,US
@@ -87573,11 +94796,9 @@
3509567232,3509569023,CA
3509569024,3509569535,US
3509569536,3509569791,CA
-3509569792,3509570815,US
-3509570816,3509571583,CA
-3509571584,3509571839,US
-3509571840,3509572095,CA
-3509572096,3509572351,US
+3509569792,3509571071,US
+3509571072,3509571327,CA
+3509571328,3509572351,US
3509572352,3509573375,CA
3509573376,3509573439,US
3509573440,3509573455,CA
@@ -87927,7 +95148,9 @@
3515301888,3515318271,CA
3515318272,3515358975,US
3515358976,3515359231,MX
-3515359232,3515596799,US
+3515359232,3515450623,US
+3515450624,3515450879,CA
+3515450880,3515596799,US
3515596800,3515613183,CA
3515613184,3515711487,US
3515711488,3515731967,CA
@@ -87958,7 +95181,9 @@
3516530688,3516643083,US
3516643084,3516643087,PR
3516643088,3516899839,US
-3516899840,3516900095,NG
+3516899840,3516900031,NG
+3516900032,3516900063,US
+3516900064,3516900095,NG
3516900096,3516900351,US
3516900352,3516900607,NG
3516900608,3516900863,US
@@ -87983,13 +95208,17 @@
3517120512,3517173759,US
3517173760,3517174783,IN
3517174784,3517233151,US
-3517233152,3517235199,GU
+3517233152,3517234687,GU
+3517234688,3517234943,US
+3517234944,3517235199,GU
3517235200,3517382655,US
3517382656,3517383167,CA
3517383168,3517383423,US
3517383424,3517384703,CA
-3517384704,3517385215,US
-3517385216,3517385727,CA
+3517384704,3517385407,US
+3517385408,3517385439,CA
+3517385440,3517385471,US
+3517385472,3517385727,CA
3517385728,3517385983,US
3517385984,3517387263,CA
3517387264,3517387519,US
@@ -88027,14 +95256,14 @@
3517399040,3517399807,US
3517399808,3517399871,CA
3517399872,3517400063,US
-3517400064,3517400575,CA
-3517400576,3517401855,US
+3517400064,3517400319,CA
+3517400320,3517401855,US
3517401856,3517402367,CA
3517402368,3517402623,US
3517402624,3517402879,CA
3517402880,3517403647,US
-3517403648,3517404159,CA
-3517404160,3517404415,US
+3517403648,3517403903,CA
+3517403904,3517404415,US
3517404416,3517404927,CA
3517404928,3517405183,US
3517405184,3517405439,CA
@@ -88058,10 +95287,10 @@
3517413120,3517414399,CA
3517414400,3517414911,US
3517414912,3517415423,CA
-3517415424,3517416191,US
-3517416192,3517416447,CA
-3517416448,3517416703,US
-3517416704,3517417471,CA
+3517415424,3517416919,US
+3517416920,3517416927,CA
+3517416928,3517416959,US
+3517416960,3517417471,CA
3517417472,3517418495,US
3517418496,3517419007,CA
3517419008,3517419519,US
@@ -88111,7 +95340,9 @@
3517438464,3517438943,US
3517438944,3517439231,CA
3517439232,3517439743,US
-3517439744,3517442047,CA
+3517439744,3517441279,CA
+3517441280,3517441535,US
+3517441536,3517442047,CA
3517442048,3517442175,US
3517442176,3517442207,CA
3517442208,3517442559,US
@@ -88168,7 +95399,9 @@
3517608192,3517608447,US
3517608448,3517608703,GB
3517608704,3517609727,US
-3517609728,3517610495,SE
+3517609728,3517609743,SE
+3517609744,3517609751,US
+3517609752,3517610495,SE
3517610496,3517611263,IE
3517611264,3517612031,SE
3517612032,3517644799,US
@@ -88246,7 +95479,9 @@
3519877888,3519878143,CA
3519878144,3519878271,US
3519878272,3519878303,CA
-3519878304,3519879727,US
+3519878304,3519878911,US
+3519878912,3519879167,CA
+3519879168,3519879727,US
3519879728,3519879735,CA
3519879736,3519879935,US
3519879936,3519880447,CA
@@ -88255,7 +95490,9 @@
3519882496,3519882751,US
3519882752,3519884031,CA
3519884032,3519884287,US
-3519884288,3519901695,CA
+3519884288,3519898367,CA
+3519898368,3519898623,US
+3519898624,3519901695,CA
3519901696,3519930367,US
3519934464,3519938559,CA
3519938560,3520020479,US
@@ -88318,8 +95555,8 @@
3521965056,3521966079,DE
3521966080,3522101247,US
3522101248,3522109439,CA
-3522109440,3522118399,US
-3522118400,3522118655,GB
+3522109440,3522118143,US
+3522118144,3522118655,GB
3522118656,3522118911,US
3522118912,3522119679,GB
3522119680,3522119935,US
@@ -88389,12 +95626,25 @@
3523557376,3523559423,CN
3523559424,3523575807,PH
3523575808,3523583999,CN
-3523584000,3523601663,HK
+3523584000,3523596359,HK
+3523596360,3523596375,PK
+3523596376,3523596783,HK
+3523596784,3523596791,PK
+3523596792,3523596927,HK
+3523596928,3523597055,PK
+3523597056,3523597063,HK
+3523597064,3523597103,PK
+3523597104,3523597119,HK
+3523597120,3523597127,PK
+3523597128,3523597567,HK
+3523597568,3523597823,PK
+3523597824,3523601663,HK
3523601664,3523601919,SA
3523601920,3523674111,HK
3523674112,3523682303,FJ
3523682304,3523686399,NZ
-3523686400,3523690495,AU
+3523686400,3523688447,AU
+3523688704,3523690495,AU
3523690496,3523698687,IN
3523698688,3523700735,JP
3523700736,3523701759,HK
@@ -88426,7 +95676,9 @@
3524722688,3524730879,SG
3524730880,3524739071,CN
3524739072,3524743167,ID
-3524743168,3524745727,MP
+3524743168,3524745215,MP
+3524745216,3524745471,GU
+3524745472,3524745727,MP
3524745728,3524745983,GU
3524745984,3524747263,MP
3524747264,3524755455,PH
@@ -88448,8 +95700,8 @@
3526651136,3526651391,KP
3526651392,3526754303,CN
3526754304,3526845183,NZ
-3526845184,3526845439,AU
-3526845440,3526885375,NZ
+3526845184,3526845311,AU
+3526845312,3526885375,NZ
3526885376,3526893567,PK
3526893568,3526897663,NZ
3526897664,3526901759,HK
@@ -88499,9 +95751,7 @@
3529089024,3529097215,KR
3529097216,3529113599,JP
3529113600,3531603967,KR
-3531603968,3533765631,JP
-3533765632,3533765887,CN
-3533765888,3534749695,JP
+3531603968,3534749695,JP
3534749696,3534757887,HK
3534757888,3534758143,AU
3534758144,3534758147,JP
@@ -88532,7 +95782,11 @@
3535831040,3535863807,TW
3535863808,3535880191,SG
3535880192,3535896575,JP
-3535896576,3535929343,AU
+3535896576,3535905791,AU
+3535905792,3535906047,US
+3535906048,3535909887,AU
+3535909888,3535910143,US
+3535910144,3535929343,AU
3535929344,3535994879,JP
3535994880,3536060415,MY
3536060416,3536322559,JP
@@ -88623,9 +95877,7 @@
3557072896,3557081087,DE
3557081088,3557089279,NL
3557089280,3557105663,DE
-3557105664,3557111807,BG
-3557111808,3557112831,GB
-3557112832,3557113855,BG
+3557105664,3557113855,BG
3557113856,3557130239,RU
3557130240,3557138431,BG
3557138432,3557146623,RU
@@ -88730,8 +95982,12 @@
3557916672,3557920055,NO
3557920056,3557920056,DK
3557920057,3557924863,NO
-3557924864,3557925887,AX
-3557925888,3557929983,FI
+3557924864,3557926143,AX
+3557926144,3557926399,FI
+3557926400,3557926655,AX
+3557926656,3557929471,FI
+3557929472,3557929727,AX
+3557929728,3557929983,FI
3557929984,3557933055,AX
3557933056,3557941247,IT
3557941248,3557957631,DE
@@ -88759,9 +96015,7 @@
3558146048,3558154239,RU
3558154240,3558157391,GB
3558157392,3558157407,AF
-3558157408,3558161663,GB
-3558161664,3558161919,TD
-3558161920,3558162431,GB
+3558157408,3558162431,GB
3558162432,3558170623,DE
3558170624,3558178815,GB
3558178816,3558187007,BG
@@ -88803,9 +96057,7 @@
3558293504,3558301695,RU
3558301696,3558318079,DE
3558318080,3558334463,FR
-3558334464,3558339959,CH
-3558339960,3558339967,DE
-3558339968,3558342655,CH
+3558334464,3558342655,CH
3558342656,3558350847,IT
3558350848,3558359039,RU
3558359040,3558367231,GB
@@ -88850,11 +96102,9 @@
3558719488,3558735871,IL
3558735872,3558741503,GB
3558741504,3558742015,GG
-3558742016,3558742527,GB
-3558742528,3558742783,GG
-3558742784,3558743039,GB
-3558743040,3558743295,GG
-3558743296,3558743551,GB
+3558742016,3558742271,GB
+3558742272,3558742527,GG
+3558742528,3558743551,GB
3558743552,3558743807,GG
3558743808,3558744063,GB
3558744064,3558752255,LB
@@ -88906,7 +96156,7 @@
3559093760,3559095455,GB
3559095456,3559095456,BE
3559095457,3559096063,GB
-3559096064,3559096319,BE
+3559096064,3559096319,NL
3559096320,3559104511,RO
3559104512,3559112703,RU
3559112704,3559120895,IT
@@ -88930,9 +96180,9 @@
3559276544,3559284735,GB
3559284736,3559292927,RU
3559292928,3559301119,JO
-3559301120,3559305215,GB
-3559305216,3559305471,US
-3559305472,3559309311,GB
+3559301120,3559306576,GB
+3559306577,3559306577,AT
+3559306578,3559309311,GB
3559309312,3559317503,PL
3559317504,3559325695,FI
3559325696,3559333887,IT
@@ -89004,9 +96254,11 @@
3559890944,3559899135,CH
3559899136,3559899647,UA
3559899648,3559899967,EE
-3559899968,3559900223,UA
-3559900224,3559900287,EE
-3559900288,3559902719,UA
+3559899968,3559900031,UA
+3559900032,3559900095,EE
+3559900096,3559900223,UA
+3559900224,3559900351,EE
+3559900352,3559902719,UA
3559902720,3559902975,EE
3559902976,3559903231,UA
3559903232,3559907327,EE
@@ -89022,9 +96274,11 @@
3559989248,3559997439,PL
3559997440,3560005631,KE
3560005632,3560013823,RU
-3560013824,3560022527,GB
-3560022528,3560022783,ES
-3560022784,3560023631,GB
+3560013824,3560015871,GB
+3560015872,3560016127,ES
+3560016128,3560022751,GB
+3560022752,3560022767,ES
+3560022768,3560023631,GB
3560023632,3560023639,ES
3560023640,3560023791,GB
3560023792,3560023799,ES
@@ -89063,9 +96317,9 @@
3560316928,3560325119,NL
3560325120,3560333311,DK
3560333312,3560341503,RO
-3560341504,3560346623,GB
-3560346624,3560347647,US
-3560347648,3560357887,GB
+3560341504,3560345855,GB
+3560345856,3560348159,US
+3560348160,3560357887,GB
3560357888,3560366079,GR
3560366080,3560374271,CH
3560374272,3560382463,ES
@@ -89108,9 +96362,7 @@
3560669184,3560685567,CH
3560685568,3560693759,ES
3560693760,3560701951,PL
-3560705536,3560705791,DE
3560707584,3560707839,DE
-3560708096,3560708351,DE
3560709632,3560709887,DE
3560710144,3560718335,CH
3560718336,3560726527,GM
@@ -89251,9 +96503,7 @@
3561242624,3561259007,DE
3561259008,3561267199,IL
3561267200,3561275391,UA
-3561275392,3561288831,BE
-3561288832,3561288959,FR
-3561288960,3561291775,BE
+3561275392,3561291775,BE
3561291776,3561299967,RS
3561299968,3561308159,GB
3561308160,3561316351,PL
@@ -89277,7 +96527,9 @@
3561472000,3561480191,DE
3561480192,3561488383,GB
3561488384,3561496575,OM
-3561496576,3561502719,GB
+3561496576,3561496831,GB
+3561496832,3561497087,NL
+3561497088,3561502719,GB
3561502720,3561503743,NL
3561503744,3561504767,GB
3561504768,3561512959,DE
@@ -89296,10 +96548,12 @@
3561604352,3561604607,FR
3561604608,3561607391,GB
3561607392,3561607423,FR
-3561607424,3561609215,GB
-3561609216,3561609471,FR
-3561609472,3561616639,GB
-3561616640,3561616895,FR
+3561607424,3561607935,GB
+3561607936,3561608191,FR
+3561608192,3561609215,GB
+3561609216,3561609727,FR
+3561609728,3561616383,GB
+3561616384,3561616895,FR
3561616896,3561618943,GB
3561618944,3561619455,ES
3561619456,3561641450,GB
@@ -89320,11 +96574,7 @@
3561775104,3561783295,IL
3561783296,3561799679,RU
3561799680,3561807871,DE
-3561807872,3561808895,BE
-3561808896,3561809151,LU
-3561809152,3561814271,BE
-3561814272,3561814527,LU
-3561814528,3561815039,BE
+3561807872,3561815039,BE
3561815040,3561815295,LU
3561815296,3561816063,BE
3561816064,3561824255,VA
@@ -89524,9 +96774,7 @@
3563225088,3563233279,LB
3563233280,3563241471,BY
3563241472,3563257855,TR
-3563257856,3563268351,FR
-3563268352,3563268607,BE
-3563268608,3563290623,FR
+3563257856,3563290623,FR
3563290624,3563315199,DE
3563315200,3563323391,DK
3563323648,3563329791,GB
@@ -89745,9 +96993,7 @@
3564895744,3564896255,GB
3564896256,3564904447,RU
3564904448,3564912639,DE
-3564912640,3564915711,NL
-3564915712,3564915967,BG
-3564915968,3564920831,NL
+3564912640,3564920831,NL
3564920832,3564922111,DE
3564922112,3564929023,US
3564929024,3564937215,AT
@@ -89768,15 +97014,9 @@
3565002752,3565027327,NO
3565027328,3565035519,PL
3565035520,3565036287,IE
-3565036288,3565037055,GB
-3565037056,3565037311,IE
-3565037312,3565038079,GB
-3565038080,3565038335,IE
-3565038336,3565038879,GB
+3565036288,3565038879,GB
3565038880,3565038895,IE
-3565038896,3565039103,GB
-3565039104,3565039359,IE
-3565039360,3565039615,GB
+3565038896,3565039615,GB
3565039616,3565041663,IE
3565041664,3565043711,GB
3565043712,3565051903,AT
@@ -89874,11 +97114,7 @@
3565767272,3565767287,GB
3565767296,3565767351,GB
3565767360,3565767399,GB
-3565767408,3565767439,GB
-3565767456,3565767487,GB
-3565767504,3565767599,GB
-3565767616,3565767631,GB
-3565767680,3565767999,GB
+3565767408,3565767999,GB
3565768208,3565768223,GB
3565768240,3565768247,GB
3565768448,3565768575,GB
@@ -89963,7 +97199,6 @@
3567152256,3567152383,GB
3567152400,3567152407,GB
3567152640,3567152647,GB
-3567152664,3567152671,GB
3567152744,3567152751,GB
3567152832,3567152863,GB
3567152960,3567152991,GB
@@ -89994,9 +97229,7 @@
3567389696,3567390975,DE
3567390976,3567391231,GB
3567391232,3567391487,DE
-3567391488,3567394815,GB
-3567394816,3567395071,FR
-3567395072,3567399167,GB
+3567391488,3567399167,GB
3567399168,3567399423,DE
3567399424,3567399935,GB
3567399936,3567401471,DE
@@ -90008,13 +97241,17 @@
3567453696,3567453951,ES
3567453952,3567456407,GB
3567456408,3567456415,ES
-3567456416,3567458305,GB
+3567456416,3567456511,GB
+3567456512,3567456767,ES
+3567456768,3567458305,GB
3567458306,3567458306,ES
3567458307,3567459935,GB
3567459936,3567459943,ES
3567459944,3567465983,GB
3567465984,3567466239,ES
-3567466240,3567495679,GB
+3567466240,3567490559,GB
+3567490560,3567490815,ES
+3567490816,3567495679,GB
3567495680,3567495935,ES
3567495936,3567499007,GB
3567499008,3567499135,ES
@@ -90084,9 +97321,7 @@
3568476160,3568484351,DK
3568484352,3568492543,NL
3568492544,3568500735,RS
-3568500736,3568520137,IL
-3568520138,3568520138,SY
-3568520139,3568566271,IL
+3568500736,3568566271,IL
3568566272,3568599039,FR
3568599040,3568631807,PL
3568631808,3568697343,SE
@@ -90144,8 +97379,8 @@
3570663424,3570728959,GB
3570728960,3570729983,FI
3570729984,3570731007,SE
-3570731008,3570794495,FI
-3570794496,3570860031,SE
+3570731008,3570794751,FI
+3570794752,3570860031,SE
3570860032,3570892799,CH
3570892800,3570925567,SA
3570925568,3570991103,IT
@@ -90170,7 +97405,9 @@
3571580928,3571646463,FI
3571646464,3571655560,DE
3571655561,3571655561,RO
-3571655562,3571711999,DE
+3571655562,3571688383,DE
+3571688384,3571689215,ES
+3571689216,3571711999,DE
3571712000,3571843071,GB
3571843072,3571974143,ES
3571974144,3571978239,RU
@@ -90245,7 +97482,11 @@
3574136832,3574169599,DE
3574169600,3574174839,GB
3574174840,3574174847,ES
-3574174848,3574187007,GB
+3574174848,3574186801,GB
+3574186802,3574186802,ES
+3574186803,3574186803,GB
+3574186804,3574186804,ES
+3574186805,3574187007,GB
3574187008,3574188031,ES
3574188032,3574190591,GB
3574190592,3574190847,ES
@@ -90265,22 +97506,19 @@
3574464512,3574530047,TR
3574530048,3574594559,SE
3574594560,3574595583,GB
-3574595584,3574595839,GF
-3574595840,3574597887,FR
-3574597888,3574598143,GP
-3574598144,3574598399,MQ
-3574598400,3574599423,FR
+3574595584,3574596607,FR
+3574596608,3574596863,MF
+3574596864,3574597119,MQ
+3574597120,3574597631,FR
+3574597632,3574597887,GP
+3574597888,3574598911,FR
+3574598912,3574599167,MQ
+3574599168,3574599423,FR
3574599424,3574599679,MQ
3574599680,3574599935,GP
-3574599936,3574600191,FR
-3574600192,3574600447,MQ
-3574600448,3574601215,FR
+3574599936,3574601215,FR
3574601216,3574601471,GP
-3574601472,3574602239,FR
-3574602240,3574602495,GF
-3574602496,3574602751,FR
-3574602752,3574603007,RE
-3574603008,3574603775,FR
+3574601472,3574603775,FR
3574603776,3574611967,BG
3574611968,3574628351,HU
3574628352,3574661119,GR
@@ -90290,7 +97528,9 @@
3574792192,3574824959,CZ
3574824960,3574830079,GB
3574830080,3574831103,NL
-3574831104,3574857727,GB
+3574831104,3574842367,GB
+3574842368,3574842623,NL
+3574842624,3574857727,GB
3574857728,3574923263,DE
3574923264,3574939647,RU
3574939648,3574941375,SE
@@ -90319,11 +97559,7 @@
3575590912,3575640063,BE
3575640064,3575644159,TR
3575644160,3575709695,DK
-3575709696,3575715839,AT
-3575715840,3575716351,SK
-3575716352,3575739391,AT
-3575739392,3575739647,FR
-3575739648,3575742463,AT
+3575709696,3575742463,AT
3575742464,3575775231,RU
3575775232,3575824383,NL
3575824384,3575832575,KW
@@ -90451,7 +97687,7 @@
3576084704,3576084735,GB
3576084864,3576084927,GB
3576085184,3576085215,GB
-3576085696,3576085711,GB
+3576085504,3576085759,GB
3576086016,3576086143,GB
3576086368,3576086399,GB
3576086496,3576086527,GB
@@ -90478,9 +97714,9 @@
3576093184,3576093247,GB
3576095232,3576096767,GB
3576099072,3576100863,GB
-3576101376,3576111359,GB
-3576111360,3576111615,FR
-3576111616,3576135679,GB
+3576101376,3576134653,GB
+3576134654,3576134654,CH
+3576134655,3576135679,GB
3576135680,3576168447,DE
3576168448,3576233983,GB
3576233984,3576236543,FR
@@ -90488,11 +97724,7 @@
3576241992,3576241999,FR
3576242000,3576242383,GB
3576242384,3576242391,FR
-3576242392,3576245247,GB
-3576245248,3576245503,FR
-3576245504,3576251135,GB
-3576251136,3576251391,FR
-3576251392,3576251711,GB
+3576242392,3576251711,GB
3576251712,3576251775,FR
3576251776,3576252415,GB
3576252416,3576252671,FR
@@ -90504,14 +97736,14 @@
3576254696,3576254703,FR
3576254704,3576254775,GB
3576254776,3576254783,FR
-3576254784,3576260607,GB
+3576254784,3576258047,GB
+3576258048,3576258303,FR
+3576258304,3576260607,GB
3576260608,3576260623,FR
3576260624,3576260863,GB
-3576260864,3576261119,FR
-3576261120,3576263447,GB
-3576263448,3576263455,FR
-3576263456,3576263679,GB
-3576263680,3576263935,FR
+3576260864,3576260871,FR
+3576260872,3576263919,GB
+3576263920,3576263935,FR
3576263936,3576264255,GB
3576264256,3576264263,FR
3576264264,3576264351,GB
@@ -90520,15 +97752,15 @@
3576264376,3576264383,FR
3576264384,3576264679,GB
3576264680,3576264687,FR
-3576264688,3576264959,GB
-3576264960,3576265215,FR
-3576265216,3576266751,GB
+3576264688,3576266751,GB
3576266752,3576299519,FR
3576299520,3576365055,AE
3576365056,3576430591,TR
3576430592,3576496127,FR
3576496128,3576561663,IT
-3576561664,3576627199,NL
+3576561664,3576622100,NL
+3576622101,3576622101,GB
+3576622102,3576627199,NL
3576627200,3576692735,AT
3576692736,3576758271,GB
3576758272,3576823807,BE
@@ -90538,22 +97770,28 @@
3576987648,3577020415,GB
3577020416,3577085951,NL
3577085952,3577151487,DE
-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
+3577151488,3577151999,RE
+3577152000,3577152255,FR
+3577152256,3577152511,RE
+3577152512,3577153023,FR
+3577153024,3577153279,RE
+3577153280,3577153791,FR
+3577153792,3577154303,RE
+3577154304,3577154815,FR
+3577154816,3577155327,RE
+3577155328,3577155839,FR
+3577155840,3577156095,RE
+3577156096,3577156607,FR
+3577156608,3577156863,RE
+3577156864,3577157375,FR
+3577157376,3577157887,RE
+3577157888,3577158655,FR
+3577158656,3577159167,RE
+3577159168,3577160959,FR
+3577160960,3577161215,YT
+3577161216,3577163775,FR
+3577163776,3577164031,RE
+3577164032,3577165567,FR
3577165568,3577166079,RE
3577166080,3577166591,FR
3577166592,3577167103,RE
@@ -90568,12 +97806,12 @@
3577544704,3577545983,DE
3577545984,3577546111,SE
3577546112,3577610239,DE
-3577625600,3577625855,GB
-3577626112,3577626367,GB
+3577626176,3577626239,GB
3577628672,3577629695,CH
3577635840,3577636863,DE
3577636864,3577637887,GB
3577641200,3577641215,FR
+3577641472,3577641983,FR
3577650048,3577650063,NL
3577653248,3577655295,IT
3577663488,3577664511,SE
@@ -90706,7 +97944,9 @@
3580643328,3580645375,UA
3580645376,3580647423,PL
3580647424,3580647935,GB
-3580647936,3580649471,DE
+3580647936,3580648703,DE
+3580648704,3580648959,GB
+3580648960,3580649471,DE
3580649472,3580651519,SE
3580651520,3580653567,NL
3580653568,3580655615,PL
@@ -90747,21 +97987,7 @@
3581239296,3581241343,NL
3581242624,3581245439,FR
3581255680,3581258751,FR
-3581280256,3581365247,BE
-3581365248,3581365503,NL
-3581365504,3581365759,BE
-3581365760,3581366015,NL
-3581366016,3581366783,BE
-3581366784,3581367039,NL
-3581367040,3581367295,BE
-3581367296,3581367807,NL
-3581367808,3581368063,BE
-3581368064,3581368319,NL
-3581368320,3581371391,BE
-3581371392,3581371647,NL
-3581371648,3581371903,BE
-3581371904,3581372159,NL
-3581372160,3581411327,BE
+3581280256,3581411327,BE
3581411328,3581673471,GB
3581673472,3581935615,NL
3581935616,3581943807,RU
@@ -90856,7 +98082,7 @@
3582509056,3582517247,SA
3582517248,3582525439,PL
3582525440,3582533631,IM
-3582533632,3582541823,BG
+3582533632,3582541823,IT
3582541824,3582550015,US
3582550016,3582558207,RS
3582558208,3582570911,MC
@@ -90903,7 +98129,8 @@
3582885888,3582894079,TR
3582894080,3582902271,CH
3582902272,3582910463,RU
-3582910464,3582917631,SI
+3582910464,3582916607,SI
+3582916608,3582917631,ZA
3582917632,3582918655,LU
3582918656,3582926847,GB
3582926848,3582935039,ES
@@ -90939,7 +98166,9 @@
3583157760,3583160319,GB
3583160320,3583161343,DE
3583161344,3583162623,GB
-3583162624,3583162879,ZA
+3583162624,3583162751,ZA
+3583162752,3583162815,GB
+3583162816,3583162879,ZA
3583162880,3583164415,GB
3583164416,3583172607,PT
3583172608,3583188991,DE
@@ -90975,7 +98204,11 @@
3583418368,3583426559,TN
3583426560,3583434751,CI
3583434752,3583442943,AT
-3583442944,3583451135,UA
+3583442944,3583445247,RU
+3583445248,3583445503,UA
+3583445504,3583446783,RU
+3583446784,3583447039,UA
+3583447040,3583451135,RU
3583451136,3583459327,IL
3583459328,3583467111,CZ
3583467112,3583467119,PL
@@ -91006,7 +98239,9 @@
3583696896,3583705087,NL
3583705088,3583713279,UA
3583713280,3583721471,CZ
-3583721472,3583729663,DE
+3583721472,3583727871,DE
+3583727872,3583728127,GB
+3583728128,3583729663,DE
3583729664,3583737855,TR
3583742976,3583743487,PL
3583743488,3583743743,GB
@@ -91115,12 +98350,17 @@
3584509232,3584509239,AW
3584509240,3584509695,GB
3584509696,3584509951,JE
-3584509952,3584516095,GB
+3584509952,3584513535,GB
+3584513536,3584513791,JE
+3584513792,3584516095,GB
3584516096,3584524287,NO
3584524288,3584532479,IS
3584532480,3584540671,DE
3584540672,3584548863,RU
-3584548864,3584557055,ES
+3584548864,3584549887,ES
+3584549888,3584550911,FR
+3584550912,3584552959,IT
+3584552960,3584557055,FR
3584557056,3584565247,EE
3584565248,3584573439,RU
3584573440,3584589823,DE
@@ -91259,7 +98499,9 @@
3585646592,3585654783,SA
3585654784,3585662975,NO
3585662976,3585671167,BY
-3585671168,3585679359,SE
+3585671168,3585672191,SE
+3585672192,3585672447,DK
+3585672448,3585679359,SE
3585679360,3585687551,FI
3585687552,3585695743,DE
3585695744,3585702527,GB
@@ -91289,9 +98531,8 @@
3585861632,3585863679,EE
3585863680,3585865471,NL
3585865472,3585865727,LB
-3585865728,3585866495,EE
-3585866496,3585866751,RU
-3585866752,3585867775,EE
+3585865728,3585865983,UA
+3585865984,3585867775,EE
3585867776,3585875967,NO
3585875968,3585884159,CH
3585884160,3585892351,IQ
@@ -91299,22 +98540,9 @@
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,3585912831,FR
-3585912832,3585913087,GP
-3585913088,3585913855,FR
-3585913856,3585914623,GP
-3585914624,3585914879,GF
-3585914880,3585915391,FR
-3585915392,3585915647,GP
-3585915648,3585915903,FR
-3585915904,3585916159,GP
-3585916160,3585916671,FR
+3585908736,3585913855,FR
+3585913856,3585914367,GP
+3585914368,3585916671,FR
3585916672,3585916927,MQ
3585916928,3585925119,IT
3585925120,3585933311,CH
@@ -91323,7 +98551,9 @@
3585949696,3585957887,KW
3585957888,3585966079,SE
3585966080,3585974271,CH
-3585974272,3585982463,BE
+3585974272,3585976831,BE
+3585976832,3585977087,GB
+3585977088,3585982463,BE
3585982464,3585998847,RU
3585998848,3586007039,ES
3586007040,3586015231,LT
@@ -91343,7 +98573,9 @@
3586162688,3586179071,FI
3586179072,3586195455,ES
3586195456,3586203647,RU
-3586203648,3586205695,KE
+3586203648,3586204415,KE
+3586204416,3586204671,ZM
+3586204672,3586205695,KE
3586205696,3586207743,BW
3586207744,3586208767,ZA
3586208768,3586211071,KE
@@ -91450,9 +98682,7 @@
3587129344,3587145727,NL
3587145728,3587162111,CY
3587162112,3587178495,IR
-3587178496,3587182591,AT
-3587182592,3587182847,HU
-3587182848,3587186687,AT
+3587178496,3587186687,AT
3587186688,3587186943,DE
3587186944,3587187199,GB
3587187200,3587187455,DE
@@ -91469,9 +98699,7 @@
3587231232,3587231263,NL
3587231264,3587233087,GB
3587233088,3587233095,NL
-3587233096,3587233279,GB
-3587233280,3587233535,NL
-3587233536,3587234191,GB
+3587233096,3587234191,GB
3587234192,3587234207,NL
3587234208,3587237631,GB
3587237632,3587237887,NL
@@ -91489,7 +98717,8 @@
3587242672,3587242679,DE
3587242680,3587244031,GB
3587244032,3587260415,IT
-3587260416,3587284991,DE
+3587260416,3587282943,DE
+3587282944,3587284991,PT
3587284992,3587291135,IT
3587291136,3587292159,FR
3587292160,3587309567,IT
@@ -91532,9 +98761,7 @@
3587620864,3587637247,SE
3587637248,3587646975,FR
3587646976,3587647231,MC
-3587647232,3587647743,FR
-3587647744,3587647999,GB
-3587648000,3587653631,FR
+3587647232,3587653631,FR
3587653632,3587670015,SK
3587670016,3587702783,IT
3587702784,3587710975,DE
@@ -91573,8 +98800,7 @@
3588153344,3588161535,RU
3588161536,3588173311,FR
3588173312,3588173567,RE
-3588173568,3588173823,YT
-3588173824,3588227071,FR
+3588173568,3588227071,FR
3588227072,3588292607,BE
3588292608,3588308991,AT
3588308992,3588325375,NO
@@ -91656,9 +98882,7 @@
3589242880,3589259263,NL
3589259264,3589275647,DE
3589275648,3589292031,RS
-3589292032,3589305343,AT
-3589305344,3589305599,DE
-3589305600,3589308415,AT
+3589292032,3589308415,AT
3589308416,3589324799,DE
3589324800,3589341183,BG
3589341184,3589373951,PL
@@ -91670,9 +98894,7 @@
3589431040,3589431295,ES
3589431296,3589432831,GB
3589432832,3589433087,CH
-3589433088,3589433855,GB
-3589433856,3589434111,IE
-3589434112,3589435759,GB
+3589433088,3589435759,GB
3589435760,3589435763,ES
3589435764,3589439487,GB
3589439488,3589455871,SE
@@ -91685,10 +98907,10 @@
3589545984,3589554175,DE
3589554176,3589570559,PS
3589570560,3589578751,GB
-3589578752,3589579007,IN
+3589578752,3589579007,NL
3589579008,3589580543,GB
-3589580544,3589580799,NL
-3589580800,3589582975,GB
+3589580544,3589581055,NL
+3589581056,3589582975,GB
3589582976,3589583103,NL
3589583104,3589583871,GB
3589583872,3589584127,NL
@@ -91705,13 +98927,13 @@
3589742592,3589746175,NL
3589746176,3589746687,US
3589746688,3589767167,NL
-3589767168,3589816319,RU
+3589767168,3589810431,RU
+3589810432,3589810687,PL
+3589810688,3589816319,RU
3589825792,3589826047,DE
3589827712,3589827839,DE
-3589828352,3589828607,FR
3589828736,3589828863,NL
3589829632,3589830143,GB
-3589831680,3589831935,FR
3589832704,3589849087,TR
3589849088,3589865471,GB
3589865472,3589881855,GR
@@ -91759,9 +98981,7 @@
3590251648,3590251775,NL
3590251776,3590252543,FR
3590252544,3590253055,LB
-3590253056,3590253311,FR
-3590253312,3590253567,GB
-3590253568,3590254847,FR
+3590253056,3590254847,FR
3590254848,3590255103,GB
3590255104,3590255871,FR
3590255872,3590255935,US
@@ -91775,7 +98995,9 @@
3590258688,3590291455,IT
3590291456,3590299647,EG
3590299648,3590307839,FI
-3590307840,3590312935,GB
+3590307840,3590308951,GB
+3590308952,3590308959,GH
+3590308960,3590312935,GB
3590312936,3590312943,UG
3590312944,3590317951,GB
3590317952,3590318015,UA
@@ -91843,7 +99065,9 @@
3624376336,3624376343,AU
3624376344,3624376351,US
3624376352,3624376359,PT
-3624376360,3624377863,US
+3624376360,3624376655,US
+3624376656,3624376679,GB
+3624376680,3624377863,US
3624377864,3624377871,GB
3624377872,3624377879,US
3624377880,3624377887,GB
@@ -91852,11 +99076,9 @@
3624377912,3624386559,US
3624386560,3624394751,CA
3624394752,3624402943,US
-3624402944,3624407039,JP
-3624407040,3624435711,US
-3624435712,3624443391,CA
-3624443392,3624443903,US
-3624443904,3624452095,CA
+3624402944,3624411135,JP
+3624411136,3624435711,US
+3624435712,3624452095,CA
3624452096,3624480767,US
3624480768,3624484863,CA
3624484864,3624534015,US
@@ -91875,9 +99097,10 @@
3624721920,3624730623,US
3624730624,3624796159,CA
3624796160,3624812543,US
-3624813056,3624814079,US
+3624813056,3624813823,US
3624814336,3624815103,US
-3624815616,3624828927,US
+3624815616,3624816383,US
+3624816640,3624828927,US
3624828928,3624833023,CA
3624833024,3624845311,US
3624845312,3624849407,AU
@@ -91964,7 +99187,9 @@
3628161024,3628161279,CA
3628161280,3628179455,US
3628179456,3628187647,CA
-3628187648,3628225779,US
+3628187648,3628225387,US
+3628225388,3628225395,GB
+3628225396,3628225779,US
3628225780,3628225783,GB
3628225784,3628236799,US
3628236800,3628257279,CA
@@ -92055,17 +99280,7 @@
3629789952,3629790207,CA
3629790208,3629839103,US
3629839104,3629839359,CA
-3629839360,3630039047,US
-3630039048,3630039055,CA
-3630039056,3630039079,US
-3630039080,3630039087,CA
-3630039088,3630039119,US
-3630039120,3630039135,CA
-3630039136,3630039159,US
-3630039160,3630039167,CA
-3630039168,3630039183,US
-3630039184,3630039199,CA
-3630039200,3630039295,US
+3629839360,3630039295,US
3630039296,3630039551,CA
3630039552,3630040063,US
3630040064,3630040319,CA
@@ -92105,9 +99320,7 @@
3630058752,3630059007,CA
3630059008,3630059263,US
3630059264,3630059519,CA
-3630059520,3630060799,US
-3630060800,3630061055,CA
-3630061056,3630061567,US
+3630059520,3630061567,US
3630061568,3630062079,CA
3630062080,3630062335,US
3630062336,3630062591,CA
@@ -92116,15 +99329,17 @@
3630063872,3630063935,US
3630063936,3630063951,CA
3630063952,3630066431,US
-3630066432,3630067967,CA
-3630067968,3630068991,US
+3630066432,3630067711,CA
+3630067712,3630068991,US
3630068992,3630069247,CA
3630069248,3630069503,US
3630069504,3630069759,CA
3630069760,3630071295,US
3630071296,3630071551,CA
3630071552,3630072575,US
-3630072576,3630074111,CA
+3630072576,3630073599,CA
+3630073600,3630073855,US
+3630073856,3630074111,CA
3630074112,3630074879,US
3630074880,3630075135,CA
3630075136,3630075311,US
@@ -92147,7 +99362,9 @@
3630082048,3630082559,CA
3630082560,3630082815,US
3630082816,3630083071,CA
-3630083072,3630084607,US
+3630083072,3630083583,US
+3630083584,3630083839,CA
+3630083840,3630084607,US
3630084608,3630084863,CA
3630084864,3630085119,US
3630085120,3630085375,CA
@@ -92197,10 +99414,8 @@
3630152192,3630152703,US
3630152704,3630153215,CA
3630153216,3630155775,US
-3630155776,3630158079,CA
-3630158080,3630158295,US
-3630158296,3630158303,CA
-3630158304,3630159103,US
+3630155776,3630158335,CA
+3630158336,3630159103,US
3630159104,3630159359,CA
3630159360,3630159615,US
3630159616,3630159871,CA
@@ -92214,8 +99429,8 @@
3630162432,3630162943,CA
3630162944,3630163199,US
3630163200,3630163455,CA
-3630163456,3630163967,US
-3630163968,3630164735,CA
+3630163456,3630163711,US
+3630163712,3630164735,CA
3630164736,3630164991,US
3630164992,3630166527,CA
3630166528,3630167007,US
@@ -92274,8 +99489,19 @@
3631667200,3631667455,US
3631667456,3631668223,CA
3631668224,3631668479,US
-3631668480,3631668991,CA
-3631668992,3631822815,US
+3631668480,3631668735,CA
+3631668736,3631669807,US
+3631669808,3631669823,EC
+3631669824,3631670527,US
+3631670528,3631670783,NG
+3631670784,3631671039,EC
+3631671040,3631671295,US
+3631671296,3631671551,JM
+3631671552,3631671807,PY
+3631671808,3631672063,US
+3631672064,3631672575,PY
+3631672576,3631672831,NG
+3631672832,3631822815,US
3631822816,3631822831,AU
3631822832,3631825647,US
3631825648,3631825663,NZ
@@ -92291,7 +99517,9 @@
3632197632,3632201727,CA
3632201728,3632244223,US
3632244224,3632244479,CA
-3632244480,3632332799,US
+3632244480,3632279039,US
+3632279040,3632279295,SA
+3632279296,3632332799,US
3632332800,3632357375,CA
3632357376,3632381951,US
3632381952,3632390143,CA
@@ -92329,7 +99557,6 @@
3633348608,3633405951,US
3633405952,3633410047,CA
3633410048,3633446911,US
-3633454080,3633454335,US
3633455104,3633456383,US
3633456384,3633456639,AU
3633456640,3633479679,US
@@ -92349,7 +99576,9 @@
3633550848,3633551359,GA
3633551360,3633757439,US
3633757440,3633757695,IN
-3633757696,3633785343,US
+3633757696,3633757951,US
+3633757952,3633758207,PH
+3633758208,3633785343,US
3633785600,3633786367,US
3633786880,3633815807,US
3633815808,3633816063,CA
@@ -92587,7 +99816,9 @@
3636158208,3636158215,CA
3636158216,3636158463,US
3636158464,3636158719,CA
-3636158720,3636158975,US
+3636158720,3636158871,US
+3636158872,3636158879,CA
+3636158880,3636158975,US
3636158976,3636159743,CA
3636159744,3636160511,US
3636160512,3636160767,CA
@@ -92603,8 +99834,7 @@
3636166400,3636166655,CA
3636166656,3636206079,US
3636206080,3636206335,AU
-3636206336,3636301823,US
-3636305920,3636396031,US
+3636206336,3636396031,US
3636396032,3636461567,CA
3636461568,3636609023,US
3636609024,3636621311,CA
@@ -92615,7 +99845,11 @@
3636627200,3636627455,BR
3636627456,3636628479,MX
3636628480,3636628991,PE
-3636628992,3636822015,US
+3636628992,3636740095,US
+3636740096,3636740351,CA
+3636740352,3636741503,US
+3636741504,3636741631,CA
+3636741632,3636822015,US
3636822016,3636854783,CA
3636854784,3636887551,US
3636887552,3636895743,CA
@@ -92642,7 +99876,9 @@
3637641216,3637665791,US
3637665792,3637669887,CA
3637669888,3637706751,US
-3637706752,3637739519,CA
+3637706752,3637726591,CA
+3637726592,3637726719,US
+3637726720,3637739519,CA
3637739520,3638165503,US
3638165504,3638181887,CA
3638181888,3638214399,US
@@ -92655,7 +99891,9 @@
3638247936,3638248703,GB
3638248704,3638249215,US
3638249216,3638249471,GB
-3638249472,3638304767,US
+3638249472,3638250559,US
+3638250560,3638250623,GB
+3638250624,3638304767,US
3638304768,3638312959,CA
3638312960,3638349823,US
3638349824,3638350079,AU
@@ -92666,15 +99904,15 @@
3638400000,3638401087,US
3638401088,3638401119,CA
3638401120,3638509567,US
-3638509568,3638534143,CA
+3638509568,3638526719,CA
+3638526720,3638526975,US
+3638526976,3638534143,CA
3638534144,3638697983,US
3638697984,3638706175,CA
3638706176,3638706687,US
3638706688,3638706943,NG
3638706944,3638738943,US
-3638740992,3638746111,US
-3638746112,3638746367,MX
-3638746368,3638874111,US
+3638740992,3638874111,US
3638874112,3638878207,CA
3638878208,3638984703,US
3638984704,3638992895,GT
@@ -92688,7 +99926,7 @@
3639148544,3639222271,US
3639222272,3639230463,CA
3639230464,3639247359,US
-3639248128,3639249151,US
+3639247872,3639249151,US
3639249664,3639255039,US
3639255040,3639263231,CA
3639263232,3639279615,US
@@ -92746,9 +99984,9 @@
3639664640,3639668735,CA
3639668736,3639672831,US
3639672832,3639681023,CL
-3639681024,3639684991,US
-3639684992,3639685119,SA
-3639685120,3639692031,US
+3639681024,3639685055,US
+3639685056,3639685063,SA
+3639685064,3639692031,US
3639692032,3639692287,GB
3639692288,3639704573,US
3639704574,3639704574,GB
@@ -92760,7 +99998,9 @@
3639737375,3639737599,GB
3639737600,3639737629,US
3639737630,3639737630,GB
-3639737631,3639902207,US
+3639737631,3639868415,US
+3639868416,3639868543,MX
+3639868544,3639902207,US
3639902208,3639918591,PE
3639918592,3639934975,AR
3639934976,3640057855,US
@@ -92842,7 +100082,9 @@
3641356536,3641356543,CM
3641356544,3641357983,GB
3641357984,3641358015,SL
-3641358016,3641360383,GB
+3641358016,3641359359,GB
+3641359360,3641359615,US
+3641359616,3641360383,GB
3641360384,3641368575,RO
3641368576,3641372671,GB
3641372672,3641376767,BG
@@ -92915,9 +100157,9 @@
3641669120,3641670271,ZW
3641670272,3641670911,GB
3641670912,3641671167,LS
-3641671168,3641671423,ZW
-3641671424,3641671679,GB
+3641671168,3641671679,GB
3641671680,3641679871,RU
+3641679872,3641680127,DK
3641681152,3641681407,SE
3641681408,3641681663,FR
3641683968,3641688063,KZ
@@ -93053,8 +100295,7 @@
3642253312,3642257407,FI
3642257408,3642261503,RU
3642261504,3642265599,BA
-3642265600,3642267647,AE
-3642267648,3642269695,IR
+3642265600,3642269695,AE
3642269696,3642273791,UA
3642273792,3642277887,RU
3642277888,3642290175,DE
@@ -93125,7 +100366,9 @@
3642554199,3642554199,RU
3642554200,3642554367,UA
3642554368,3642554623,LT
-3642554624,3642556415,UA
+3642554624,3642554720,UA
+3642554721,3642554721,LV
+3642554722,3642556415,UA
3642556416,3642560511,CZ
3642560512,3642564607,KG
3642564608,3642568703,DE
@@ -93160,7 +100403,9 @@
3642691584,3642695679,DE
3642695680,3642699775,SK
3642699776,3642703871,CZ
-3642703872,3642707967,LU
+3642703872,3642705151,LU
+3642705152,3642705407,DE
+3642705408,3642707967,LU
3642707968,3642712063,DE
3642712064,3642716159,NO
3642716160,3642720255,IT
@@ -93202,15 +100447,7 @@
3644928000,3644932095,GI
3644932096,3644936191,IT
3644936192,3644940287,RU
-3644940288,3644942847,HU
-3644942848,3644943103,BG
-3644943104,3644943359,HU
-3644943360,3644943615,BG
-3644943616,3644946175,HU
-3644946176,3644946687,BG
-3644946688,3644946943,HU
-3644946944,3644947967,BG
-3644947968,3644948479,HU
+3644940288,3644948479,HU
3644948480,3644952575,DE
3644952576,3644960767,GB
3644960768,3644964863,TR
@@ -93226,9 +100463,7 @@
3645009920,3645014015,FR
3645014016,3645018111,DE
3645018112,3645022207,RU
-3645022208,3645023743,CZ
-3645023744,3645023999,SK
-3645024000,3645030399,CZ
+3645022208,3645030399,CZ
3645030400,3645038591,IR
3645038592,3645046783,PS
3645046784,3645050879,RU
@@ -93302,6 +100537,7 @@
3645325312,3645329407,IT
3645329408,3645333503,CH
3645334272,3645335039,DE
+3645335688,3645335691,DE
3645337600,3645341695,FR
3645341696,3645345791,RU
3645345792,3645349887,FI
@@ -93491,7 +100727,11 @@
3647966208,3647967231,GB
3647967232,3647968255,BE
3647968256,3647969279,FR
-3647969280,3647971327,DE
+3647969280,3647969327,DE
+3647969328,3647969335,IT
+3647969336,3647970047,DE
+3647970048,3647970303,BE
+3647970304,3647971327,DE
3647971328,3647972351,GB
3647972352,3647973375,IT
3647973376,3647973399,DE
@@ -93514,9 +100754,7 @@
3647980384,3647980415,FR
3647980416,3647980543,DE
3647980544,3647981567,GB
-3647981568,3647981823,BE
-3647981824,3647982079,DK
-3647982080,3647982591,BE
+3647981568,3647982591,BE
3647982592,3647983615,IT
3647983616,3647984031,DE
3647984032,3647984047,NL
@@ -93599,7 +100837,9 @@
3648192512,3648196607,DE
3648196608,3648200703,IT
3648200704,3648208895,SE
-3648208896,3648212991,DE
+3648208896,3648209166,DE
+3648209167,3648209169,GB
+3648209170,3648212991,DE
3648212992,3648217087,RU
3648217088,3648221183,UA
3648221184,3648225279,IE
@@ -93667,9 +100907,7 @@
3648512000,3648516095,NL
3648516096,3648519167,RS
3648519168,3648520191,MK
-3648520192,3648523775,NL
-3648523776,3648524031,DE
-3648524032,3648782335,NL
+3648520192,3648782335,NL
3648782336,3649044479,ES
3649044480,3649110015,FR
3649110016,3649175551,PT
@@ -93763,7 +101001,9 @@
3650285568,3650289663,UA
3650289664,3650297855,RU
3650297856,3650301951,LT
-3650301952,3650310143,DE
+3650301952,3650307103,DE
+3650307104,3650307134,GB
+3650307135,3650310143,DE
3650310144,3650314239,GB
3650314240,3650318335,DE
3650318336,3650322431,GI
@@ -93864,16 +101104,17 @@
3650748416,3650879487,GB
3650879488,3650912255,RO
3650912256,3650915327,GB
-3650915328,3650915337,FR
-3650915338,3650915338,BE
-3650915339,3650915583,FR
+3650915328,3650915583,FR
3650915584,3650920447,GB
3650920448,3650920457,FR
3650920458,3650920458,GB
3650920459,3650920703,FR
-3650920704,3650926079,GB
-3650926080,3650926335,BE
-3650926336,3650926591,GB
+3650920704,3650920895,LB
+3650920896,3650920927,GB
+3650920928,3650920959,LB
+3650920960,3650922799,GB
+3650922800,3650922815,FR
+3650922816,3650926591,GB
3650926592,3650929663,ES
3650929664,3650929847,GB
3650929848,3650929855,FR
@@ -93885,9 +101126,9 @@
3650932976,3650939599,GB
3650939600,3650939607,FR
3650939608,3650939615,TR
-3650939616,3650944511,GB
-3650944512,3650944767,FR
-3650944768,3650945023,GB
+3650939616,3650940927,GB
+3650940928,3650941183,NL
+3650941184,3650945023,GB
3650945024,3651010559,DK
3651010560,3651076095,GB
3651076096,3651108863,DE
@@ -93896,7 +101137,9 @@
3651152896,3651153919,GB
3651153920,3651168255,DE
3651168256,3651169023,ES
-3651169024,3651207167,DE
+3651169024,3651192319,DE
+3651192320,3651193343,GB
+3651193344,3651207167,DE
3651207168,3651207199,GB
3651207224,3651207295,GB
3651207424,3651207615,GB
@@ -94007,7 +101250,9 @@
3651958784,3651960831,IR
3651960832,3651964927,GB
3651964928,3651969023,SK
-3651969024,3651977215,DE
+3651969024,3651971613,DE
+3651971614,3651971614,TR
+3651971615,3651977215,DE
3651977216,3651985407,IT
3651985408,3651997695,PL
3651997696,3652001791,RU
@@ -94044,16 +101289,18 @@
3652149248,3652153343,DE
3652153344,3652157439,SE
3652157440,3652165631,RU
-3652165632,3652169471,FR
+3652165632,3652165887,GF
+3652165888,3652169471,FR
3652169472,3652169727,GF
-3652169728,3652170495,MQ
-3652170496,3652170751,FR
+3652169728,3652170239,MQ
+3652170240,3652170751,FR
3652170752,3652171007,MQ
-3652171008,3652172031,FR
-3652172032,3652172287,RE
-3652172288,3652172799,FR
-3652172800,3652173055,RE
-3652173056,3652173823,FR
+3652171008,3652171519,FR
+3652171520,3652171775,MQ
+3652171776,3652172287,RE
+3652172288,3652172543,FR
+3652172544,3652172799,RE
+3652172800,3652173823,FR
3652173824,3652177919,AT
3652177920,3652182015,CY
3652182016,3652190207,DE
@@ -94067,7 +101314,9 @@
3653386240,3653390335,DE
3653390336,3653394431,FR
3653394432,3653402623,NL
-3653402624,3653410060,GB
+3653402624,3653407103,GB
+3653407104,3653407111,UG
+3653407112,3653410060,GB
3653410061,3653410061,YT
3653410062,3653410815,GB
3653410816,3653414911,CZ
@@ -94083,9 +101332,7 @@
3653451776,3653464063,RU
3653464064,3653468159,NL
3653468160,3653472255,GR
-3653472256,3653472511,NL
-3653472512,3653472767,US
-3653472768,3653476351,NL
+3653472256,3653476351,NL
3653476352,3653480447,CZ
3653480448,3653484543,DK
3653484544,3653488639,TR
@@ -94152,8 +101399,7 @@
3654025216,3654287359,GB
3654287360,3654608404,SE
3654608405,3654608405,NO
-3654608406,3654608639,SE
-3654608640,3654608895,RU
+3654608406,3654608895,SE
3654608896,3654609919,NO
3654609920,3654614143,SE
3654614144,3654614271,FI
@@ -94168,13 +101414,13 @@
3659628544,3659661311,JP
3659661312,3659792383,TW
3659792384,3660054527,KR
-3660054528,3660097535,JP
-3660097536,3660097791,US
-3660097792,3660099583,JP
-3660099584,3660099839,US
-3660099840,3660102143,JP
-3660102144,3660102399,US
-3660102400,3660102655,JP
+3660054528,3660097023,JP
+3660097024,3660097279,US
+3660097280,3660099071,JP
+3660099072,3660099583,US
+3660099584,3660100095,JP
+3660100096,3660100607,US
+3660100608,3660102655,JP
3660102656,3660102911,US
3660102912,3660578815,JP
3660578816,3661103103,KR
@@ -94250,7 +101496,9 @@
3669618688,3669620735,CN
3669622784,3669688319,SG
3669688320,3669753855,TW
-3669753856,3670015999,HK
+3669753856,3669777663,HK
+3669777664,3669777919,SG
+3669777920,3670015999,HK
3670016000,3671064575,CN
3671064576,3671130111,MY
3671130112,3671195647,KR
@@ -94385,7 +101633,9 @@
3715760128,3715891199,CN
3715891200,3716153343,HK
3716153344,3716169727,SG
-3716169728,3716186111,TH
+3716169728,3716175615,JP
+3716175616,3716184575,TH
+3716184576,3716186111,JP
3716186112,3716415487,CN
3716415488,3716431871,VN
3716431872,3716440063,KR
@@ -94546,16 +101796,12 @@
3755988992,3755990015,HK
3755990016,3755991039,SG
3755991040,3755999231,JP
-3755999232,3756002815,IN
-3756002816,3756003071,LK
-3756003072,3757047807,IN
+3755999232,3757047807,IN
3757047808,3757834239,CN
3757834240,3757867007,AU
3757867008,3757875519,CN
3757875520,3757875583,HK
-3757875584,3757880063,CN
-3757880064,3757883391,HK
-3757883392,3757899775,CN
+3757875584,3757899775,CN
3757899776,3757965311,KR
3757965312,3758063615,CN
3758063616,3758079999,HK
diff --git a/src/config/geoip6 b/src/config/geoip6
index 06bd578b85..b5f0575cbf 100644
--- a/src/config/geoip6
+++ b/src/config/geoip6
@@ -1,8 +1,16 @@
-# Last updated based on August 7 2014 Maxmind GeoLite2 Country
+# Last updated based on November 15 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:200::,2001:200::ffff:ffff:ffff:ffff:ffff,JP
+2001:200:120::,2001:200:120:ffff:ffff:ffff:ffff:ffff,JP
+2001:200:148::,2001:200:148:ffff:ffff:ffff:ffff:ffff,JP
+2001:200:167::,2001:200:167:ffff:ffff:ffff:ffff:ffff,JP
+2001:208:3::,2001:208:3:ffff:ffff:ffff:ffff:ffff,SG
+2001:208:5::,2001:208:5:ffff:ffff:ffff:ffff:ffff,SG
+2001:218::,2001:218:e000:ffff:ffff:ffff:ffff:ffff,JP
+2001:218:e001::,2001:218:e001:ffff:ffff:ffff:ffff:ffff,US
+2001:218:e002::,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
@@ -46,7 +54,9 @@
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:380::,2001:380:1fb:ffff:ffff:ffff:ffff:ffff,JP
+2001:380:1fc::,2001:380:1fc:ffff:ffff:ffff:ffff:ffff,VN
+2001:380:1fd::,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
@@ -60,9 +70,2170 @@
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:4ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2001:500::,2001:5ff:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:600::,2001:7ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+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:4049:ffff:ffff:ffff:ffff:ffff,US
+2001:420:404a::,2001:420:404a:ffff:ffff:ffff:ffff:ffff,GB
+2001:420:404b::,2001:420:5040:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5041::,2001:420:5041:ffff:ffff:ffff:ffff:ffff,AU
+2001:420:5042::,2001:420:5042:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5043::,2001:420:5043:ffff:ffff:ffff:ffff:ffff,AU
+2001:420:5044::,2001:420:5441:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5442::,2001:420:5442:ffff:ffff:ffff:ffff:ffff,IN
+2001:420:5443::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5883::,2001:420:5883:ffff:ffff:ffff:ffff:ffff,CN
+2001:420:5884::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5a40::,2001:420:5a40:ffff:ffff:ffff:ffff:ffff,CN
+2001:420:5a41::,2001:420:5a43:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5a44::,2001:420:5a44:ffff:ffff:ffff:ffff:ffff,CN
+2001:420:5a45::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5c40::,2001:420:5c40:ffff:ffff:ffff:ffff:ffff,SG
+2001:420:5c41::,2001:420:c0cf:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0d0::,2001:420:c0d0:ffff:ffff:ffff:ffff:ffff,AU
+2001:420:c0d1::,2001:420:c0d3:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0d4::,2001:420:c0d4:ffff:ffff:ffff:ffff:ffff,SG
+2001:420:c0d5::,2001:420:c0d7:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0d8::,2001:420:c0d8:ffff:ffff:ffff:ffff:ffff,CN
+2001:420:c0d9::,2001:420:c0df:ffff:ffff:ffff:ffff:ffff,US
+2001:420:c0e0::,2001:420:c0e0:ffff:ffff:ffff:ffff:ffff,IN
+2001:420:c0e1::,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:19:9ff:ffff:ffff:ffff:ffff,US
+2001:470:19:a00::,2001:470:19:fff:ffff:ffff:ffff:ffff,CN
+2001:470:19:1000::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1d::,2001:470:1d:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:1e::,2001:470:26:7ff:ffff:ffff:ffff:ffff,US
+2001:470:26:800::,2001:470:26:fff:ffff:ffff:ffff:ffff,CH
+2001:470:26:1000::,2001:470:34:ffff:ffff:ffff:ffff:ffff,US
+2001:470:35::,2001:470:35:7ff:ffff:ffff:ffff:ffff,ID
+2001:470:35:800::,2001:470:3c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:3d::,2001:470:3d:ffff:ffff:ffff:ffff:ffff,PH
+2001:470:3e::,2001:470:6d:3ff:ffff:ffff:ffff:ffff,US
+2001:470:6d:400::,2001:470:6d:7ff:ffff:ffff:ffff:ffff,DE
+2001:470:6d:800::,2001:470:1eff:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1f00::,2001:470:1f00:ffff:ffff:ffff:ffff:ffff,AU
+2001:470:1f01::,2001:470:69a3:ffff:ffff:ffff:ffff:ffff,US
+2001:470:69a4::,2001:470:69a4:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:69a5::,2001:470:6adc:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6add::,2001:470:6add:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6ade::,2001:470:6b2e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6b2f::,2001:470:6b2f:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6b30::,2001:470:6be4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6be5::,2001:470:6be5:ffff:ffff:ffff:ffff:ffff,GB
+2001:470:6be6::,2001:470:6bed:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6bee::,2001:470:6bee:ffff:ffff:ffff:ffff:ffff,IN
+2001:470:6bef::,2001:470:710f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7110::,2001:470:7110:ffff:ffff:ffff:ffff:ffff,UA
+2001:470:7111::,2001:470:75bf:ffff:ffff:ffff:ffff:ffff,US
+2001:470:75c0::,2001:470:75c0:ffff:ffff:ffff:ffff:ffff,TR
+2001:470:75c1::,2001:470:75c4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:75c5::,2001:470:75c5:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:75c6::,2001:470:80b6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:80b7::,2001:470:80b7:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:80b8::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US
+2001:470:81ef::,2001:470:81ef:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:81f0::,2001:470:83a2:ffff:ffff:ffff:ffff:ffff,US
+2001:470:83a3::,2001:470:83a3:ffff:ffff:ffff:ffff:ffff,AU
+2001:470:83a4::,2001:470:83bb:ffff:ffff:ffff:ffff:ffff,US
+2001:470:83bc::,2001:470:83bc:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:83bd::,2001:470:83e8:ffff:ffff:ffff:ffff:ffff,US
+2001:470:83e9::,2001:470:83e9:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:83ea::,2001:470:9ebf:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9ec0::,2001:470:9ec0:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:9ec1::,2001:470:b7a4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b7a5::,2001:470:b7a5:ffff:ffff:ffff:ffff:ffff,CH
+2001:470:b7a6::,2001:470:de60:ffff:ffff:ffff:ffff:ffff,US
+2001:470:de61::,2001:470:de61:ffff:ffff:ffff:ffff:ffff,RU
+2001:470:de62::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:e97f::,2001:470:e97f:ffff:ffff:ffff:ffff:ffff,CA
+2001:470:e980::,2001:470:ea76:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ea77::,2001:470:ea77:ffff:ffff:ffff:ffff:ffff,AU
+2001:470:ea78::,2001:470:f1fa:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f1fb::,2001:470:f1fb:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:f1fc::,2001:470:f382:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f383::,2001:470:f383:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:f384::,2001:470:fe3f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:fe40::,2001:470:fe40:ffff:ffff:ffff:ffff:ffff,JP
+2001:470:fe41::,2001:470:fe7b:ffff:ffff:ffff:ffff:ffff,US
+2001:470:fe7c::,2001:470:fe7c:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:fe7d::,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: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:29: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:504:30::,2001:504:34:ffff:ffff:ffff:ffff:ffff,US
+2001:504:35::,2001:504:35:ffff:ffff:ffff:ffff:ffff,GD
+2001:504:36::,2001:504:36:ffff:ffff:ffff:ffff:ffff,US
+2001:504:37::,2001:504:37:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:38::,2001:504:38:ffff:ffff:ffff:ffff:ffff,US
+2001:504:39::,2001:504:39:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:3a::,2001:504:3d:ffff:ffff:ffff:ffff:ffff,US
+2001:504:3e::,2001:504:3e:ffff:ffff:ffff:ffff:ffff,JM
+2001:504:3f::,2001:504:41:ffff:ffff:ffff:ffff:ffff,US
+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,US
+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:1000::,2001:5c0:1fff: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:64f:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:650::,2001:65f: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:678:9c::,2001:678:9c:ffff:ffff:ffff:ffff:ffff,SK
+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: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:604::,2001:67c:604:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:608::,2001:67c:608:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:60c::,2001:67c:60c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:610::,2001:67c:610:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:61c::,2001:67c:61c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:620::,2001:67c:620:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:624::,2001:67c:624:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:628::,2001:67c:628:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:62c::,2001:67c:62c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:630::,2001:67c:630:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:634::,2001:67c:634:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:638::,2001:67c:638:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:63c::,2001:67c:63c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:640::,2001:67c:640:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:644::,2001:67c:644:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:648::,2001:67c:648:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:64c::,2001:67c:64c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:650::,2001:67c:650:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:654::,2001:67c:654:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:658::,2001:67c:658:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:65c::,2001:67c:65c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:660::,2001:67c:660:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:664::,2001:67c:664:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:668::,2001:67c:668:ffff:ffff:ffff:ffff:ffff,MD
+2001:67c:66c::,2001:67c:66c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:670::,2001:67c:670:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:674::,2001:67c:674:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:678::,2001:67c:678:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:67c::,2001:67c:67c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:680::,2001:67c:680:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:684::,2001:67c:684:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:688::,2001:67c:688:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:68c::,2001:67c:68c:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:690::,2001:67c:690:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:694::,2001:67c:694:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:698::,2001:67c:698:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:69c::,2001:67c:69c:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:6a0::,2001:67c:6a0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:6a4::,2001:67c:6a4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:6a8::,2001:67c:6a8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:6ac::,2001:67c:6ac:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:6b0::,2001:67c:6b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:6b4::,2001:67c:6b4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:6b8::,2001:67c:6b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:6bc::,2001:67c:6bc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:6c0::,2001:67c:6c0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:6c4::,2001:67c:6c4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:6c8::,2001:67c:6c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:6cc::,2001:67c:6cc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:6d0::,2001:67c:6d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:6d4::,2001:67c:6d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:6d8::,2001:67c:6d8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:6dc::,2001:67c:6dc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:6e0::,2001:67c:6e0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:6e4::,2001:67c:6e4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:6e8::,2001:67c:6e8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:6ec::,2001:67c:6ec:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:6f0::,2001:67c:6f0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:6f4::,2001:67c:6f4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:6f8::,2001:67c:6f8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:6fc::,2001:67c:6fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:700::,2001:67c:700:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:704::,2001:67c:704:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:708::,2001:67c:708:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:70c::,2001:67c:70c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:710::,2001:67c:710:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:714::,2001:67c:714:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:718::,2001:67c:718:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:71c::,2001:67c:71c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:720::,2001:67c:720:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:724::,2001:67c:724:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:728::,2001:67c:728:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:72c::,2001:67c:72c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:730::,2001:67c:730:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:734::,2001:67c:734:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:738::,2001:67c:738:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:73c::,2001:67c:73c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:740::,2001:67c:740:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:744::,2001:67c:744:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:748::,2001:67c:748:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:74c::,2001:67c:74c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:750::,2001:67c:750:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:754::,2001:67c:754:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:758::,2001:67c:758:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:75c::,2001:67c:75c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:760::,2001:67c:760:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:764::,2001:67c:764:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:768::,2001:67c:768:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:76c::,2001:67c:76c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:770::,2001:67c:771:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:778::,2001:67c:778:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:77c::,2001:67c:77c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:784::,2001:67c:784:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:788::,2001:67c:788:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:78c::,2001:67c:78c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:790::,2001:67c:790:ffff:ffff:ffff:ffff:ffff,IT
+2001:67c:794::,2001:67c:794:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:798::,2001:67c:798:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:79c::,2001:67c:79c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:7a0::,2001:67c:7a0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:7a4::,2001:67c:7a4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:7a8::,2001:67c:7a8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:7ac::,2001:67c:7ac:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:7b0::,2001:67c:7b0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:7b4::,2001:67c:7b4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:7b8::,2001:67c:7b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:7c0::,2001:67c:7c3:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:7d0::,2001:67c:7d0:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:7d4::,2001:67c:7d4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:7d8::,2001:67c:7d8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:7dc::,2001:67c:7dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:7e0::,2001:67c:7e0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:7e4::,2001:67c:7e4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:7e8::,2001:67c:7e8:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:7ec::,2001:67c:7ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:7f0::,2001:67c:7f0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:7f4::,2001:67c:7f4:ffff:ffff:ffff:ffff:ffff,KW
+2001:67c:7f8::,2001:67c:7f8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:7fc::,2001:67c:7fc:ffff:ffff:ffff:ffff:ffff,NL
+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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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:67c:2c00::,2001:67c:2c00:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2c04::,2001:67c:2c04:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c08::,2001:67c:2c08:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c0c::,2001:67c:2c0c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c10::,2001:67c:2c10:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c14::,2001:67c:2c14:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c18::,2001:67c:2c18:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2c1c::,2001:67c:2c1c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2c20::,2001:67c:2c20:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c24::,2001:67c:2c24:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2c28::,2001:67c:2c28:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c2c::,2001:67c:2c2c:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:2c30::,2001:67c:2c30:ffff:ffff:ffff:ffff:ffff,DE
+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:700:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:708::,2001:708:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:710::,2001:710:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:718::,2001:718:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:720::,2001:720:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:728::,2001:728:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:730::,2001:737:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:738::,2001:738:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2001:748::,2001:748:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:750::,2001:750:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:758::,2001:758:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:760::,2001:760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:768::,2001:768:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:770::,2001:770:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:778::,2001:77f:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2001:780::,2001:787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:788::,2001:78f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:790::,2001:790:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:798::,2001:798:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:7a0::,2001:7a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:7a8::,2001:7a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:7b0::,2001:7b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:7b8::,2001:7b8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:7c0::,2001:7c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:7c8::,2001:7c8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:7d0::,2001:7d0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:7d8::,2001:7d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:7e0::,2001:7e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:7e8::,2001:7e8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:7f8::,2001:7f8::ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:1::,2001:7f8:1:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:2::,2001:7f8:2:ffff:ffff:ffff:ffff:ffff,IT
+2001:7f8:3::,2001:7f8:5:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:6::,2001:7f8:6:ffff:ffff:ffff:ffff:ffff,BG
+2001:7f8:7::,2001:7f8:7:ffff:ffff:ffff:ffff:ffff,FI
+2001:7f8:8::,2001:7f8:8:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:9::,2001:7f8:9:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:a::,2001:7f8:a:ffff:ffff:ffff:ffff:ffff,PT
+2001:7f8:b::,2001:7f8:b:ffff:ffff:ffff:ffff:ffff,IT
+2001:7f8:c::,2001:7f8:c:ffff:ffff:ffff:ffff:ffff,CH
+2001:7f8:d::,2001:7f8:d:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:e::,2001:7f8:e:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:f::,2001:7f8:f:ffff:ffff:ffff:ffff:ffff,ES
+2001:7f8:10::,2001:7f8:10:ffff:ffff:ffff:ffff:ffff,IT
+2001:7f8:12::,2001:7f8:12:ffff:ffff:ffff:ffff:ffff,NO
+2001:7f8:13::,2001:7f8:13:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:14::,2001:7f8:14:ffff:ffff:ffff:ffff:ffff,CZ
+2001:7f8:15::,2001:7f8:15:ffff:ffff:ffff:ffff:ffff,EE
+2001:7f8:16::,2001:7f8:16:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:17::,2001:7f8:17:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:18::,2001:7f8:18:ffff:ffff:ffff:ffff:ffff,IE
+2001:7f8:19::,2001:7f8:19:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:1b::,2001:7f8:1b:ffff:ffff:ffff:ffff:ffff,BE
+2001:7f8:1c::,2001:7f8:1c:ffff:ffff:ffff:ffff:ffff,CH
+2001:7f8:1d::,2001:7f8:1d:ffff:ffff:ffff:ffff:ffff,FI
+2001:7f8:1e::,2001:7f8:1e:ffff:ffff:ffff:ffff:ffff,RS
+2001:7f8:1f::,2001:7f8:1f:ffff:ffff:ffff:ffff:ffff,DK
+2001:7f8:20::,2001:7f8:20:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:21::,2001:7f8:21:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:23::,2001:7f8:23:ffff:ffff:ffff:ffff:ffff,IT
+2001:7f8:24::,2001:7f8:24:ffff:ffff:ffff:ffff:ffff,CH
+2001:7f8:25::,2001:7f8:25:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:26::,2001:7f8:26:ffff:ffff:ffff:ffff:ffff,BE
+2001:7f8:27::,2001:7f8:27:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:28::,2001:7f8:28:ffff:ffff:ffff:ffff:ffff,HR
+2001:7f8:29::,2001:7f8:29:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:2a::,2001:7f8:2a:ffff:ffff:ffff:ffff:ffff,ES
+2001:7f8:2d::,2001:7f8:2d:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:2f::,2001:7f8:2f:ffff:ffff:ffff:ffff:ffff,SK
+2001:7f8:30::,2001:7f8:30:ffff:ffff:ffff:ffff:ffff,AT
+2001:7f8:31::,2001:7f8:31:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:33::,2001:7f8:33:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:34::,2001:7f8:34:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:35::,2001:7f8:35:ffff:ffff:ffff:ffff:ffff,HU
+2001:7f8:37::,2001:7f8:38:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:39::,2001:7f8:39:ffff:ffff:ffff:ffff:ffff,EE
+2001:7f8:3a::,2001:7f8:3a:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:3b::,2001:7f8:3b:ffff:ffff:ffff:ffff:ffff,IL
+2001:7f8:3d::,2001:7f8:3d:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:3e::,2001:7f8:3e:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:41::,2001:7f8:41:ffff:ffff:ffff:ffff:ffff,NO
+2001:7f8:42::,2001:7f8:42:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:43::,2001:7f8:43:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:44::,2001:7f8:44:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:45::,2001:7f8:45:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:46::,2001:7f8:46:ffff:ffff:ffff:ffff:ffff,SI
+2001:7f8:47::,2001:7f8:47:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:48::,2001:7f8:48:ffff:ffff:ffff:ffff:ffff,IS
+2001:7f8:4a::,2001:7f8:4a:ffff:ffff:ffff:ffff:ffff,AT
+2001:7f8:4b::,2001:7f8:4b:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:4c::,2001:7f8:4c:ffff:ffff:ffff:ffff:ffff,LU
+2001:7f8:4d::,2001:7f8:4d:ffff:ffff:ffff:ffff:ffff,IE
+2001:7f8:4e::,2001:7f8:4e:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:4f::,2001:7f8:4f:ffff:ffff:ffff:ffff:ffff,BH
+2001:7f8:50::,2001:7f8:50:ffff:ffff:ffff:ffff:ffff,EE
+2001:7f8:51::,2001:7f8:51:ffff:ffff:ffff:ffff:ffff,UA
+2001:7f8:52::,2001:7f8:52:ffff:ffff:ffff:ffff:ffff,LB
+2001:7f8:53::,2001:7f8:53:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:54::,2001:7f8:54:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:55::,2001:7f8:55:ffff:ffff:ffff:ffff:ffff,UA
+2001:7f8:56::,2001:7f8:56:ffff:ffff:ffff:ffff:ffff,DE
+2001:7f8:58::,2001:7f8:58:ffff:ffff:ffff:ffff:ffff,BG
+2001:7f8:59::,2001:7f8:59:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:5a::,2001:7f8:5a:ffff:ffff:ffff:ffff:ffff,BY
+2001:7f8:5b::,2001:7f8:5b:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:5c::,2001:7f8:5c:ffff:ffff:ffff:ffff:ffff,SE
+2001:7f8:5d::,2001:7f8:5d:ffff:ffff:ffff:ffff:ffff,UA
+2001:7f8:5e::,2001:7f8:5e:ffff:ffff:ffff:ffff:ffff,CZ
+2001:7f8:5f::,2001:7f8:5f:ffff:ffff:ffff:ffff:ffff,IT
+2001:7f8:60::,2001:7f8:60:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:61::,2001:7f8:61:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:63::,2001:7f8:63:ffff:ffff:ffff:ffff:ffff,UA
+2001:7f8:64::,2001:7f8:64:ffff:ffff:ffff:ffff:ffff,RO
+2001:7f8:66::,2001:7f8:66:ffff:ffff:ffff:ffff:ffff,AT
+2001:7f8:67::,2001:7f8:67:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:68::,2001:7f8:68:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:69::,2001:7f8:69:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:6a::,2001:7f8:6a:ffff:ffff:ffff:ffff:ffff,MD
+2001:7f8:6b::,2001:7f8:6b:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:6c::,2001:7f8:6c:ffff:ffff:ffff:ffff:ffff,UA
+2001:7f8:6d::,2001:7f8:6d:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:6e::,2001:7f8:6e:ffff:ffff:ffff:ffff:ffff,GR
+2001:7f8:6f::,2001:7f8:70:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:71::,2001:7f8:71:ffff:ffff:ffff:ffff:ffff,AT
+2001:7f8:72::,2001:7f8:72:ffff:ffff:ffff:ffff:ffff,PS
+2001:7f8:73::,2001:7f8:73:ffff:ffff:ffff:ffff:ffff,AE
+2001:7f8:74::,2001:7f8:75:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:76::,2001:7f8:76:ffff:ffff:ffff:ffff:ffff,NO
+2001:7f8:77::,2001:7f8:78:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:79::,2001:7f8:79:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:7a::,2001:7f8:7a:ffff:ffff:ffff:ffff:ffff,AE
+2001:7f8:7b::,2001:7f8:7b:ffff:ffff:ffff:ffff:ffff,UA
+2001:7f8:7c::,2001:7f8:7c:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:7d::,2001:7f8:7d:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:7e::,2001:7f8:7e:ffff:ffff:ffff:ffff:ffff,ES
+2001:7f8:7f::,2001:7f8:7f:ffff:ffff:ffff:ffff:ffff,CZ
+2001:7f8:81::,2001:7f8:81:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:82::,2001:7f8:82:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:83::,2001:7f8:83:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:84::,2001:7f8:84:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:85::,2001:7f8:85:ffff:ffff:ffff:ffff:ffff,HU
+2001:7f8:86::,2001:7f8:86:ffff:ffff:ffff:ffff:ffff,NL
+2001:7f8:87::,2001:7f8:87:ffff:ffff:ffff:ffff:ffff,CZ
+2001:7f8:88::,2001:7f8:89:ffff:ffff:ffff:ffff:ffff,FR
+2001:7f8:8a::,2001:7f8:8a:ffff:ffff:ffff:ffff:ffff,PL
+2001:7f8:8b::,2001:7f8:8b:ffff:ffff:ffff:ffff:ffff,BY
+2001:7f8:8d::,2001:7f8:8d:ffff:ffff:ffff:ffff:ffff,AT
+2001:7f8:8e::,2001:7f8:8e:ffff:ffff:ffff:ffff:ffff,BG
+2001:7fa:0:1::,2001:7fa::1:ffff:ffff:ffff:ffff,HK
+2001:7fa:0:2::,2001:7fa::2:ffff:ffff:ffff:ffff,KR
+2001:7fa:0:3::,2001:7fa::3:ffff:ffff:ffff:ffff,JP
+2001:7fa:1::,2001:7fa:1:ffff:ffff:ffff:ffff:ffff,TW
+2001:7fa:2::,2001:7fa:2:ffff:ffff:ffff:ffff:ffff,ID
+2001:7fa:3::,2001:7fa:4:ffff:ffff:ffff:ffff:ffff,NZ
+2001:7fa:5::,2001:7fa:5:ffff:ffff:ffff:ffff:ffff,CN
+2001:7fa:6::,2001:7fa:6:ffff:ffff:ffff:ffff:ffff,VN
+2001:7fa:7::,2001:7fa:7:ffff:ffff:ffff:ffff:ffff,JP
+2001:7fa:8::,2001:7fa:8:ffff:ffff:ffff:ffff:ffff,KR
+2001:7fa:9::,2001:7fa:e:ffff:ffff:ffff:ffff:ffff,AU
+2001:7fa:f::,2001:7fa:f:ffff:ffff:ffff:ffff:ffff,ID
+2001:7fa:10::,2001:7fa:10:ffff:ffff:ffff:ffff:ffff,CN
+2001:7fa:11::,2001:7fa:11:ffff:ffff:ffff:ffff:ffff,AU
+2001:7fe::,2001:7fe:ffff:ffff:ffff:ffff:ffff:ffff,SE
2001:808::,2001:808:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:810::,2001:810:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:818::,2001:81f:ffff:ffff:ffff:ffff:ffff:ffff,PT
@@ -93,8 +2264,64 @@
2001:8e0::,2001:8e8:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:8f0::,2001:8f3:ffff:ffff:ffff:ffff:ffff:ffff,CY
2001:8f8::,2001:8ff:ffff:ffff:ffff:ffff:ffff:ffff,AE
-2001:900::,2001:9ff:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:a00::,2001:aff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:900::,2001:900:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:908::,2001:908:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:910::,2001:917:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:918::,2001:918:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:920::,2001:927:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:928::,2001:928:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:930::,2001:930:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2001:938::,2001:938:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:940::,2001:940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:948::,2001:948:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:950::,2001:950:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2001:958::,2001:958:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:960::,2001:960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:968::,2001:968:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:978::,2001:978:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:980::,2001:987:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:988::,2001:988:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:990::,2001:990:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:998::,2001:99b:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:9a0::,2001:9a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:9a8::,2001:9a8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:9b0::,2001:9b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:9c0::,2001:9c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:9c8::,2001:9cf:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:9d0::,2001:9d0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:9d8::,2001:9d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:9e0::,2001:9e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:9e8::,2001:9e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:9f0::,2001:9f0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:a00::,2001:a00:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:a08::,2001:a08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:a10::,2001:a10:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:a18::,2001:a1f:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:a20::,2001:a20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:a30::,2001:a30:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:a38::,2001:a38:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:a40::,2001:a40:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:a48::,2001:a48:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:a50::,2001:a50:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:a58::,2001:a58:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:a60::,2001:a67:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:a68::,2001:a68:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:a70::,2001:a70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:a78::,2001:a78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:a80::,2001:a80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:a88::,2001:a88:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:a90::,2001:a90:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:a98::,2001:a98:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2001:aa0::,2001:aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:aa8::,2001:ab7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:ab8::,2001:ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:ac0::,2001:ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:ac8::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:ad0::,2001:ad0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:ad8::,2001:ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:ae8::,2001:ae8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:af0::,2001:af0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:af8::,2001:af8:ffff:ffff:ffff:ffff:ffff:ffff,AT
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
@@ -116,7 +2343,7 @@
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:bb0::,2001:bb7: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
@@ -156,8 +2383,759 @@
2001:ce8::,2001:ce8:ffff:ffff:ffff:ffff:ffff:ffff,JP
2001:cf0::,2001:cf0:ffff:ffff:ffff:ffff:ffff:ffff,KR
2001:cf8::,2001:cf8:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2001:d00::,2001:db7:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2001:db9::,2001:dff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+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:deb::,2001:deb::ffff:ffff:ffff:ffff:ffff,TH
+2001:dec::,2001:dec::ffff:ffff:ffff:ffff:ffff,VU
+2001:ded::,2001:ded::ffff:ffff:ffff:ffff:ffff,SG
+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: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:29e::,2001:df0:29e:ffff:ffff:ffff:ffff:ffff,SG
+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:2b4::,2001:df0:2b4:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2b5::,2001:df0:2b5:ffff:ffff:ffff:ffff:ffff,ID
+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,MY
+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: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: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:c00::,2001:df0:c00:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:1000::,2001:df0:1000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:1400::,2001:df0:1400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:1800::,2001:df0:1800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:1c00::,2001:df0:1c00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2000::,2001:df0:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2400::,2001:df0:2400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2800::,2001:df0:2800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2c00::,2001:df0:2c00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:3000::,2001:df0:3000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:3400::,2001:df0:3400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:3800::,2001:df0:3800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:3c00::,2001:df0:3c00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:4400::,2001:df0:4400:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:4c00::,2001:df0:4c00:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:5000::,2001:df0:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:5400::,2001:df0:5400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:5800::,2001:df0:5800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:5c00::,2001:df0:5c00:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:6000::,2001:df0:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:6400::,2001:df0:6400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:6c00::,2001:df0:6c00:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:7000::,2001:df0:7000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:7400::,2001:df0:7400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:7800::,2001:df0:7800:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:7c00::,2001:df0:7c00:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:8000::,2001:df0:8000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8400::,2001:df0:8400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8800::,2001:df0:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8c00::,2001:df0:8c00:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:9400::,2001:df0:9400:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:9800::,2001:df0:9800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:9c00::,2001:df0:9c00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a000::,2001:df0:a000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a400::,2001:df0:a400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a800::,2001:df0:a800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:ac00::,2001:df0:ac00:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:b000::,2001:df0:b000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:b400::,2001:df0:b400:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:b800::,2001:df0:b800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:bc00::,2001:df0:bc00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c000::,2001:df0:c000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:c400::,2001:df0:c400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:c800::,2001:df0:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:cc00::,2001:df0:cc00:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:d000::,2001:df0:d000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:d400::,2001:df0:d400:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:d800::,2001:df0:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:dc00::,2001:df0:dc00:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:e000::,2001:df0:e000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:e400::,2001:df0:e400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:e800::,2001:df0:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:ec00::,2001:df0:ec00:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:f000::,2001:df0:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:f400::,2001:df0:f401:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:f800::,2001:df0:f800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:fc00::,2001:df0:fc01:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1::,2001:df1::ffff:ffff:ffff:ffff:ffff,TH
+2001:df1:400::,2001:df1:400:ffff:ffff:ffff:ffff:ffff,BD
+2001:df1:800::,2001:df1:800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:c00::,2001:df1:c00:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:1000::,2001:df1:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:1400::,2001:df1:1400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:1800::,2001:df1:1800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:1c00::,2001:df1:1c00:ffff:ffff:ffff:ffff:ffff,IN
+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: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:4800::,2001:df6:4801:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:5000::,2001:df6:5000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:5800::,2001:df6:5800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:6000::,2001:df6:6000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:6800::,2001:df6:6800:ffff:ffff:ffff:ffff:ffff,CN
+2001:df6:7000::,2001:df6:7000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df6:7800::,2001:df6:7800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:8000::,2001:df6:8000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:8800::,2001:df6:8800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:9000::,2001:df6:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:9800::,2001:df6:9800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:a000::,2001:df6:a000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:a800::,2001:df6:a800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:b000::,2001:df6:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:b800::,2001:df6:b800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df6:c000::,2001:df6:c000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:c800::,2001:df6:c800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:d000::,2001:df6:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:d800::,2001:df6:d800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df6:e800::,2001:df6:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:f000::,2001:df6:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:f800::,2001:df6:f800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7::,2001:df7::ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:800::,2001:df7:800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:1000::,2001:df7:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:1800::,2001:df7:1800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:2000::,2001:df7:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:2800::,2001:df7:2800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:3000::,2001:df7:3001:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df7:3800::,2001:df7:3800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:4000::,2001:df7:4000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:4800::,2001:df7:481f:ffff:ffff:ffff:ffff:ffff,JP
+2001:df7:5000::,2001:df7:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:5800::,2001:df7:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:6000::,2001:df7:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:6800::,2001:df7:6800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:7000::,2001:df7:7000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df7:7800::,2001:df7:7800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df7:8800::,2001:df7:8800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df7:9000::,2001:df7:9000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df7:9800::,2001:df7:9800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df7:a000::,2001:df7:a000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:a800::,2001:df7:a800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df7:b000::,2001:df7:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:b800::,2001:df7:b800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:c000::,2001:df7:c003:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:c800::,2001:df7:c800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:d000::,2001:df7:d000:ffff:ffff:ffff:ffff:ffff,BD
+2001:df7:d800::,2001:df7:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:e000::,2001:df7:e000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:e800::,2001:df7:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:f000::,2001:df7:f000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df7:f800::,2001:df7:f800:ffff:ffff:ffff:ffff:ffff,IN
+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:e01:ffff:ffff:ffff:ffff:ffff:ffff,ID
2001:e08::,2001:e08:ffff:ffff:ffff:ffff:ffff:ffff,CN
2001:e10::,2001:e10:ffff:ffff:ffff:ffff:ffff:ffff,TW
@@ -303,7 +3281,7 @@
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:1400::,2001:1407: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
@@ -316,7 +3294,9 @@
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:1468::,2001:1469:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:146a::,2001:146a::ffff:ffff:ffff:ffff:ffff,RU
+2001:146a:1::,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
@@ -386,7 +3366,9 @@
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:16c0::,2001:16c0:1233:ffff:ffff:ffff:ffff:ffff,IR
+2001:16c0:1234::,2001:16c0:1234:ffff:ffff:ffff:ffff:ffff,AU
+2001:16c0:1235::,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
@@ -497,7 +3479,7 @@
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:1b67:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2001:1b68::,2001:1b68:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2001:1b68::,2001:1b6f: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
@@ -517,6 +3499,8 @@
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:2002:4e48::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE
+2001:2003:54fa::,2001:2003:54fa:ffff:ffff:ffff:ffff:ffff,FI
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
@@ -575,7 +3559,6 @@
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
@@ -626,7 +3609,7 @@
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:43e0::,2001:43e0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
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
@@ -656,7 +3639,7 @@
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:1f0::,2001:43f8:1f6: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:230::,2001:43f8:230:ffff:ffff:ffff:ffff:ffff,ZA
@@ -724,7 +3707,34 @@
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:43f8:9c0::,2001:43f8:9c0:ffff:ffff:ffff:ffff:ffff,DJ
-2001:4400::,2001:44ff:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:43f8:9d0::,2001:43f8:9d0:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:9e0::,2001:43f8:9e0:ffff:ffff:ffff:ffff:ffff,ZW
+2001:43f8:9f0::,2001:43f8:9f0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:a00::,2001:43f8:a00:ffff:ffff:ffff:ffff:ffff,NG
+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
@@ -735,7 +3745,38 @@
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:48ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+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:11ff:ffff:ffff:ffff:ffff:ffff,US
+2001:4830:1200::,2001:4830:1200:ffff:ffff:ffff:ffff:ffff,AU
+2001:4830:1201::,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:8304:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8305::,2001:4878:8305:ffff:ffff:ffff:ffff:ffff,IN
+2001:4878:8306::,2001:4878: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: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
@@ -788,7 +3829,7 @@
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:4ba8::,2001:4baf: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
@@ -799,14 +3840,73 @@
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:4dff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4c00::,2001:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4c08::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4c10::,2001:4c10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4c20::,2001:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4c28::,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4c30::,2001:4c30:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4c38::,2001:4c3f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4c40::,2001:4c40:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:4c48::,2001:4c4f:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2001:4c50::,2001:4c57:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4c58::,2001:4c5f:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4c60::,2001:4c60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4c68::,2001:4c68:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4c70::,2001:4c70:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4c78::,2001:4c78:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4c80::,2001:4c80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4c88::,2001:4c88:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:4c90::,2001:4c97:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4c98::,2001:4c98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ca0::,2001:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ca8::,2001:4ca8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4cb0::,2001:4cb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4cb8::,2001:4cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4cc0::,2001:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:4cc8::,2001:4cc8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:4cd0::,2001:4cd0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:4cd8::,2001:4cd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ce0::,2001:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ce8::,2001:4cf0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4cf8::,2001:4cf8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+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
+2003::,2003:62:4401:ffff:ffff:ffff:ffff:ffff,DE
+2003:62:4402::,2003:62:4402:ffff:ffff:ffff:ffff:ffff,US
+2003:62:4403::,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:1200::,2400:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2400:1300::,2400:1300:ffff:ffff:ffff:ffff:ffff:ffff,TW
@@ -885,7 +3985,6 @@
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
@@ -1003,7 +4102,8 @@
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:8900::,2400:8900::ffff:ffff:ffff:ffff:ffff,JP
+2400:8900:1::,2400:8901: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
@@ -1051,7 +4151,6 @@
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
@@ -1131,7 +4230,15 @@
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:cb00::,2400:cb00:20:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:21::,2400:cb00:21:ffff:ffff:ffff:ffff:ffff,IT
+2400:cb00:22::,2400:cb00:24:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:25::,2400:cb00:25:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:26::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:39::,2400:cb00:39:ffff:ffff:ffff:ffff:ffff,IT
+2400:cb00:3a::,2400:cb00:f00c:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:f00d::,2400:cb00:f00d:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:f00e::,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
@@ -1372,6 +4479,7 @@
2401:4480::,2401:4480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:4500::,2401:4500:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:4580::,2401:4580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:4600::,2401:4600:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:4680::,2401:4680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:4700::,2401:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:4780::,2401:4780:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -1402,85 +4510,165 @@
2401:5480::,2401:5480:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:5500::,2401:5500:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:5580::,2401:5580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:5680::,2401:5680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:5700::,2401:5700:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:5780::,2401:5780:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:5800::,2401:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:5880::,2401:5880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:5900::,2401:5900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:5980::,2401:5980:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:5a00::,2401:5a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:5a80::,2401:5a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:5b00::,2401:5b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5b80::,2401:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:5c00::,2401:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5c80::,2401:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:5d00::,2401:5d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:5d80::,2401:5d80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:5e00::,2401:5e00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:5e80::,2401:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:5f00::,2401:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5f80::,2401:5f80:ffff:ffff:ffff:ffff:ffff:ffff,VN
2401:6000::,2401:6fff:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:7000::,2401:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:7080::,2401:7080:ffff:ffff:ffff:ffff:ffff:ffff,TW
2401:7100::,2401:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7180::,2401:7180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7200::,2401:7200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7280::,2401:7280:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:7300::,2401:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7380::,2401:7380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:7400::,2401:7401:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:7480::,2401:7480:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:7500::,2401:7500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:7580::,2401:7580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7600::,2401:7600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:7680::,2401:7680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7700::,2401:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7780::,2401:7780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7800::,2401:7800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:7880::,2401:7880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7900::,2401:7900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:7980::,2401:7980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7a00::,2401:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7a80::,2401:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7b00::,2401:7b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7b80::,2401:7b80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7c00::,2401:7c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:7c80::,2401:7c80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7d00::,2401:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:7d80::,2401:7d80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7e00::,2401:7e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7e80::,2401:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:7f00::,2401:7f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:7f80::,2401:7f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:8000::,2401:803f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:8080::,2401:8080:ffff:ffff:ffff:ffff:ffff:ffff,AF
2401:8100::,2401:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:8180::,2401:8180:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:8200::,2401:8200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8280::,2401:8280:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:8300::,2401:8300:ffff:ffff:ffff:ffff:ffff:ffff,MV
+2401:8380::,2401:8380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:8400::,2401:8400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:8480::,2401:8480:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:8500::,2401:8500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:8580::,2401:8580:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:8600::,2401:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8680::,2401:8680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:8700::,2401:8700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8780::,2401:8780:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:8800::,2401:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:8880::,2401:8880:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:8900::,2401:8900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:8980::,2401:8980:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:8a00::,2401:8a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:8a80::,2401:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:8b00::,2401:8b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8b80::,2401:8b80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:8c00::,2401:8c01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:8c80::,2401:8c80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:8d00::,2401:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8d80::,2401:8d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:8e00::,2401:8e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:8e80::,2401:8e80:ffff:ffff:ffff:ffff:ffff:ffff,PH
2401:8f00::,2401:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:8f80::,2401:8f80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:9080::,2401:9080:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:9100::,2401:9100:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2401:9180::,2401:9180:ffff:ffff:ffff:ffff:ffff:ffff,TW
2401:9200::,2401:9200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:9280::,2401:9280:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:9300::,2401:9300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:9380::,2401:9380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:9400::,2401:9400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9480::,2401:9480:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:9500::,2401:9500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9580::,2401:9580:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:9600::,2401:9600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:9680::,2401:9680:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:9700::,2401:9700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:9780::,2401:9780:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:9800::,2401:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
-2401:9900::,2401:9900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:9880::,2401:9880:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:9980::,2401:9980:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:9a00::,2401:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:9a80::,2401:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:9b00::,2401:9b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:9b80::,2401:9b80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:9c00::,2401:9c00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:9c80::,2401:9c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:9d00::,2401:9d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:9d80::,2401:9d80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:9e00::,2401:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:9e80::,2401:9e80:ffff:ffff:ffff:ffff:ffff:ffff,ID
2401:9f00::,2401:9f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:9f80::,2401:9f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:a000::,2401:a000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:a080::,2401:a080:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:a100::,2401:a100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a180::,2401:a180:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:a280::,2401:a280:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:a300::,2401:a300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:a380::,2401:a380:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:a400::,2401:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:a480::,2401:a480:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:a500::,2401:a500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:a580::,2401:a580:ffff:ffff:ffff:ffff:ffff:ffff,TH
2401:a600::,2401:a600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a680::,2401:a680:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:a700::,2401:a700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:a780::,2401:a780:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:a800::,2401:a800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:a880::,2401:a880:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:a900::,2401:a900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a980::,2401:a980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:aa00::,2401:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:aa80::,2401:aa80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:ab00::,2401:ab00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:ab80::,2401:ab80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:ac00::,2401:ac00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ac80::,2401:ac80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:ad00::,2401:ad00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:ad80::,2401:ad80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2401:ae00::,2401:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:ae80::,2401:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:af00::,2401:af00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2401:af80::,2401:af80:ffff:ffff:ffff:ffff:ffff:ffff,JP
2401:b000::,2401:b000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:b080::,2401:b080:ffff:ffff:ffff:ffff:ffff:ffff,SG
2401:b100::,2401:b100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:b180::,2401:b180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:b200::,2401:b200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:b280::,2401:b280:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:b300::,2401:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b380::,2401:b380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:b400::,2401:b400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:b480::,2401:b480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:b500::,2401:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b580::,2401:b580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:b600::,2401:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:b680::,2401:b680: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
@@ -1548,7 +4736,16 @@
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:fa00::,2401:fa00::ffff:ffff:ffff:ffff:ffff,AU
+2401:fa00:1::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:d::,2401:fa00:d:ffff:ffff:ffff:ffff:ffff,KR
+2401:fa00:e::,2401:fa00:e:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:f::,2401:fa00:f:ffff:ffff:ffff:ffff:ffff,SG
+2401:fa00:10::,2401:fa00:14:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:15::,2401:fa00:15:ffff:ffff:ffff:ffff:ffff,JP
+2401:fa00:16::,2401:fa00:3f:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:40::,2401:fa00:40:ffff:ffff:ffff:ffff:ffff,CN
+2401:fa00:41::,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
@@ -2005,6 +5202,7 @@
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
@@ -2290,7 +5488,7 @@
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,SG
+2404:e800::,2404:e801:ffff:ffff:ffff:ffff:ffff:ffff,SG
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
@@ -2307,7 +5505,13 @@
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:f801::,2404:f801:7:ffff:ffff:ffff:ffff:ffff,SG
+2404:f801:8::,2404:f801:8:ffff:ffff:ffff:ffff:ffff,IN
+2404:f801:9::,2404:f801:802f:ffff:ffff:ffff:ffff:ffff,SG
+2404:f801:8030::,2404:f801:8030:ffff:ffff:ffff:ffff:ffff,IN
+2404:f801:8031::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG
+2404:f801:8058::,2404:f801:8058:ffff:ffff:ffff:ffff:ffff,IN
+2404:f801:8059::,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
@@ -2520,7 +5724,6 @@
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
@@ -2537,7 +5740,6 @@
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
@@ -2590,7 +5792,11 @@
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:2000::,2406:2000:ef95:ffff:ffff:ffff:ffff:ffff,TW
+2406:2000:ef96::,2406:2000:ef96:ffff:ffff:ffff:ffff:ffff,HK
+2406:2000:ef97::,2406:2000:efb9:ffff:ffff:ffff:ffff:ffff,TW
+2406:2000:efba::,2406:2000:efba:ffff:ffff:ffff:ffff:ffff,HK
+2406:2000:efbb::,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
@@ -2606,7 +5812,7 @@
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:30ff:ffff:ffff:ffff:ffff:ffff:ffff,SG
+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
@@ -2677,6 +5883,7 @@
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:7700::,2406:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY
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
@@ -2837,7 +6044,6 @@
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
@@ -2951,7 +6157,6 @@
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
@@ -3064,6 +6269,7 @@
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
+240c:8000::,240c:87ff: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,JP
@@ -3088,10 +6294,9 @@
2600:1900::,2600:190f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:1a00::,2600:1a0f:ffff:ffff:ffff:ffff:ffff:ffff,GD
2600:1b00::,2600:1bff:ffff:ffff:ffff:ffff:ffff:ffff,JM
-2600:1c00::,2600:1c0f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:1d00::,2600:1d0f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:1e00::,2600:1e0f:ffff:ffff:ffff:ffff:ffff:ffff,VC
-2600:2000::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1f00::,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
@@ -3119,7 +6324,7 @@
2600:8400::,2600:840f:ffff:ffff:ffff:ffff:ffff:ffff,BB
2600:8800::,2600:880f: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,US
+2601::,2601:f:ffff:ffff:ffff:ffff:ffff:ffff,US
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
@@ -3127,7 +6332,23 @@
2602:230::,2602:231:ffff:ffff:ffff:ffff:ffff:ffff,US
2602:232::,2602:232:ffff:ffff:ffff:ffff:ffff:ffff,CA
2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US
-2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:300::,2602:306:b868:ffff:ffff:ffff:ffff:ffff,US
+2602:306:b869::,2602:306:b869:ffff:ffff:ffff:ffff:ffff,NL
+2602:306:b86a::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa2::,2602:ffa2:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa3::,2602:ffa3:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa4::,2602:ffa4:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa5::,2602:ffa5:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa6::,2602:ffa6:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa7::,2602:ffa7:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa8::,2602:ffa8:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffa9::,2602:ffa9:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffaa::,2602:ffaa:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffab::,2602:ffab:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffac::,2602:ffac:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffad::,2602:ffad:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffae::,2602:ffae:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffaf::,2602:ffaf:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb0::,2602:ffb0:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffb1::,2602:ffb1:fff:ffff:ffff:ffff:ffff:ffff,CA
2602:ffb2::,2602:ffb2:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -3269,7 +6490,9 @@
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:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2000::,2604:2000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2080::,2604:2080:ffff:ffff:ffff:ffff:ffff:ffff,US
+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
@@ -3395,7 +6618,9 @@
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:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6000::,2604:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6080::,2604:6080:ffff:ffff:ffff:ffff:ffff:ffff,US
+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
@@ -3469,10 +6694,10 @@
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:88ff:ffff:ffff:ffff:ffff:ffff:ffff,CA
+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
@@ -3558,6 +6783,7 @@
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
@@ -3601,6 +6827,7 @@
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
@@ -3630,7 +6857,6 @@
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
@@ -3745,7 +6971,6 @@
2605:1080::,2605:1080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:1100::,2605:1100:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:1180::,2605:1180:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:1200::,2605:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:1280::,2605:1280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:1300::,2605:1300:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:1380::,2605:1380:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -3800,6 +7025,7 @@
2605:2c80::,2605:2c80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:2d00::,2605:2d00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:2d80::,2605:2d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2e00::,2605:2e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:2e80::,2605:2e80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:2f00::,2605:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:2f80::,2605:2f80:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3852,7 +7078,6 @@
2605:4700::,2605:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4780::,2605:4780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4800::,2605:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:4880::,2605:4880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4900::,2605:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4980::,2605:4980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:4a00::,2605:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -3882,7 +7107,6 @@
2605:5600::,2605:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5680::,2605:5680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5700::,2605:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:5780::,2605:5780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5800::,2605:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5880::,2605:5880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5900::,2605:5900:ffff:ffff:ffff:ffff:ffff:ffff,JM
@@ -3899,7 +7123,9 @@
2605:5e80::,2605:5e80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5f00::,2605:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:5f80::,2605:5f80:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:6000::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6000::,2605:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6080::,2605:6080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6100::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:6180::,2605:6180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:6200::,2605:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:6280::,2605:6280:ffff:ffff:ffff:ffff:ffff:ffff,AI
@@ -4014,39 +7240,77 @@
2605:9900::,2605:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9980::,2605:9980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9a00::,2605:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9a80::,2605:9a80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9b00::,2605:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9b80::,2605:9b80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9c00::,2605:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9c80::,2605:9c80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9d00::,2605:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9d80::,2605:9d80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9e00::,2605:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9e80::,2605:9e80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:9f00::,2605:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:a000::,2605:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9f80::,2605:9f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a000::,2605:a000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a080::,2605:a080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a100::,2605:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a180::,2605:a180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a200::,2605:a200:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2605:a280::,2605:a280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a300::,2605:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a380::,2605:a380:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a400::,2605:a40f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a480::,2605:a480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a500::,2605:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:a600::,2605:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a580::,2605:a580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a600::,2605:a601:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a680::,2605:a680:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:a700::,2605:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a780::,2605:a780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a800::,2605:a800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:a880::,2605:a880:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a900::,2605:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a980::,2605:a980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:aa00::,2605:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:aa80::,2605:aa80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ab00::,2605:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ab80::,2605:ab80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ac00::,2605:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ac80::,2605:ac80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ad00::,2605:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ad80::,2605:ad80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ae00::,2605:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ae80::,2605:ae80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:af00::,2605:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:af80::,2605:af80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b000::,2605:b000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b080::,2605:b080:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b100::,2605:b100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b180::,2605:b180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b200::,2605:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b280::,2605:b280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b300::,2605:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b380::,2605:b380:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b400::,2605:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b480::,2605:b480:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:b500::,2605:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b580::,2605:b580:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b600::,2605:b600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b680::,2605:b680:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b700::,2605:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b780::,2605:b780:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b800::,2605:b800:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2605:b880::,2605:b880:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:b900::,2605:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b980::,2605:b980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:ba00::,2605:ba00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2605:ba80::,2605:ba80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2605:bb00::,2605:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bb80::,2605:bb80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:bc00::,2605:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bc80::,2605:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:bd00::,2605:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bd80::,2605:bd80: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
@@ -4081,7 +7345,8 @@
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:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e000::,2605:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+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
@@ -4208,7 +7473,8 @@
2606:5d00::,2606:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:5e00::,2606:5e00:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:5f00::,2606:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PR
-2606:6000::,2606:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6000::,2606:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+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
@@ -4271,7 +7537,10 @@
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:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a000::,2606:a000:dd41:f5ff:ffff:ffff:ffff:ffff,US
+2606:a000:dd41:f600::,2606:a000:dd41:f7ff:ffff:ffff:ffff:ffff,AU
+2606:a000:dd41:f800::,2606:a000:ffff:ffff:ffff:ffff:ffff:ffff,US
+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
@@ -4320,7 +7589,7 @@
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:d300::,2606:d300:fff: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
@@ -4694,7 +7963,36 @@
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:f400: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:f418::,2607:f418:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f420::,2607:f420:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -4933,7 +8231,38 @@
2607:fbe8::,2607:fbe8:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fbf0::,2607:fbf0:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:fbf8::,2607:fbf8:ffff:ffff:ffff:ffff:ffff:ffff,US
-2607:fc00::,2607:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc00::,2607:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc08::,2607:fc08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc10::,2607:fc10:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fc18::,2607:fc18:fff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc20::,2607:fc20:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc28::,2607:fc28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc30::,2607:fc30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc38::,2607:fc38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc40::,2607:fc40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc48::,2607:fc48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc50::,2607:fc50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc58::,2607:fc58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc60::,2607:fc60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc68::,2607:fc68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc70::,2607:fc70:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fc78::,2607:fc78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fc80::,2607:fc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc88::,2607:fc88:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc90::,2607:fc90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fc98::,2607:fc98:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fca0::,2607:fca0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fca8::,2607:fca8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fcb8::,2607:fcb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fcc0::,2607:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fcc8::,2607:fcc8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fcd0::,2607:fcd0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fcd8::,2607:fcd8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fce0::,2607:fce0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fce8::,2607:fce8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fcf0::,2607:fcf0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fcf8::,2607:fcf8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+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:fd28::,2607:fd28:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -5098,7 +8427,1042 @@
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:100:f: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:60::,2620::60:ffff:ffff:ffff:ffff:ffff,FR
+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:3b0::,2620::3b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3c0::,2620::3c0: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::61f: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: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,CN
+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::101f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1020::,2620::1020:ffff:ffff:ffff:ffff:ffff,MX
+2620:0:1021::,2620::103f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1040::,2620::1040:ffff:ffff:ffff:ffff:ffff,IE
+2620:0:1041::,2620::1041:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1042::,2620::1042:ffff:ffff:ffff:ffff:ffff,GB
+2620:0:1043::,2620::104a:ffff:ffff:ffff:ffff:ffff,US
+2620:0:104b::,2620::104b:ffff:ffff:ffff:ffff:ffff,NL
+2620:0:104c::,2620::105e:ffff:ffff:ffff:ffff:ffff,US
+2620:0:105f::,2620::105f:ffff:ffff:ffff:ffff:ffff,CH
+2620:0:1060::,2620::106a:ffff:ffff:ffff:ffff:ffff,US
+2620:0:106b::,2620::106b:ffff:ffff:ffff:ffff:ffff,RU
+2620:0:106c::,2620::1072:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1073::,2620::1073:ffff:ffff:ffff:ffff:ffff,GB
+2620:0:1074::,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: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: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: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: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: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: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:f: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::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:f: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:ff: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:f: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,US
+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:40ff: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:3d:c000::,2620:3d:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:3e::,2620:3e::ffff:ffff:ffff:ffff:ffff,US
+2620:3e:4000::,2620:3e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3e:8000::,2620:3e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3e:c000::,2620:3e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:3f::,2620:3f::ffff:ffff:ffff:ffff:ffff,US
+2620:3f:4000::,2620:3f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3f:8000::,2620:3f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3f:c000::,2620:3f:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:40::,2620:40::ffff:ffff:ffff:ffff:ffff,US
+2620:40:4000::,2620:40:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:40:8000::,2620:40:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:40:c000::,2620:40:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:41::,2620:41:1:ffff:ffff:ffff:ffff:ffff,US
+2620:41:4000::,2620:41:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:41:8000::,2620:41:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:41:c000::,2620:41:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:42::,2620:42::ffff:ffff:ffff:ffff:ffff,US
+2620:42:4000::,2620:42:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:42:c000::,2620:42:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:43::,2620:43::ffff:ffff:ffff:ffff:ffff,US
+2620:43:4000::,2620:43:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:43:8000::,2620:43:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:43:c000::,2620:43:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:44::,2620:44:1:ffff:ffff:ffff:ffff:ffff,US
+2620:44:4000::,2620:44:4000: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:4000::,2620:45:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:45:8000::,2620:45:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:45:c000::,2620:45:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:46::,2620:46::ffff:ffff:ffff:ffff:ffff,US
+2620:46:4000::,2620:46:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:46:8000::,2620:46:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:46:c000::,2620:46:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:47::,2620:47::ffff:ffff:ffff:ffff:ffff,US
+2620:47:4000::,2620:47:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:47:8000::,2620:47:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:47:c000::,2620:47:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:48::,2620:48::ffff:ffff:ffff:ffff:ffff,US
+2620:48:4000::,2620:48:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:48:8000::,2620:48:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:48:c000::,2620:48:c00f: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:4000::,2620:4a:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:4a:8000::,2620:4a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4a:c000::,2620:4a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:4b::,2620:4b::ffff:ffff:ffff:ffff:ffff,CA
+2620:4b:4000::,2620:4b:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:4b:8000::,2620:4b:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:4b:c000::,2620:4b:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:4c::,2620:4c:1:ffff:ffff:ffff:ffff:ffff,US
+2620:4c:4000::,2620:4c:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:4c:c000::,2620:4c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:4d::,2620:4d::ffff:ffff:ffff:ffff:ffff,US
+2620:4d:4000::,2620:4d:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:4d:8000::,2620:4d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4d:c000::,2620:4d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:4e::,2620:4e::ffff:ffff:ffff:ffff:ffff,US
+2620:4e:4000::,2620:4e:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:4e:8000::,2620:4e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4e:c000::,2620:4e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:4f::,2620:4f::ffff:ffff:ffff:ffff:ffff,US
+2620:4f:4000::,2620:4f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:4f:8000::,2620:4f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4f:c000::,2620:4f:c000: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:4000::,2620:51:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:51:8000::,2620:51:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:51:c000::,2620:51:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:52::,2620:52:3:ffff:ffff:ffff:ffff:ffff,US
+2620:52:4000::,2620:52:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:52:8000::,2620:52:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:52:c000::,2620:52:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:53::,2620:53::ffff:ffff:ffff:ffff:ffff,US
+2620:53:4000::,2620:53:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:53:8000::,2620:53:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:53:c000::,2620:53:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:54::,2620:54::ffff:ffff:ffff:ffff:ffff,US
+2620:54:4000::,2620:54:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:54:8000::,2620:54:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:54:c000::,2620:54:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:55::,2620:55::ffff:ffff:ffff:ffff:ffff,US
+2620:55:4000::,2620:55:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:55:8000::,2620:55:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:55:c000::,2620:55:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:56::,2620:56::ffff:ffff:ffff:ffff:ffff,US
+2620:56:4000::,2620:56:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:56:8000::,2620:56:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:56:c000::,2620:56:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:57::,2620:57::ffff:ffff:ffff:ffff:ffff,US
+2620:57:4000::,2620:57:400f:ffff:ffff:ffff:ffff:ffff,KY
+2620:57:8000::,2620:57:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:57:c000::,2620:57:c000: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:4000::,2620:59:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:59:8000::,2620:59:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:59:c000::,2620:59:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:5a::,2620:5a::ffff:ffff:ffff:ffff:ffff,US
+2620:5a:4000::,2620:5a:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:5a:8000::,2620:5a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5a:c000::,2620:5a:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:5b::,2620:5b::ffff:ffff:ffff:ffff:ffff,US
+2620:5b:4000::,2620:5b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:5b:8000::,2620:5b:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:5b:c000::,2620:5b:c00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:5c::,2620:5c::ffff:ffff:ffff:ffff:ffff,US
+2620:5c:4000::,2620:5c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:5c:8000::,2620:5c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5c:c000::,2620:5c:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:5d::,2620:5d::ffff:ffff:ffff:ffff:ffff,US
+2620:5d:4000::,2620:5d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:5d:8000::,2620:5d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5d:c000::,2620:5d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:5e::,2620:5e::ffff:ffff:ffff:ffff:ffff,US
+2620:5e:4000::,2620:5e:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:5e:8000::,2620:5e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5e:c000::,2620:5e:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:5f::,2620:5f::ffff:ffff:ffff:ffff:ffff,US
+2620:5f:4000::,2620:5f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:5f:8000::,2620:5f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5f:c000::,2620:5f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:60::,2620:60::ffff:ffff:ffff:ffff:ffff,US
+2620:60:4000::,2620:60:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:60:8000::,2620:60:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:60:c000::,2620:60:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:61::,2620:61::ffff:ffff:ffff:ffff:ffff,CA
+2620:61:4000::,2620:61:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:61:8000::,2620:61:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:61:c000::,2620:61:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:62::,2620:62::ffff:ffff:ffff:ffff:ffff,US
+2620:62:4000::,2620:62:400f:ffff:ffff:ffff:ffff:ffff,CA
+2620:62:8000::,2620:62:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:62:c000::,2620:62:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:63::,2620:63::ffff:ffff:ffff:ffff:ffff,US
+2620:63:4000::,2620:63:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:63:8000::,2620:63:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:63:c000::,2620:63:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:64::,2620:64::ffff:ffff:ffff:ffff:ffff,US
+2620:64:4000::,2620:64:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:64:8000::,2620:64:8000:ffff:ffff:ffff:ffff:ffff,TW
+2620:64:c000::,2620:64:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:65::,2620:65:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:65:8000::,2620:65:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:65:c000::,2620:65:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:66::,2620:66::ffff:ffff:ffff:ffff:ffff,CA
+2620:66:4000::,2620:66:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:66:8000::,2620:66:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:66:c000::,2620:66:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:67::,2620:67::ffff:ffff:ffff:ffff:ffff,US
+2620:67:4000::,2620:67:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:67:8000::,2620:67:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:67:c000::,2620:67:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:68::,2620:68::ffff:ffff:ffff:ffff:ffff,US
+2620:68:4000::,2620:68:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:68:8000::,2620:68:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:68:c000::,2620:68:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:69:4000::,2620:69:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:69:8000::,2620:69:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:69:c000::,2620:69:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:6a::,2620:6a::ffff:ffff:ffff:ffff:ffff,US
+2620:6a:4000::,2620:6a:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:6a:8000::,2620:6a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6a:c000::,2620:6a:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:6b::,2620:6b::ffff:ffff:ffff:ffff:ffff,US
+2620:6b:4000::,2620:6b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:6b:8000::,2620:6b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6b:c000::,2620:6b:c000: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:6d:c000::,2620:6d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:6e::,2620:6e::ffff:ffff:ffff:ffff:ffff,US
+2620:6e:4000::,2620:6e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:6e:8000::,2620:6e:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:6e:c000::,2620:6e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:6f::,2620:6f::ffff:ffff:ffff:ffff:ffff,US
+2620:6f:4000::,2620:6f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:6f:8000::,2620:6f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6f:c000::,2620:6f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:70::,2620:70::ffff:ffff:ffff:ffff:ffff,US
+2620:70:4000::,2620:70:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:70:8000::,2620:70:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:70:c000::,2620:70:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:71::,2620:71::ffff:ffff:ffff:ffff:ffff,US
+2620:71:4000::,2620:71:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:71:8000::,2620:71:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:71:c000::,2620:71:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:72::,2620:72::ffff:ffff:ffff:ffff:ffff,US
+2620:72:4000::,2620:72:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:72:8000::,2620:72:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:72:c000::,2620:72:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:73::,2620:73::ffff:ffff:ffff:ffff:ffff,US
+2620:73:4000::,2620:73:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:73:8000::,2620:73:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:73:c000::,2620:73:c000: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:4000::,2620:75:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:75:8000::,2620:75:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:75:c000::,2620:75:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:76::,2620:76::ffff:ffff:ffff:ffff:ffff,US
+2620:76:4000::,2620:76:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:76:8000::,2620:76:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:76:c000::,2620:76:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:77::,2620:77::ffff:ffff:ffff:ffff:ffff,US
+2620:77:4000::,2620:77:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:77:8000::,2620:77:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:77:c000::,2620:77:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:78::,2620:78::ffff:ffff:ffff:ffff:ffff,US
+2620:78:4000::,2620:78:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:78:8000::,2620:78:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:78:c000::,2620:78:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:79::,2620:79::ffff:ffff:ffff:ffff:ffff,US
+2620:79:4000::,2620:79:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:79:8000::,2620:79:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:79:c000::,2620:79:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:7a::,2620:7a::ffff:ffff:ffff:ffff:ffff,US
+2620:7a:4000::,2620:7a:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:7a:8000::,2620:7a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7a:c000::,2620:7a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:7b::,2620:7b::ffff:ffff:ffff:ffff:ffff,US
+2620:7b:4000::,2620:7b:4000: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:4000::,2620:7d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:7d:8000::,2620:7d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7d:c000::,2620:7d:c000: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:7f:c000::,2620:7f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:80::,2620:80::ffff:ffff:ffff:ffff:ffff,US
+2620:80:4000::,2620:80:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:80:8000::,2620:80:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:80:c000::,2620:80:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:81::,2620:81::ffff:ffff:ffff:ffff:ffff,US
+2620:81:4000::,2620:81:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:81:8000::,2620:81:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:81:c000::,2620:81:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:82:4000::,2620:82:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:82:8000::,2620:82:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:82:c000::,2620:82:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:83::,2620:83::ffff:ffff:ffff:ffff:ffff,US
+2620:83:4000::,2620:83:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:83:8000::,2620:83:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:83:c000::,2620:83:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:84::,2620:84:1:ffff:ffff:ffff:ffff:ffff,US
+2620:84:4000::,2620:84:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:84:8000::,2620:84:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:84:c000::,2620:84:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:85::,2620:85::ffff:ffff:ffff:ffff:ffff,US
+2620:85:4000::,2620:85:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:85:8000::,2620:85:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:85:c000::,2620:85:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:86::,2620:86::ffff:ffff:ffff:ffff:ffff,US
+2620:86:4000::,2620:86:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:86:8000::,2620:86:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:86:c000::,2620:86:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:87::,2620:87::ffff:ffff:ffff:ffff:ffff,US
+2620:87:4000::,2620:87:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:87:8000::,2620:87:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:87:c000::,2620:87:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:88::,2620:88::ffff:ffff:ffff:ffff:ffff,US
+2620:88:4000::,2620:88:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:88:8000::,2620:88:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:88:c000::,2620:88:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:89::,2620:89::ffff:ffff:ffff:ffff:ffff,US
+2620:89:4000::,2620:89:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:89:8000::,2620:89:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:89:c000::,2620:89:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8a::,2620:8a::ffff:ffff:ffff:ffff:ffff,US
+2620:8a:4000::,2620:8a:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:8a:8000::,2620:8a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8a:c000::,2620:8a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8b::,2620:8b::ffff:ffff:ffff:ffff:ffff,US
+2620:8b:4000::,2620:8b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:8b:8000::,2620:8b:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:8b:c000::,2620:8b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8c:4000::,2620:8c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:8c:8000::,2620:8c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8c:c000::,2620:8c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8d::,2620:8d::ffff:ffff:ffff:ffff:ffff,US
+2620:8d:4000::,2620:8d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:8d:8000::,2620:8d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8d:c000::,2620:8d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8e::,2620:8e::ffff:ffff:ffff:ffff:ffff,US
+2620:8e:4000::,2620:8e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:8e:8000::,2620:8e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8e:c000::,2620:8e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8f::,2620:8f::ffff:ffff:ffff:ffff:ffff,US
+2620:8f:4000::,2620:8f:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:8f:8000::,2620:8f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8f:c000::,2620:8f:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:90::,2620:90::ffff:ffff:ffff:ffff:ffff,CA
+2620:90:4000::,2620:90:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:90:8000::,2620:90:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:90:c000::,2620:90:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:91::,2620:91::ffff:ffff:ffff:ffff:ffff,US
+2620:91:4000::,2620:91:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:91:8000::,2620:91:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:91:c000::,2620:91:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:92::,2620:92:f:ffff:ffff:ffff:ffff:ffff,US
+2620:92:4000::,2620:92:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:92:8000::,2620:92:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:92:c000::,2620:92:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:93::,2620:93::ffff:ffff:ffff:ffff:ffff,US
+2620:93:4000::,2620:93:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:93:8000::,2620:93:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:93:c000::,2620:93:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:94::,2620:94::ffff:ffff:ffff:ffff:ffff,US
+2620:94:4000::,2620:94:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:94:8000::,2620:94:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:94:c000::,2620:94:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:95::,2620:95::ffff:ffff:ffff:ffff:ffff,US
+2620:95:4000::,2620:95:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:95:8000::,2620:95:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:95:c000::,2620:95:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:96::,2620:96::ffff:ffff:ffff:ffff:ffff,US
+2620:96:4000::,2620:96:400f:ffff:ffff:ffff:ffff:ffff,CA
+2620:96:8000::,2620:96:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:96:c000::,2620:96:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:97::,2620:97::ffff:ffff:ffff:ffff:ffff,US
+2620:97:4000::,2620:97:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:97:8000::,2620:97:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:97:c000::,2620:97:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:98::,2620:98::ffff:ffff:ffff:ffff:ffff,US
+2620:98:4000::,2620:98:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:98:8000::,2620:98:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:98:c000::,2620:98:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:99::,2620:99::ffff:ffff:ffff:ffff:ffff,US
+2620:99:4000::,2620:99:4000:ffff:ffff:ffff:ffff:ffff,CA
+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: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:a3:c020::,2620:a3:c020:ffff:ffff:ffff:ffff:ffff,US
+2620:a4:40::,2620:a4:40:ffff:ffff:ffff:ffff:ffff,US
+2620:a4:4060::,2620:a4:4060: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:800f: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: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:ff:8000::,2620:ff:8000: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
@@ -5121,7 +9485,9 @@
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:9000::,2620:101:9004:ffff:ffff:ffff:ffff:ffff,US
+2620:101:9005::,2620:101:9005:ffff:ffff:ffff:ffff:ffff,CA
+2620:101:9006::,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
@@ -5526,6 +9892,31 @@
2620:11b:4000::,2620:11b:40ff:ffff:ffff:ffff:ffff:ffff,US
2620:11b:5000::,2620:11b:500f:ffff:ffff:ffff:ffff:ffff,US
2620:11b:6000::,2620:11b:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:7000::,2620:11b:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:8000::,2620:11b:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:9000::,2620:11b:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:a000::,2620:11b:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:b000::,2620:11b:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:c000::,2620:11b:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:d000::,2620:11b:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:e000::,2620:11b:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11b:f000::,2620:11b:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11c::,2620:11c:f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:1000::,2620:11c:10ff:ffff:ffff:ffff:ffff:ffff,BB
+2620:11c:2000::,2620:11c:20ff:ffff:ffff:ffff:ffff:ffff,CA
+2620:11c:3000::,2620:11c:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:4000::,2620:11c:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:5000::,2620:11c:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:6000::,2620:11c:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:7000::,2620:11c:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:8000::,2620:11c:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:9000::,2620:11c:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:a000::,2620:11c:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:b000::,2620:11c:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:c000::,2620:11c:c00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:11c:d000::,2620:11c:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:e000::,2620:11c:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:11c:f000::,2620:11c:f00f: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
@@ -5575,7 +9966,7 @@
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:17a::,2620:17a:fff:ffff:ffff:ffff:ffff:ffff,FR
2620:17b::,2620:17b:fff:ffff:ffff:ffff:ffff:ffff,US
2620:17c::,2620:17c:fff:ffff:ffff:ffff:ffff:ffff,US
2620:17e::,2620:17e:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -5587,6 +9978,8 @@
2620:1d0::,2620:1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
2620:1e0::,2620:1e1:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1e2::,2620:1e2:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e3::,2620:1e3:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e4::,2620:1e4:ffff:ffff:ffff:ffff:ffff:ffff,CA
2620:1f0::,2620:1f1:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1f2::,2620:1f4:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1f5::,2620:1f5:fff:ffff:ffff:ffff:ffff:ffff,CA
@@ -5875,6 +10268,7 @@
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:6000::,2801:10:6000:ffff:ffff:ffff:ffff:ffff,HN
2801:10:8000::,2801:10:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:10:a000::,2801:10:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO
@@ -5887,27 +10281,32 @@
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:6000::,2801:12:6000:ffff:ffff:ffff:ffff:ffff,SV
2801:12:8000::,2801:12:8000:ffff:ffff:ffff:ffff:ffff,AR
-2801:12:a000::,2801:12:a000:ffff:ffff:ffff:ffff:ffff,CL
+2801:12:a000::,2801:12:a00f:ffff:ffff:ffff:ffff:ffff,CL
2801:12:c000::,2801:12:c000:ffff:ffff:ffff:ffff:ffff,AR
2801:13::,2801:13::ffff:ffff:ffff:ffff:ffff,VE
2801:13:2000::,2801:13:2000:ffff:ffff:ffff:ffff:ffff,AR
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:a000::,2801:13:a000:ffff:ffff:ffff:ffff:ffff,CO
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:6000::,2801:14:6000:ffff:ffff:ffff:ffff:ffff,BO
2801:14:a000::,2801:14:a001:ffff:ffff:ffff:ffff:ffff,UY
2801:14:c000::,2801:14:c000:ffff:ffff:ffff:ffff:ffff,BO
2801:15::,2801:15::ffff:ffff:ffff:ffff:ffff,EC
2801:15:2000::,2801:15:2000:ffff:ffff:ffff:ffff:ffff,CR
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:a000::,2801:15:a000:ffff:ffff:ffff:ffff:ffff,DO
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:6000::,2801:16:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:16:8000::,2801:16:8000:ffff:ffff:ffff:ffff:ffff,CO
2801:16:a000::,2801:16:a000:ffff:ffff:ffff:ffff:ffff,CR
2801:16:c000::,2801:16:c000:ffff:ffff:ffff:ffff:ffff,AR
@@ -5915,10 +10314,12 @@
2801:17:2000::,2801:17:2000:ffff:ffff:ffff:ffff:ffff,PY
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:a000::,2801:17:a000:ffff:ffff:ffff:ffff:ffff,HT
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:6000::,2801:18:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:18:8000::,2801:18:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:18:a000::,2801:18:a000:ffff:ffff:ffff:ffff:ffff,BO
2801:18:c000::,2801:18:c000:ffff:ffff:ffff:ffff:ffff,AR
@@ -5931,6 +10332,7 @@
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:6000::,2801:1a:6000:ffff:ffff:ffff:ffff:ffff,CR
2801:1a:8000::,2801:1a:8000:ffff:ffff:ffff:ffff:ffff,CL
2801:1a:a000::,2801:1a:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:1a:c000::,2801:1a:c000:ffff:ffff:ffff:ffff:ffff,CO
@@ -5938,10 +10340,12 @@
2801:1b:2000::,2801:1b:2000:ffff:ffff:ffff:ffff:ffff,UY
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:a000::,2801:1b:a000:ffff:ffff:ffff:ffff:ffff,AR
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:6000::,2801:1c:6000:ffff:ffff:ffff:ffff:ffff,PA
2801:1c:8000::,2801:1c:8000:ffff:ffff:ffff:ffff:ffff,EC
2801:1c:a000::,2801:1c:a000:ffff:ffff:ffff:ffff:ffff,CO
2801:1c:c000::,2801:1c:c000:ffff:ffff:ffff:ffff:ffff,HN
@@ -5949,6 +10353,7 @@
2801:1d:2000::,2801:1d:2000:ffff:ffff:ffff:ffff:ffff,GT
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:a000::,2801:1d:a000:ffff:ffff:ffff:ffff:ffff,CR
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
@@ -5960,6 +10365,7 @@
2801:1f:2000::,2801:1f:2000:ffff:ffff:ffff:ffff:ffff,CR
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:a000::,2801:1f:a000:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -6137,7 +10543,6 @@
2801:80:b10::,2801:80:b10:ffff:ffff:ffff:ffff:ffff,BR
2801:80:b20::,2801:80:b20:ffff:ffff:ffff:ffff:ffff,BR
2801:80:b30::,2801:80:b30:ffff:ffff:ffff:ffff:ffff,BR
-2801:80:b40::,2801:80:b40:ffff:ffff:ffff:ffff:ffff,BR
2801:80:b50::,2801:80:b50:ffff:ffff:ffff:ffff:ffff,BR
2801:80:b60::,2801:80:b60:ffff:ffff:ffff:ffff:ffff,BR
2801:80:b70::,2801:80:b70:ffff:ffff:ffff:ffff:ffff,BR
@@ -6151,6 +10556,23 @@
2801:80:c10::,2801:80:c10:ffff:ffff:ffff:ffff:ffff,BR
2801:80:c20::,2801:80:c20:ffff:ffff:ffff:ffff:ffff,BR
2801:80:c30::,2801:80:c30:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c40::,2801:80:c40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c50::,2801:80:c50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c60::,2801:80:c60:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c70::,2801:80:c70:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c80::,2801:80:c80:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c90::,2801:80:c90:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ca0::,2801:80:ca0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:cb0::,2801:80:cb0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:cc0::,2801:80:cc0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:cd0::,2801:80:cd0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:ce0::,2801:80:ce0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:cf0::,2801:80:cf0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d10::,2801:80:d10:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d20::,2801:80:d2f:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d40::,2801:80:d40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d50::,2801:80:d50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d60::,2801:80:d6f: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
@@ -6209,6 +10631,7 @@
2801:160::,2801:160:ff:ffff:ffff:ffff:ffff:ffff,CO
2801:170::,2801:170:fff:ffff:ffff:ffff:ffff:ffff,CO
2801:180::,2801:180:f:ffff:ffff:ffff:ffff:ffff,PA
+2801:188::,2801:188:f:ffff:ffff:ffff:ffff:ffff,AR
2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO
2801:1a0::,2801:1a0:3f:ffff:ffff:ffff:ffff:ffff,CO
2801:1b0::,2801:1b0:ff:ffff:ffff:ffff:ffff:ffff,CO
@@ -6224,6 +10647,7 @@
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:380::,2803:380:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -6238,6 +10662,7 @@
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:b80::,2803:b80:ffff:ffff:ffff:ffff:ffff:ffff,PA
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
@@ -6252,8 +10677,8 @@
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:1380::,2803:1380:ffff:ffff:ffff:ffff:ffff:ffff,HN
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:1580::,2803:1580:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ
@@ -6266,8 +10691,10 @@
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:1b80::,2803:1b80:ffff:ffff:ffff:ffff:ffff:ffff,TT
2803:1c80::,2803:1c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:1d00::,2803:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1d80::,2803:1d80: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
@@ -6278,6 +10705,7 @@
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:2380::,2803:2380: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
@@ -6292,9 +10720,11 @@
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:2b80::,2803:2b80:ffff:ffff:ffff:ffff:ffff:ffff,DO
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:2d80::,2803:2d80:ffff:ffff:ffff:ffff:ffff:ffff,PA
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
@@ -6305,6 +10735,7 @@
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:3380::,2803:3380:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -6322,6 +10753,7 @@
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:3d80::,2803:3d80:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -6332,6 +10764,7 @@
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:4380::,2803:4380:ffff:ffff:ffff:ffff:ffff:ffff,BO
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
@@ -6346,6 +10779,7 @@
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:4b80::,2803:4b80: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
@@ -6360,6 +10794,7 @@
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:5380::,2803:5380:ffff:ffff:ffff:ffff:ffff:ffff,HN
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
@@ -6368,14 +10803,16 @@
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:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GF
2803:5980::,2803:5980:ffff:ffff:ffff:ffff:ffff:ffff,AR
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:5b80::,2803:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AR
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:5d80::,2803:5d80:ffff:ffff:ffff:ffff:ffff:ffff,BZ
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
@@ -6386,6 +10823,7 @@
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:6380::,2803:6380:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -6400,9 +10838,11 @@
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:6b80::,2803:6b80: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:6d80::,2803:6d80:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -6413,6 +10853,7 @@
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:7380::,2803:7380:ffff:ffff:ffff:ffff:ffff:ffff,SX
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
@@ -6430,6 +10871,7 @@
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:7d80::,2803:7d80:ffff:ffff:ffff:ffff:ffff:ffff,PY
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
@@ -6440,6 +10882,7 @@
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:8380::,2803:8380:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -6454,6 +10897,7 @@
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:8b80::,2803:8b80: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
@@ -6468,6 +10912,7 @@
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:9380::,2803:9380:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -6482,9 +10927,11 @@
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:9b80::,2803:9b80:ffff:ffff:ffff:ffff:ffff:ffff,AR
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:9d80::,2803:9d80: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
@@ -6495,6 +10942,7 @@
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:a380::,2803:a380:ffff:ffff:ffff:ffff:ffff:ffff,PA
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
@@ -6509,9 +10957,11 @@
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:ab80::,2803:ab80:ffff:ffff:ffff:ffff:ffff:ffff,PE
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:ad80::,2803:ad80:ffff:ffff:ffff:ffff:ffff:ffff,PA
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
@@ -6522,6 +10972,7 @@
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:b380::,2803:b380:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -6539,6 +10990,7 @@
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:bd80::,2803:bd80:ffff:ffff:ffff:ffff:ffff:ffff,PA
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
@@ -6549,6 +11001,7 @@
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:c380::,2803:c380:ffff:ffff:ffff:ffff:ffff:ffff,HN
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
@@ -6563,9 +11016,11 @@
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:cb80::,2803:cb80:ffff:ffff:ffff:ffff:ffff:ffff,AR
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:cd80::,2803:cd80:ffff:ffff:ffff:ffff:ffff:ffff,TT
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
@@ -6576,6 +11031,7 @@
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:d380::,2803:d380:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -6593,6 +11049,7 @@
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:dd80::,2803:dd80:ffff:ffff:ffff:ffff:ffff:ffff,VE
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
@@ -6603,6 +11060,7 @@
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:e380::,2803:e380:ffff:ffff:ffff:ffff:ffff:ffff,HN
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
@@ -6617,9 +11075,11 @@
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:eb80::,2803:eb80: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:ed80::,2803:ed80:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -6630,6 +11090,7 @@
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:f380::,2803:f380: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
@@ -6644,8 +11105,10 @@
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:fc00::,2803:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:fc80::,2803:fc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:fd00::,2803:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:fd80::,2803:fd80:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -7050,7 +11513,6 @@
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
@@ -8381,15 +12843,233 @@
2804:1b78::,2804:1b78:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1b7c::,2804:1b7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1b80::,2804:1b80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b84::,2804:1b84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b88::,2804:1b88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b8c::,2804:1b8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b90::,2804:1b90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b94::,2804:1b94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b98::,2804:1b98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b9c::,2804:1b9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ba0::,2804:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ba4::,2804:1ba4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ba8::,2804:1ba8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bac::,2804:1bac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bb0::,2804:1bb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bb4::,2804:1bb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bb8::,2804:1bb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bbc::,2804:1bbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bc0::,2804:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bc4::,2804:1bc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bc8::,2804:1bc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bcc::,2804:1bcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bd0::,2804:1bd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bd4::,2804:1bd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bd8::,2804:1bd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bdc::,2804:1bdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1be0::,2804:1be0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1be4::,2804:1be4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1be8::,2804:1be8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bec::,2804:1bec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bf0::,2804:1bf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bf4::,2804:1bf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bf8::,2804:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bfc::,2804:1bfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c00::,2804:1c00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c04::,2804:1c04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c08::,2804:1c08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c0c::,2804:1c0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c10::,2804:1c10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c14::,2804:1c14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c18::,2804:1c18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c1c::,2804:1c1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c20::,2804:1c20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c24::,2804:1c24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c28::,2804:1c28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c2c::,2804:1c2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c30::,2804:1c30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c34::,2804:1c34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c38::,2804:1c38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c3c::,2804:1c3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c40::,2804:1c40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c44::,2804:1c44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c48::,2804:1c48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c4c::,2804:1c4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c50::,2804:1c50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c54::,2804:1c54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c58::,2804:1c58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c5c::,2804:1c5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c60::,2804:1c60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c64::,2804:1c64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c68::,2804:1c68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c6c::,2804:1c6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c70::,2804:1c70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c74::,2804:1c74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c78::,2804:1c78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c7c::,2804:1c7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c80::,2804:1c80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c84::,2804:1c84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c88::,2804:1c88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c8c::,2804:1c8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c90::,2804:1c90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c94::,2804:1c94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c98::,2804:1c98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c9c::,2804:1c9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ca0::,2804:1ca0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ca4::,2804:1ca4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ca8::,2804:1ca8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cac::,2804:1cac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cb0::,2804:1cb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cb4::,2804:1cb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cb8::,2804:1cb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cbc::,2804:1cbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cc0::,2804:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cc4::,2804:1cc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cc8::,2804:1cc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ccc::,2804:1ccc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cd0::,2804:1cd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cd4::,2804:1cd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cd8::,2804:1cd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cdc::,2804:1cdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ce0::,2804:1ce0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ce4::,2804:1ce4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ce8::,2804:1ce8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cec::,2804:1cec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cf0::,2804:1cf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cf4::,2804:1cf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cf8::,2804:1cf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cfc::,2804:1cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d00::,2804:1d00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d04::,2804:1d04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d08::,2804:1d08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d0c::,2804:1d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d10::,2804:1d10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d14::,2804:1d14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d18::,2804:1d18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d1c::,2804:1d1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d20::,2804:1d20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d24::,2804:1d24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d28::,2804:1d28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d2c::,2804:1d2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d30::,2804:1d30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d34::,2804:1d34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d38::,2804:1d38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d3c::,2804:1d3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d40::,2804:1d40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d44::,2804:1d44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d48::,2804:1d48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d4c::,2804:1d4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d50::,2804:1d50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d54::,2804:1d54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d58::,2804:1d58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d5c::,2804:1d5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d60::,2804:1d60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d64::,2804:1d64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d68::,2804:1d68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d6c::,2804:1d6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d70::,2804:1d70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d74::,2804:1d74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d78::,2804:1d78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d7c::,2804:1d7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d80::,2804:1d80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d84::,2804:1d84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d88::,2804:1d88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d8c::,2804:1d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d90::,2804:1d90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d94::,2804:1d94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d98::,2804:1d98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d9c::,2804:1d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1da0::,2804:1da0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1da4::,2804:1da4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1da8::,2804:1da8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dac::,2804:1dac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1db0::,2804:1db0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1db4::,2804:1db4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1db8::,2804:1db8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dbc::,2804:1dbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dc0::,2804:1dc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dc4::,2804:1dc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dc8::,2804:1dc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dcc::,2804:1dcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dd0::,2804:1dd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dd4::,2804:1dd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dd8::,2804:1dd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ddc::,2804:1ddc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1de0::,2804:1de0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1de4::,2804:1de4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1de8::,2804:1de8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dec::,2804:1dec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1df0::,2804:1df0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1df4::,2804:1df4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1df8::,2804:1df8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dfc::,2804:1dfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e00::,2804:1e00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e04::,2804:1e04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e08::,2804:1e08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e0c::,2804:1e0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e10::,2804:1e10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e14::,2804:1e14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e18::,2804:1e18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e1c::,2804:1e1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e20::,2804:1e20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e24::,2804:1e24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e28::,2804:1e28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e2c::,2804:1e2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e30::,2804:1e30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e34::,2804:1e34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e38::,2804:1e38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e3c::,2804:1e3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e40::,2804:1e40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e44::,2804:1e44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e48::,2804:1e48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e4c::,2804:1e4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e50::,2804:1e50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e54::,2804:1e54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e58::,2804:1e58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e5c::,2804:1e5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e60::,2804:1e60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e64::,2804:1e64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e68::,2804:1e68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e6c::,2804:1e6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e70::,2804:1e70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e74::,2804:1e74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e78::,2804:1e78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e7c::,2804:1e7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e80::,2804:1e80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e84::,2804:1e84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e88::,2804:1e88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e8c::,2804:1e8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e90::,2804:1e90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e94::,2804:1e94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e98::,2804:1e98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e9c::,2804:1e9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ea0::,2804:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ea4::,2804:1ea4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ea8::,2804:1ea8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1eac::,2804:1eac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1eb0::,2804:1eb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1eb4::,2804:1eb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1eb8::,2804:1eb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ebc::,2804:1ebc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ec0::,2804:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ec4::,2804:1ec4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ec8::,2804:1ec8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ecc::,2804:1ecc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ed0::,2804:1ed0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ed4::,2804:1ed4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ed8::,2804:1ed8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1edc::,2804:1edc: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
+2804:1f0a::,2804:1f0a:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f0c::,2804:1f0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f0e::,2804:1f0e:1fff: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:216::ffff:ffff:ffff:ffff:ffff,MX
-2806:217::,2806:218:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:217::,2806:21b: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
@@ -8417,7 +13097,9 @@
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:800::,2a00:801:210:ffff:ffff:ffff:ffff:ffff,SE
+2a00:801:211::,2a00:801:211:ffff:ffff:ffff:ffff:ffff,NO
+2a00:801:212::,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
@@ -8481,7 +13163,6 @@
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
@@ -8793,7 +13474,7 @@
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:1890::,2a00:1897: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
@@ -8809,7 +13490,7 @@
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:1910::,2a00:1917: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
@@ -9113,7 +13794,7 @@
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:4ae0::,2a00:4ae7: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
@@ -9124,7 +13805,6 @@
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
@@ -9240,7 +13920,7 @@
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:5ba0::,2a00:5ba7: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
@@ -9322,7 +14002,7 @@
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:6640::,2a00:6647: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
@@ -9529,7 +14209,7 @@
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:8240::,2a00:8247: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
@@ -10001,7 +14681,14 @@
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:c1ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+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:c1e7: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
@@ -10059,7 +14746,7 @@
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:c980::,2a00:c987: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
@@ -10073,7 +14760,6 @@
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
@@ -10380,7 +15066,6 @@
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:f400:ffff:ffff:ffff:ffff:ffff:ffff,LU
2a00:f420::,2a00:f420:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:f440::,2a00:f440:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:f460::,2a00:f460:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -10473,12 +15158,42 @@
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:ff:ffff:ffff:ffff:ffff:ffff:ffff,IE
+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:110:10::,2a01:110:10:ffff:ffff:ffff:ffff:ffff,GB
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:13f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:130::,2a01:13f: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
@@ -10496,7 +15211,7 @@
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:1c8::,2a01:1cf: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
@@ -10531,6 +15246,7 @@
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:300:22::,2a01:300:22:ffff:ffff:ffff:ffff:ffff,GB
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
@@ -10538,9 +15254,11 @@
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:348::,2a01:348:6f:ffff:ffff:ffff:ffff:ffff,GB
+2a01:348:70::,2a01:348:70:ffff:ffff:ffff:ffff:ffff,AE
+2a01:348:71::,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:358::,2a01:35f: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
@@ -10678,7 +15396,11 @@
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,FR
+2a01:e00::,2a01:e35:2e0a:ffff:ffff:ffff:ffff:ffff,FR
+2a01:e35:2e0b::,2a01:e35:2e0b:ffff:ffff:ffff:ffff:ffff,US
+2a01:e35:2e0c::,2a01:e35:8bde:ffff:ffff:ffff:ffff:ffff,FR
+2a01:e35:8bdf::,2a01:e35:8bdf:ffff:ffff:ffff:ffff:ffff,NL
+2a01:e35:8be0::,2a01:e3f:ffff:ffff:ffff:ffff:ffff:ffff,FR
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
@@ -10724,7 +15446,6 @@
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
@@ -10813,7 +15534,6 @@
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
@@ -10850,7 +15570,7 @@
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:5680::,2a01:5687: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
@@ -11081,7 +15801,6 @@
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
@@ -11113,7 +15832,6 @@
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
@@ -11232,7 +15950,7 @@
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:8800::,2a01:8807: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
@@ -11272,7 +15990,7 @@
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:8d00::,2a01:8d03: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
@@ -11289,7 +16007,7 @@
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:8f60::,2a01:8f67: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
@@ -11453,7 +16171,6 @@
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: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
@@ -11712,7 +16429,6 @@
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
@@ -11726,7 +16442,7 @@
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:218::,2a02:21f: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
@@ -11734,7 +16450,7 @@
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:258::,2a02:25f: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
@@ -11798,7 +16514,7 @@
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:468::,2a02:46f: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
@@ -11816,7 +16532,34 @@
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:5ff:ffff:ffff:ffff:ffff:ffff:ffff,GR
+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
@@ -11892,7 +16635,7 @@
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:858::,2a02:85f: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
@@ -11913,7 +16656,40 @@
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:a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:900::,2a02:900:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:908::,2a02:908:f460:ffff:ffff:ffff:ffff:ffff,DE
+2a02:908:f461::,2a02:908:f461:ffff:ffff:ffff:ffff:ffff,CA
+2a02:908:f462::,2a02:908:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:910::,2a02:910:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:918::,2a02:918:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:920::,2a02:920:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:928::,2a02:928:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:930::,2a02:930:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:938::,2a02:93f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:940::,2a02:940:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:950::,2a02:957:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:958::,2a02:958:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:960::,2a02:960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:968::,2a02:968:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:970::,2a02:970:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:978::,2a02:978:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:980::,2a02:980:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:988::,2a02:988:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:990::,2a02:990:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:998::,2a02:998:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:9a0::,2a02:9a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:9a8::,2a02:9a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:9b0::,2a02:9b0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:9b8::,2a02:9b9:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:9c0::,2a02:9c0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:9c8::,2a02:9c8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:9d0::,2a02:9d0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:9d8::,2a02:9d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:9e0::,2a02:9e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:9e8::,2a02:9e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:9f0::,2a02:9f0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:9f8::,2a02:9f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+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
@@ -11946,13 +16722,13 @@
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:b08::,2a02:b0f: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:b48::,2a02:b48:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:b48::,2a02:b4f: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
@@ -12097,7 +16873,21 @@
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,CH
+2a02:1200::,2a02:1205:503f:ffff:ffff:ffff:ffff:ffff,CH
+2a02:1205:5040::,2a02:1205:5040:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1205:5041::,2a02:1205:504b:ffff:ffff:ffff:ffff:ffff,CH
+2a02:1205:504c::,2a02:1205:504c:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1205:504d::,2a02:1205:c6aa:ffff:ffff:ffff:ffff:ffff,CH
+2a02:1205:c6ab::,2a02:1205:c6ab:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1205:c6ac::,2a02:120b:7fb:ffff:ffff:ffff:ffff:ffff,CH
+2a02:120b:7fc::,2a02:120b:7fc:ffff:ffff:ffff:ffff:ffff,DE
+2a02:120b:7fd::,2a02:120b:2c68:ffff:ffff:ffff:ffff:ffff,CH
+2a02:120b:2c69::,2a02:120b:2c69:ffff:ffff:ffff:ffff:ffff,DE
+2a02:120b:2c6a::,2a02:120b:c3c7:ffff:ffff:ffff:ffff:ffff,CH
+2a02:120b:c3c8::,2a02:120b:c3c8:ffff:ffff:ffff:ffff:ffff,DE
+2a02:120b:c3c9::,2a02:120b:c3e3:ffff:ffff:ffff:ffff:ffff,CH
+2a02:120b:c3e4::,2a02:120b:c3e4:ffff:ffff:ffff:ffff:ffff,DE
+2a02:120b:c3e5::,2a02:121f:ffff:ffff:ffff:ffff:ffff:ffff,CH
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
@@ -12192,15 +16982,52 @@
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,BE
-2a02:2000::,2a02:20ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1800::,2a02:1811:111:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1811:112::,2a02:1811:112:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1811:113::,2a02:1811:3101:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1811:3102::,2a02:1811:3102:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1811:3103::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2000::,2a02:2000:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2008::,2a02:2008:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2010::,2a02:2010:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:2018::,2a02:2018:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2020::,2a02:2020:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:2028::,2a02:2028:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2030::,2a02:2030:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:2038::,2a02:2038:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2040::,2a02:2040:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2048::,2a02:2048:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2050::,2a02:2050:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2058::,2a02:2058:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2060::,2a02:2060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2068::,2a02:2068:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2070::,2a02:2070:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2078::,2a02:2078:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2080::,2a02:2080:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2088::,2a02:2088:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2090::,2a02:2090:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2098::,2a02:209f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:20a0::,2a02:20a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:20a8::,2a02:20a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:20b0::,2a02:20b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:20b8::,2a02:20b8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:20c0::,2a02:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:20c8::,2a02:20c8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:20d0::,2a02:20d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:20d8::,2a02:20d8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:20e0::,2a02:20e7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:20e8::,2a02:20e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:20f0::,2a02:20f0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:20f8::,2a02:20f8:ffff:ffff:ffff:ffff:ffff:ffff,FR
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:2148::,2a02:2149:82ff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:2149:8300::,2a02:2149:8300:ffff:ffff:ffff:ffff:ffff,AF
+2a02:2149:8301::,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
@@ -12333,7 +17160,6 @@
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
@@ -12373,11 +17199,47 @@
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:27ff:ffff:ffff:ffff:ffff:ffff:ffff,BE
+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:11:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2770:12::,2a02:2770:12:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2770:13::,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:143:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2788:144::,2a02:2788:144:ffff:ffff:ffff:ffff:ffff,MA
+2a02:2788:145::,2a02:2788:613:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2788:614::,2a02:2788:614:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2788:615::,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:27a8::ffff:ffff:ffff:ffff:ffff,FR
+2a02:27a8:1::,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
@@ -12413,8 +17275,7 @@
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:2918::,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
@@ -12482,7 +17343,7 @@
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:2b48::,2a02:2b4f: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
@@ -12511,12 +17372,18 @@
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:2fff:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2f00::,2a02:2f0e:d31e:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2f0e:d31f::,2a02:2f0e:d31f:ffff:ffff:ffff:ffff:ffff,HK
+2a02:2f0e:d320::,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:2fc7: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:4060::,2a02:4067: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
@@ -12999,13 +17866,28 @@
2a02:7fa0::,2a02:7fa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:7fc0::,2a02:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:7fe0::,2a02:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,IS
-2a02:8000::,2a02:821f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8010::,2a02:8017:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8020::,2a02:8023:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8040::,2a02:8043:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:8060::,2a02:8061:ffff:ffff:ffff:ffff:ffff:ffff,AD
+2a02:8070::,2a02:8070:e280:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8070:e281::,2a02:8070:e281:ffff:ffff:ffff:ffff:ffff,CH
+2a02:8070:e282::,2a02:8071:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8080::,2a02:8087:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:80c0::,2a02:80c3:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:80e0::,2a02:80e3:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:8100::,2a02:810b:85ff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:810b:8600::,2a02:810b:8600:ffff:ffff:ffff:ffff:ffff,GB
+2a02:810b:8601::,2a02:810b:863f:ffff:ffff:ffff:ffff:ffff,DE
+2a02:810b:8640::,2a02:810b:8640:ffff:ffff:ffff:ffff:ffff,GB
+2a02:810b:8641::,2a02:811f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+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:847f:ffff:ffff:ffff:ffff:ffff:ffff,FR
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,BE
+2a02:a000::,2a02:a03f:ffff:ffff:ffff:ffff:ffff:ffff,BE
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
@@ -13203,7 +18085,6 @@
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
@@ -13331,7 +18212,7 @@
2a03:4c0::,2a03:4c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a03:4e0::,2a03:4e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:500::,2a03:500:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a03:520::,2a03:520:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:520::,2a03:527:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:540::,2a03:540:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a03:560::,2a03:560:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:580::,2a03:580:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -13354,7 +18235,7 @@
2a03:7a0::,2a03:7a0:ffff:ffff:ffff:ffff:ffff:ffff,ME
2a03:7c0::,2a03:7c0:ffff:ffff:ffff:ffff:ffff:ffff,PS
2a03:7e0::,2a03:7e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a03:800::,2a03:800:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:800::,2a03:807:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:820::,2a03:820:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:840::,2a03:840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:860::,2a03:860:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -13396,7 +18277,6 @@
2a03:d20::,2a03:d20:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:d40::,2a03:d40:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:d60::,2a03:d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a03:d80::,2a03:d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:da0::,2a03:da0:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a03:dc0::,2a03:dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:de0::,2a03:de0:ffff:ffff:ffff:ffff:ffff:ffff,BE
@@ -13528,191 +18408,360 @@
2a03:1e20::,2a03:1e20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:1e40::,2a03:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:1e60::,2a03:1e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:1e80::,2a03:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1e80::,2a03:1e87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:1ea0::,2a03:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1ec0::,2a03:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:1ee0::,2a03:1ee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:1f00::,2a03:1f00:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:1f20::,2a03:1f20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:1f40::,2a03:1f40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:1f60::,2a03:1f60:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:1f80::,2a03:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1fa0::,2a03:1fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2000::,2a03:2000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2020::,2a03:2020:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:2040::,2a03:2040:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2060::,2a03:2060:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2080::,2a03:2080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:20a0::,2a03:20a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:20c0::,2a03:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:20e0::,2a03:20e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:2100::,2a03:2100:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:2120::,2a03:2120:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2140::,2a03:2140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2160::,2a03:2160:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2180::,2a03:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:21a0::,2a03:21a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:21c0::,2a03:21c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:21e0::,2a03:21e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2200::,2a03:2200:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:2220::,2a03:2220:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:2240::,2a03:2240:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2260::,2a03:2263:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2280::,2a03:2280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:22a0::,2a03:22a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:22c0::,2a03:22c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a03:2300::,2a03:2300:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:22e0::,2a03:22e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:2300::,2a03:2307:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:2320::,2a03:2320:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:2340::,2a03:2340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2360::,2a03:2360:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:2380::,2a03:2380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:23a0::,2a03:23a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:23c0::,2a03:23c0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:23e0::,2a03:23e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:2400::,2a03:2400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2420::,2a03:2420:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:2440::,2a03:2440:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2460::,2a03:2460:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:2480::,2a03:2480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:24a0::,2a03:24a0:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a03:24c0::,2a03:24c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:24e0::,2a03:24e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2500::,2a03:2500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2520::,2a03:2520:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:2540::,2a03:2540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2560::,2a03:2560:ffff:ffff:ffff:ffff:ffff:ffff,MK
2a03:2580::,2a03:2580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:25a0::,2a03:25a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:25c0::,2a03:25c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:25e0::,2a03:25e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2600::,2a03:2600:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2620::,2a03:2620:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:2640::,2a03:2640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2660::,2a03:2660:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a03:2680::,2a03:2680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:26a0::,2a03:26a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:26c0::,2a03:26c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:26e0::,2a03:26e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:2700::,2a03:2700:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2720::,2a03:2720:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2740::,2a03:2740:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:2760::,2a03:2760:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a03:2780::,2a03:2780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:27a0::,2a03:27a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:27c0::,2a03:27c0:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:27e0::,2a03:27e0:ffff:ffff:ffff:ffff:ffff:ffff,CY
2a03:2800::,2a03:2800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2820::,2a03:2820:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a03:2840::,2a03:2840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a03:2860::,2a03:2860:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:2880::,2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:28a0::,2a03:28a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:28c0::,2a03:28c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:28e0::,2a03:28e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:2900::,2a03:2900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2920::,2a03:2920:ffff:ffff:ffff:ffff:ffff:ffff,ME
2a03:2940::,2a03:2940:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:2960::,2a03:2960:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2980::,2a03:2980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:29a0::,2a03:29a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:29c0::,2a03:29c0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:29e0::,2a03:29e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:2a00::,2a03:2a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2a20::,2a03:2a20:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:2a40::,2a03:2a40:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:2a60::,2a03:2a60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:2a80::,2a03:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2aa0::,2a03:2aa0:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a03:2ac0::,2a03:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2ae0::,2a03:2ae0:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a03:2b00::,2a03:2b00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2b20::,2a03:2b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2b40::,2a03:2b40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2b60::,2a03:2b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:2b80::,2a03:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2ba0::,2a03:2ba0:ffff:ffff:ffff:ffff:ffff:ffff,LU
2a03:2bc0::,2a03:2bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2be0::,2a03:2be0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:2c00::,2a03:2c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2c20::,2a03:2c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2c40::,2a03:2c40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2c60::,2a03:2c60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:2c80::,2a03:2c80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2ca0::,2a03:2ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:2cc0::,2a03:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2d00::,2a03:2d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2d20::,2a03:2d20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2d60::,2a03:2d60:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:2d80::,2a03:2d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2da0::,2a03:2da0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:2dc0::,2a03:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:2de0::,2a03:2de0:ffff:ffff:ffff:ffff:ffff:ffff,AL
2a03:2e00::,2a03:2e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:2e20::,2a03:2e20:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a03:2e40::,2a03:2e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2e60::,2a03:2e60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:2ea0::,2a03:2ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2ec0::,2a03:2ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2ee0::,2a03:2ee0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:2f00::,2a03:2f00:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:2f20::,2a03:2f20:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:2f40::,2a03:2f40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:2f60::,2a03:2f60:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:2f80::,2a03:2f80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:2fa0::,2a03:2fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:2fc0::,2a03:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2fe0::,2a03:2fe0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3000::,2a03:3000:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:3020::,2a03:3020:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:3040::,2a03:3040:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:3060::,2a03:3060:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:30a0::,2a03:30a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:30c0::,2a03:30c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:30e0::,2a03:30e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a03:3100::,2a03:3100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3120::,2a03:3120:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3140::,2a03:3140:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:3160::,2a03:3160:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:3180::,2a03:3180:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:31a0::,2a03:31a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:31c0::,2a03:31c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:31e0::,2a03:31e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3200::,2a03:3200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3220::,2a03:3220:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:3240::,2a03:3240:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a03:3260::,2a03:3260:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:3280::,2a03:3280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:32a0::,2a03:32a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:32c0::,2a03:32c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:32e0::,2a03:32e0:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a03:3300::,2a03:3300:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3320::,2a03:3320:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a03:3340::,2a03:3340:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:3360::,2a03:3360:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:3380::,2a03:3380:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:33a0::,2a03:33a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:33c0::,2a03:33c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:33e0::,2a03:33e0:ffff:ffff:ffff:ffff:ffff:ffff,AL
2a03:3400::,2a03:3400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3420::,2a03:3420:ffff:ffff:ffff:ffff:ffff:ffff,LI
2a03:3440::,2a03:3440:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:3460::,2a03:3460:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:3480::,2a03:3480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:34a0::,2a03:34a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:34c0::,2a03:34c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:34e0::,2a03:34e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3500::,2a03:3500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3520::,2a03:3520:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:3540::,2a03:3547:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:3580::,2a03:3580:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:35a0::,2a03:35a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:35c0::,2a03:35c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:35e0::,2a03:35e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:3600::,2a03:3600:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:3620::,2a03:3620:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:3640::,2a03:3640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3660::,2a03:3660:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3680::,2a03:3680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:36a0::,2a03:36a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:36c0::,2a03:36c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:36e0::,2a03:36e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:3700::,2a03:3700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3720::,2a03:3720:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:3760::,2a03:3760:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:37a0::,2a03:37a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:37c0::,2a03:37c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:37e0::,2a03:37e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:3800::,2a03:3800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:3820::,2a03:3820:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:3840::,2a03:3847:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:3880::,2a03:3880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:38a0::,2a03:38a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:38c0::,2a03:38c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:38e0::,2a03:38e0:ffff:ffff:ffff:ffff:ffff:ffff,LU
2a03:3900::,2a03:3900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3920::,2a03:3920:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3940::,2a03:3940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3960::,2a03:3960: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:39e0::,2a03:39e0:ffff:ffff:ffff:ffff:ffff:ffff,HR
2a03:3a00::,2a03:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3a20::,2a03:3a20:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a03:3a40::,2a03:3a40:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:3a80::,2a03:3a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3aa0::,2a03:3aa0:ffff:ffff:ffff:ffff:ffff:ffff,AL
2a03:3ac0::,2a03:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3ae0::,2a03:3ae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3b00::,2a03:3b00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3b20::,2a03:3b20:ffff:ffff:ffff:ffff:ffff:ffff,CY
2a03:3b40::,2a03:3b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3b60::,2a03:3b60:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a03:3b80::,2a03:3b80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:3ba0::,2a03:3ba0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3bc0::,2a03:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:3be0::,2a03:3be0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3c00::,2a03:3c00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3c20::,2a03:3c20:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:3c40::,2a03:3c40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3c60::,2a03:3c60:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3c80::,2a03:3c80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3ca0::,2a03:3ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:3cc0::,2a03:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:3d00::,2a03:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:3d20::,2a03:3d20:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3d40::,2a03:3d40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3d60::,2a03:3d60:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:3d80::,2a03:3d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:3da0::,2a03:3da0:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:3dc0::,2a03:3dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a03:3e00::,2a03:3e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3de0::,2a03:3de0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:3e00::,2a03:3e07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:3e40::,2a03:3e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3e60::,2a03:3e60:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:3e80::,2a03:3e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3ea0::,2a03:3ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:3ec0::,2a03:3ec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3ee0::,2a03:3ee0:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a03:3f00::,2a03:3f00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:3f20::,2a03:3f20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:3f40::,2a03:3f40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3f60::,2a03:3f60:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a03:3f80::,2a03:3f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3fa0::,2a03:3fa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a03:3fc0::,2a03:3fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3fe0::,2a03:3fe0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4000::,2a03:4000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4020::,2a03:4020:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:4040::,2a03:4040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4060::,2a03:4060:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:4080::,2a03:4080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:40a0::,2a03:40a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:40c0::,2a03:40c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:40e0::,2a03:40e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4100::,2a03:4107:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a03:4140::,2a03:4140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4160::,2a03:4160:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:4180::,2a03:4180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:41a0::,2a03:41a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:41c0::,2a03:41c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:41e0::,2a03:41e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4200::,2a03:4200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4220::,2a03:4220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:4240::,2a03:4240:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4260::,2a03:4260:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:4280::,2a03:4280:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:42a0::,2a03:42a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:42c0::,2a03:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:42e0::,2a03:42e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4300::,2a03:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:4340::,2a03:4340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4360::,2a03:4360:ffff:ffff:ffff:ffff:ffff:ffff,EE
2a03:4380::,2a03:4380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:43a0::,2a03:43a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:43c0::,2a03:43c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:43e0::,2a03:43e0:ffff:ffff:ffff:ffff:ffff:ffff,LI
2a03:4400::,2a03:4400:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:4440::,2a03:4440:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4460::,2a03:4460:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:4480::,2a03:4480:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:44a0::,2a03:44a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:44c0::,2a03:44c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:4500::,2a03:4500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4520::,2a03:4520:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a03:4540::,2a03:4540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4560::,2a03:4560:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:4580::,2a03:4580:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:45a0::,2a03:45a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:45c0::,2a03:45c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:45e0::,2a03:45e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a03:4600::,2a03:4600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4620::,2a03:4620:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:4640::,2a03:4640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4660::,2a03:4660:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:4680::,2a03:4680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:46a0::,2a03:46a0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a03:46c0::,2a03:46c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:46e0::,2a03:46e0:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a03:4700::,2a03:4700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4720::,2a03:4720:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:4740::,2a03:4740:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4760::,2a03:4760:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:4780::,2a03:4780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:47a0::,2a03:47a0:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a03:47c0::,2a03:47c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
2a03:4800::,2a03:4800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4820::,2a03:4820:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a03:4840::,2a03:4847:ffff:ffff:ffff:ffff:ffff:ffff,AL
2a03:4880::,2a03:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:48a0::,2a03:48a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:48c0::,2a03:48c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:48e0::,2a03:48e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:4900::,2a03:4900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4920::,2a03:4920:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4940::,2a03:4940:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:4960::,2a03:4960:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a03:4980::,2a03:4980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:49a0::,2a03:49a0: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:49e0::,2a03:49e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:4a20::,2a03:4a20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4a40::,2a03:4a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4a60::,2a03:4a60:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a03:4a80::,2a03:4a80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4aa0::,2a03:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4ac0::,2a03:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:4ae0::,2a03:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:4b00::,2a03:4b00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:4b20::,2a03:4b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4b40::,2a03:4b40:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:4b60::,2a03:4b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4b80::,2a03:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:4ba0::,2a03:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4bc0::,2a03:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4be0::,2a03:4be0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:4c00::,2a03:4c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:4c40::,2a03:4c40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:4c60::,2a03:4c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:4c80::,2a03:4c80:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a03:4ca0::,2a03:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:4cc0::,2a03:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4ce0::,2a03:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:4d00::,2a03:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4d20::,2a03:4d20:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a03:4d40::,2a03:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4d60::,2a03:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
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
@@ -13769,9 +18818,7 @@
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
@@ -14100,7 +19147,6 @@
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
@@ -14200,7 +19246,6 @@
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
@@ -14214,7 +19259,7 @@
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:d000::,2a03:d007: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
@@ -14231,7 +19276,9 @@
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:d480::,2a03:d480::ffff:ffff:ffff:ffff:ffff,GB
+2a03:d480:1::,2a03:d480:1:ffff:ffff:ffff:ffff:ffff,IM
+2a03:d480:2::,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
@@ -14805,7 +19852,6 @@
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
@@ -15069,7 +20115,6 @@
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
@@ -15147,7 +20192,6 @@
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
@@ -15311,7 +20355,6 @@
2a04:e900::,2a04:e907:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:e940::,2a04:e947:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:e980::,2a04:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL
-2a04:e9c0::,2a04:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:ea00::,2a04:ea07:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a04:ea40::,2a04:ea47:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:ea80::,2a04:ea87:ffff:ffff:ffff:ffff:ffff:ffff,LB
@@ -15321,6 +20364,7 @@
2a04:eb80::,2a04:eb87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:ebc0::,2a04:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec00::,2a04:ec01:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:ec10::,2a04:ec11:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec20::,2a04:ec23:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a04:ec40::,2a04:ec47:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec80::,2a04:ec87:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -15349,6 +20393,7 @@
2a04:f280::,2a04:f287:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a04:f2c0::,2a04:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a04:f300::,2a04:f300:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:f310::,2a04:f311:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:f320::,2a04:f323:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:f340::,2a04:f347:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:f380::,2a04:f387:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -15383,7 +20428,6 @@
2a04:fbc0::,2a04:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:fc00::,2a04:fc07:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:fc40::,2a04:fc47:ffff:ffff:ffff:ffff:ffff:ffff,LU
-2a04:fc80::,2a04:fc87:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a04:fcc0::,2a04:fcc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:fd00::,2a04:fd07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ff40::,2a04:ff47:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -15412,6 +20456,313 @@
2a05:500::,2a05:507:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a05:540::,2a05:547:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:580::,2a05:587:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a05:5c0::,2a05:5c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:600::,2a05:607:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:640::,2a05:647:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:680::,2a05:687:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:6c0::,2a05:6c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:700::,2a05:707:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a05:740::,2a05:747:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:780::,2a05:787:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:7c0::,2a05:7c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:800::,2a05:807:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:840::,2a05:843:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:860::,2a05:863:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:880::,2a05:887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:8c0::,2a05:8c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:900::,2a05:907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:940::,2a05:947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:980::,2a05:987:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a05:9c0::,2a05:9c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:a00::,2a05:a07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:a40::,2a05:a47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:a80::,2a05:a87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:ac0::,2a05:ac7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:b00::,2a05:b07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:b40::,2a05:b47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:b80::,2a05:b87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:bc0::,2a05:bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:c00::,2a05:c07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:c40::,2a05:c47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:c80::,2a05:c87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:cc0::,2a05:cc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d00::,2a05:d07:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a05:d40::,2a05:d47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:d80::,2a05:d87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:dc0::,2a05:dc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:e00::,2a05:e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:e40::,2a05:e47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:e80::,2a05:e87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:ec0::,2a05:ec7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:f00::,2a05:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:f40::,2a05:f47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:f80::,2a05:f87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:fc0::,2a05:fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1000::,2a05:1007:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:1040::,2a05:1047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1080::,2a05:1087:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:10c0::,2a05:10c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:1100::,2a05:1107:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:1140::,2a05:1147:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:1180::,2a05:1187:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:11c0::,2a05:11c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1200::,2a05:1203:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:1220::,2a05:1223:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:1240::,2a05:1247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:1280::,2a05:1287:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:12c0::,2a05:12c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:1300::,2a05:1307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1340::,2a05:1347:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:1380::,2a05:1387:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:13c0::,2a05:13c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1400::,2a05:1407:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:1440::,2a05:1447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1480::,2a05:1487:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:14c0::,2a05:14c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:1540::,2a05:1547:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:1580::,2a05:1587:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a05:15c0::,2a05:15c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:1600::,2a05:1607:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a05:1640::,2a05:1647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:1680::,2a05:1687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:16c0::,2a05:16c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:1700::,2a05:1707:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:1740::,2a05:1747:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1780::,2a05:1787:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:17c0::,2a05:17c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:1800::,2a05:1807:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:1840::,2a05:1847:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a05:1880::,2a05:1887:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:18c0::,2a05:18c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:1900::,2a05:1907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:1940::,2a05:1947:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:1980::,2a05:1987:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:19c0::,2a05:19c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:1a00::,2a05:1a3f:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:1c00::,2a05:1c07:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:1c40::,2a05:1c47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:1c80::,2a05:1c87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1cc0::,2a05:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a05:1d00::,2a05:1d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1d40::,2a05:1d43:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:1d60::,2a05:1d63:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1d80::,2a05:1d87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:1e00::,2a05:1e07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:1e40::,2a05:1e47:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:1e80::,2a05:1e87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:1ec0::,2a05:1ec7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:1f00::,2a05:1f07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:1f40::,2a05:1f47:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a05:1f80::,2a05:1f87:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a05:1fc0::,2a05:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:2000::,2a05:2007:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:2040::,2a05:2047:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:2080::,2a05:2087:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:20c0::,2a05:20c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:2100::,2a05:2107:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:2140::,2a05:2147:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a05:2180::,2a05:2187:ffff:ffff:ffff:ffff:ffff:ffff,TM
+2a05:21c0::,2a05:21c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:2200::,2a05:2207:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2240::,2a05:2247:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:2280::,2a05:2287:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a05:2300::,2a05:2307:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2340::,2a05:2347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:2380::,2a05:2387:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:23c0::,2a05:23c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:2400::,2a05:2407:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:2440::,2a05:2447:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:2480::,2a05:2487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:24c0::,2a05:24c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2500::,2a05:2507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2540::,2a05:2547:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:2580::,2a05:2587:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:25c0::,2a05:25c7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:2600::,2a05:2607:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:2640::,2a05:2647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:2680::,2a05:2687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:26c0::,2a05:26c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:2700::,2a05:2707:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:2740::,2a05:2747:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:2780::,2a05:2787:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:27c0::,2a05:27c7:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a05:2800::,2a05:2807:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:2880::,2a05:2887:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:28c0::,2a05:28c7:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a05:2900::,2a05:2907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2940::,2a05:2947:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:2980::,2a05:2987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:29c0::,2a05:29c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:2a00::,2a05:2a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:2a40::,2a05:2a47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:2a80::,2a05:2a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:2ac0::,2a05:2ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:2b00::,2a05:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:2b40::,2a05:2b47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:2b80::,2a05:2b87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2bc0::,2a05:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:2c00::,2a05:2c03:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:2c20::,2a05:2c23:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:2c40::,2a05:2c47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:2c80::,2a05:2c87:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a05:2cc0::,2a05:2cc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2d00::,2a05:2d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:2d40::,2a05:2d47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:2d80::,2a05:2d87:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a05:2dc0::,2a05:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:2e00::,2a05:2e07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:2e40::,2a05:2e47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:2e80::,2a05:2e87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:2ec0::,2a05:2ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:2f00::,2a05:2f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:2f40::,2a05:2f47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:2f80::,2a05:2f87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:2fc0::,2a05:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:3000::,2a05:3007:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:3040::,2a05:3047:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:3080::,2a05:3087:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a05:30c0::,2a05:30c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:3100::,2a05:3107:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:3140::,2a05:3147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:3180::,2a05:3187:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:31c0::,2a05:31c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:3200::,2a05:3207:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:3240::,2a05:3247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:3280::,2a05:3287:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a05:32c0::,2a05:32c7:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a05:3300::,2a05:3307:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:3340::,2a05:3347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:3380::,2a05:3387:ffff:ffff:ffff:ffff:ffff:ffff,YE
+2a05:33c0::,2a05:33c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a05:3400::,2a05:3407:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:3440::,2a05:3447:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:3480::,2a05:3487:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:34c0::,2a05:34c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:3500::,2a05:3507:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:3540::,2a05:3547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:3580::,2a05:3587:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:35c0::,2a05:35c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:3600::,2a05:3607:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a05:3640::,2a05:3647:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:3680::,2a05:3687:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:36c0::,2a05:36c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:3700::,2a05:3707:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:3740::,2a05:3747:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:3780::,2a05:3787:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:37c0::,2a05:37c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:3800::,2a05:3807:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:3840::,2a05:3847:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:3880::,2a05:3887:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:38c0::,2a05:38c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:3900::,2a05:3907:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:3940::,2a05:3941:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:3950::,2a05:3951:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:3960::,2a05:3963:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:3980::,2a05:3987:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:39c0::,2a05:39c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:3a00::,2a05:3a07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:3a40::,2a05:3a47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a05:3a80::,2a05:3a87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:3ac0::,2a05:3ac7:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a05:3b00::,2a05:3b07:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a05:3b40::,2a05:3b47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:3b80::,2a05:3b87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:3bc0::,2a05:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:3c00::,2a05:3c07:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:3c40::,2a05:3c47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:3c80::,2a05:3c87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:3cc0::,2a05:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:3d00::,2a05:3d07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:3d40::,2a05:3d47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:3d80::,2a05:3d87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:3dc0::,2a05:3dc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:3e00::,2a05:3e07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:3e40::,2a05:3e47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:3e80::,2a05:3e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:3ec0::,2a05:3ec7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:3f00::,2a05:3f07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:3f40::,2a05:3f47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:3f80::,2a05:3f87:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a05:3fc0::,2a05:3fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:4000::,2a05:4007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4040::,2a05:4047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4080::,2a05:4087:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a05:40c0::,2a05:40c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:4100::,2a05:4107:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:4140::,2a05:4147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4180::,2a05:4187:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:41c0::,2a05:41c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:4200::,2a05:4207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4240::,2a05:4247:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:4280::,2a05:4287:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a05:42c0::,2a05:42c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:4300::,2a05:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4340::,2a05:4347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4380::,2a05:4387:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:43c0::,2a05:43c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:4400::,2a05:4407:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:4440::,2a05:4447:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:4480::,2a05:4487:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:44c0::,2a05:44c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:4500::,2a05:4507:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:4540::,2a05:4547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4580::,2a05:4587:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:45c0::,2a05:45c7:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a05:4600::,2a05:4607:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a05:4640::,2a05:4647:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:4680::,2a05:4687:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:46c0::,2a05:46c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:4700::,2a05:4707:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:4740::,2a05:4747:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:4780::,2a05:4787:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:47c0::,2a05:47c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:4800::,2a05:4807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:4840::,2a05:4847:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:4880::,2a05:4887:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:48c0::,2a05:48c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:4900::,2a05:4907:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:4940::,2a05:4947:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a05:4980::,2a05:4987:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a05:49c0::,2a05:49c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:4a00::,2a05:4a07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:4a40::,2a05:4a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:4a80::,2a05:4a87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4ac0::,2a05:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:4b00::,2a05:4b07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:4b40::,2a05:4b47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:4b80::,2a05:4b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4bc0::,2a05:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4c00::,2a05:4c07:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a05:4c40::,2a05:4c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4c80::,2a05:4c87:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a05:4cc0::,2a05:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:4d00::,2a05:4d07:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a05:4d40::,2a05:4d47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:4d80::,2a05:4d87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:4dc0::,2a05:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:4e00::,2a05:4e07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a05:4e40::,2a05:4e47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a05:4e80::,2a05:4e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:4ec0::,2a05:4ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:4f00::,2a05:4f07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:4f40::,2a05:4f47:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a05:4f80::,2a05:4f87:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a05:4fc0::,2a05:4fc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5000::,2a05:5007:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:5040::,2a05:5047:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:5080::,2a05:5087:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:50c0::,2a05:50c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a05:5100::,2a05:5107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:5140::,2a05:5147:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:5180::,2a05:5187:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:51c0::,2a05:51c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:5200::,2a05:5207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5240::,2a05:5247:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:5280::,2a05:5283:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:52c0::,2a05:52c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5300::,2a05:5307:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:5340::,2a05:5347:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a05:5380::,2a05:5387:ffff:ffff:ffff:ffff:ffff:ffff,PL
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
@@ -15453,12 +20804,26 @@
2c0f:f720::,2c0f:f720:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f728::,2c0f:f728:ffff:ffff:ffff:ffff:ffff:ffff,BW
2c0f:f730::,2c0f:f730:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f738::,2c0f:f738:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f740::,2c0f:f740:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f748::,2c0f:f748:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f750::,2c0f:f750:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f758::,2c0f:f758:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:f760::,2c0f:f760:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f768::,2c0f:f768:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f770::,2c0f:f770:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:f778::,2c0f:f778:ffff:ffff:ffff:ffff:ffff:ffff,NA
+2c0f:f780::,2c0f:f780:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f788::,2c0f:f788:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:f798::,2c0f:f798:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f7a0::,2c0f:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:f7a8::,2c0f:f7af: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:f830::,2c0f:f830:ffff:ffff:ffff:ffff:ffff:ffff,MU
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
@@ -15480,7 +20845,7 @@
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:f8f0::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,MU
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
@@ -15535,7 +20900,6 @@
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
@@ -15606,7 +20970,6 @@
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
diff --git a/src/ext/README b/src/ext/README
index 5d5a6e1518..616716e099 100644
--- a/src/ext/README
+++ b/src/ext/README
@@ -49,3 +49,15 @@ siphash.h
Marek Majkowski's implementation of siphash 2-4, a secure keyed
hash algorithm to avoid collision-based DoS attacks against hash
tables.
+
+trunnel/*.[ch]
+
+ Headers and runtime code for Trunnel, a system for generating
+ code to encode and decode binary formats.
+
+ed25519/ref10/*
+
+ Daniel Bernsten's portable ref10 implementation of ed25519.
+ Public domain.
+
+
diff --git a/src/ext/csiphash.c b/src/ext/csiphash.c
index c247886038..faca9ef362 100644
--- a/src/ext/csiphash.c
+++ b/src/ext/csiphash.c
@@ -1,5 +1,5 @@
/* <MIT License>
- Copyright (c) 2013 Marek Majkowski <marek@popcount.org>
+ Copyright (c) 2013-2014 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
diff --git a/src/ext/ed25519/ref10/Makefile b/src/ext/ed25519/ref10/Makefile
new file mode 100644
index 0000000000..9b0ba7ad45
--- /dev/null
+++ b/src/ext/ed25519/ref10/Makefile
@@ -0,0 +1,41 @@
+all: d.h d2.h sqrtm1.h base.h base2.h \
+ge_add.h ge_sub.h \
+ge_madd.h ge_msub.h \
+ge_p2_dbl.h \
+pow225521.h pow22523.h
+
+d.h: d.py
+ python d.py > d.h
+
+d2.h: d2.py
+ python d2.py > d2.h
+
+sqrtm1.h: sqrtm1.py
+ python sqrtm1.py > sqrtm1.h
+
+base.h: base.py
+ python base.py > base.h
+
+base2.h: base2.py
+ python base2.py > base2.h
+
+ge_add.h: ge_add.q q2h.sh
+ ./q2h.sh < ge_add.q > ge_add.h
+
+ge_sub.h: ge_sub.q q2h.sh
+ ./q2h.sh < ge_sub.q > ge_sub.h
+
+ge_madd.h: ge_madd.q q2h.sh
+ ./q2h.sh < ge_madd.q > ge_madd.h
+
+ge_msub.h: ge_msub.q q2h.sh
+ ./q2h.sh < ge_msub.q > ge_msub.h
+
+ge_p2_dbl.h: ge_p2_dbl.q q2h.sh
+ ./q2h.sh < ge_p2_dbl.q > ge_p2_dbl.h
+
+pow22523.h: pow22523.q q2h.sh
+ ./q2h.sh < pow22523.q > pow22523.h
+
+pow225521.h: pow225521.q q2h.sh
+ ./q2h.sh < pow225521.q > pow225521.h
diff --git a/src/ext/ed25519/ref10/README.tor b/src/ext/ed25519/ref10/README.tor
new file mode 100644
index 0000000000..38ed97ba05
--- /dev/null
+++ b/src/ext/ed25519/ref10/README.tor
@@ -0,0 +1,23 @@
+
+We've made the following changes to the stock ed25519_ref10 from
+supercop-20140622:
+
+ * We added the necessary glue to provide integers of fixed bit
+ sizes, SHA512, and to compile without warnings everywhere we need
+ to build.
+
+ * Secret keys are stored in expanded format. There are functions
+ to expand them from the 32-byte seed.
+
+ * Signatures are made and processed detached from the messages that
+ they sign. (In other words, we support "make signature" and
+ "check signature", not "create signed message" and "check and
+ unpack signed message".)
+
+ * There's an implementation of 'convert a curve25519 key to an
+ ed25519 key' so we can do cross-certification with curve25519 keys.
+ (keyconv.c)
+
+ * There's an implementation of multiplicative key blinding so we
+ can use it for next-gen hidden srevice descriptors. (blinding.c)
+
diff --git a/src/ext/ed25519/ref10/api.h b/src/ext/ed25519/ref10/api.h
new file mode 100644
index 0000000000..d88dae0c32
--- /dev/null
+++ b/src/ext/ed25519/ref10/api.h
@@ -0,0 +1,4 @@
+#define CRYPTO_SECRETKEYBYTES 64
+#define CRYPTO_PUBLICKEYBYTES 32
+#define CRYPTO_BYTES 64
+#define CRYPTO_DETERMINISTIC 1
diff --git a/src/ext/ed25519/ref10/base.h b/src/ext/ed25519/ref10/base.h
new file mode 100644
index 0000000000..573bd8a05c
--- /dev/null
+++ b/src/ext/ed25519/ref10/base.h
@@ -0,0 +1,1344 @@
+{
+ {
+ { 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 },
+ { -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 },
+ { -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 },
+ },
+ {
+ { -12815894,-12976347,-21581243,11784320,-25355658,-2750717,-11717903,-3814571,-358445,-10211303 },
+ { -21703237,6903825,27185491,6451973,-29577724,-9554005,-15616551,11189268,-26829678,-5319081 },
+ { 26966642,11152617,32442495,15396054,14353839,-12752335,-3128826,-9541118,-15472047,-4166697 },
+ },
+ {
+ { 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 },
+ { 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 },
+ { 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 },
+ },
+ {
+ { -17036878,13921892,10945806,-6033431,27105052,-16084379,-28926210,15006023,3284568,-6276540 },
+ { 23599295,-8306047,-11193664,-7687416,13236774,10506355,7464579,9656445,13059162,10374397 },
+ { 7798556,16710257,3033922,2874086,28997861,2835604,32406664,-3839045,-641708,-101325 },
+ },
+ {
+ { 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 },
+ { 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 },
+ { 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 },
+ },
+ {
+ { -15371964,-12862754,32573250,4720197,-26436522,5875511,-19188627,-15224819,-9818940,-12085777 },
+ { -8549212,109983,15149363,2178705,22900618,4543417,3044240,-15689887,1762328,14866737 },
+ { -18199695,-15951423,-10473290,1707278,-17185920,3916101,-28236412,3959421,27914454,4383652 },
+ },
+ {
+ { 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 },
+ { -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 },
+ { 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 },
+ },
+ {
+ { 14499471,-2729599,-33191113,-4254652,28494862,14271267,30290735,10876454,-33154098,2381726 },
+ { -7195431,-2655363,-14730155,462251,-27724326,3941372,-6236617,3696005,-32300832,15351955 },
+ { 27431194,8222322,16448760,-3907995,-18707002,11938355,-32961401,-2970515,29551813,10109425 },
+ },
+},
+{
+ {
+ { -13657040,-13155431,-31283750,11777098,21447386,6519384,-2378284,-1627556,10092783,-4764171 },
+ { 27939166,14210322,4677035,16277044,-22964462,-12398139,-32508754,12005538,-17810127,12803510 },
+ { 17228999,-15661624,-1233527,300140,-1224870,-11714777,30364213,-9038194,18016357,4397660 },
+ },
+ {
+ { -10958843,-7690207,4776341,-14954238,27850028,-15602212,-26619106,14544525,-17477504,982639 },
+ { 29253598,15796703,-2863982,-9908884,10057023,3163536,7332899,-4120128,-21047696,9934963 },
+ { 5793303,16271923,-24131614,-10116404,29188560,1206517,-14747930,4559895,-30123922,-10897950 },
+ },
+ {
+ { -27643952,-11493006,16282657,-11036493,28414021,-15012264,24191034,4541697,-13338309,5500568 },
+ { 12650548,-1497113,9052871,11355358,-17680037,-8400164,-17430592,12264343,10874051,13524335 },
+ { 25556948,-3045990,714651,2510400,23394682,-10415330,33119038,5080568,-22528059,5376628 },
+ },
+ {
+ { -26088264,-4011052,-17013699,-3537628,-6726793,1920897,-22321305,-9447443,4535768,1569007 },
+ { -2255422,14606630,-21692440,-8039818,28430649,8775819,-30494562,3044290,31848280,12543772 },
+ { -22028579,2943893,-31857513,6777306,13784462,-4292203,-27377195,-2062731,7718482,14474653 },
+ },
+ {
+ { 2385315,2454213,-22631320,46603,-4437935,-15680415,656965,-7236665,24316168,-5253567 },
+ { 13741529,10911568,-33233417,-8603737,-20177830,-1033297,33040651,-13424532,-20729456,8321686 },
+ { 21060490,-2212744,15712757,-4336099,1639040,10656336,23845965,-11874838,-9984458,608372 },
+ },
+ {
+ { -13672732,-15087586,-10889693,-7557059,-6036909,11305547,1123968,-6780577,27229399,23887 },
+ { -23244140,-294205,-11744728,14712571,-29465699,-2029617,12797024,-6440308,-1633405,16678954 },
+ { -29500620,4770662,-16054387,14001338,7830047,9564805,-1508144,-4795045,-17169265,4904953 },
+ },
+ {
+ { 24059557,14617003,19037157,-15039908,19766093,-14906429,5169211,16191880,2128236,-4326833 },
+ { -16981152,4124966,-8540610,-10653797,30336522,-14105247,-29806336,916033,-6882542,-2986532 },
+ { -22630907,12419372,-7134229,-7473371,-16478904,16739175,285431,2763829,15736322,4143876 },
+ },
+ {
+ { 2379352,11839345,-4110402,-5988665,11274298,794957,212801,-14594663,23527084,-16458268 },
+ { 33431127,-11130478,-17838966,-15626900,8909499,8376530,-32625340,4087881,-15188911,-14416214 },
+ { 1767683,7197987,-13205226,-2022635,-13091350,448826,5799055,4357868,-4774191,-16323038 },
+ },
+},
+{
+ {
+ { 6721966,13833823,-23523388,-1551314,26354293,-11863321,23365147,-3949732,7390890,2759800 },
+ { 4409041,2052381,23373853,10530217,7676779,-12885954,21302353,-4264057,1244380,-12919645 },
+ { -4421239,7169619,4982368,-2957590,30256825,-2777540,14086413,9208236,15886429,16489664 },
+ },
+ {
+ { 1996075,10375649,14346367,13311202,-6874135,-16438411,-13693198,398369,-30606455,-712933 },
+ { -25307465,9795880,-2777414,14878809,-33531835,14780363,13348553,12076947,-30836462,5113182 },
+ { -17770784,11797796,31950843,13929123,-25888302,12288344,-30341101,-7336386,13847711,5387222 },
+ },
+ {
+ { -18582163,-3416217,17824843,-2340966,22744343,-10442611,8763061,3617786,-19600662,10370991 },
+ { 20246567,-14369378,22358229,-543712,18507283,-10413996,14554437,-8746092,32232924,16763880 },
+ { 9648505,10094563,26416693,14745928,-30374318,-6472621,11094161,15689506,3140038,-16510092 },
+ },
+ {
+ { -16160072,5472695,31895588,4744994,8823515,10365685,-27224800,9448613,-28774454,366295 },
+ { 19153450,11523972,-11096490,-6503142,-24647631,5420647,28344573,8041113,719605,11671788 },
+ { 8678025,2694440,-6808014,2517372,4964326,11152271,-15432916,-15266516,27000813,-10195553 },
+ },
+ {
+ { -15157904,7134312,8639287,-2814877,-7235688,10421742,564065,5336097,6750977,-14521026 },
+ { 11836410,-3979488,26297894,16080799,23455045,15735944,1695823,-8819122,8169720,16220347 },
+ { -18115838,8653647,17578566,-6092619,-8025777,-16012763,-11144307,-2627664,-5990708,-14166033 },
+ },
+ {
+ { -23308498,-10968312,15213228,-10081214,-30853605,-11050004,27884329,2847284,2655861,1738395 },
+ { -27537433,-14253021,-25336301,-8002780,-9370762,8129821,21651608,-3239336,-19087449,-11005278 },
+ { 1533110,3437855,23735889,459276,29970501,11335377,26030092,5821408,10478196,8544890 },
+ },
+ {
+ { 32173121,-16129311,24896207,3921497,22579056,-3410854,19270449,12217473,17789017,-3395995 },
+ { -30552961,-2228401,-15578829,-10147201,13243889,517024,15479401,-3853233,30460520,1052596 },
+ { -11614875,13323618,32618793,8175907,-15230173,12596687,27491595,-4612359,3179268,-9478891 },
+ },
+ {
+ { 31947069,-14366651,-4640583,-15339921,-15125977,-6039709,-14756777,-16411740,19072640,-9511060 },
+ { 11685058,11822410,3158003,-13952594,33402194,-4165066,5977896,-5215017,473099,5040608 },
+ { -20290863,8198642,-27410132,11602123,1290375,-2799760,28326862,1721092,-19558642,-3131606 },
+ },
+},
+{
+ {
+ { 7881532,10687937,7578723,7738378,-18951012,-2553952,21820786,8076149,-27868496,11538389 },
+ { -19935666,3899861,18283497,-6801568,-15728660,-11249211,8754525,7446702,-5676054,5797016 },
+ { -11295600,-3793569,-15782110,-7964573,12708869,-8456199,2014099,-9050574,-2369172,-5877341 },
+ },
+ {
+ { -22472376,-11568741,-27682020,1146375,18956691,16640559,1192730,-3714199,15123619,10811505 },
+ { 14352098,-3419715,-18942044,10822655,32750596,4699007,-70363,15776356,-28886779,-11974553 },
+ { -28241164,-8072475,-4978962,-5315317,29416931,1847569,-20654173,-16484855,4714547,-9600655 },
+ },
+ {
+ { 15200332,8368572,19679101,15970074,-31872674,1959451,24611599,-4543832,-11745876,12340220 },
+ { 12876937,-10480056,33134381,6590940,-6307776,14872440,9613953,8241152,15370987,9608631 },
+ { -4143277,-12014408,8446281,-391603,4407738,13629032,-7724868,15866074,-28210621,-8814099 },
+ },
+ {
+ { 26660628,-15677655,8393734,358047,-7401291,992988,-23904233,858697,20571223,8420556 },
+ { 14620715,13067227,-15447274,8264467,14106269,15080814,33531827,12516406,-21574435,-12476749 },
+ { 236881,10476226,57258,-14677024,6472998,2466984,17258519,7256740,8791136,15069930 },
+ },
+ {
+ { 1276410,-9371918,22949635,-16322807,-23493039,-5702186,14711875,4874229,-30663140,-2331391 },
+ { 5855666,4990204,-13711848,7294284,-7804282,1924647,-1423175,-7912378,-33069337,9234253 },
+ { 20590503,-9018988,31529744,-7352666,-2706834,10650548,31559055,-11609587,18979186,13396066 },
+ },
+ {
+ { 24474287,4968103,22267082,4407354,24063882,-8325180,-18816887,13594782,33514650,7021958 },
+ { -11566906,-6565505,-21365085,15928892,-26158305,4315421,-25948728,-3916677,-21480480,12868082 },
+ { -28635013,13504661,19988037,-2132761,21078225,6443208,-21446107,2244500,-12455797,-8089383 },
+ },
+ {
+ { -30595528,13793479,-5852820,319136,-25723172,-6263899,33086546,8957937,-15233648,5540521 },
+ { -11630176,-11503902,-8119500,-7643073,2620056,1022908,-23710744,-1568984,-16128528,-14962807 },
+ { 23152971,775386,27395463,14006635,-9701118,4649512,1689819,892185,-11513277,-15205948 },
+ },
+ {
+ { 9770129,9586738,26496094,4324120,1556511,-3550024,27453819,4763127,-19179614,5867134 },
+ { -32765025,1927590,31726409,-4753295,23962434,-16019500,27846559,5931263,-29749703,-16108455 },
+ { 27461885,-2977536,22380810,1815854,-23033753,-3031938,7283490,-15148073,-19526700,7734629 },
+ },
+},
+{
+ {
+ { -8010264,-9590817,-11120403,6196038,29344158,-13430885,7585295,-3176626,18549497,15302069 },
+ { -32658337,-6171222,-7672793,-11051681,6258878,13504381,10458790,-6418461,-8872242,8424746 },
+ { 24687205,8613276,-30667046,-3233545,1863892,-1830544,19206234,7134917,-11284482,-828919 },
+ },
+ {
+ { 11334899,-9218022,8025293,12707519,17523892,-10476071,10243738,-14685461,-5066034,16498837 },
+ { 8911542,6887158,-9584260,-6958590,11145641,-9543680,17303925,-14124238,6536641,10543906 },
+ { -28946384,15479763,-17466835,568876,-1497683,11223454,-2669190,-16625574,-27235709,8876771 },
+ },
+ {
+ { -25742899,-12566864,-15649966,-846607,-33026686,-796288,-33481822,15824474,-604426,-9039817 },
+ { 10330056,70051,7957388,-9002667,9764902,15609756,27698697,-4890037,1657394,3084098 },
+ { 10477963,-7470260,12119566,-13250805,29016247,-5365589,31280319,14396151,-30233575,15272409 },
+ },
+ {
+ { -12288309,3169463,28813183,16658753,25116432,-5630466,-25173957,-12636138,-25014757,1950504 },
+ { -26180358,9489187,11053416,-14746161,-31053720,5825630,-8384306,-8767532,15341279,8373727 },
+ { 28685821,7759505,-14378516,-12002860,-31971820,4079242,298136,-10232602,-2878207,15190420 },
+ },
+ {
+ { -32932876,13806336,-14337485,-15794431,-24004620,10940928,8669718,2742393,-26033313,-6875003 },
+ { -1580388,-11729417,-25979658,-11445023,-17411874,-10912854,9291594,-16247779,-12154742,6048605 },
+ { -30305315,14843444,1539301,11864366,20201677,1900163,13934231,5128323,11213262,9168384 },
+ },
+ {
+ { -26280513,11007847,19408960,-940758,-18592965,-4328580,-5088060,-11105150,20470157,-16398701 },
+ { -23136053,9282192,14855179,-15390078,-7362815,-14408560,-22783952,14461608,14042978,5230683 },
+ { 29969567,-2741594,-16711867,-8552442,9175486,-2468974,21556951,3506042,-5933891,-12449708 },
+ },
+ {
+ { -3144746,8744661,19704003,4581278,-20430686,6830683,-21284170,8971513,-28539189,15326563 },
+ { -19464629,10110288,-17262528,-3503892,-23500387,1355669,-15523050,15300988,-20514118,9168260 },
+ { -5353335,4488613,-23803248,16314347,7780487,-15638939,-28948358,9601605,33087103,-9011387 },
+ },
+ {
+ { -19443170,-15512900,-20797467,-12445323,-29824447,10229461,-27444329,-15000531,-5996870,15664672 },
+ { 23294591,-16632613,-22650781,-8470978,27844204,11461195,13099750,-2460356,18151676,13417686 },
+ { -24722913,-4176517,-31150679,5988919,-26858785,6685065,1661597,-12551441,15271676,-15452665 },
+ },
+},
+{
+ {
+ { 11433042,-13228665,8239631,-5279517,-1985436,-725718,-18698764,2167544,-6921301,-13440182 },
+ { -31436171,15575146,30436815,12192228,-22463353,9395379,-9917708,-8638997,12215110,12028277 },
+ { 14098400,6555944,23007258,5757252,-15427832,-12950502,30123440,4617780,-16900089,-655628 },
+ },
+ {
+ { -4026201,-15240835,11893168,13718664,-14809462,1847385,-15819999,10154009,23973261,-12684474 },
+ { -26531820,-3695990,-1908898,2534301,-31870557,-16550355,18341390,-11419951,32013174,-10103539 },
+ { -25479301,10876443,-11771086,-14625140,-12369567,1838104,21911214,6354752,4425632,-837822 },
+ },
+ {
+ { -10433389,-14612966,22229858,-3091047,-13191166,776729,-17415375,-12020462,4725005,14044970 },
+ { 19268650,-7304421,1555349,8692754,-21474059,-9910664,6347390,-1411784,-19522291,-16109756 },
+ { -24864089,12986008,-10898878,-5558584,-11312371,-148526,19541418,8180106,9282262,10282508 },
+ },
+ {
+ { -26205082,4428547,-8661196,-13194263,4098402,-14165257,15522535,8372215,5542595,-10702683 },
+ { -10562541,14895633,26814552,-16673850,-17480754,-2489360,-2781891,6993761,-18093885,10114655 },
+ { -20107055,-929418,31422704,10427861,-7110749,6150669,-29091755,-11529146,25953725,-106158 },
+ },
+ {
+ { -4234397,-8039292,-9119125,3046000,2101609,-12607294,19390020,6094296,-3315279,12831125 },
+ { -15998678,7578152,5310217,14408357,-33548620,-224739,31575954,6326196,7381791,-2421839 },
+ { -20902779,3296811,24736065,-16328389,18374254,7318640,6295303,8082724,-15362489,12339664 },
+ },
+ {
+ { 27724736,2291157,6088201,-14184798,1792727,5857634,13848414,15768922,25091167,14856294 },
+ { -18866652,8331043,24373479,8541013,-701998,-9269457,12927300,-12695493,-22182473,-9012899 },
+ { -11423429,-5421590,11632845,3405020,30536730,-11674039,-27260765,13866390,30146206,9142070 },
+ },
+ {
+ { 3924129,-15307516,-13817122,-10054960,12291820,-668366,-27702774,9326384,-8237858,4171294 },
+ { -15921940,16037937,6713787,16606682,-21612135,2790944,26396185,3731949,345228,-5462949 },
+ { -21327538,13448259,25284571,1143661,20614966,-8849387,2031539,-12391231,-16253183,-13582083 },
+ },
+ {
+ { 31016211,-16722429,26371392,-14451233,-5027349,14854137,17477601,3842657,28012650,-16405420 },
+ { -5075835,9368966,-8562079,-4600902,-15249953,6970560,-9189873,16292057,-8867157,3507940 },
+ { 29439664,3537914,23333589,6997794,-17555561,-11018068,-15209202,-15051267,-9164929,6580396 },
+ },
+},
+{
+ {
+ { -12185861,-7679788,16438269,10826160,-8696817,-6235611,17860444,-9273846,-2095802,9304567 },
+ { 20714564,-4336911,29088195,7406487,11426967,-5095705,14792667,-14608617,5289421,-477127 },
+ { -16665533,-10650790,-6160345,-13305760,9192020,-1802462,17271490,12349094,26939669,-3752294 },
+ },
+ {
+ { -12889898,9373458,31595848,16374215,21471720,13221525,-27283495,-12348559,-3698806,117887 },
+ { 22263325,-6560050,3984570,-11174646,-15114008,-566785,28311253,5358056,-23319780,541964 },
+ { 16259219,3261970,2309254,-15534474,-16885711,-4581916,24134070,-16705829,-13337066,-13552195 },
+ },
+ {
+ { 9378160,-13140186,-22845982,-12745264,28198281,-7244098,-2399684,-717351,690426,14876244 },
+ { 24977353,-314384,-8223969,-13465086,28432343,-1176353,-13068804,-12297348,-22380984,6618999 },
+ { -1538174,11685646,12944378,13682314,-24389511,-14413193,8044829,-13817328,32239829,-5652762 },
+ },
+ {
+ { -18603066,4762990,-926250,8885304,-28412480,-3187315,9781647,-10350059,32779359,5095274 },
+ { -33008130,-5214506,-32264887,-3685216,9460461,-9327423,-24601656,14506724,21639561,-2630236 },
+ { -16400943,-13112215,25239338,15531969,3987758,-4499318,-1289502,-6863535,17874574,558605 },
+ },
+ {
+ { -13600129,10240081,9171883,16131053,-20869254,9599700,33499487,5080151,2085892,5119761 },
+ { -22205145,-2519528,-16381601,414691,-25019550,2170430,30634760,-8363614,-31999993,-5759884 },
+ { -6845704,15791202,8550074,-1312654,29928809,-12092256,27534430,-7192145,-22351378,12961482 },
+ },
+ {
+ { -24492060,-9570771,10368194,11582341,-23397293,-2245287,16533930,8206996,-30194652,-5159638 },
+ { -11121496,-3382234,2307366,6362031,-135455,8868177,-16835630,7031275,7589640,8945490 },
+ { -32152748,8917967,6661220,-11677616,-1192060,-15793393,7251489,-11182180,24099109,-14456170 },
+ },
+ {
+ { 5019558,-7907470,4244127,-14714356,-26933272,6453165,-19118182,-13289025,-6231896,-10280736 },
+ { 10853594,10721687,26480089,5861829,-22995819,1972175,-1866647,-10557898,-3363451,-6441124 },
+ { -17002408,5906790,221599,-6563147,7828208,-13248918,24362661,-2008168,-13866408,7421392 },
+ },
+ {
+ { 8139927,-6546497,32257646,-5890546,30375719,1886181,-21175108,15441252,28826358,-4123029 },
+ { 6267086,9695052,7709135,-16603597,-32869068,-1886135,14795160,-7840124,13746021,-1742048 },
+ { 28584902,7787108,-6732942,-15050729,22846041,-7571236,-3181936,-363524,4771362,-8419958 },
+ },
+},
+{
+ {
+ { 24949256,6376279,-27466481,-8174608,-18646154,-9930606,33543569,-12141695,3569627,11342593 },
+ { 26514989,4740088,27912651,3697550,19331575,-11472339,6809886,4608608,7325975,-14801071 },
+ { -11618399,-14554430,-24321212,7655128,-1369274,5214312,-27400540,10258390,-17646694,-8186692 },
+ },
+ {
+ { 11431204,15823007,26570245,14329124,18029990,4796082,-31446179,15580664,9280358,-3973687 },
+ { -160783,-10326257,-22855316,-4304997,-20861367,-13621002,-32810901,-11181622,-15545091,4387441 },
+ { -20799378,12194512,3937617,-5805892,-27154820,9340370,-24513992,8548137,20617071,-7482001 },
+ },
+ {
+ { -938825,-3930586,-8714311,16124718,24603125,-6225393,-13775352,-11875822,24345683,10325460 },
+ { -19855277,-1568885,-22202708,8714034,14007766,6928528,16318175,-1010689,4766743,3552007 },
+ { -21751364,-16730916,1351763,-803421,-4009670,3950935,3217514,14481909,10988822,-3994762 },
+ },
+ {
+ { 15564307,-14311570,3101243,5684148,30446780,-8051356,12677127,-6505343,-8295852,13296005 },
+ { -9442290,6624296,-30298964,-11913677,-4670981,-2057379,31521204,9614054,-30000824,12074674 },
+ { 4771191,-135239,14290749,-13089852,27992298,14998318,-1413936,-1556716,29832613,-16391035 },
+ },
+ {
+ { 7064884,-7541174,-19161962,-5067537,-18891269,-2912736,25825242,5293297,-27122660,13101590 },
+ { -2298563,2439670,-7466610,1719965,-27267541,-16328445,32512469,-5317593,-30356070,-4190957 },
+ { -30006540,10162316,-33180176,3981723,-16482138,-13070044,14413974,9515896,19568978,9628812 },
+ },
+ {
+ { 33053803,199357,15894591,1583059,27380243,-4580435,-17838894,-6106839,-6291786,3437740 },
+ { -18978877,3884493,19469877,12726490,15913552,13614290,-22961733,70104,7463304,4176122 },
+ { -27124001,10659917,11482427,-16070381,12771467,-6635117,-32719404,-5322751,24216882,5944158 },
+ },
+ {
+ { 8894125,7450974,-2664149,-9765752,-28080517,-12389115,19345746,14680796,11632993,5847885 },
+ { 26942781,-2315317,9129564,-4906607,26024105,11769399,-11518837,6367194,-9727230,4782140 },
+ { 19916461,-4828410,-22910704,-11414391,25606324,-5972441,33253853,8220911,6358847,-1873857 },
+ },
+ {
+ { 801428,-2081702,16569428,11065167,29875704,96627,7908388,-4480480,-13538503,1387155 },
+ { 19646058,5720633,-11416706,12814209,11607948,12749789,14147075,15156355,-21866831,11835260 },
+ { 19299512,1155910,28703737,14890794,2925026,7269399,26121523,15467869,-26560550,5052483 },
+ },
+},
+{
+ {
+ { -3017432,10058206,1980837,3964243,22160966,12322533,-6431123,-12618185,12228557,-7003677 },
+ { 32944382,14922211,-22844894,5188528,21913450,-8719943,4001465,13238564,-6114803,8653815 },
+ { 22865569,-4652735,27603668,-12545395,14348958,8234005,24808405,5719875,28483275,2841751 },
+ },
+ {
+ { -16420968,-1113305,-327719,-12107856,21886282,-15552774,-1887966,-315658,19932058,-12739203 },
+ { -11656086,10087521,-8864888,-5536143,-19278573,-3055912,3999228,13239134,-4777469,-13910208 },
+ { 1382174,-11694719,17266790,9194690,-13324356,9720081,20403944,11284705,-14013818,3093230 },
+ },
+ {
+ { 16650921,-11037932,-1064178,1570629,-8329746,7352753,-302424,16271225,-24049421,-6691850 },
+ { -21911077,-5927941,-4611316,-5560156,-31744103,-10785293,24123614,15193618,-21652117,-16739389 },
+ { -9935934,-4289447,-25279823,4372842,2087473,10399484,31870908,14690798,17361620,11864968 },
+ },
+ {
+ { -11307610,6210372,13206574,5806320,-29017692,-13967200,-12331205,-7486601,-25578460,-16240689 },
+ { 14668462,-12270235,26039039,15305210,25515617,4542480,10453892,6577524,9145645,-6443880 },
+ { 5974874,3053895,-9433049,-10385191,-31865124,3225009,-7972642,3936128,-5652273,-3050304 },
+ },
+ {
+ { 30625386,-4729400,-25555961,-12792866,-20484575,7695099,17097188,-16303496,-27999779,1803632 },
+ { -3553091,9865099,-5228566,4272701,-5673832,-16689700,14911344,12196514,-21405489,7047412 },
+ { 20093277,9920966,-11138194,-5343857,13161587,12044805,-32856851,4124601,-32343828,-10257566 },
+ },
+ {
+ { -20788824,14084654,-13531713,7842147,19119038,-13822605,4752377,-8714640,-21679658,2288038 },
+ { -26819236,-3283715,29965059,3039786,-14473765,2540457,29457502,14625692,-24819617,12570232 },
+ { -1063558,-11551823,16920318,12494842,1278292,-5869109,-21159943,-3498680,-11974704,4724943 },
+ },
+ {
+ { 17960970,-11775534,-4140968,-9702530,-8876562,-1410617,-12907383,-8659932,-29576300,1903856 },
+ { 23134274,-14279132,-10681997,-1611936,20684485,15770816,-12989750,3190296,26955097,14109738 },
+ { 15308788,5320727,-30113809,-14318877,22902008,7767164,29425325,-11277562,31960942,11934971 },
+ },
+ {
+ { -27395711,8435796,4109644,12222639,-24627868,14818669,20638173,4875028,10491392,1379718 },
+ { -13159415,9197841,3875503,-8936108,-1383712,-5879801,33518459,16176658,21432314,12180697 },
+ { -11787308,11500838,13787581,-13832590,-22430679,10140205,1465425,12689540,-10301319,-13872883 },
+ },
+},
+{
+ {
+ { 5414091,-15386041,-21007664,9643570,12834970,1186149,-2622916,-1342231,26128231,6032912 },
+ { -26337395,-13766162,32496025,-13653919,17847801,-12669156,3604025,8316894,-25875034,-10437358 },
+ { 3296484,6223048,24680646,-12246460,-23052020,5903205,-8862297,-4639164,12376617,3188849 },
+ },
+ {
+ { 29190488,-14659046,27549113,-1183516,3520066,-10697301,32049515,-7309113,-16109234,-9852307 },
+ { -14744486,-9309156,735818,-598978,-20407687,-5057904,25246078,-15795669,18640741,-960977 },
+ { -6928835,-16430795,10361374,5642961,4910474,12345252,-31638386,-494430,10530747,1053335 },
+ },
+ {
+ { -29265967,-14186805,-13538216,-12117373,-19457059,-10655384,-31462369,-2948985,24018831,15026644 },
+ { -22592535,-3145277,-2289276,5953843,-13440189,9425631,25310643,13003497,-2314791,-15145616 },
+ { -27419985,-603321,-8043984,-1669117,-26092265,13987819,-27297622,187899,-23166419,-2531735 },
+ },
+ {
+ { -21744398,-13810475,1844840,5021428,-10434399,-15911473,9716667,16266922,-5070217,726099 },
+ { 29370922,-6053998,7334071,-15342259,9385287,2247707,-13661962,-4839461,30007388,-15823341 },
+ { -936379,16086691,23751945,-543318,-1167538,-5189036,9137109,730663,9835848,4555336 },
+ },
+ {
+ { -23376435,1410446,-22253753,-12899614,30867635,15826977,17693930,544696,-11985298,12422646 },
+ { 31117226,-12215734,-13502838,6561947,-9876867,-12757670,-5118685,-4096706,29120153,13924425 },
+ { -17400879,-14233209,19675799,-2734756,-11006962,-5858820,-9383939,-11317700,7240931,-237388 },
+ },
+ {
+ { -31361739,-11346780,-15007447,-5856218,-22453340,-12152771,1222336,4389483,3293637,-15551743 },
+ { -16684801,-14444245,11038544,11054958,-13801175,-3338533,-24319580,7733547,12796905,-6335822 },
+ { -8759414,-10817836,-25418864,10783769,-30615557,-9746811,-28253339,3647836,3222231,-11160462 },
+ },
+ {
+ { 18606113,1693100,-25448386,-15170272,4112353,10045021,23603893,-2048234,-7550776,2484985 },
+ { 9255317,-3131197,-12156162,-1004256,13098013,-9214866,16377220,-2102812,-19802075,-3034702 },
+ { -22729289,7496160,-5742199,11329249,19991973,-3347502,-31718148,9936966,-30097688,-10618797 },
+ },
+ {
+ { 21878590,-5001297,4338336,13643897,-3036865,13160960,19708896,5415497,-7360503,-4109293 },
+ { 27736861,10103576,12500508,8502413,-3413016,-9633558,10436918,-1550276,-23659143,-8132100 },
+ { 19492550,-12104365,-29681976,-852630,-3208171,12403437,30066266,8367329,13243957,8709688 },
+ },
+},
+{
+ {
+ { 12015105,2801261,28198131,10151021,24818120,-4743133,-11194191,-5645734,5150968,7274186 },
+ { 2831366,-12492146,1478975,6122054,23825128,-12733586,31097299,6083058,31021603,-9793610 },
+ { -2529932,-2229646,445613,10720828,-13849527,-11505937,-23507731,16354465,15067285,-14147707 },
+ },
+ {
+ { 7840942,14037873,-33364863,15934016,-728213,-3642706,21403988,1057586,-19379462,-12403220 },
+ { 915865,-16469274,15608285,-8789130,-24357026,6060030,-17371319,8410997,-7220461,16527025 },
+ { 32922597,-556987,20336074,-16184568,10903705,-5384487,16957574,52992,23834301,6588044 },
+ },
+ {
+ { 32752030,11232950,3381995,-8714866,22652988,-10744103,17159699,16689107,-20314580,-1305992 },
+ { -4689649,9166776,-25710296,-10847306,11576752,12733943,7924251,-2752281,1976123,-7249027 },
+ { 21251222,16309901,-2983015,-6783122,30810597,12967303,156041,-3371252,12331345,-8237197 },
+ },
+ {
+ { 8651614,-4477032,-16085636,-4996994,13002507,2950805,29054427,-5106970,10008136,-4667901 },
+ { 31486080,15114593,-14261250,12951354,14369431,-7387845,16347321,-13662089,8684155,-10532952 },
+ { 19443825,11385320,24468943,-9659068,-23919258,2187569,-26263207,-6086921,31316348,14219878 },
+ },
+ {
+ { -28594490,1193785,32245219,11392485,31092169,15722801,27146014,6992409,29126555,9207390 },
+ { 32382935,1110093,18477781,11028262,-27411763,-7548111,-4980517,10843782,-7957600,-14435730 },
+ { 2814918,7836403,27519878,-7868156,-20894015,-11553689,-21494559,8550130,28346258,1994730 },
+ },
+ {
+ { -19578299,8085545,-14000519,-3948622,2785838,-16231307,-19516951,7174894,22628102,8115180 },
+ { -30405132,955511,-11133838,-15078069,-32447087,-13278079,-25651578,3317160,-9943017,930272 },
+ { -15303681,-6833769,28856490,1357446,23421993,1057177,24091212,-1388970,-22765376,-10650715 },
+ },
+ {
+ { -22751231,-5303997,-12907607,-12768866,-15811511,-7797053,-14839018,-16554220,-1867018,8398970 },
+ { -31969310,2106403,-4736360,1362501,12813763,16200670,22981545,-6291273,18009408,-15772772 },
+ { -17220923,-9545221,-27784654,14166835,29815394,7444469,29551787,-3727419,19288549,1325865 },
+ },
+ {
+ { 15100157,-15835752,-23923978,-1005098,-26450192,15509408,12376730,-3479146,33166107,-8042750 },
+ { 20909231,13023121,-9209752,16251778,-5778415,-8094914,12412151,10018715,2213263,-13878373 },
+ { 32529814,-11074689,30361439,-16689753,-9135940,1513226,22922121,6382134,-5766928,8371348 },
+ },
+},
+{
+ {
+ { 9923462,11271500,12616794,3544722,-29998368,-1721626,12891687,-8193132,-26442943,10486144 },
+ { -22597207,-7012665,8587003,-8257861,4084309,-12970062,361726,2610596,-23921530,-11455195 },
+ { 5408411,-1136691,-4969122,10561668,24145918,14240566,31319731,-4235541,19985175,-3436086 },
+ },
+ {
+ { -13994457,16616821,14549246,3341099,32155958,13648976,-17577068,8849297,65030,8370684 },
+ { -8320926,-12049626,31204563,5839400,-20627288,-1057277,-19442942,6922164,12743482,-9800518 },
+ { -2361371,12678785,28815050,4759974,-23893047,4884717,23783145,11038569,18800704,255233 },
+ },
+ {
+ { -5269658,-1773886,13957886,7990715,23132995,728773,13393847,9066957,19258688,-14753793 },
+ { -2936654,-10827535,-10432089,14516793,-3640786,4372541,-31934921,2209390,-1524053,2055794 },
+ { 580882,16705327,5468415,-2683018,-30926419,-14696000,-7203346,-8994389,-30021019,7394435 },
+ },
+ {
+ { 23838809,1822728,-15738443,15242727,8318092,-3733104,-21672180,-3492205,-4821741,14799921 },
+ { 13345610,9759151,3371034,-16137791,16353039,8577942,31129804,13496856,-9056018,7402518 },
+ { 2286874,-4435931,-20042458,-2008336,-13696227,5038122,11006906,-15760352,8205061,1607563 },
+ },
+ {
+ { 14414086,-8002132,3331830,-3208217,22249151,-5594188,18364661,-2906958,30019587,-9029278 },
+ { -27688051,1585953,-10775053,931069,-29120221,-11002319,-14410829,12029093,9944378,8024 },
+ { 4368715,-3709630,29874200,-15022983,-20230386,-11410704,-16114594,-999085,-8142388,5640030 },
+ },
+ {
+ { 10299610,13746483,11661824,16234854,7630238,5998374,9809887,-16694564,15219798,-14327783 },
+ { 27425505,-5719081,3055006,10660664,23458024,595578,-15398605,-1173195,-18342183,9742717 },
+ { 6744077,2427284,26042789,2720740,-847906,1118974,32324614,7406442,12420155,1994844 },
+ },
+ {
+ { 14012521,-5024720,-18384453,-9578469,-26485342,-3936439,-13033478,-10909803,24319929,-6446333 },
+ { 16412690,-4507367,10772641,15929391,-17068788,-4658621,10555945,-10484049,-30102368,-4739048 },
+ { 22397382,-7767684,-9293161,-12792868,17166287,-9755136,-27333065,6199366,21880021,-12250760 },
+ },
+ {
+ { -4283307,5368523,-31117018,8163389,-30323063,3209128,16557151,8890729,8840445,4957760 },
+ { -15447727,709327,-6919446,-10870178,-29777922,6522332,-21720181,12130072,-14796503,5005757 },
+ { -2114751,-14308128,23019042,15765735,-25269683,6002752,10183197,-13239326,-16395286,-2176112 },
+ },
+},
+{
+ {
+ { -19025756,1632005,13466291,-7995100,-23640451,16573537,-32013908,-3057104,22208662,2000468 },
+ { 3065073,-1412761,-25598674,-361432,-17683065,-5703415,-8164212,11248527,-3691214,-7414184 },
+ { 10379208,-6045554,8877319,1473647,-29291284,-12507580,16690915,2553332,-3132688,16400289 },
+ },
+ {
+ { 15716668,1254266,-18472690,7446274,-8448918,6344164,-22097271,-7285580,26894937,9132066 },
+ { 24158887,12938817,11085297,-8177598,-28063478,-4457083,-30576463,64452,-6817084,-2692882 },
+ { 13488534,7794716,22236231,5989356,25426474,-12578208,2350710,-3418511,-4688006,2364226 },
+ },
+ {
+ { 16335052,9132434,25640582,6678888,1725628,8517937,-11807024,-11697457,15445875,-7798101 },
+ { 29004207,-7867081,28661402,-640412,-12794003,-7943086,31863255,-4135540,-278050,-15759279 },
+ { -6122061,-14866665,-28614905,14569919,-10857999,-3591829,10343412,-6976290,-29828287,-10815811 },
+ },
+ {
+ { 27081650,3463984,14099042,-4517604,1616303,-6205604,29542636,15372179,17293797,960709 },
+ { 20263915,11434237,-5765435,11236810,13505955,-10857102,-16111345,6493122,-19384511,7639714 },
+ { -2830798,-14839232,25403038,-8215196,-8317012,-16173699,18006287,-16043750,29994677,-15808121 },
+ },
+ {
+ { 9769828,5202651,-24157398,-13631392,-28051003,-11561624,-24613141,-13860782,-31184575,709464 },
+ { 12286395,13076066,-21775189,-1176622,-25003198,4057652,-32018128,-8890874,16102007,13205847 },
+ { 13733362,5599946,10557076,3195751,-5557991,8536970,-25540170,8525972,10151379,10394400 },
+ },
+ {
+ { 4024660,-16137551,22436262,12276534,-9099015,-2686099,19698229,11743039,-33302334,8934414 },
+ { -15879800,-4525240,-8580747,-2934061,14634845,-698278,-9449077,3137094,-11536886,11721158 },
+ { 17555939,-5013938,8268606,2331751,-22738815,9761013,9319229,8835153,-9205489,-1280045 },
+ },
+ {
+ { -461409,-7830014,20614118,16688288,-7514766,-4807119,22300304,505429,6108462,-6183415 },
+ { -5070281,12367917,-30663534,3234473,32617080,-8422642,29880583,-13483331,-26898490,-7867459 },
+ { -31975283,5726539,26934134,10237677,-3173717,-605053,24199304,3795095,7592688,-14992079 },
+ },
+ {
+ { 21594432,-14964228,17466408,-4077222,32537084,2739898,6407723,12018833,-28256052,4298412 },
+ { -20650503,-11961496,-27236275,570498,3767144,-1717540,13891942,-1569194,13717174,10805743 },
+ { -14676630,-15644296,15287174,11927123,24177847,-8175568,-796431,14860609,-26938930,-5863836 },
+ },
+},
+{
+ {
+ { 12962541,5311799,-10060768,11658280,18855286,-7954201,13286263,-12808704,-4381056,9882022 },
+ { 18512079,11319350,-20123124,15090309,18818594,5271736,-22727904,3666879,-23967430,-3299429 },
+ { -6789020,-3146043,16192429,13241070,15898607,-14206114,-10084880,-6661110,-2403099,5276065 },
+ },
+ {
+ { 30169808,-5317648,26306206,-11750859,27814964,7069267,7152851,3684982,1449224,13082861 },
+ { 10342826,3098505,2119311,193222,25702612,12233820,23697382,15056736,-21016438,-8202000 },
+ { -33150110,3261608,22745853,7948688,19370557,-15177665,-26171976,6482814,-10300080,-11060101 },
+ },
+ {
+ { 32869458,-5408545,25609743,15678670,-10687769,-15471071,26112421,2521008,-22664288,6904815 },
+ { 29506923,4457497,3377935,-9796444,-30510046,12935080,1561737,3841096,-29003639,-6657642 },
+ { 10340844,-6630377,-18656632,-2278430,12621151,-13339055,30878497,-11824370,-25584551,5181966 },
+ },
+ {
+ { 25940115,-12658025,17324188,-10307374,-8671468,15029094,24396252,-16450922,-2322852,-12388574 },
+ { -21765684,9916823,-1300409,4079498,-1028346,11909559,1782390,12641087,20603771,-6561742 },
+ { -18882287,-11673380,24849422,11501709,13161720,-4768874,1925523,11914390,4662781,7820689 },
+ },
+ {
+ { 12241050,-425982,8132691,9393934,32846760,-1599620,29749456,12172924,16136752,15264020 },
+ { -10349955,-14680563,-8211979,2330220,-17662549,-14545780,10658213,6671822,19012087,3772772 },
+ { 3753511,-3421066,10617074,2028709,14841030,-6721664,28718732,-15762884,20527771,12988982 },
+ },
+ {
+ { -14822485,-5797269,-3707987,12689773,-898983,-10914866,-24183046,-10564943,3299665,-12424953 },
+ { -16777703,-15253301,-9642417,4978983,3308785,8755439,6943197,6461331,-25583147,8991218 },
+ { -17226263,1816362,-1673288,-6086439,31783888,-8175991,-32948145,7417950,-30242287,1507265 },
+ },
+ {
+ { 29692663,6829891,-10498800,4334896,20945975,-11906496,-28887608,8209391,14606362,-10647073 },
+ { -3481570,8707081,32188102,5672294,22096700,1711240,-33020695,9761487,4170404,-2085325 },
+ { -11587470,14855945,-4127778,-1531857,-26649089,15084046,22186522,16002000,-14276837,-8400798 },
+ },
+ {
+ { -4811456,13761029,-31703877,-2483919,-3312471,7869047,-7113572,-9620092,13240845,10965870 },
+ { -7742563,-8256762,-14768334,-13656260,-23232383,12387166,4498947,14147411,29514390,4302863 },
+ { -13413405,-12407859,20757302,-13801832,14785143,8976368,-5061276,-2144373,17846988,-13971927 },
+ },
+},
+{
+ {
+ { -2244452,-754728,-4597030,-1066309,-6247172,1455299,-21647728,-9214789,-5222701,12650267 },
+ { -9906797,-16070310,21134160,12198166,-27064575,708126,387813,13770293,-19134326,10958663 },
+ { 22470984,12369526,23446014,-5441109,-21520802,-9698723,-11772496,-11574455,-25083830,4271862 },
+ },
+ {
+ { -25169565,-10053642,-19909332,15361595,-5984358,2159192,75375,-4278529,-32526221,8469673 },
+ { 15854970,4148314,-8893890,7259002,11666551,13824734,-30531198,2697372,24154791,-9460943 },
+ { 15446137,-15806644,29759747,14019369,30811221,-9610191,-31582008,12840104,24913809,9815020 },
+ },
+ {
+ { -4709286,-5614269,-31841498,-12288893,-14443537,10799414,-9103676,13438769,18735128,9466238 },
+ { 11933045,9281483,5081055,-5183824,-2628162,-4905629,-7727821,-10896103,-22728655,16199064 },
+ { 14576810,379472,-26786533,-8317236,-29426508,-10812974,-102766,1876699,30801119,2164795 },
+ },
+ {
+ { 15995086,3199873,13672555,13712240,-19378835,-4647646,-13081610,-15496269,-13492807,1268052 },
+ { -10290614,-3659039,-3286592,10948818,23037027,3794475,-3470338,-12600221,-17055369,3565904 },
+ { 29210088,-9419337,-5919792,-4952785,10834811,-13327726,-16512102,-10820713,-27162222,-14030531 },
+ },
+ {
+ { -13161890,15508588,16663704,-8156150,-28349942,9019123,-29183421,-3769423,2244111,-14001979 },
+ { -5152875,-3800936,-9306475,-6071583,16243069,14684434,-25673088,-16180800,13491506,4641841 },
+ { 10813417,643330,-19188515,-728916,30292062,-16600078,27548447,-7721242,14476989,-12767431 },
+ },
+ {
+ { 10292079,9984945,6481436,8279905,-7251514,7032743,27282937,-1644259,-27912810,12651324 },
+ { -31185513,-813383,22271204,11835308,10201545,15351028,17099662,3988035,21721536,-3148940 },
+ { 10202177,-6545839,-31373232,-9574638,-32150642,-8119683,-12906320,3852694,13216206,14842320 },
+ },
+ {
+ { -15815640,-10601066,-6538952,-7258995,-6984659,-6581778,-31500847,13765824,-27434397,9900184 },
+ { 14465505,-13833331,-32133984,-14738873,-27443187,12990492,33046193,15796406,-7051866,-8040114 },
+ { 30924417,-8279620,6359016,-12816335,16508377,9071735,-25488601,15413635,9524356,-7018878 },
+ },
+ {
+ { 12274201,-13175547,32627641,-1785326,6736625,13267305,5237659,-5109483,15663516,4035784 },
+ { -2951309,8903985,17349946,601635,-16432815,-4612556,-13732739,-15889334,-22258478,4659091 },
+ { -16916263,-4952973,-30393711,-15158821,20774812,15897498,5736189,15026997,-2178256,-13455585 },
+ },
+},
+{
+ {
+ { -8858980,-2219056,28571666,-10155518,-474467,-10105698,-3801496,278095,23440562,-290208 },
+ { 10226241,-5928702,15139956,120818,-14867693,5218603,32937275,11551483,-16571960,-7442864 },
+ { 17932739,-12437276,-24039557,10749060,11316803,7535897,22503767,5561594,-3646624,3898661 },
+ },
+ {
+ { 7749907,-969567,-16339731,-16464,-25018111,15122143,-1573531,7152530,21831162,1245233 },
+ { 26958459,-14658026,4314586,8346991,-5677764,11960072,-32589295,-620035,-30402091,-16716212 },
+ { -12165896,9166947,33491384,13673479,29787085,13096535,6280834,14587357,-22338025,13987525 },
+ },
+ {
+ { -24349909,7778775,21116000,15572597,-4833266,-5357778,-4300898,-5124639,-7469781,-2858068 },
+ { 9681908,-6737123,-31951644,13591838,-6883821,386950,31622781,6439245,-14581012,4091397 },
+ { -8426427,1470727,-28109679,-1596990,3978627,-5123623,-19622683,12092163,29077877,-14741988 },
+ },
+ {
+ { 5269168,-6859726,-13230211,-8020715,25932563,1763552,-5606110,-5505881,-20017847,2357889 },
+ { 32264008,-15407652,-5387735,-1160093,-2091322,-3946900,23104804,-12869908,5727338,189038 },
+ { 14609123,-8954470,-6000566,-16622781,-14577387,-7743898,-26745169,10942115,-25888931,-14884697 },
+ },
+ {
+ { 20513500,5557931,-15604613,7829531,26413943,-2019404,-21378968,7471781,13913677,-5137875 },
+ { -25574376,11967826,29233242,12948236,-6754465,4713227,-8940970,14059180,12878652,8511905 },
+ { -25656801,3393631,-2955415,-7075526,-2250709,9366908,-30223418,6812974,5568676,-3127656 },
+ },
+ {
+ { 11630004,12144454,2116339,13606037,27378885,15676917,-17408753,-13504373,-14395196,8070818 },
+ { 27117696,-10007378,-31282771,-5570088,1127282,12772488,-29845906,10483306,-11552749,-1028714 },
+ { 10637467,-5688064,5674781,1072708,-26343588,-6982302,-1683975,9177853,-27493162,15431203 },
+ },
+ {
+ { 20525145,10892566,-12742472,12779443,-29493034,16150075,-28240519,14943142,-15056790,-7935931 },
+ { -30024462,5626926,-551567,-9981087,753598,11981191,25244767,-3239766,-3356550,9594024 },
+ { -23752644,2636870,-5163910,-10103818,585134,7877383,11345683,-6492290,13352335,-10977084 },
+ },
+ {
+ { -1931799,-5407458,3304649,-12884869,17015806,-4877091,-29783850,-7752482,-13215537,-319204 },
+ { 20239939,6607058,6203985,3483793,-18386976,-779229,-20723742,15077870,-22750759,14523817 },
+ { 27406042,-6041657,27423596,-4497394,4996214,10002360,-28842031,-4545494,-30172742,-4805667 },
+ },
+},
+{
+ {
+ { 11374242,12660715,17861383,-12540833,10935568,1099227,-13886076,-9091740,-27727044,11358504 },
+ { -12730809,10311867,1510375,10778093,-2119455,-9145702,32676003,11149336,-26123651,4985768 },
+ { -19096303,341147,-6197485,-239033,15756973,-8796662,-983043,13794114,-19414307,-15621255 },
+ },
+ {
+ { 6490081,11940286,25495923,-7726360,8668373,-8751316,3367603,6970005,-1691065,-9004790 },
+ { 1656497,13457317,15370807,6364910,13605745,8362338,-19174622,-5475723,-16796596,-5031438 },
+ { -22273315,-13524424,-64685,-4334223,-18605636,-10921968,-20571065,-7007978,-99853,-10237333 },
+ },
+ {
+ { 17747465,10039260,19368299,-4050591,-20630635,-16041286,31992683,-15857976,-29260363,-5511971 },
+ { 31932027,-4986141,-19612382,16366580,22023614,88450,11371999,-3744247,4882242,-10626905 },
+ { 29796507,37186,19818052,10115756,-11829032,3352736,18551198,3272828,-5190932,-4162409 },
+ },
+ {
+ { 12501286,4044383,-8612957,-13392385,-32430052,5136599,-19230378,-3529697,330070,-3659409 },
+ { 6384877,2899513,17807477,7663917,-2358888,12363165,25366522,-8573892,-271295,12071499 },
+ { -8365515,-4042521,25133448,-4517355,-6211027,2265927,-32769618,1936675,-5159697,3829363 },
+ },
+ {
+ { 28425966,-5835433,-577090,-4697198,-14217555,6870930,7921550,-6567787,26333140,14267664 },
+ { -11067219,11871231,27385719,-10559544,-4585914,-11189312,10004786,-8709488,-21761224,8930324 },
+ { -21197785,-16396035,25654216,-1725397,12282012,11008919,1541940,4757911,-26491501,-16408940 },
+ },
+ {
+ { 13537262,-7759490,-20604840,10961927,-5922820,-13218065,-13156584,6217254,-15943699,13814990 },
+ { -17422573,15157790,18705543,29619,24409717,-260476,27361681,9257833,-1956526,-1776914 },
+ { -25045300,-10191966,15366585,15166509,-13105086,8423556,-29171540,12361135,-18685978,4578290 },
+ },
+ {
+ { 24579768,3711570,1342322,-11180126,-27005135,14124956,-22544529,14074919,21964432,8235257 },
+ { -6528613,-2411497,9442966,-5925588,12025640,-1487420,-2981514,-1669206,13006806,2355433 },
+ { -16304899,-13605259,-6632427,-5142349,16974359,-10911083,27202044,1719366,1141648,-12796236 },
+ },
+ {
+ { -12863944,-13219986,-8318266,-11018091,-6810145,-4843894,13475066,-3133972,32674895,13715045 },
+ { 11423335,-5468059,32344216,8962751,24989809,9241752,-13265253,16086212,-28740881,-15642093 },
+ { -1409668,12530728,-6368726,10847387,19531186,-14132160,-11709148,7791794,-27245943,4383347 },
+ },
+},
+{
+ {
+ { -28970898,5271447,-1266009,-9736989,-12455236,16732599,-4862407,-4906449,27193557,6245191 },
+ { -15193956,5362278,-1783893,2695834,4960227,12840725,23061898,3260492,22510453,8577507 },
+ { -12632451,11257346,-32692994,13548177,-721004,10879011,31168030,13952092,-29571492,-3635906 },
+ },
+ {
+ { 3877321,-9572739,32416692,5405324,-11004407,-13656635,3759769,11935320,5611860,8164018 },
+ { -16275802,14667797,15906460,12155291,-22111149,-9039718,32003002,-8832289,5773085,-8422109 },
+ { -23788118,-8254300,1950875,8937633,18686727,16459170,-905725,12376320,31632953,190926 },
+ },
+ {
+ { -24593607,-16138885,-8423991,13378746,14162407,6901328,-8288749,4508564,-25341555,-3627528 },
+ { 8884438,-5884009,6023974,10104341,-6881569,-4941533,18722941,-14786005,-1672488,827625 },
+ { -32720583,-16289296,-32503547,7101210,13354605,2659080,-1800575,-14108036,-24878478,1541286 },
+ },
+ {
+ { 2901347,-1117687,3880376,-10059388,-17620940,-3612781,-21802117,-3567481,20456845,-1885033 },
+ { 27019610,12299467,-13658288,-1603234,-12861660,-4861471,-19540150,-5016058,29439641,15138866 },
+ { 21536104,-6626420,-32447818,-10690208,-22408077,5175814,-5420040,-16361163,7779328,109896 },
+ },
+ {
+ { 30279744,14648750,-8044871,6425558,13639621,-743509,28698390,12180118,23177719,-554075 },
+ { 26572847,3405927,-31701700,12890905,-19265668,5335866,-6493768,2378492,4439158,-13279347 },
+ { -22716706,3489070,-9225266,-332753,18875722,-1140095,14819434,-12731527,-17717757,-5461437 },
+ },
+ {
+ { -5056483,16566551,15953661,3767752,-10436499,15627060,-820954,2177225,8550082,-15114165 },
+ { -18473302,16596775,-381660,15663611,22860960,15585581,-27844109,-3582739,-23260460,-8428588 },
+ { -32480551,15707275,-8205912,-5652081,29464558,2713815,-22725137,15860482,-21902570,1494193 },
+ },
+ {
+ { -19562091,-14087393,-25583872,-9299552,13127842,759709,21923482,16529112,8742704,12967017 },
+ { -28464899,1553205,32536856,-10473729,-24691605,-406174,-8914625,-2933896,-29903758,15553883 },
+ { 21877909,3230008,9881174,10539357,-4797115,2841332,11543572,14513274,19375923,-12647961 },
+ },
+ {
+ { 8832269,-14495485,13253511,5137575,5037871,4078777,24880818,-6222716,2862653,9455043 },
+ { 29306751,5123106,20245049,-14149889,9592566,8447059,-2077124,-2990080,15511449,4789663 },
+ { -20679756,7004547,8824831,-9434977,-4045704,-3750736,-5754762,108893,23513200,16652362 },
+ },
+},
+{
+ {
+ { -33256173,4144782,-4476029,-6579123,10770039,-7155542,-6650416,-12936300,-18319198,10212860 },
+ { 2756081,8598110,7383731,-6859892,22312759,-1105012,21179801,2600940,-9988298,-12506466 },
+ { -24645692,13317462,-30449259,-15653928,21365574,-10869657,11344424,864440,-2499677,-16710063 },
+ },
+ {
+ { -26432803,6148329,-17184412,-14474154,18782929,-275997,-22561534,211300,2719757,4940997 },
+ { -1323882,3911313,-6948744,14759765,-30027150,7851207,21690126,8518463,26699843,5276295 },
+ { -13149873,-6429067,9396249,365013,24703301,-10488939,1321586,149635,-15452774,7159369 },
+ },
+ {
+ { 9987780,-3404759,17507962,9505530,9731535,-2165514,22356009,8312176,22477218,-8403385 },
+ { 18155857,-16504990,19744716,9006923,15154154,-10538976,24256460,-4864995,-22548173,9334109 },
+ { 2986088,-4911893,10776628,-3473844,10620590,-7083203,-21413845,14253545,-22587149,536906 },
+ },
+ {
+ { 4377756,8115836,24567078,15495314,11625074,13064599,7390551,10589625,10838060,-15420424 },
+ { -19342404,867880,9277171,-3218459,-14431572,-1986443,19295826,-15796950,6378260,699185 },
+ { 7895026,4057113,-7081772,-13077756,-17886831,-323126,-716039,15693155,-5045064,-13373962 },
+ },
+ {
+ { -7737563,-5869402,-14566319,-7406919,11385654,13201616,31730678,-10962840,-3918636,-9669325 },
+ { 10188286,-15770834,-7336361,13427543,22223443,14896287,30743455,7116568,-21786507,5427593 },
+ { 696102,13206899,27047647,-10632082,15285305,-9853179,10798490,-4578720,19236243,12477404 },
+ },
+ {
+ { -11229439,11243796,-17054270,-8040865,-788228,-8167967,-3897669,11180504,-23169516,7733644 },
+ { 17800790,-14036179,-27000429,-11766671,23887827,3149671,23466177,-10538171,10322027,15313801 },
+ { 26246234,11968874,32263343,-5468728,6830755,-13323031,-15794704,-101982,-24449242,10890804 },
+ },
+ {
+ { -31365647,10271363,-12660625,-6267268,16690207,-13062544,-14982212,16484931,25180797,-5334884 },
+ { -586574,10376444,-32586414,-11286356,19801893,10997610,2276632,9482883,316878,13820577 },
+ { -9882808,-4510367,-2115506,16457136,-11100081,11674996,30756178,-7515054,30696930,-3712849 },
+ },
+ {
+ { 32988917,-9603412,12499366,7910787,-10617257,-11931514,-7342816,-9985397,-32349517,7392473 },
+ { -8855661,15927861,9866406,-3649411,-2396914,-16655781,-30409476,-9134995,25112947,-2926644 },
+ { -2504044,-436966,25621774,-5678772,15085042,-5479877,-24884878,-13526194,5537438,-13914319 },
+ },
+},
+{
+ {
+ { -11225584,2320285,-9584280,10149187,-33444663,5808648,-14876251,-1729667,31234590,6090599 },
+ { -9633316,116426,26083934,2897444,-6364437,-2688086,609721,15878753,-6970405,-9034768 },
+ { -27757857,247744,-15194774,-9002551,23288161,-10011936,-23869595,6503646,20650474,1804084 },
+ },
+ {
+ { -27589786,15456424,8972517,8469608,15640622,4439847,3121995,-10329713,27842616,-202328 },
+ { -15306973,2839644,22530074,10026331,4602058,5048462,28248656,5031932,-11375082,12714369 },
+ { 20807691,-7270825,29286141,11421711,-27876523,-13868230,-21227475,1035546,-19733229,12796920 },
+ },
+ {
+ { 12076899,-14301286,-8785001,-11848922,-25012791,16400684,-17591495,-12899438,3480665,-15182815 },
+ { -32361549,5457597,28548107,7833186,7303070,-11953545,-24363064,-15921875,-33374054,2771025 },
+ { -21389266,421932,26597266,6860826,22486084,-6737172,-17137485,-4210226,-24552282,15673397 },
+ },
+ {
+ { -20184622,2338216,19788685,-9620956,-4001265,-8740893,-20271184,4733254,3727144,-12934448 },
+ { 6120119,814863,-11794402,-622716,6812205,-15747771,2019594,7975683,31123697,-10958981 },
+ { 30069250,-11435332,30434654,2958439,18399564,-976289,12296869,9204260,-16432438,9648165 },
+ },
+ {
+ { 32705432,-1550977,30705658,7451065,-11805606,9631813,3305266,5248604,-26008332,-11377501 },
+ { 17219865,2375039,-31570947,-5575615,-19459679,9219903,294711,15298639,2662509,-16297073 },
+ { -1172927,-7558695,-4366770,-4287744,-21346413,-8434326,32087529,-1222777,32247248,-14389861 },
+ },
+ {
+ { 14312628,1221556,17395390,-8700143,-4945741,-8684635,-28197744,-9637817,-16027623,-13378845 },
+ { -1428825,-9678990,-9235681,6549687,-7383069,-468664,23046502,9803137,17597934,2346211 },
+ { 18510800,15337574,26171504,981392,-22241552,7827556,-23491134,-11323352,3059833,-11782870 },
+ },
+ {
+ { 10141598,6082907,17829293,-1947643,9830092,13613136,-25556636,-5544586,-33502212,3592096 },
+ { 33114168,-15889352,-26525686,-13343397,33076705,8716171,1151462,1521897,-982665,-6837803 },
+ { -32939165,-4255815,23947181,-324178,-33072974,-12305637,-16637686,3891704,26353178,693168 },
+ },
+ {
+ { 30374239,1595580,-16884039,13186931,4600344,406904,9585294,-400668,31375464,14369965 },
+ { -14370654,-7772529,1510301,6434173,-18784789,-6262728,32732230,-13108839,17901441,16011505 },
+ { 18171223,-11934626,-12500402,15197122,-11038147,-15230035,-19172240,-16046376,8764035,12309598 },
+ },
+},
+{
+ {
+ { 5975908,-5243188,-19459362,-9681747,-11541277,14015782,-23665757,1228319,17544096,-10593782 },
+ { 5811932,-1715293,3442887,-2269310,-18367348,-8359541,-18044043,-15410127,-5565381,12348900 },
+ { -31399660,11407555,25755363,6891399,-3256938,14872274,-24849353,8141295,-10632534,-585479 },
+ },
+ {
+ { -12675304,694026,-5076145,13300344,14015258,-14451394,-9698672,-11329050,30944593,1130208 },
+ { 8247766,-6710942,-26562381,-7709309,-14401939,-14648910,4652152,2488540,23550156,-271232 },
+ { 17294316,-3788438,7026748,15626851,22990044,113481,2267737,-5908146,-408818,-137719 },
+ },
+ {
+ { 16091085,-16253926,18599252,7340678,2137637,-1221657,-3364161,14550936,3260525,-7166271 },
+ { -4910104,-13332887,18550887,10864893,-16459325,-7291596,-23028869,-13204905,-12748722,2701326 },
+ { -8574695,16099415,4629974,-16340524,-20786213,-6005432,-10018363,9276971,11329923,1862132 },
+ },
+ {
+ { 14763076,-15903608,-30918270,3689867,3511892,10313526,-21951088,12219231,-9037963,-940300 },
+ { 8894987,-3446094,6150753,3013931,301220,15693451,-31981216,-2909717,-15438168,11595570 },
+ { 15214962,3537601,-26238722,-14058872,4418657,-15230761,13947276,10730794,-13489462,-4363670 },
+ },
+ {
+ { -2538306,7682793,32759013,263109,-29984731,-7955452,-22332124,-10188635,977108,699994 },
+ { -12466472,4195084,-9211532,550904,-15565337,12917920,19118110,-439841,-30534533,-14337913 },
+ { 31788461,-14507657,4799989,7372237,8808585,-14747943,9408237,-10051775,12493932,-5409317 },
+ },
+ {
+ { -25680606,5260744,-19235809,-6284470,-3695942,16566087,27218280,2607121,29375955,6024730 },
+ { 842132,-2794693,-4763381,-8722815,26332018,-12405641,11831880,6985184,-9940361,2854096 },
+ { -4847262,-7969331,2516242,-5847713,9695691,-7221186,16512645,960770,12121869,16648078 },
+ },
+ {
+ { -15218652,14667096,-13336229,2013717,30598287,-464137,-31504922,-7882064,20237806,2838411 },
+ { -19288047,4453152,15298546,-16178388,22115043,-15972604,12544294,-13470457,1068881,-12499905 },
+ { -9558883,-16518835,33238498,13506958,30505848,-1114596,-8486907,-2630053,12521378,4845654 },
+ },
+ {
+ { -28198521,10744108,-2958380,10199664,7759311,-13088600,3409348,-873400,-6482306,-12885870 },
+ { -23561822,6230156,-20382013,10655314,-24040585,-11621172,10477734,-1240216,-3113227,13974498 },
+ { 12966261,15550616,-32038948,-1615346,21025980,-629444,5642325,7188737,18895762,12629579 },
+ },
+},
+{
+ {
+ { 14741879,-14946887,22177208,-11721237,1279741,8058600,11758140,789443,32195181,3895677 },
+ { 10758205,15755439,-4509950,9243698,-4879422,6879879,-2204575,-3566119,-8982069,4429647 },
+ { -2453894,15725973,-20436342,-10410672,-5803908,-11040220,-7135870,-11642895,18047436,-15281743 },
+ },
+ {
+ { -25173001,-11307165,29759956,11776784,-22262383,-15820455,10993114,-12850837,-17620701,-9408468 },
+ { 21987233,700364,-24505048,14972008,-7774265,-5718395,32155026,2581431,-29958985,8773375 },
+ { -25568350,454463,-13211935,16126715,25240068,8594567,20656846,12017935,-7874389,-13920155 },
+ },
+ {
+ { 6028182,6263078,-31011806,-11301710,-818919,2461772,-31841174,-5468042,-1721788,-2776725 },
+ { -12278994,16624277,987579,-5922598,32908203,1248608,7719845,-4166698,28408820,6816612 },
+ { -10358094,-8237829,19549651,-12169222,22082623,16147817,20613181,13982702,-10339570,5067943 },
+ },
+ {
+ { -30505967,-3821767,12074681,13582412,-19877972,2443951,-19719286,12746132,5331210,-10105944 },
+ { 30528811,3601899,-1957090,4619785,-27361822,-15436388,24180793,-12570394,27679908,-1648928 },
+ { 9402404,-13957065,32834043,10838634,-26580150,-13237195,26653274,-8685565,22611444,-12715406 },
+ },
+ {
+ { 22190590,1118029,22736441,15130463,-30460692,-5991321,19189625,-4648942,4854859,6622139 },
+ { -8310738,-2953450,-8262579,-3388049,-10401731,-271929,13424426,-3567227,26404409,13001963 },
+ { -31241838,-15415700,-2994250,8939346,11562230,-12840670,-26064365,-11621720,-15405155,11020693 },
+ },
+ {
+ { 1866042,-7949489,-7898649,-10301010,12483315,13477547,3175636,-12424163,28761762,1406734 },
+ { -448555,-1777666,13018551,3194501,-9580420,-11161737,24760585,-4347088,25577411,-13378680 },
+ { -24290378,4759345,-690653,-1852816,2066747,10693769,-29595790,9884936,-9368926,4745410 },
+ },
+ {
+ { -9141284,6049714,-19531061,-4341411,-31260798,9944276,-15462008,-11311852,10931924,-11931931 },
+ { -16561513,14112680,-8012645,4817318,-8040464,-11414606,-22853429,10856641,-20470770,13434654 },
+ { 22759489,-10073434,-16766264,-1871422,13637442,-10168091,1765144,-12654326,28445307,-5364710 },
+ },
+ {
+ { 29875063,12493613,2795536,-3786330,1710620,15181182,-10195717,-8788675,9074234,1167180 },
+ { -26205683,11014233,-9842651,-2635485,-26908120,7532294,-18716888,-9535498,3843903,9367684 },
+ { -10969595,-6403711,9591134,9582310,11349256,108879,16235123,8601684,-139197,4242895 },
+ },
+},
+{
+ {
+ { 22092954,-13191123,-2042793,-11968512,32186753,-11517388,-6574341,2470660,-27417366,16625501 },
+ { -11057722,3042016,13770083,-9257922,584236,-544855,-7770857,2602725,-27351616,14247413 },
+ { 6314175,-10264892,-32772502,15957557,-10157730,168750,-8618807,14290061,27108877,-1180880 },
+ },
+ {
+ { -8586597,-7170966,13241782,10960156,-32991015,-13794596,33547976,-11058889,-27148451,981874 },
+ { 22833440,9293594,-32649448,-13618667,-9136966,14756819,-22928859,-13970780,-10479804,-16197962 },
+ { -7768587,3326786,-28111797,10783824,19178761,14905060,22680049,13906969,-15933690,3797899 },
+ },
+ {
+ { 21721356,-4212746,-12206123,9310182,-3882239,-13653110,23740224,-2709232,20491983,-8042152 },
+ { 9209270,-15135055,-13256557,-6167798,-731016,15289673,25947805,15286587,30997318,-6703063 },
+ { 7392032,16618386,23946583,-8039892,-13265164,-1533858,-14197445,-2321576,17649998,-250080 },
+ },
+ {
+ { -9301088,-14193827,30609526,-3049543,-25175069,-1283752,-15241566,-9525724,-2233253,7662146 },
+ { -17558673,1763594,-33114336,15908610,-30040870,-12174295,7335080,-8472199,-3174674,3440183 },
+ { -19889700,-5977008,-24111293,-9688870,10799743,-16571957,40450,-4431835,4862400,1133 },
+ },
+ {
+ { -32856209,-7873957,-5422389,14860950,-16319031,7956142,7258061,311861,-30594991,-7379421 },
+ { -3773428,-1565936,28985340,7499440,24445838,9325937,29727763,16527196,18278453,15405622 },
+ { -4381906,8508652,-19898366,-3674424,-5984453,15149970,-13313598,843523,-21875062,13626197 },
+ },
+ {
+ { 2281448,-13487055,-10915418,-2609910,1879358,16164207,-10783882,3953792,13340839,15928663 },
+ { 31727126,-7179855,-18437503,-8283652,2875793,-16390330,-25269894,-7014826,-23452306,5964753 },
+ { 4100420,-5959452,-17179337,6017714,-18705837,12227141,-26684835,11344144,2538215,-7570755 },
+ },
+ {
+ { -9433605,6123113,11159803,-2156608,30016280,14966241,-20474983,1485421,-629256,-15958862 },
+ { -26804558,4260919,11851389,9658551,-32017107,16367492,-20205425,-13191288,11659922,-11115118 },
+ { 26180396,10015009,-30844224,-8581293,5418197,9480663,2231568,-10170080,33100372,-1306171 },
+ },
+ {
+ { 15121113,-5201871,-10389905,15427821,-27509937,-15992507,21670947,4486675,-5931810,-14466380 },
+ { 16166486,-9483733,-11104130,6023908,-31926798,-1364923,2340060,-16254968,-10735770,-10039824 },
+ { 28042865,-3557089,-12126526,12259706,-3717498,-6945899,6766453,-8689599,18036436,5803270 },
+ },
+},
+{
+ {
+ { -817581,6763912,11803561,1585585,10958447,-2671165,23855391,4598332,-6159431,-14117438 },
+ { -31031306,-14256194,17332029,-2383520,31312682,-5967183,696309,50292,-20095739,11763584 },
+ { -594563,-2514283,-32234153,12643980,12650761,14811489,665117,-12613632,-19773211,-10713562 },
+ },
+ {
+ { 30464590,-11262872,-4127476,-12734478,19835327,-7105613,-24396175,2075773,-17020157,992471 },
+ { 18357185,-6994433,7766382,16342475,-29324918,411174,14578841,8080033,-11574335,-10601610 },
+ { 19598397,10334610,12555054,2555664,18821899,-10339780,21873263,16014234,26224780,16452269 },
+ },
+ {
+ { -30223925,5145196,5944548,16385966,3976735,2009897,-11377804,-7618186,-20533829,3698650 },
+ { 14187449,3448569,-10636236,-10810935,-22663880,-3433596,7268410,-10890444,27394301,12015369 },
+ { 19695761,16087646,28032085,12999827,6817792,11427614,20244189,-1312777,-13259127,-3402461 },
+ },
+ {
+ { 30860103,12735208,-1888245,-4699734,-16974906,2256940,-8166013,12298312,-8550524,-10393462 },
+ { -5719826,-11245325,-1910649,15569035,26642876,-7587760,-5789354,-15118654,-4976164,12651793 },
+ { -2848395,9953421,11531313,-5282879,26895123,-12697089,-13118820,-16517902,9768698,-2533218 },
+ },
+ {
+ { -24719459,1894651,-287698,-4704085,15348719,-8156530,32767513,12765450,4940095,10678226 },
+ { 18860224,15980149,-18987240,-1562570,-26233012,-11071856,-7843882,13944024,-24372348,16582019 },
+ { -15504260,4970268,-29893044,4175593,-20993212,-2199756,-11704054,15444560,-11003761,7989037 },
+ },
+ {
+ { 31490452,5568061,-2412803,2182383,-32336847,4531686,-32078269,6200206,-19686113,-14800171 },
+ { -17308668,-15879940,-31522777,-2831,-32887382,16375549,8680158,-16371713,28550068,-6857132 },
+ { -28126887,-5688091,16837845,-1820458,-6850681,12700016,-30039981,4364038,1155602,5988841 },
+ },
+ {
+ { 21890435,-13272907,-12624011,12154349,-7831873,15300496,23148983,-4470481,24618407,8283181 },
+ { -33136107,-10512751,9975416,6841041,-31559793,16356536,3070187,-7025928,1466169,10740210 },
+ { -1509399,-15488185,-13503385,-10655916,32799044,909394,-13938903,-5779719,-32164649,-15327040 },
+ },
+ {
+ { 3960823,-14267803,-28026090,-15918051,-19404858,13146868,15567327,951507,-3260321,-573935 },
+ { 24740841,5052253,-30094131,8961361,25877428,6165135,-24368180,14397372,-7380369,-6144105 },
+ { -28888365,3510803,-28103278,-1158478,-11238128,-10631454,-15441463,-14453128,-1625486,-6494814 },
+ },
+},
+{
+ {
+ { 793299,-9230478,8836302,-6235707,-27360908,-2369593,33152843,-4885251,-9906200,-621852 },
+ { 5666233,525582,20782575,-8038419,-24538499,14657740,16099374,1468826,-6171428,-15186581 },
+ { -4859255,-3779343,-2917758,-6748019,7778750,11688288,-30404353,-9871238,-1558923,-9863646 },
+ },
+ {
+ { 10896332,-7719704,824275,472601,-19460308,3009587,25248958,14783338,-30581476,-15757844 },
+ { 10566929,12612572,-31944212,11118703,-12633376,12362879,21752402,8822496,24003793,14264025 },
+ { 27713862,-7355973,-11008240,9227530,27050101,2504721,23886875,-13117525,13958495,-5732453 },
+ },
+ {
+ { -23481610,4867226,-27247128,3900521,29838369,-8212291,-31889399,-10041781,7340521,-15410068 },
+ { 4646514,-8011124,-22766023,-11532654,23184553,8566613,31366726,-1381061,-15066784,-10375192 },
+ { -17270517,12723032,-16993061,14878794,21619651,-6197576,27584817,3093888,-8843694,3849921 },
+ },
+ {
+ { -9064912,2103172,25561640,-15125738,-5239824,9582958,32477045,-9017955,5002294,-15550259 },
+ { -12057553,-11177906,21115585,-13365155,8808712,-12030708,16489530,13378448,-25845716,12741426 },
+ { -5946367,10645103,-30911586,15390284,-3286982,-7118677,24306472,15852464,28834118,-7646072 },
+ },
+ {
+ { -17335748,-9107057,-24531279,9434953,-8472084,-583362,-13090771,455841,20461858,5491305 },
+ { 13669248,-16095482,-12481974,-10203039,-14569770,-11893198,-24995986,11293807,-28588204,-9421832 },
+ { 28497928,6272777,-33022994,14470570,8906179,-1225630,18504674,-14165166,29867745,-8795943 },
+ },
+ {
+ { -16207023,13517196,-27799630,-13697798,24009064,-6373891,-6367600,-13175392,22853429,-4012011 },
+ { 24191378,16712145,-13931797,15217831,14542237,1646131,18603514,-11037887,12876623,-2112447 },
+ { 17902668,4518229,-411702,-2829247,26878217,5258055,-12860753,608397,16031844,3723494 },
+ },
+ {
+ { -28632773,12763728,-20446446,7577504,33001348,-13017745,17558842,-7872890,23896954,-4314245 },
+ { -20005381,-12011952,31520464,605201,2543521,5991821,-2945064,7229064,-9919646,-8826859 },
+ { 28816045,298879,-28165016,-15920938,19000928,-1665890,-12680833,-2949325,-18051778,-2082915 },
+ },
+ {
+ { 16000882,-344896,3493092,-11447198,-29504595,-13159789,12577740,16041268,-19715240,7847707 },
+ { 10151868,10572098,27312476,7922682,14825339,4723128,-32855931,-6519018,-10020567,3852848 },
+ { -11430470,15697596,-21121557,-4420647,5386314,15063598,16514493,-15932110,29330899,-15076224 },
+ },
+},
+{
+ {
+ { -25499735,-4378794,-15222908,-6901211,16615731,2051784,3303702,15490,-27548796,12314391 },
+ { 15683520,-6003043,18109120,-9980648,15337968,-5997823,-16717435,15921866,16103996,-3731215 },
+ { -23169824,-10781249,13588192,-1628807,-3798557,-1074929,-19273607,5402699,-29815713,-9841101 },
+ },
+ {
+ { 23190676,2384583,-32714340,3462154,-29903655,-1529132,-11266856,8911517,-25205859,2739713 },
+ { 21374101,-3554250,-33524649,9874411,15377179,11831242,-33529904,6134907,4931255,11987849 },
+ { -7732,-2978858,-16223486,7277597,105524,-322051,-31480539,13861388,-30076310,10117930 },
+ },
+ {
+ { -29501170,-10744872,-26163768,13051539,-25625564,5089643,-6325503,6704079,12890019,15728940 },
+ { -21972360,-11771379,-951059,-4418840,14704840,2695116,903376,-10428139,12885167,8311031 },
+ { -17516482,5352194,10384213,-13811658,7506451,13453191,26423267,4384730,1888765,-5435404 },
+ },
+ {
+ { -25817338,-3107312,-13494599,-3182506,30896459,-13921729,-32251644,-12707869,-19464434,-3340243 },
+ { -23607977,-2665774,-526091,4651136,5765089,4618330,6092245,14845197,17151279,-9854116 },
+ { -24830458,-12733720,-15165978,10367250,-29530908,-265356,22825805,-7087279,-16866484,16176525 },
+ },
+ {
+ { -23583256,6564961,20063689,3798228,-4740178,7359225,2006182,-10363426,-28746253,-10197509 },
+ { -10626600,-4486402,-13320562,-5125317,3432136,-6393229,23632037,-1940610,32808310,1099883 },
+ { 15030977,5768825,-27451236,-2887299,-6427378,-15361371,-15277896,-6809350,2051441,-15225865 },
+ },
+ {
+ { -3362323,-7239372,7517890,9824992,23555850,295369,5148398,-14154188,-22686354,16633660 },
+ { 4577086,-16752288,13249841,-15304328,19958763,-14537274,18559670,-10759549,8402478,-9864273 },
+ { -28406330,-1051581,-26790155,-907698,-17212414,-11030789,9453451,-14980072,17983010,9967138 },
+ },
+ {
+ { -25762494,6524722,26585488,9969270,24709298,1220360,-1677990,7806337,17507396,3651560 },
+ { -10420457,-4118111,14584639,15971087,-15768321,8861010,26556809,-5574557,-18553322,-11357135 },
+ { 2839101,14284142,4029895,3472686,14402957,12689363,-26642121,8459447,-5605463,-7621941 },
+ },
+ {
+ { -4839289,-3535444,9744961,2871048,25113978,3187018,-25110813,-849066,17258084,-7977739 },
+ { 18164541,-10595176,-17154882,-1542417,19237078,-9745295,23357533,-15217008,26908270,12150756 },
+ { -30264870,-7647865,5112249,-7036672,-1499807,-6974257,43168,-5537701,-32302074,16215819 },
+ },
+},
+{
+ {
+ { -6898905,9824394,-12304779,-4401089,-31397141,-6276835,32574489,12532905,-7503072,-8675347 },
+ { -27343522,-16515468,-27151524,-10722951,946346,16291093,254968,7168080,21676107,-1943028 },
+ { 21260961,-8424752,-16831886,-11920822,-23677961,3968121,-3651949,-6215466,-3556191,-7913075 },
+ },
+ {
+ { 16544754,13250366,-16804428,15546242,-4583003,12757258,-2462308,-8680336,-18907032,-9662799 },
+ { -2415239,-15577728,18312303,4964443,-15272530,-12653564,26820651,16690659,25459437,-4564609 },
+ { -25144690,11425020,28423002,-11020557,-6144921,-15826224,9142795,-2391602,-6432418,-1644817 },
+ },
+ {
+ { -23104652,6253476,16964147,-3768872,-25113972,-12296437,-27457225,-16344658,6335692,7249989 },
+ { -30333227,13979675,7503222,-12368314,-11956721,-4621693,-30272269,2682242,25993170,-12478523 },
+ { 4364628,5930691,32304656,-10044554,-8054781,15091131,22857016,-10598955,31820368,15075278 },
+ },
+ {
+ { 31879134,-8918693,17258761,90626,-8041836,-4917709,24162788,-9650886,-17970238,12833045 },
+ { 19073683,14851414,-24403169,-11860168,7625278,11091125,-19619190,2074449,-9413939,14905377 },
+ { 24483667,-11935567,-2518866,-11547418,-1553130,15355506,-25282080,9253129,27628530,-7555480 },
+ },
+ {
+ { 17597607,8340603,19355617,552187,26198470,-3176583,4593324,-9157582,-14110875,15297016 },
+ { 510886,14337390,-31785257,16638632,6328095,2713355,-20217417,-11864220,8683221,2921426 },
+ { 18606791,11874196,27155355,-5281482,-24031742,6265446,-25178240,-1278924,4674690,13890525 },
+ },
+ {
+ { 13609624,13069022,-27372361,-13055908,24360586,9592974,14977157,9835105,4389687,288396 },
+ { 9922506,-519394,13613107,5883594,-18758345,-434263,-12304062,8317628,23388070,16052080 },
+ { 12720016,11937594,-31970060,-5028689,26900120,8561328,-20155687,-11632979,-14754271,-10812892 },
+ },
+ {
+ { 15961858,14150409,26716931,-665832,-22794328,13603569,11829573,7467844,-28822128,929275 },
+ { 11038231,-11582396,-27310482,-7316562,-10498527,-16307831,-23479533,-9371869,-21393143,2465074 },
+ { 20017163,-4323226,27915242,1529148,12396362,15675764,13817261,-9658066,2463391,-4622140 },
+ },
+ {
+ { -16358878,-12663911,-12065183,4996454,-1256422,1073572,9583558,12851107,4003896,12673717 },
+ { -1731589,-15155870,-3262930,16143082,19294135,13385325,14741514,-9103726,7903886,2348101 },
+ { 24536016,-16515207,12715592,-3862155,1511293,10047386,-3842346,-7129159,-28377538,10048127 },
+ },
+},
+{
+ {
+ { -12622226,-6204820,30718825,2591312,-10617028,12192840,18873298,-7297090,-32297756,15221632 },
+ { -26478122,-11103864,11546244,-1852483,9180880,7656409,-21343950,2095755,29769758,6593415 },
+ { -31994208,-2907461,4176912,3264766,12538965,-868111,26312345,-6118678,30958054,8292160 },
+ },
+ {
+ { 31429822,-13959116,29173532,15632448,12174511,-2760094,32808831,3977186,26143136,-3148876 },
+ { 22648901,1402143,-22799984,13746059,7936347,365344,-8668633,-1674433,-3758243,-2304625 },
+ { -15491917,8012313,-2514730,-12702462,-23965846,-10254029,-1612713,-1535569,-16664475,8194478 },
+ },
+ {
+ { 27338066,-7507420,-7414224,10140405,-19026427,-6589889,27277191,8855376,28572286,3005164 },
+ { 26287124,4821776,25476601,-4145903,-3764513,-15788984,-18008582,1182479,-26094821,-13079595 },
+ { -7171154,3178080,23970071,6201893,-17195577,-4489192,-21876275,-13982627,32208683,-1198248 },
+ },
+ {
+ { -16657702,2817643,-10286362,14811298,6024667,13349505,-27315504,-10497842,-27672585,-11539858 },
+ { 15941029,-9405932,-21367050,8062055,31876073,-238629,-15278393,-1444429,15397331,-4130193 },
+ { 8934485,-13485467,-23286397,-13423241,-32446090,14047986,31170398,-1441021,-27505566,15087184 },
+ },
+ {
+ { -18357243,-2156491,24524913,-16677868,15520427,-6360776,-15502406,11461896,16788528,-5868942 },
+ { -1947386,16013773,21750665,3714552,-17401782,-16055433,-3770287,-10323320,31322514,-11615635 },
+ { 21426655,-5650218,-13648287,-5347537,-28812189,-4920970,-18275391,-14621414,13040862,-12112948 },
+ },
+ {
+ { 11293895,12478086,-27136401,15083750,-29307421,14748872,14555558,-13417103,1613711,4896935 },
+ { -25894883,15323294,-8489791,-8057900,25967126,-13425460,2825960,-4897045,-23971776,-11267415 },
+ { -15924766,-5229880,-17443532,6410664,3622847,10243618,20615400,12405433,-23753030,-8436416 },
+ },
+ {
+ { -7091295,12556208,-20191352,9025187,-17072479,4333801,4378436,2432030,23097949,-566018 },
+ { 4565804,-16025654,20084412,-7842817,1724999,189254,24767264,10103221,-18512313,2424778 },
+ { 366633,-11976806,8173090,-6890119,30788634,5745705,-7168678,1344109,-3642553,12412659 },
+ },
+ {
+ { -24001791,7690286,14929416,-168257,-32210835,-13412986,24162697,-15326504,-3141501,11179385 },
+ { 18289522,-14724954,8056945,16430056,-21729724,7842514,-6001441,-1486897,-18684645,-11443503 },
+ { 476239,6601091,-6152790,-9723375,17503545,-4863900,27672959,13403813,11052904,5219329 },
+ },
+},
+{
+ {
+ { 20678546,-8375738,-32671898,8849123,-5009758,14574752,31186971,-3973730,9014762,-8579056 },
+ { -13644050,-10350239,-15962508,5075808,-1514661,-11534600,-33102500,9160280,8473550,-3256838 },
+ { 24900749,14435722,17209120,-15292541,-22592275,9878983,-7689309,-16335821,-24568481,11788948 },
+ },
+ {
+ { -3118155,-11395194,-13802089,14797441,9652448,-6845904,-20037437,10410733,-24568470,-1458691 },
+ { -15659161,16736706,-22467150,10215878,-9097177,7563911,11871841,-12505194,-18513325,8464118 },
+ { -23400612,8348507,-14585951,-861714,-3950205,-6373419,14325289,8628612,33313881,-8370517 },
+ },
+ {
+ { -20186973,-4967935,22367356,5271547,-1097117,-4788838,-24805667,-10236854,-8940735,-5818269 },
+ { -6948785,-1795212,-32625683,-16021179,32635414,-7374245,15989197,-12838188,28358192,-4253904 },
+ { -23561781,-2799059,-32351682,-1661963,-9147719,10429267,-16637684,4072016,-5351664,5596589 },
+ },
+ {
+ { -28236598,-3390048,12312896,6213178,3117142,16078565,29266239,2557221,1768301,15373193 },
+ { -7243358,-3246960,-4593467,-7553353,-127927,-912245,-1090902,-4504991,-24660491,3442910 },
+ { -30210571,5124043,14181784,8197961,18964734,-11939093,22597931,7176455,-18585478,13365930 },
+ },
+ {
+ { -7877390,-1499958,8324673,4690079,6261860,890446,24538107,-8570186,-9689599,-3031667 },
+ { 25008904,-10771599,-4305031,-9638010,16265036,15721635,683793,-11823784,15723479,-15163481 },
+ { -9660625,12374379,-27006999,-7026148,-7724114,-12314514,11879682,5400171,519526,-1235876 },
+ },
+ {
+ { 22258397,-16332233,-7869817,14613016,-22520255,-2950923,-20353881,7315967,16648397,7605640 },
+ { -8081308,-8464597,-8223311,9719710,19259459,-15348212,23994942,-5281555,-9468848,4763278 },
+ { -21699244,9220969,-15730624,1084137,-25476107,-2852390,31088447,-7764523,-11356529,728112 },
+ },
+ {
+ { 26047220,-11751471,-6900323,-16521798,24092068,9158119,-4273545,-12555558,-29365436,-5498272 },
+ { 17510331,-322857,5854289,8403524,17133918,-3112612,-28111007,12327945,10750447,10014012 },
+ { -10312768,3936952,9156313,-8897683,16498692,-994647,-27481051,-666732,3424691,7540221 },
+ },
+ {
+ { 30322361,-6964110,11361005,-4143317,7433304,4989748,-7071422,-16317219,-9244265,15258046 },
+ { 13054562,-2779497,19155474,469045,-12482797,4566042,5631406,2711395,1062915,-5136345 },
+ { -19240248,-11254599,-29509029,-7499965,-5835763,13005411,-6066489,12194497,32960380,1459310 },
+ },
+},
+{
+ {
+ { 19852034,7027924,23669353,10020366,8586503,-6657907,394197,-6101885,18638003,-11174937 },
+ { 31395534,15098109,26581030,8030562,-16527914,-5007134,9012486,-7584354,-6643087,-5442636 },
+ { -9192165,-2347377,-1997099,4529534,25766844,607986,-13222,9677543,-32294889,-6456008 },
+ },
+ {
+ { -2444496,-149937,29348902,8186665,1873760,12489863,-30934579,-7839692,-7852844,-8138429 },
+ { -15236356,-15433509,7766470,746860,26346930,-10221762,-27333451,10754588,-9431476,5203576 },
+ { 31834314,14135496,-770007,5159118,20917671,-16768096,-7467973,-7337524,31809243,7347066 },
+ },
+ {
+ { -9606723,-11874240,20414459,13033986,13716524,-11691881,19797970,-12211255,15192876,-2087490 },
+ { -12663563,-2181719,1168162,-3804809,26747877,-14138091,10609330,12694420,33473243,-13382104 },
+ { 33184999,11180355,15832085,-11385430,-1633671,225884,15089336,-11023903,-6135662,14480053 },
+ },
+ {
+ { 31308717,-5619998,31030840,-1897099,15674547,-6582883,5496208,13685227,27595050,8737275 },
+ { -20318852,-15150239,10933843,-16178022,8335352,-7546022,-31008351,-12610604,26498114,66511 },
+ { 22644454,-8761729,-16671776,4884562,-3105614,-13559366,30540766,-4286747,-13327787,-7515095 },
+ },
+ {
+ { -28017847,9834845,18617207,-2681312,-3401956,-13307506,8205540,13585437,-17127465,15115439 },
+ { 23711543,-672915,31206561,-8362711,6164647,-9709987,-33535882,-1426096,8236921,16492939 },
+ { -23910559,-13515526,-26299483,-4503841,25005590,-7687270,19574902,10071562,6708380,-6222424 },
+ },
+ {
+ { 2101391,-4930054,19702731,2367575,-15427167,1047675,5301017,9328700,29955601,-11678310 },
+ { 3096359,9271816,-21620864,-15521844,-14847996,-7592937,-25892142,-12635595,-9917575,6216608 },
+ { -32615849,338663,-25195611,2510422,-29213566,-13820213,24822830,-6146567,-26767480,7525079 },
+ },
+ {
+ { -23066649,-13985623,16133487,-7896178,-3389565,778788,-910336,-2782495,-19386633,11994101 },
+ { 21691500,-13624626,-641331,-14367021,3285881,-3483596,-25064666,9718258,-7477437,13381418 },
+ { 18445390,-4202236,14979846,11622458,-1727110,-3582980,23111648,-6375247,28535282,15779576 },
+ },
+ {
+ { 30098053,3089662,-9234387,16662135,-21306940,11308411,-14068454,12021730,9955285,-16303356 },
+ { 9734894,-14576830,-7473633,-9138735,2060392,11313496,-18426029,9924399,20194861,13380996 },
+ { -26378102,-7965207,-22167821,15789297,-18055342,-6168792,-1984914,15707771,26342023,10146099 },
+ },
+},
+{
+ {
+ { -26016874,-219943,21339191,-41388,19745256,-2878700,-29637280,2227040,21612326,-545728 },
+ { -13077387,1184228,23562814,-5970442,-20351244,-6348714,25764461,12243797,-20856566,11649658 },
+ { -10031494,11262626,27384172,2271902,26947504,-15997771,39944,6114064,33514190,2333242 },
+ },
+ {
+ { -21433588,-12421821,8119782,7219913,-21830522,-9016134,-6679750,-12670638,24350578,-13450001 },
+ { -4116307,-11271533,-23886186,4843615,-30088339,690623,-31536088,-10406836,8317860,12352766 },
+ { 18200138,-14475911,-33087759,-2696619,-23702521,-9102511,-23552096,-2287550,20712163,6719373 },
+ },
+ {
+ { 26656208,6075253,-7858556,1886072,-28344043,4262326,11117530,-3763210,26224235,-3297458 },
+ { -17168938,-14854097,-3395676,-16369877,-19954045,14050420,21728352,9493610,18620611,-16428628 },
+ { -13323321,13325349,11432106,5964811,18609221,6062965,-5269471,-9725556,-30701573,-16479657 },
+ },
+ {
+ { -23860538,-11233159,26961357,1640861,-32413112,-16737940,12248509,-5240639,13735342,1934062 },
+ { 25089769,6742589,17081145,-13406266,21909293,-16067981,-15136294,-3765346,-21277997,5473616 },
+ { 31883677,-7961101,1083432,-11572403,22828471,13290673,-7125085,12469656,29111212,-5451014 },
+ },
+ {
+ { 24244947,-15050407,-26262976,2791540,-14997599,16666678,24367466,6388839,-10295587,452383 },
+ { -25640782,-3417841,5217916,16224624,19987036,-4082269,-24236251,-5915248,15766062,8407814 },
+ { -20406999,13990231,15495425,16395525,5377168,15166495,-8917023,-4388953,-8067909,2276718 },
+ },
+ {
+ { 30157918,12924066,-17712050,9245753,19895028,3368142,-23827587,5096219,22740376,-7303417 },
+ { 2041139,-14256350,7783687,13876377,-25946985,-13352459,24051124,13742383,-15637599,13295222 },
+ { 33338237,-8505733,12532113,7977527,9106186,-1715251,-17720195,-4612972,-4451357,-14669444 },
+ },
+ {
+ { -20045281,5454097,-14346548,6447146,28862071,1883651,-2469266,-4141880,7770569,9620597 },
+ { 23208068,7979712,33071466,8149229,1758231,-10834995,30945528,-1694323,-33502340,-14767970 },
+ { 1439958,-16270480,-1079989,-793782,4625402,10647766,-5043801,1220118,30494170,-11440799 },
+ },
+ {
+ { -5037580,-13028295,-2970559,-3061767,15640974,-6701666,-26739026,926050,-1684339,-13333647 },
+ { 13908495,-3549272,30919928,-6273825,-21521863,7989039,9021034,9078865,3353509,4033511 },
+ { -29663431,-15113610,32259991,-344482,24295849,-12912123,23161163,8839127,27485041,7356032 },
+ },
+},
+{
+ {
+ { 9661027,705443,11980065,-5370154,-1628543,14661173,-6346142,2625015,28431036,-16771834 },
+ { -23839233,-8311415,-25945511,7480958,-17681669,-8354183,-22545972,14150565,15970762,4099461 },
+ { 29262576,16756590,26350592,-8793563,8529671,-11208050,13617293,-9937143,11465739,8317062 },
+ },
+ {
+ { -25493081,-6962928,32500200,-9419051,-23038724,-2302222,14898637,3848455,20969334,-5157516 },
+ { -20384450,-14347713,-18336405,13884722,-33039454,2842114,-21610826,-3649888,11177095,14989547 },
+ { -24496721,-11716016,16959896,2278463,12066309,10137771,13515641,2581286,-28487508,9930240 },
+ },
+ {
+ { -17751622,-2097826,16544300,-13009300,-15914807,-14949081,18345767,-13403753,16291481,-5314038 },
+ { -33229194,2553288,32678213,9875984,8534129,6889387,-9676774,6957617,4368891,9788741 },
+ { 16660756,7281060,-10830758,12911820,20108584,-8101676,-21722536,-8613148,16250552,-11111103 },
+ },
+ {
+ { -19765507,2390526,-16551031,14161980,1905286,6414907,4689584,10604807,-30190403,4782747 },
+ { -1354539,14736941,-7367442,-13292886,7710542,-14155590,-9981571,4383045,22546403,437323 },
+ { 31665577,-12180464,-16186830,1491339,-18368625,3294682,27343084,2786261,-30633590,-14097016 },
+ },
+ {
+ { -14467279,-683715,-33374107,7448552,19294360,14334329,-19690631,2355319,-19284671,-6114373 },
+ { 15121312,-15796162,6377020,-6031361,-10798111,-12957845,18952177,15496498,-29380133,11754228 },
+ { -2637277,-13483075,8488727,-14303896,12728761,-1622493,7141596,11724556,22761615,-10134141 },
+ },
+ {
+ { 16918416,11729663,-18083579,3022987,-31015732,-13339659,-28741185,-12227393,32851222,11717399 },
+ { 11166634,7338049,-6722523,4531520,-29468672,-7302055,31474879,3483633,-1193175,-4030831 },
+ { -185635,9921305,31456609,-13536438,-12013818,13348923,33142652,6546660,-19985279,-3948376 },
+ },
+ {
+ { -32460596,11266712,-11197107,-7899103,31703694,3855903,-8537131,-12833048,-30772034,-15486313 },
+ { -18006477,12709068,3991746,-6479188,-21491523,-10550425,-31135347,-16049879,10928917,3011958 },
+ { -6957757,-15594337,31696059,334240,29576716,14796075,-30831056,-12805180,18008031,10258577 },
+ },
+ {
+ { -22448644,15655569,7018479,-4410003,-30314266,-1201591,-1853465,1367120,25127874,6671743 },
+ { 29701166,-14373934,-10878120,9279288,-17568,13127210,21382910,11042292,25838796,4642684 },
+ { -20430234,14955537,-24126347,8124619,-5369288,-5990470,30468147,-13900640,18423289,4177476 },
+ },
+},
diff --git a/src/ext/ed25519/ref10/base.py b/src/ext/ed25519/ref10/base.py
new file mode 100644
index 0000000000..84accc8580
--- /dev/null
+++ b/src/ext/ed25519/ref10/base.py
@@ -0,0 +1,65 @@
+b = 256
+q = 2**255 - 19
+l = 2**252 + 27742317777372353535851937790883648493
+
+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,q-2,q)
+
+d = -121665 * inv(121666)
+I = expmod(2,(q-1)/4,q)
+
+def xrecover(y):
+ xx = (y*y-1) * inv(d*y*y+1)
+ x = expmod(xx,(q+3)/8,q)
+ if (x*x - xx) % q != 0: x = (x*I) % q
+ if x % 2 != 0: x = q-x
+ return x
+
+By = 4 * inv(5)
+Bx = xrecover(By)
+B = [Bx % q,By % q]
+
+def edwards(P,Q):
+ x1 = P[0]
+ y1 = P[1]
+ x2 = Q[0]
+ y2 = Q[1]
+ x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2)
+ y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2)
+ return [x3 % q,y3 % q]
+
+def radix255(x):
+ x = x % q
+ if x + x > q: x -= q
+ x = [x,0,0,0,0,0,0,0,0,0]
+ bits = [26,25,26,25,26,25,26,25,26,25]
+ for i in range(9):
+ carry = (x[i] + 2**(bits[i]-1)) / 2**bits[i]
+ x[i] -= carry * 2**bits[i]
+ x[i + 1] += carry
+ result = ""
+ for i in range(9):
+ result = result+str(x[i])+","
+ result = result+str(x[9])
+ return result
+
+Bi = B
+for i in range(32):
+ print "{"
+ Bij = Bi
+ for j in range(8):
+ print " {"
+ print " {",radix255(Bij[1]+Bij[0]),"},"
+ print " {",radix255(Bij[1]-Bij[0]),"},"
+ print " {",radix255(2*d*Bij[0]*Bij[1]),"},"
+ Bij = edwards(Bij,Bi)
+ print " },"
+ print "},"
+ for k in range(8):
+ Bi = edwards(Bi,Bi)
diff --git a/src/ext/ed25519/ref10/base2.h b/src/ext/ed25519/ref10/base2.h
new file mode 100644
index 0000000000..8c538440ff
--- /dev/null
+++ b/src/ext/ed25519/ref10/base2.h
@@ -0,0 +1,40 @@
+ {
+ { 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 },
+ { -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 },
+ { -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 },
+ },
+ {
+ { 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 },
+ { 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 },
+ { 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 },
+ },
+ {
+ { 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 },
+ { 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 },
+ { 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 },
+ },
+ {
+ { 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 },
+ { -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 },
+ { 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 },
+ },
+ {
+ { -22518993,-6692182,14201702,-8745502,-23510406,8844726,18474211,-1361450,-13062696,13821877 },
+ { -6455177,-7839871,3374702,-4740862,-27098617,-10571707,31655028,-7212327,18853322,-14220951 },
+ { 4566830,-12963868,-28974889,-12240689,-7602672,-2830569,-8514358,-10431137,2207753,-3209784 },
+ },
+ {
+ { -25154831,-4185821,29681144,7868801,-6854661,-9423865,-12437364,-663000,-31111463,-16132436 },
+ { 25576264,-2703214,7349804,-11814844,16472782,9300885,3844789,15725684,171356,6466918 },
+ { 23103977,13316479,9739013,-16149481,817875,-15038942,8965339,-14088058,-30714912,16193877 },
+ },
+ {
+ { -33521811,3180713,-2394130,14003687,-16903474,-16270840,17238398,4729455,-18074513,9256800 },
+ { -25182317,-4174131,32336398,5036987,-21236817,11360617,22616405,9761698,-19827198,630305 },
+ { -13720693,2639453,-24237460,-7406481,9494427,-5774029,-6554551,-15960994,-2449256,-14291300 },
+ },
+ {
+ { -3151181,-5046075,9282714,6866145,-31907062,-863023,-18940575,15033784,25105118,-7894876 },
+ { -24326370,15950226,-31801215,-14592823,-11662737,-5090925,1573892,-2625887,2198790,-15804619 },
+ { -3099351,10324967,-2241613,7453183,-5446979,-2735503,-13812022,-16236442,-32461234,-12290683 },
+ },
diff --git a/src/ext/ed25519/ref10/base2.py b/src/ext/ed25519/ref10/base2.py
new file mode 100644
index 0000000000..5e4e8739d0
--- /dev/null
+++ b/src/ext/ed25519/ref10/base2.py
@@ -0,0 +1,60 @@
+b = 256
+q = 2**255 - 19
+l = 2**252 + 27742317777372353535851937790883648493
+
+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,q-2,q)
+
+d = -121665 * inv(121666)
+I = expmod(2,(q-1)/4,q)
+
+def xrecover(y):
+ xx = (y*y-1) * inv(d*y*y+1)
+ x = expmod(xx,(q+3)/8,q)
+ if (x*x - xx) % q != 0: x = (x*I) % q
+ if x % 2 != 0: x = q-x
+ return x
+
+By = 4 * inv(5)
+Bx = xrecover(By)
+B = [Bx % q,By % q]
+
+def edwards(P,Q):
+ x1 = P[0]
+ y1 = P[1]
+ x2 = Q[0]
+ y2 = Q[1]
+ x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2)
+ y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2)
+ return [x3 % q,y3 % q]
+
+def radix255(x):
+ x = x % q
+ if x + x > q: x -= q
+ x = [x,0,0,0,0,0,0,0,0,0]
+ bits = [26,25,26,25,26,25,26,25,26,25]
+ for i in range(9):
+ carry = (x[i] + 2**(bits[i]-1)) / 2**bits[i]
+ x[i] -= carry * 2**bits[i]
+ x[i + 1] += carry
+ result = ""
+ for i in range(9):
+ result = result+str(x[i])+","
+ result = result+str(x[9])
+ return result
+
+Bi = B
+
+for i in range(8):
+ print " {"
+ print " {",radix255(Bi[1]+Bi[0]),"},"
+ print " {",radix255(Bi[1]-Bi[0]),"},"
+ print " {",radix255(2*d*Bi[0]*Bi[1]),"},"
+ print " },"
+ Bi = edwards(B,edwards(B,Bi))
diff --git a/src/ext/ed25519/ref10/blinding.c b/src/ext/ed25519/ref10/blinding.c
new file mode 100644
index 0000000000..4d9a9cbbe7
--- /dev/null
+++ b/src/ext/ed25519/ref10/blinding.c
@@ -0,0 +1,76 @@
+/* Added to ref10 for Tor. We place this in the public domain. Alternatively,
+ * you may have it under the Creative Commons 0 "CC0" license. */
+//#include "fe.h"
+#include "ge.h"
+#include "sc.h"
+#include "crypto_hash_sha512.h"
+#include "ed25519_ref10.h"
+
+#include <string.h>
+#include "crypto.h"
+
+static void
+gettweak(unsigned char *out, const unsigned char *param)
+{
+ const char str[] = "Derive temporary signing key";
+ crypto_hash_sha512_2(out, (const unsigned char*)str, strlen(str), param, 32);
+ out[0] &= 248; /* Is this necessary necessary ? */
+ out[31] &= 63;
+ out[31] |= 64;
+}
+
+int ed25519_ref10_blind_secret_key(unsigned char *out,
+ const unsigned char *inp,
+ const unsigned char *param)
+{
+ const char str[] = "Derive temporary signing key hash input";
+ unsigned char tweak[64];
+ unsigned char zero[32];
+ gettweak(tweak, param);
+
+ memset(zero, 0, 32);
+ sc_muladd(out, inp, tweak, zero);
+
+ crypto_hash_sha512_2(tweak, (const unsigned char *)str, strlen(str),
+ inp+32, 32);
+ memcpy(out+32, tweak, 32);
+
+ memwipe(tweak, 0, sizeof(tweak));
+
+ return 0;
+}
+
+int ed25519_ref10_blind_public_key(unsigned char *out,
+ const unsigned char *inp,
+ const unsigned char *param)
+{
+ unsigned char tweak[64];
+ unsigned char zero[32];
+ unsigned char pkcopy[32];
+ ge_p3 A;
+ ge_p2 Aprime;
+
+ gettweak(tweak, param);
+
+ memset(zero, 0, sizeof(zero));
+ /* Not the greatest implementation of all of this. I wish I had
+ * better-suited primitives to work with here... (but I don't wish that so
+ * strongly that I'm about to code my own ge_scalarmult_vartime). */
+
+ /* We negate the public key first, so that we can pass it to
+ * frombytes_negate_vartime, which negates it again. If there were a
+ * "ge_frombytes", we'd use that, but there isn't. */
+ memcpy(pkcopy, inp, 32);
+ pkcopy[31] ^= (1<<7);
+ ge_frombytes_negate_vartime(&A, pkcopy);
+ /* There isn't a regular ge_scalarmult -- we have to do tweak*A + zero*B. */
+ ge_double_scalarmult_vartime(&Aprime, tweak, &A, zero);
+ ge_tobytes(out, &Aprime);
+
+ memwipe(tweak, 0, sizeof(tweak));
+ memwipe(&A, 0, sizeof(A));
+ memwipe(&Aprime, 0, sizeof(Aprime));
+ memwipe(pkcopy, 0, sizeof(pkcopy));
+
+ return 0;
+}
diff --git a/src/ext/ed25519/ref10/crypto_hash_sha512.h b/src/ext/ed25519/ref10/crypto_hash_sha512.h
new file mode 100644
index 0000000000..0278571522
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_hash_sha512.h
@@ -0,0 +1,30 @@
+/* Added for Tor. */
+#include <openssl/sha.h>
+
+/* Set 'out' to the 512-bit SHA512 hash of the 'len'-byte string in 'inp' */
+#define crypto_hash_sha512(out, inp, len) \
+ SHA512((inp), (len), (out))
+
+/* Set 'out' to the 512-bit SHA512 hash of the 'len1'-byte string in 'inp1',
+ * concatenated with the 'len2'-byte string in 'inp2'. */
+#define crypto_hash_sha512_2(out, inp1, len1, inp2, len2) \
+ do { \
+ SHA512_CTX sha_ctx_; \
+ SHA512_Init(&sha_ctx_); \
+ SHA512_Update(&sha_ctx_, (inp1), (len1)); \
+ SHA512_Update(&sha_ctx_, (inp2), (len2)); \
+ SHA512_Final((out), &sha_ctx_); \
+ } while(0)
+
+/* Set 'out' to the 512-bit SHA512 hash of the 'len1'-byte string in 'inp1',
+ * concatenated with the 'len2'-byte string in 'inp2', concatenated with
+ * the 'len3'-byte string in 'len3'. */
+#define crypto_hash_sha512_3(out, inp1, len1, inp2, len2, inp3, len3) \
+ do { \
+ SHA512_CTX sha_ctx_; \
+ SHA512_Init(&sha_ctx_); \
+ SHA512_Update(&sha_ctx_, (inp1), (len1)); \
+ SHA512_Update(&sha_ctx_, (inp2), (len2)); \
+ SHA512_Update(&sha_ctx_, (inp3), (len3)); \
+ SHA512_Final((out), &sha_ctx_); \
+ } while(0)
diff --git a/src/ext/ed25519/ref10/crypto_int32.h b/src/ext/ed25519/ref10/crypto_int32.h
new file mode 100644
index 0000000000..dd13c91bd0
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_int32.h
@@ -0,0 +1,25 @@
+/* Added for Tor. */
+
+#ifndef CRYPTO_INT32_H
+#define CRYPTO_INT32_H
+
+#include "torint.h"
+#define crypto_int32 int32_t
+#define crypto_uint32 uint32_t
+
+/*
+ Stop signed left shifts overflowing
+ by using unsigned types for bitwise operations
+ */
+
+#ifndef OVERFLOW_SAFE_SIGNED_LSHIFT
+#define OVERFLOW_SAFE_SIGNED_LSHIFT(s, lshift, utype, stype) \
+ ((stype)((utype)(s) << (utype)(lshift)))
+#endif
+
+#define SHL32(s, lshift) \
+ OVERFLOW_SAFE_SIGNED_LSHIFT(s, lshift, crypto_uint32, crypto_int32)
+#define SHL8(s, lshift) \
+ OVERFLOW_SAFE_SIGNED_LSHIFT(s, lshift, unsigned char, signed char)
+
+#endif /* CRYPTO_INT32_H */
diff --git a/src/ext/ed25519/ref10/crypto_int64.h b/src/ext/ed25519/ref10/crypto_int64.h
new file mode 100644
index 0000000000..46e8852ed0
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_int64.h
@@ -0,0 +1,23 @@
+/* Added for Tor. */
+
+#ifndef CRYPTO_INT64_H
+#define CRYPTO_INT64_H
+
+#include "torint.h"
+#define crypto_int64 int64_t
+#define crypto_uint64 uint64_t
+
+/*
+ Stop signed left shifts overflowing
+ by using unsigned types for bitwise operations
+ */
+
+#ifndef OVERFLOW_SAFE_SIGNED_LSHIFT
+#define OVERFLOW_SAFE_SIGNED_LSHIFT(s, lshift, utype, stype) \
+ ((stype)((utype)(s) << (utype)(lshift)))
+#endif
+
+#define SHL64(s, lshift) \
+ OVERFLOW_SAFE_SIGNED_LSHIFT(s, lshift, crypto_uint64, crypto_int64)
+
+#endif /* CRYPTO_INT64_H */
diff --git a/src/ext/ed25519/ref10/crypto_sign.h b/src/ext/ed25519/ref10/crypto_sign.h
new file mode 100644
index 0000000000..549626793a
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_sign.h
@@ -0,0 +1,9 @@
+/* Added for Tor */
+#define crypto_sign ed25519_ref10_sign
+#define crypto_sign_keypair ed25519_ref10_keygen
+#define crypto_sign_seckey ed25519_ref10_seckey
+#define crypto_sign_seckey_expand ed25519_ref10_seckey_expand
+#define crypto_sign_pubkey ed25519_ref10_pubkey
+#define crypto_sign_open ed25519_ref10_open
+
+#include "ed25519_ref10.h"
diff --git a/src/ext/ed25519/ref10/crypto_uint32.h b/src/ext/ed25519/ref10/crypto_uint32.h
new file mode 100644
index 0000000000..62655a5b66
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_uint32.h
@@ -0,0 +1,3 @@
+/* Added for Tor. */
+#include "torint.h"
+#define crypto_uint32 uint32_t
diff --git a/src/ext/ed25519/ref10/crypto_uint64.h b/src/ext/ed25519/ref10/crypto_uint64.h
new file mode 100644
index 0000000000..cbda882a6a
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_uint64.h
@@ -0,0 +1,3 @@
+/* Added for Tor. */
+#include "torint.h"
+#define crypto_uint64 uint64_t
diff --git a/src/ext/ed25519/ref10/crypto_verify_32.h b/src/ext/ed25519/ref10/crypto_verify_32.h
new file mode 100644
index 0000000000..0f63efc7a3
--- /dev/null
+++ b/src/ext/ed25519/ref10/crypto_verify_32.h
@@ -0,0 +1,5 @@
+/* Added for Tor. */
+#include "di_ops.h"
+#define crypto_verify_32(a,b) \
+ (! tor_memeq((a), (b), 32))
+
diff --git a/src/ext/ed25519/ref10/d.h b/src/ext/ed25519/ref10/d.h
new file mode 100644
index 0000000000..e25f578350
--- /dev/null
+++ b/src/ext/ed25519/ref10/d.h
@@ -0,0 +1 @@
+-10913610,13857413,-15372611,6949391,114729,-8787816,-6275908,-3247719,-18696448,-12055116
diff --git a/src/ext/ed25519/ref10/d.py b/src/ext/ed25519/ref10/d.py
new file mode 100644
index 0000000000..8995bb86a3
--- /dev/null
+++ b/src/ext/ed25519/ref10/d.py
@@ -0,0 +1,28 @@
+q = 2**255 - 19
+
+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,q-2,q)
+
+def radix255(x):
+ x = x % q
+ if x + x > q: x -= q
+ x = [x,0,0,0,0,0,0,0,0,0]
+ bits = [26,25,26,25,26,25,26,25,26,25]
+ for i in range(9):
+ carry = (x[i] + 2**(bits[i]-1)) / 2**bits[i]
+ x[i] -= carry * 2**bits[i]
+ x[i + 1] += carry
+ result = ""
+ for i in range(9):
+ result = result+str(x[i])+","
+ result = result+str(x[9])
+ return result
+
+d = -121665 * inv(121666)
+print radix255(d)
diff --git a/src/ext/ed25519/ref10/d2.h b/src/ext/ed25519/ref10/d2.h
new file mode 100644
index 0000000000..01aaec7512
--- /dev/null
+++ b/src/ext/ed25519/ref10/d2.h
@@ -0,0 +1 @@
+-21827239,-5839606,-30745221,13898782,229458,15978800,-12551817,-6495438,29715968,9444199
diff --git a/src/ext/ed25519/ref10/d2.py b/src/ext/ed25519/ref10/d2.py
new file mode 100644
index 0000000000..79841758be
--- /dev/null
+++ b/src/ext/ed25519/ref10/d2.py
@@ -0,0 +1,28 @@
+q = 2**255 - 19
+
+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,q-2,q)
+
+def radix255(x):
+ x = x % q
+ if x + x > q: x -= q
+ x = [x,0,0,0,0,0,0,0,0,0]
+ bits = [26,25,26,25,26,25,26,25,26,25]
+ for i in range(9):
+ carry = (x[i] + 2**(bits[i]-1)) / 2**bits[i]
+ x[i] -= carry * 2**bits[i]
+ x[i + 1] += carry
+ result = ""
+ for i in range(9):
+ result = result+str(x[i])+","
+ result = result+str(x[9])
+ return result
+
+d = -121665 * inv(121666)
+print radix255(d*2)
diff --git a/src/ext/ed25519/ref10/ed25519_ref10.h b/src/ext/ed25519/ref10/ed25519_ref10.h
new file mode 100644
index 0000000000..af7e21a2ad
--- /dev/null
+++ b/src/ext/ed25519/ref10/ed25519_ref10.h
@@ -0,0 +1,30 @@
+/* Added for Tor */
+#ifndef SRC_EXT_ED25519_REF10_H_INCLUDED_
+#define SRC_EXT_ED25519_REF10_H_INCLUDED_
+#include <torint.h>
+
+int ed25519_ref10_seckey(unsigned char *sk);
+int ed25519_ref10_seckey_expand(unsigned char *sk, const unsigned char *sk_seed);
+int ed25519_ref10_pubkey(unsigned char *pk,const unsigned char *sk);
+int ed25519_ref10_keygen(unsigned char *pk,unsigned char *sk);
+int ed25519_ref10_open(
+ const unsigned char *signature,
+ const unsigned char *m, size_t mlen,
+ const unsigned char *pk);
+int ed25519_ref10_sign(
+ unsigned char *sig,
+ const unsigned char *m, size_t mlen,
+ const unsigned char *sk, const unsigned char *pk);
+
+/* Added in Tor */
+int ed25519_ref10_pubkey_from_curve25519_pubkey(unsigned char *out,
+ const unsigned char *inp,
+ int signbit);
+int ed25519_ref10_blind_secret_key(unsigned char *out,
+ const unsigned char *inp,
+ const unsigned char *param);
+int ed25519_ref10_blind_public_key(unsigned char *out,
+ const unsigned char *inp,
+ const unsigned char *param);
+
+#endif
diff --git a/src/ext/ed25519/ref10/fe.h b/src/ext/ed25519/ref10/fe.h
new file mode 100644
index 0000000000..60c308ba46
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe.h
@@ -0,0 +1,56 @@
+#ifndef FE_H
+#define FE_H
+
+#include "crypto_int32.h"
+
+typedef crypto_int32 fe[10];
+
+/*
+fe means field element.
+Here the field is \Z/(2^255-19).
+An element t, entries t[0]...t[9], represents the integer
+t[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9].
+Bounds on each t[i] vary depending on context.
+*/
+
+#define fe_frombytes crypto_sign_ed25519_ref10_fe_frombytes
+#define fe_tobytes crypto_sign_ed25519_ref10_fe_tobytes
+#define fe_copy crypto_sign_ed25519_ref10_fe_copy
+#define fe_isnonzero crypto_sign_ed25519_ref10_fe_isnonzero
+#define fe_isnegative crypto_sign_ed25519_ref10_fe_isnegative
+#define fe_0 crypto_sign_ed25519_ref10_fe_0
+#define fe_1 crypto_sign_ed25519_ref10_fe_1
+#define fe_cswap crypto_sign_ed25519_ref10_fe_cswap
+#define fe_cmov crypto_sign_ed25519_ref10_fe_cmov
+#define fe_add crypto_sign_ed25519_ref10_fe_add
+#define fe_sub crypto_sign_ed25519_ref10_fe_sub
+#define fe_neg crypto_sign_ed25519_ref10_fe_neg
+#define fe_mul crypto_sign_ed25519_ref10_fe_mul
+#define fe_sq crypto_sign_ed25519_ref10_fe_sq
+#define fe_sq2 crypto_sign_ed25519_ref10_fe_sq2
+#define fe_mul121666 crypto_sign_ed25519_ref10_fe_mul121666
+#define fe_invert crypto_sign_ed25519_ref10_fe_invert
+#define fe_pow22523 crypto_sign_ed25519_ref10_fe_pow22523
+
+extern void fe_frombytes(fe,const unsigned char *);
+extern void fe_tobytes(unsigned char *,const fe);
+
+extern void fe_copy(fe,const fe);
+extern int fe_isnonzero(const fe);
+extern int fe_isnegative(const fe);
+extern void fe_0(fe);
+extern void fe_1(fe);
+extern void fe_cswap(fe,fe,unsigned int);
+extern void fe_cmov(fe,const fe,unsigned int);
+
+extern void fe_add(fe,const fe,const fe);
+extern void fe_sub(fe,const fe,const fe);
+extern void fe_neg(fe,const fe);
+extern void fe_mul(fe,const fe,const fe);
+extern void fe_sq(fe,const fe);
+extern void fe_sq2(fe,const fe);
+extern void fe_mul121666(fe,const fe);
+extern void fe_invert(fe,const fe);
+extern void fe_pow22523(fe,const fe);
+
+#endif
diff --git a/src/ext/ed25519/ref10/fe_0.c b/src/ext/ed25519/ref10/fe_0.c
new file mode 100644
index 0000000000..ec879d7337
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_0.c
@@ -0,0 +1,19 @@
+#include "fe.h"
+
+/*
+h = 0
+*/
+
+void fe_0(fe h)
+{
+ h[0] = 0;
+ h[1] = 0;
+ h[2] = 0;
+ h[3] = 0;
+ h[4] = 0;
+ h[5] = 0;
+ h[6] = 0;
+ h[7] = 0;
+ h[8] = 0;
+ h[9] = 0;
+}
diff --git a/src/ext/ed25519/ref10/fe_1.c b/src/ext/ed25519/ref10/fe_1.c
new file mode 100644
index 0000000000..8cf7784844
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_1.c
@@ -0,0 +1,19 @@
+#include "fe.h"
+
+/*
+h = 1
+*/
+
+void fe_1(fe h)
+{
+ h[0] = 1;
+ h[1] = 0;
+ h[2] = 0;
+ h[3] = 0;
+ h[4] = 0;
+ h[5] = 0;
+ h[6] = 0;
+ h[7] = 0;
+ h[8] = 0;
+ h[9] = 0;
+}
diff --git a/src/ext/ed25519/ref10/fe_add.c b/src/ext/ed25519/ref10/fe_add.c
new file mode 100644
index 0000000000..e6a81da202
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_add.c
@@ -0,0 +1,57 @@
+#include "fe.h"
+
+/*
+h = f + g
+Can overlap h with f or g.
+
+Preconditions:
+ |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+ |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+
+Postconditions:
+ |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+void fe_add(fe h,const fe f,const fe g)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 g0 = g[0];
+ crypto_int32 g1 = g[1];
+ crypto_int32 g2 = g[2];
+ crypto_int32 g3 = g[3];
+ crypto_int32 g4 = g[4];
+ crypto_int32 g5 = g[5];
+ crypto_int32 g6 = g[6];
+ crypto_int32 g7 = g[7];
+ crypto_int32 g8 = g[8];
+ crypto_int32 g9 = g[9];
+ crypto_int32 h0 = f0 + g0;
+ crypto_int32 h1 = f1 + g1;
+ crypto_int32 h2 = f2 + g2;
+ crypto_int32 h3 = f3 + g3;
+ crypto_int32 h4 = f4 + g4;
+ crypto_int32 h5 = f5 + g5;
+ crypto_int32 h6 = f6 + g6;
+ crypto_int32 h7 = f7 + g7;
+ crypto_int32 h8 = f8 + g8;
+ crypto_int32 h9 = f9 + g9;
+ h[0] = h0;
+ h[1] = h1;
+ h[2] = h2;
+ h[3] = h3;
+ h[4] = h4;
+ h[5] = h5;
+ h[6] = h6;
+ h[7] = h7;
+ h[8] = h8;
+ h[9] = h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_cmov.c b/src/ext/ed25519/ref10/fe_cmov.c
new file mode 100644
index 0000000000..8ca584fb19
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_cmov.c
@@ -0,0 +1,63 @@
+#include "fe.h"
+
+/*
+Replace (f,g) with (g,g) if b == 1;
+replace (f,g) with (f,g) if b == 0.
+
+Preconditions: b in {0,1}.
+*/
+
+void fe_cmov(fe f,const fe g,unsigned int b)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 g0 = g[0];
+ crypto_int32 g1 = g[1];
+ crypto_int32 g2 = g[2];
+ crypto_int32 g3 = g[3];
+ crypto_int32 g4 = g[4];
+ crypto_int32 g5 = g[5];
+ crypto_int32 g6 = g[6];
+ crypto_int32 g7 = g[7];
+ crypto_int32 g8 = g[8];
+ crypto_int32 g9 = g[9];
+ crypto_int32 x0 = f0 ^ g0;
+ crypto_int32 x1 = f1 ^ g1;
+ crypto_int32 x2 = f2 ^ g2;
+ crypto_int32 x3 = f3 ^ g3;
+ crypto_int32 x4 = f4 ^ g4;
+ crypto_int32 x5 = f5 ^ g5;
+ crypto_int32 x6 = f6 ^ g6;
+ crypto_int32 x7 = f7 ^ g7;
+ crypto_int32 x8 = f8 ^ g8;
+ crypto_int32 x9 = f9 ^ g9;
+ b = -b;
+ x0 &= b;
+ x1 &= b;
+ x2 &= b;
+ x3 &= b;
+ x4 &= b;
+ x5 &= b;
+ x6 &= b;
+ x7 &= b;
+ x8 &= b;
+ x9 &= b;
+ f[0] = f0 ^ x0;
+ f[1] = f1 ^ x1;
+ f[2] = f2 ^ x2;
+ f[3] = f3 ^ x3;
+ f[4] = f4 ^ x4;
+ f[5] = f5 ^ x5;
+ f[6] = f6 ^ x6;
+ f[7] = f7 ^ x7;
+ f[8] = f8 ^ x8;
+ f[9] = f9 ^ x9;
+}
diff --git a/src/ext/ed25519/ref10/fe_copy.c b/src/ext/ed25519/ref10/fe_copy.c
new file mode 100644
index 0000000000..9c5bf865a2
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_copy.c
@@ -0,0 +1,29 @@
+#include "fe.h"
+
+/*
+h = f
+*/
+
+void fe_copy(fe h,const fe f)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ h[0] = f0;
+ h[1] = f1;
+ h[2] = f2;
+ h[3] = f3;
+ h[4] = f4;
+ h[5] = f5;
+ h[6] = f6;
+ h[7] = f7;
+ h[8] = f8;
+ h[9] = f9;
+}
diff --git a/src/ext/ed25519/ref10/fe_frombytes.c b/src/ext/ed25519/ref10/fe_frombytes.c
new file mode 100644
index 0000000000..98b8e5f7c1
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_frombytes.c
@@ -0,0 +1,73 @@
+#include "fe.h"
+#include "crypto_int64.h"
+#include "crypto_uint64.h"
+
+static crypto_uint64 load_3(const unsigned char *in)
+{
+ crypto_uint64 result;
+ result = (crypto_uint64) in[0];
+ result |= ((crypto_uint64) in[1]) << 8;
+ result |= ((crypto_uint64) in[2]) << 16;
+ return result;
+}
+
+static crypto_uint64 load_4(const unsigned char *in)
+{
+ crypto_uint64 result;
+ result = (crypto_uint64) in[0];
+ result |= ((crypto_uint64) in[1]) << 8;
+ result |= ((crypto_uint64) in[2]) << 16;
+ result |= ((crypto_uint64) in[3]) << 24;
+ return result;
+}
+
+/*
+Ignores top bit of h.
+*/
+
+void fe_frombytes(fe h,const unsigned char *s)
+{
+ crypto_int64 h0 = load_4(s);
+ crypto_int64 h1 = load_3(s + 4) << 6;
+ crypto_int64 h2 = load_3(s + 7) << 5;
+ crypto_int64 h3 = load_3(s + 10) << 3;
+ crypto_int64 h4 = load_3(s + 13) << 2;
+ crypto_int64 h5 = load_4(s + 16);
+ crypto_int64 h6 = load_3(s + 20) << 7;
+ crypto_int64 h7 = load_3(s + 23) << 5;
+ crypto_int64 h8 = load_3(s + 26) << 4;
+ crypto_int64 h9 = (load_3(s + 29) & 8388607) << 2;
+ crypto_int64 carry0;
+ crypto_int64 carry1;
+ crypto_int64 carry2;
+ crypto_int64 carry3;
+ crypto_int64 carry4;
+ crypto_int64 carry5;
+ crypto_int64 carry6;
+ crypto_int64 carry7;
+ crypto_int64 carry8;
+ crypto_int64 carry9;
+
+ carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= SHL64(carry9,25);
+ carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= SHL64(carry1,25);
+ carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= SHL64(carry3,25);
+ carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= SHL64(carry5,25);
+ carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= SHL64(carry7,25);
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+ carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= SHL64(carry2,26);
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+ carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= SHL64(carry6,26);
+ carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= SHL64(carry8,26);
+
+ h[0] = (crypto_int32) h0;
+ h[1] = (crypto_int32) h1;
+ h[2] = (crypto_int32) h2;
+ h[3] = (crypto_int32) h3;
+ h[4] = (crypto_int32) h4;
+ h[5] = (crypto_int32) h5;
+ h[6] = (crypto_int32) h6;
+ h[7] = (crypto_int32) h7;
+ h[8] = (crypto_int32) h8;
+ h[9] = (crypto_int32) h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_invert.c b/src/ext/ed25519/ref10/fe_invert.c
new file mode 100644
index 0000000000..bcfdb8ff87
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_invert.c
@@ -0,0 +1,14 @@
+#include "fe.h"
+
+void fe_invert(fe out,const fe z)
+{
+ fe t0;
+ fe t1;
+ fe t2;
+ fe t3;
+ int i;
+
+#include "pow225521.h"
+
+ return;
+}
diff --git a/src/ext/ed25519/ref10/fe_isnegative.c b/src/ext/ed25519/ref10/fe_isnegative.c
new file mode 100644
index 0000000000..3b2c8b8d52
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_isnegative.c
@@ -0,0 +1,16 @@
+#include "fe.h"
+
+/*
+return 1 if f is in {1,3,5,...,q-2}
+return 0 if f is in {0,2,4,...,q-1}
+
+Preconditions:
+ |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+int fe_isnegative(const fe f)
+{
+ unsigned char s[32];
+ fe_tobytes(s,f);
+ return s[0] & 1;
+}
diff --git a/src/ext/ed25519/ref10/fe_isnonzero.c b/src/ext/ed25519/ref10/fe_isnonzero.c
new file mode 100644
index 0000000000..47568001ce
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_isnonzero.c
@@ -0,0 +1,19 @@
+#include "fe.h"
+#include "crypto_verify_32.h"
+
+/*
+return 1 if f == 0
+return 0 if f != 0
+
+Preconditions:
+ |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+static const unsigned char zero[32];
+
+int fe_isnonzero(const fe f)
+{
+ unsigned char s[32];
+ fe_tobytes(s,f);
+ return crypto_verify_32(s,zero);
+}
diff --git a/src/ext/ed25519/ref10/fe_mul.c b/src/ext/ed25519/ref10/fe_mul.c
new file mode 100644
index 0000000000..ace63e64c1
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_mul.c
@@ -0,0 +1,253 @@
+#include "fe.h"
+#include "crypto_int64.h"
+
+/*
+h = f * g
+Can overlap h with f or g.
+
+Preconditions:
+ |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+ |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+
+Postconditions:
+ |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+*/
+
+/*
+Notes on implementation strategy:
+
+Using schoolbook multiplication.
+Karatsuba would save a little in some cost models.
+
+Most multiplications by 2 and 19 are 32-bit precomputations;
+cheaper than 64-bit postcomputations.
+
+There is one remaining multiplication by 19 in the carry chain;
+one *19 precomputation can be merged into this,
+but the resulting data flow is considerably less clean.
+
+There are 12 carries below.
+10 of them are 2-way parallelizable and vectorizable.
+Can get away with 11 carries, but then data flow is much deeper.
+
+With tighter constraints on inputs can squeeze carries into int32.
+*/
+
+void fe_mul(fe h,const fe f,const fe g)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 g0 = g[0];
+ crypto_int32 g1 = g[1];
+ crypto_int32 g2 = g[2];
+ crypto_int32 g3 = g[3];
+ crypto_int32 g4 = g[4];
+ crypto_int32 g5 = g[5];
+ crypto_int32 g6 = g[6];
+ crypto_int32 g7 = g[7];
+ crypto_int32 g8 = g[8];
+ crypto_int32 g9 = g[9];
+ crypto_int32 g1_19 = 19 * g1; /* 1.959375*2^29 */
+ crypto_int32 g2_19 = 19 * g2; /* 1.959375*2^30; still ok */
+ crypto_int32 g3_19 = 19 * g3;
+ crypto_int32 g4_19 = 19 * g4;
+ crypto_int32 g5_19 = 19 * g5;
+ crypto_int32 g6_19 = 19 * g6;
+ crypto_int32 g7_19 = 19 * g7;
+ crypto_int32 g8_19 = 19 * g8;
+ crypto_int32 g9_19 = 19 * g9;
+ crypto_int32 f1_2 = 2 * f1;
+ crypto_int32 f3_2 = 2 * f3;
+ crypto_int32 f5_2 = 2 * f5;
+ crypto_int32 f7_2 = 2 * f7;
+ crypto_int32 f9_2 = 2 * f9;
+ crypto_int64 f0g0 = f0 * (crypto_int64) g0;
+ crypto_int64 f0g1 = f0 * (crypto_int64) g1;
+ crypto_int64 f0g2 = f0 * (crypto_int64) g2;
+ crypto_int64 f0g3 = f0 * (crypto_int64) g3;
+ crypto_int64 f0g4 = f0 * (crypto_int64) g4;
+ crypto_int64 f0g5 = f0 * (crypto_int64) g5;
+ crypto_int64 f0g6 = f0 * (crypto_int64) g6;
+ crypto_int64 f0g7 = f0 * (crypto_int64) g7;
+ crypto_int64 f0g8 = f0 * (crypto_int64) g8;
+ crypto_int64 f0g9 = f0 * (crypto_int64) g9;
+ crypto_int64 f1g0 = f1 * (crypto_int64) g0;
+ crypto_int64 f1g1_2 = f1_2 * (crypto_int64) g1;
+ crypto_int64 f1g2 = f1 * (crypto_int64) g2;
+ crypto_int64 f1g3_2 = f1_2 * (crypto_int64) g3;
+ crypto_int64 f1g4 = f1 * (crypto_int64) g4;
+ crypto_int64 f1g5_2 = f1_2 * (crypto_int64) g5;
+ crypto_int64 f1g6 = f1 * (crypto_int64) g6;
+ crypto_int64 f1g7_2 = f1_2 * (crypto_int64) g7;
+ crypto_int64 f1g8 = f1 * (crypto_int64) g8;
+ crypto_int64 f1g9_38 = f1_2 * (crypto_int64) g9_19;
+ crypto_int64 f2g0 = f2 * (crypto_int64) g0;
+ crypto_int64 f2g1 = f2 * (crypto_int64) g1;
+ crypto_int64 f2g2 = f2 * (crypto_int64) g2;
+ crypto_int64 f2g3 = f2 * (crypto_int64) g3;
+ crypto_int64 f2g4 = f2 * (crypto_int64) g4;
+ crypto_int64 f2g5 = f2 * (crypto_int64) g5;
+ crypto_int64 f2g6 = f2 * (crypto_int64) g6;
+ crypto_int64 f2g7 = f2 * (crypto_int64) g7;
+ crypto_int64 f2g8_19 = f2 * (crypto_int64) g8_19;
+ crypto_int64 f2g9_19 = f2 * (crypto_int64) g9_19;
+ crypto_int64 f3g0 = f3 * (crypto_int64) g0;
+ crypto_int64 f3g1_2 = f3_2 * (crypto_int64) g1;
+ crypto_int64 f3g2 = f3 * (crypto_int64) g2;
+ crypto_int64 f3g3_2 = f3_2 * (crypto_int64) g3;
+ crypto_int64 f3g4 = f3 * (crypto_int64) g4;
+ crypto_int64 f3g5_2 = f3_2 * (crypto_int64) g5;
+ crypto_int64 f3g6 = f3 * (crypto_int64) g6;
+ crypto_int64 f3g7_38 = f3_2 * (crypto_int64) g7_19;
+ crypto_int64 f3g8_19 = f3 * (crypto_int64) g8_19;
+ crypto_int64 f3g9_38 = f3_2 * (crypto_int64) g9_19;
+ crypto_int64 f4g0 = f4 * (crypto_int64) g0;
+ crypto_int64 f4g1 = f4 * (crypto_int64) g1;
+ crypto_int64 f4g2 = f4 * (crypto_int64) g2;
+ crypto_int64 f4g3 = f4 * (crypto_int64) g3;
+ crypto_int64 f4g4 = f4 * (crypto_int64) g4;
+ crypto_int64 f4g5 = f4 * (crypto_int64) g5;
+ crypto_int64 f4g6_19 = f4 * (crypto_int64) g6_19;
+ crypto_int64 f4g7_19 = f4 * (crypto_int64) g7_19;
+ crypto_int64 f4g8_19 = f4 * (crypto_int64) g8_19;
+ crypto_int64 f4g9_19 = f4 * (crypto_int64) g9_19;
+ crypto_int64 f5g0 = f5 * (crypto_int64) g0;
+ crypto_int64 f5g1_2 = f5_2 * (crypto_int64) g1;
+ crypto_int64 f5g2 = f5 * (crypto_int64) g2;
+ crypto_int64 f5g3_2 = f5_2 * (crypto_int64) g3;
+ crypto_int64 f5g4 = f5 * (crypto_int64) g4;
+ crypto_int64 f5g5_38 = f5_2 * (crypto_int64) g5_19;
+ crypto_int64 f5g6_19 = f5 * (crypto_int64) g6_19;
+ crypto_int64 f5g7_38 = f5_2 * (crypto_int64) g7_19;
+ crypto_int64 f5g8_19 = f5 * (crypto_int64) g8_19;
+ crypto_int64 f5g9_38 = f5_2 * (crypto_int64) g9_19;
+ crypto_int64 f6g0 = f6 * (crypto_int64) g0;
+ crypto_int64 f6g1 = f6 * (crypto_int64) g1;
+ crypto_int64 f6g2 = f6 * (crypto_int64) g2;
+ crypto_int64 f6g3 = f6 * (crypto_int64) g3;
+ crypto_int64 f6g4_19 = f6 * (crypto_int64) g4_19;
+ crypto_int64 f6g5_19 = f6 * (crypto_int64) g5_19;
+ crypto_int64 f6g6_19 = f6 * (crypto_int64) g6_19;
+ crypto_int64 f6g7_19 = f6 * (crypto_int64) g7_19;
+ crypto_int64 f6g8_19 = f6 * (crypto_int64) g8_19;
+ crypto_int64 f6g9_19 = f6 * (crypto_int64) g9_19;
+ crypto_int64 f7g0 = f7 * (crypto_int64) g0;
+ crypto_int64 f7g1_2 = f7_2 * (crypto_int64) g1;
+ crypto_int64 f7g2 = f7 * (crypto_int64) g2;
+ crypto_int64 f7g3_38 = f7_2 * (crypto_int64) g3_19;
+ crypto_int64 f7g4_19 = f7 * (crypto_int64) g4_19;
+ crypto_int64 f7g5_38 = f7_2 * (crypto_int64) g5_19;
+ crypto_int64 f7g6_19 = f7 * (crypto_int64) g6_19;
+ crypto_int64 f7g7_38 = f7_2 * (crypto_int64) g7_19;
+ crypto_int64 f7g8_19 = f7 * (crypto_int64) g8_19;
+ crypto_int64 f7g9_38 = f7_2 * (crypto_int64) g9_19;
+ crypto_int64 f8g0 = f8 * (crypto_int64) g0;
+ crypto_int64 f8g1 = f8 * (crypto_int64) g1;
+ crypto_int64 f8g2_19 = f8 * (crypto_int64) g2_19;
+ crypto_int64 f8g3_19 = f8 * (crypto_int64) g3_19;
+ crypto_int64 f8g4_19 = f8 * (crypto_int64) g4_19;
+ crypto_int64 f8g5_19 = f8 * (crypto_int64) g5_19;
+ crypto_int64 f8g6_19 = f8 * (crypto_int64) g6_19;
+ crypto_int64 f8g7_19 = f8 * (crypto_int64) g7_19;
+ crypto_int64 f8g8_19 = f8 * (crypto_int64) g8_19;
+ crypto_int64 f8g9_19 = f8 * (crypto_int64) g9_19;
+ crypto_int64 f9g0 = f9 * (crypto_int64) g0;
+ crypto_int64 f9g1_38 = f9_2 * (crypto_int64) g1_19;
+ crypto_int64 f9g2_19 = f9 * (crypto_int64) g2_19;
+ crypto_int64 f9g3_38 = f9_2 * (crypto_int64) g3_19;
+ crypto_int64 f9g4_19 = f9 * (crypto_int64) g4_19;
+ crypto_int64 f9g5_38 = f9_2 * (crypto_int64) g5_19;
+ crypto_int64 f9g6_19 = f9 * (crypto_int64) g6_19;
+ crypto_int64 f9g7_38 = f9_2 * (crypto_int64) g7_19;
+ crypto_int64 f9g8_19 = f9 * (crypto_int64) g8_19;
+ crypto_int64 f9g9_38 = f9_2 * (crypto_int64) g9_19;
+ crypto_int64 h0 = f0g0+f1g9_38+f2g8_19+f3g7_38+f4g6_19+f5g5_38+f6g4_19+f7g3_38+f8g2_19+f9g1_38;
+ crypto_int64 h1 = f0g1+f1g0 +f2g9_19+f3g8_19+f4g7_19+f5g6_19+f6g5_19+f7g4_19+f8g3_19+f9g2_19;
+ crypto_int64 h2 = f0g2+f1g1_2 +f2g0 +f3g9_38+f4g8_19+f5g7_38+f6g6_19+f7g5_38+f8g4_19+f9g3_38;
+ crypto_int64 h3 = f0g3+f1g2 +f2g1 +f3g0 +f4g9_19+f5g8_19+f6g7_19+f7g6_19+f8g5_19+f9g4_19;
+ crypto_int64 h4 = f0g4+f1g3_2 +f2g2 +f3g1_2 +f4g0 +f5g9_38+f6g8_19+f7g7_38+f8g6_19+f9g5_38;
+ crypto_int64 h5 = f0g5+f1g4 +f2g3 +f3g2 +f4g1 +f5g0 +f6g9_19+f7g8_19+f8g7_19+f9g6_19;
+ crypto_int64 h6 = f0g6+f1g5_2 +f2g4 +f3g3_2 +f4g2 +f5g1_2 +f6g0 +f7g9_38+f8g8_19+f9g7_38;
+ crypto_int64 h7 = f0g7+f1g6 +f2g5 +f3g4 +f4g3 +f5g2 +f6g1 +f7g0 +f8g9_19+f9g8_19;
+ crypto_int64 h8 = f0g8+f1g7_2 +f2g6 +f3g5_2 +f4g4 +f5g3_2 +f6g2 +f7g1_2 +f8g0 +f9g9_38;
+ crypto_int64 h9 = f0g9+f1g8 +f2g7 +f3g6 +f4g5 +f5g4 +f6g3 +f7g2 +f8g1 +f9g0 ;
+ crypto_int64 carry0;
+ crypto_int64 carry1;
+ crypto_int64 carry2;
+ crypto_int64 carry3;
+ crypto_int64 carry4;
+ crypto_int64 carry5;
+ crypto_int64 carry6;
+ crypto_int64 carry7;
+ crypto_int64 carry8;
+ crypto_int64 carry9;
+
+ /*
+ |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
+ i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8
+ |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
+ i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9
+ */
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+ /* |h0| <= 2^25 */
+ /* |h4| <= 2^25 */
+ /* |h1| <= 1.71*2^59 */
+ /* |h5| <= 1.71*2^59 */
+
+ carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= SHL64(carry1,25);
+ carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= SHL64(carry5,25);
+ /* |h1| <= 2^24; from now on fits into int32 */
+ /* |h5| <= 2^24; from now on fits into int32 */
+ /* |h2| <= 1.41*2^60 */
+ /* |h6| <= 1.41*2^60 */
+
+ carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= SHL64(carry2,26);
+ carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= SHL64(carry6,26);
+ /* |h2| <= 2^25; from now on fits into int32 unchanged */
+ /* |h6| <= 2^25; from now on fits into int32 unchanged */
+ /* |h3| <= 1.71*2^59 */
+ /* |h7| <= 1.71*2^59 */
+
+ carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= SHL64(carry3,25);
+ carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= SHL64(carry7,25);
+ /* |h3| <= 2^24; from now on fits into int32 unchanged */
+ /* |h7| <= 2^24; from now on fits into int32 unchanged */
+ /* |h4| <= 1.72*2^34 */
+ /* |h8| <= 1.41*2^60 */
+
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+ carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= SHL64(carry8,26);
+ /* |h4| <= 2^25; from now on fits into int32 unchanged */
+ /* |h8| <= 2^25; from now on fits into int32 unchanged */
+ /* |h5| <= 1.01*2^24 */
+ /* |h9| <= 1.71*2^59 */
+
+ carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= SHL64(carry9,25);
+ /* |h9| <= 2^24; from now on fits into int32 unchanged */
+ /* |h0| <= 1.1*2^39 */
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+ /* |h0| <= 2^25; from now on fits into int32 unchanged */
+ /* |h1| <= 1.01*2^24 */
+
+ h[0] = (crypto_int32) h0;
+ h[1] = (crypto_int32) h1;
+ h[2] = (crypto_int32) h2;
+ h[3] = (crypto_int32) h3;
+ h[4] = (crypto_int32) h4;
+ h[5] = (crypto_int32) h5;
+ h[6] = (crypto_int32) h6;
+ h[7] = (crypto_int32) h7;
+ h[8] = (crypto_int32) h8;
+ h[9] = (crypto_int32) h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_neg.c b/src/ext/ed25519/ref10/fe_neg.c
new file mode 100644
index 0000000000..2078ce5284
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_neg.c
@@ -0,0 +1,45 @@
+#include "fe.h"
+
+/*
+h = -f
+
+Preconditions:
+ |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+
+Postconditions:
+ |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+*/
+
+void fe_neg(fe h,const fe f)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 h0 = -f0;
+ crypto_int32 h1 = -f1;
+ crypto_int32 h2 = -f2;
+ crypto_int32 h3 = -f3;
+ crypto_int32 h4 = -f4;
+ crypto_int32 h5 = -f5;
+ crypto_int32 h6 = -f6;
+ crypto_int32 h7 = -f7;
+ crypto_int32 h8 = -f8;
+ crypto_int32 h9 = -f9;
+ h[0] = h0;
+ h[1] = h1;
+ h[2] = h2;
+ h[3] = h3;
+ h[4] = h4;
+ h[5] = h5;
+ h[6] = h6;
+ h[7] = h7;
+ h[8] = h8;
+ h[9] = h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_pow22523.c b/src/ext/ed25519/ref10/fe_pow22523.c
new file mode 100644
index 0000000000..56675a5902
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_pow22523.c
@@ -0,0 +1,13 @@
+#include "fe.h"
+
+void fe_pow22523(fe out,const fe z)
+{
+ fe t0;
+ fe t1;
+ fe t2;
+ int i;
+
+#include "pow22523.h"
+
+ return;
+}
diff --git a/src/ext/ed25519/ref10/fe_sq.c b/src/ext/ed25519/ref10/fe_sq.c
new file mode 100644
index 0000000000..0022a17510
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_sq.c
@@ -0,0 +1,149 @@
+#include "fe.h"
+#include "crypto_int64.h"
+
+/*
+h = f * f
+Can overlap h with f.
+
+Preconditions:
+ |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+
+Postconditions:
+ |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+*/
+
+/*
+See fe_mul.c for discussion of implementation strategy.
+*/
+
+void fe_sq(fe h,const fe f)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 f0_2 = 2 * f0;
+ crypto_int32 f1_2 = 2 * f1;
+ crypto_int32 f2_2 = 2 * f2;
+ crypto_int32 f3_2 = 2 * f3;
+ crypto_int32 f4_2 = 2 * f4;
+ crypto_int32 f5_2 = 2 * f5;
+ crypto_int32 f6_2 = 2 * f6;
+ crypto_int32 f7_2 = 2 * f7;
+ crypto_int32 f5_38 = 38 * f5; /* 1.959375*2^30 */
+ crypto_int32 f6_19 = 19 * f6; /* 1.959375*2^30 */
+ crypto_int32 f7_38 = 38 * f7; /* 1.959375*2^30 */
+ crypto_int32 f8_19 = 19 * f8; /* 1.959375*2^30 */
+ crypto_int32 f9_38 = 38 * f9; /* 1.959375*2^30 */
+ crypto_int64 f0f0 = f0 * (crypto_int64) f0;
+ crypto_int64 f0f1_2 = f0_2 * (crypto_int64) f1;
+ crypto_int64 f0f2_2 = f0_2 * (crypto_int64) f2;
+ crypto_int64 f0f3_2 = f0_2 * (crypto_int64) f3;
+ crypto_int64 f0f4_2 = f0_2 * (crypto_int64) f4;
+ crypto_int64 f0f5_2 = f0_2 * (crypto_int64) f5;
+ crypto_int64 f0f6_2 = f0_2 * (crypto_int64) f6;
+ crypto_int64 f0f7_2 = f0_2 * (crypto_int64) f7;
+ crypto_int64 f0f8_2 = f0_2 * (crypto_int64) f8;
+ crypto_int64 f0f9_2 = f0_2 * (crypto_int64) f9;
+ crypto_int64 f1f1_2 = f1_2 * (crypto_int64) f1;
+ crypto_int64 f1f2_2 = f1_2 * (crypto_int64) f2;
+ crypto_int64 f1f3_4 = f1_2 * (crypto_int64) f3_2;
+ crypto_int64 f1f4_2 = f1_2 * (crypto_int64) f4;
+ crypto_int64 f1f5_4 = f1_2 * (crypto_int64) f5_2;
+ crypto_int64 f1f6_2 = f1_2 * (crypto_int64) f6;
+ crypto_int64 f1f7_4 = f1_2 * (crypto_int64) f7_2;
+ crypto_int64 f1f8_2 = f1_2 * (crypto_int64) f8;
+ crypto_int64 f1f9_76 = f1_2 * (crypto_int64) f9_38;
+ crypto_int64 f2f2 = f2 * (crypto_int64) f2;
+ crypto_int64 f2f3_2 = f2_2 * (crypto_int64) f3;
+ crypto_int64 f2f4_2 = f2_2 * (crypto_int64) f4;
+ crypto_int64 f2f5_2 = f2_2 * (crypto_int64) f5;
+ crypto_int64 f2f6_2 = f2_2 * (crypto_int64) f6;
+ crypto_int64 f2f7_2 = f2_2 * (crypto_int64) f7;
+ crypto_int64 f2f8_38 = f2_2 * (crypto_int64) f8_19;
+ crypto_int64 f2f9_38 = f2 * (crypto_int64) f9_38;
+ crypto_int64 f3f3_2 = f3_2 * (crypto_int64) f3;
+ crypto_int64 f3f4_2 = f3_2 * (crypto_int64) f4;
+ crypto_int64 f3f5_4 = f3_2 * (crypto_int64) f5_2;
+ crypto_int64 f3f6_2 = f3_2 * (crypto_int64) f6;
+ crypto_int64 f3f7_76 = f3_2 * (crypto_int64) f7_38;
+ crypto_int64 f3f8_38 = f3_2 * (crypto_int64) f8_19;
+ crypto_int64 f3f9_76 = f3_2 * (crypto_int64) f9_38;
+ crypto_int64 f4f4 = f4 * (crypto_int64) f4;
+ crypto_int64 f4f5_2 = f4_2 * (crypto_int64) f5;
+ crypto_int64 f4f6_38 = f4_2 * (crypto_int64) f6_19;
+ crypto_int64 f4f7_38 = f4 * (crypto_int64) f7_38;
+ crypto_int64 f4f8_38 = f4_2 * (crypto_int64) f8_19;
+ crypto_int64 f4f9_38 = f4 * (crypto_int64) f9_38;
+ crypto_int64 f5f5_38 = f5 * (crypto_int64) f5_38;
+ crypto_int64 f5f6_38 = f5_2 * (crypto_int64) f6_19;
+ crypto_int64 f5f7_76 = f5_2 * (crypto_int64) f7_38;
+ crypto_int64 f5f8_38 = f5_2 * (crypto_int64) f8_19;
+ crypto_int64 f5f9_76 = f5_2 * (crypto_int64) f9_38;
+ crypto_int64 f6f6_19 = f6 * (crypto_int64) f6_19;
+ crypto_int64 f6f7_38 = f6 * (crypto_int64) f7_38;
+ crypto_int64 f6f8_38 = f6_2 * (crypto_int64) f8_19;
+ crypto_int64 f6f9_38 = f6 * (crypto_int64) f9_38;
+ crypto_int64 f7f7_38 = f7 * (crypto_int64) f7_38;
+ crypto_int64 f7f8_38 = f7_2 * (crypto_int64) f8_19;
+ crypto_int64 f7f9_76 = f7_2 * (crypto_int64) f9_38;
+ crypto_int64 f8f8_19 = f8 * (crypto_int64) f8_19;
+ crypto_int64 f8f9_38 = f8 * (crypto_int64) f9_38;
+ crypto_int64 f9f9_38 = f9 * (crypto_int64) f9_38;
+ crypto_int64 h0 = f0f0 +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;
+ crypto_int64 h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;
+ crypto_int64 h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;
+ crypto_int64 h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;
+ crypto_int64 h4 = f0f4_2+f1f3_4 +f2f2 +f5f9_76+f6f8_38+f7f7_38;
+ crypto_int64 h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;
+ crypto_int64 h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;
+ crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;
+ crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4 +f9f9_38;
+ crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;
+ crypto_int64 carry0;
+ crypto_int64 carry1;
+ crypto_int64 carry2;
+ crypto_int64 carry3;
+ crypto_int64 carry4;
+ crypto_int64 carry5;
+ crypto_int64 carry6;
+ crypto_int64 carry7;
+ crypto_int64 carry8;
+ crypto_int64 carry9;
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+
+ carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= SHL64(carry1,25);
+ carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= SHL64(carry5,25);
+
+ carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= SHL64(carry2,26);
+ carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= SHL64(carry6,26);
+
+ carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= SHL64(carry3,25);
+ carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= SHL64(carry7,25);
+
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+ carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= SHL64(carry8,26);
+
+ carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= SHL64(carry9,25);
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+
+ h[0] = (crypto_int32) h0;
+ h[1] = (crypto_int32) h1;
+ h[2] = (crypto_int32) h2;
+ h[3] = (crypto_int32) h3;
+ h[4] = (crypto_int32) h4;
+ h[5] = (crypto_int32) h5;
+ h[6] = (crypto_int32) h6;
+ h[7] = (crypto_int32) h7;
+ h[8] = (crypto_int32) h8;
+ h[9] = (crypto_int32) h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_sq2.c b/src/ext/ed25519/ref10/fe_sq2.c
new file mode 100644
index 0000000000..e8faa69ec9
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_sq2.c
@@ -0,0 +1,160 @@
+#include "fe.h"
+#include "crypto_int64.h"
+
+/*
+h = 2 * f * f
+Can overlap h with f.
+
+Preconditions:
+ |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+
+Postconditions:
+ |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+*/
+
+/*
+See fe_mul.c for discussion of implementation strategy.
+*/
+
+void fe_sq2(fe h,const fe f)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 f0_2 = 2 * f0;
+ crypto_int32 f1_2 = 2 * f1;
+ crypto_int32 f2_2 = 2 * f2;
+ crypto_int32 f3_2 = 2 * f3;
+ crypto_int32 f4_2 = 2 * f4;
+ crypto_int32 f5_2 = 2 * f5;
+ crypto_int32 f6_2 = 2 * f6;
+ crypto_int32 f7_2 = 2 * f7;
+ crypto_int32 f5_38 = 38 * f5; /* 1.959375*2^30 */
+ crypto_int32 f6_19 = 19 * f6; /* 1.959375*2^30 */
+ crypto_int32 f7_38 = 38 * f7; /* 1.959375*2^30 */
+ crypto_int32 f8_19 = 19 * f8; /* 1.959375*2^30 */
+ crypto_int32 f9_38 = 38 * f9; /* 1.959375*2^30 */
+ crypto_int64 f0f0 = f0 * (crypto_int64) f0;
+ crypto_int64 f0f1_2 = f0_2 * (crypto_int64) f1;
+ crypto_int64 f0f2_2 = f0_2 * (crypto_int64) f2;
+ crypto_int64 f0f3_2 = f0_2 * (crypto_int64) f3;
+ crypto_int64 f0f4_2 = f0_2 * (crypto_int64) f4;
+ crypto_int64 f0f5_2 = f0_2 * (crypto_int64) f5;
+ crypto_int64 f0f6_2 = f0_2 * (crypto_int64) f6;
+ crypto_int64 f0f7_2 = f0_2 * (crypto_int64) f7;
+ crypto_int64 f0f8_2 = f0_2 * (crypto_int64) f8;
+ crypto_int64 f0f9_2 = f0_2 * (crypto_int64) f9;
+ crypto_int64 f1f1_2 = f1_2 * (crypto_int64) f1;
+ crypto_int64 f1f2_2 = f1_2 * (crypto_int64) f2;
+ crypto_int64 f1f3_4 = f1_2 * (crypto_int64) f3_2;
+ crypto_int64 f1f4_2 = f1_2 * (crypto_int64) f4;
+ crypto_int64 f1f5_4 = f1_2 * (crypto_int64) f5_2;
+ crypto_int64 f1f6_2 = f1_2 * (crypto_int64) f6;
+ crypto_int64 f1f7_4 = f1_2 * (crypto_int64) f7_2;
+ crypto_int64 f1f8_2 = f1_2 * (crypto_int64) f8;
+ crypto_int64 f1f9_76 = f1_2 * (crypto_int64) f9_38;
+ crypto_int64 f2f2 = f2 * (crypto_int64) f2;
+ crypto_int64 f2f3_2 = f2_2 * (crypto_int64) f3;
+ crypto_int64 f2f4_2 = f2_2 * (crypto_int64) f4;
+ crypto_int64 f2f5_2 = f2_2 * (crypto_int64) f5;
+ crypto_int64 f2f6_2 = f2_2 * (crypto_int64) f6;
+ crypto_int64 f2f7_2 = f2_2 * (crypto_int64) f7;
+ crypto_int64 f2f8_38 = f2_2 * (crypto_int64) f8_19;
+ crypto_int64 f2f9_38 = f2 * (crypto_int64) f9_38;
+ crypto_int64 f3f3_2 = f3_2 * (crypto_int64) f3;
+ crypto_int64 f3f4_2 = f3_2 * (crypto_int64) f4;
+ crypto_int64 f3f5_4 = f3_2 * (crypto_int64) f5_2;
+ crypto_int64 f3f6_2 = f3_2 * (crypto_int64) f6;
+ crypto_int64 f3f7_76 = f3_2 * (crypto_int64) f7_38;
+ crypto_int64 f3f8_38 = f3_2 * (crypto_int64) f8_19;
+ crypto_int64 f3f9_76 = f3_2 * (crypto_int64) f9_38;
+ crypto_int64 f4f4 = f4 * (crypto_int64) f4;
+ crypto_int64 f4f5_2 = f4_2 * (crypto_int64) f5;
+ crypto_int64 f4f6_38 = f4_2 * (crypto_int64) f6_19;
+ crypto_int64 f4f7_38 = f4 * (crypto_int64) f7_38;
+ crypto_int64 f4f8_38 = f4_2 * (crypto_int64) f8_19;
+ crypto_int64 f4f9_38 = f4 * (crypto_int64) f9_38;
+ crypto_int64 f5f5_38 = f5 * (crypto_int64) f5_38;
+ crypto_int64 f5f6_38 = f5_2 * (crypto_int64) f6_19;
+ crypto_int64 f5f7_76 = f5_2 * (crypto_int64) f7_38;
+ crypto_int64 f5f8_38 = f5_2 * (crypto_int64) f8_19;
+ crypto_int64 f5f9_76 = f5_2 * (crypto_int64) f9_38;
+ crypto_int64 f6f6_19 = f6 * (crypto_int64) f6_19;
+ crypto_int64 f6f7_38 = f6 * (crypto_int64) f7_38;
+ crypto_int64 f6f8_38 = f6_2 * (crypto_int64) f8_19;
+ crypto_int64 f6f9_38 = f6 * (crypto_int64) f9_38;
+ crypto_int64 f7f7_38 = f7 * (crypto_int64) f7_38;
+ crypto_int64 f7f8_38 = f7_2 * (crypto_int64) f8_19;
+ crypto_int64 f7f9_76 = f7_2 * (crypto_int64) f9_38;
+ crypto_int64 f8f8_19 = f8 * (crypto_int64) f8_19;
+ crypto_int64 f8f9_38 = f8 * (crypto_int64) f9_38;
+ crypto_int64 f9f9_38 = f9 * (crypto_int64) f9_38;
+ crypto_int64 h0 = f0f0 +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;
+ crypto_int64 h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;
+ crypto_int64 h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;
+ crypto_int64 h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;
+ crypto_int64 h4 = f0f4_2+f1f3_4 +f2f2 +f5f9_76+f6f8_38+f7f7_38;
+ crypto_int64 h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;
+ crypto_int64 h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;
+ crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;
+ crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4 +f9f9_38;
+ crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;
+ crypto_int64 carry0;
+ crypto_int64 carry1;
+ crypto_int64 carry2;
+ crypto_int64 carry3;
+ crypto_int64 carry4;
+ crypto_int64 carry5;
+ crypto_int64 carry6;
+ crypto_int64 carry7;
+ crypto_int64 carry8;
+ crypto_int64 carry9;
+
+ h0 += h0;
+ h1 += h1;
+ h2 += h2;
+ h3 += h3;
+ h4 += h4;
+ h5 += h5;
+ h6 += h6;
+ h7 += h7;
+ h8 += h8;
+ h9 += h9;
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+
+ carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= SHL64(carry1,25);
+ carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= SHL64(carry5,25);
+
+ carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= SHL64(carry2,26);
+ carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= SHL64(carry6,26);
+
+ carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= SHL64(carry3,25);
+ carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= SHL64(carry7,25);
+
+ carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= SHL64(carry4,26);
+ carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= SHL64(carry8,26);
+
+ carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= SHL64(carry9,25);
+
+ carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= SHL64(carry0,26);
+
+ h[0] = (crypto_int32) h0;
+ h[1] = (crypto_int32) h1;
+ h[2] = (crypto_int32) h2;
+ h[3] = (crypto_int32) h3;
+ h[4] = (crypto_int32) h4;
+ h[5] = (crypto_int32) h5;
+ h[6] = (crypto_int32) h6;
+ h[7] = (crypto_int32) h7;
+ h[8] = (crypto_int32) h8;
+ h[9] = (crypto_int32) h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_sub.c b/src/ext/ed25519/ref10/fe_sub.c
new file mode 100644
index 0000000000..6e26b7df8f
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_sub.c
@@ -0,0 +1,57 @@
+#include "fe.h"
+
+/*
+h = f - g
+Can overlap h with f or g.
+
+Preconditions:
+ |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+ |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+
+Postconditions:
+ |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+void fe_sub(fe h,const fe f,const fe g)
+{
+ crypto_int32 f0 = f[0];
+ crypto_int32 f1 = f[1];
+ crypto_int32 f2 = f[2];
+ crypto_int32 f3 = f[3];
+ crypto_int32 f4 = f[4];
+ crypto_int32 f5 = f[5];
+ crypto_int32 f6 = f[6];
+ crypto_int32 f7 = f[7];
+ crypto_int32 f8 = f[8];
+ crypto_int32 f9 = f[9];
+ crypto_int32 g0 = g[0];
+ crypto_int32 g1 = g[1];
+ crypto_int32 g2 = g[2];
+ crypto_int32 g3 = g[3];
+ crypto_int32 g4 = g[4];
+ crypto_int32 g5 = g[5];
+ crypto_int32 g6 = g[6];
+ crypto_int32 g7 = g[7];
+ crypto_int32 g8 = g[8];
+ crypto_int32 g9 = g[9];
+ crypto_int32 h0 = f0 - g0;
+ crypto_int32 h1 = f1 - g1;
+ crypto_int32 h2 = f2 - g2;
+ crypto_int32 h3 = f3 - g3;
+ crypto_int32 h4 = f4 - g4;
+ crypto_int32 h5 = f5 - g5;
+ crypto_int32 h6 = f6 - g6;
+ crypto_int32 h7 = f7 - g7;
+ crypto_int32 h8 = f8 - g8;
+ crypto_int32 h9 = f9 - g9;
+ h[0] = h0;
+ h[1] = h1;
+ h[2] = h2;
+ h[3] = h3;
+ h[4] = h4;
+ h[5] = h5;
+ h[6] = h6;
+ h[7] = h7;
+ h[8] = h8;
+ h[9] = h9;
+}
diff --git a/src/ext/ed25519/ref10/fe_tobytes.c b/src/ext/ed25519/ref10/fe_tobytes.c
new file mode 100644
index 0000000000..3c7f389622
--- /dev/null
+++ b/src/ext/ed25519/ref10/fe_tobytes.c
@@ -0,0 +1,119 @@
+#include "fe.h"
+
+/*
+Preconditions:
+ |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+
+Write p=2^255-19; q=floor(h/p).
+Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).
+
+Proof:
+ Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.
+ Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4.
+
+ Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).
+ Then 0<y<1.
+
+ Write r=h-pq.
+ Have 0<=r<=p-1=2^255-20.
+ Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.
+
+ Write x=r+19(2^-255)r+y.
+ Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.
+
+ Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))
+ so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.
+*/
+
+void fe_tobytes(unsigned char *s,const fe h)
+{
+ crypto_int32 h0 = h[0];
+ crypto_int32 h1 = h[1];
+ crypto_int32 h2 = h[2];
+ crypto_int32 h3 = h[3];
+ crypto_int32 h4 = h[4];
+ crypto_int32 h5 = h[5];
+ crypto_int32 h6 = h[6];
+ crypto_int32 h7 = h[7];
+ crypto_int32 h8 = h[8];
+ crypto_int32 h9 = h[9];
+ crypto_int32 q;
+ crypto_int32 carry0;
+ crypto_int32 carry1;
+ crypto_int32 carry2;
+ crypto_int32 carry3;
+ crypto_int32 carry4;
+ crypto_int32 carry5;
+ crypto_int32 carry6;
+ crypto_int32 carry7;
+ crypto_int32 carry8;
+ crypto_int32 carry9;
+
+ q = (19 * h9 + (((crypto_int32) 1) << 24)) >> 25;
+ q = (h0 + q) >> 26;
+ q = (h1 + q) >> 25;
+ q = (h2 + q) >> 26;
+ q = (h3 + q) >> 25;
+ q = (h4 + q) >> 26;
+ q = (h5 + q) >> 25;
+ q = (h6 + q) >> 26;
+ q = (h7 + q) >> 25;
+ q = (h8 + q) >> 26;
+ q = (h9 + q) >> 25;
+
+ /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */
+ h0 += 19 * q;
+ /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */
+
+ carry0 = h0 >> 26; h1 += carry0; h0 -= SHL32(carry0,26);
+ carry1 = h1 >> 25; h2 += carry1; h1 -= SHL32(carry1,25);
+ carry2 = h2 >> 26; h3 += carry2; h2 -= SHL32(carry2,26);
+ carry3 = h3 >> 25; h4 += carry3; h3 -= SHL32(carry3,25);
+ carry4 = h4 >> 26; h5 += carry4; h4 -= SHL32(carry4,26);
+ carry5 = h5 >> 25; h6 += carry5; h5 -= SHL32(carry5,25);
+ carry6 = h6 >> 26; h7 += carry6; h6 -= SHL32(carry6,26);
+ carry7 = h7 >> 25; h8 += carry7; h7 -= SHL32(carry7,25);
+ carry8 = h8 >> 26; h9 += carry8; h8 -= SHL32(carry8,26);
+ carry9 = h9 >> 25; h9 -= SHL32(carry9,25);
+ /* h10 = carry9 */
+
+ /*
+ Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
+ Have h0+...+2^230 h9 between 0 and 2^255-1;
+ evidently 2^255 h10-2^255 q = 0.
+ Goal: Output h0+...+2^230 h9.
+ */
+
+ s[0] = h0 >> 0;
+ s[1] = h0 >> 8;
+ s[2] = h0 >> 16;
+ s[3] = (h0 >> 24) | SHL32(h1,2);
+ s[4] = h1 >> 6;
+ s[5] = h1 >> 14;
+ s[6] = (h1 >> 22) | SHL32(h2,3);
+ s[7] = h2 >> 5;
+ s[8] = h2 >> 13;
+ s[9] = (h2 >> 21) | SHL32(h3,5);
+ s[10] = h3 >> 3;
+ s[11] = h3 >> 11;
+ s[12] = (h3 >> 19) | SHL32(h4,6);
+ s[13] = h4 >> 2;
+ s[14] = h4 >> 10;
+ s[15] = h4 >> 18;
+ s[16] = h5 >> 0;
+ s[17] = h5 >> 8;
+ s[18] = h5 >> 16;
+ s[19] = (h5 >> 24) | SHL32(h6,1);
+ s[20] = h6 >> 7;
+ s[21] = h6 >> 15;
+ s[22] = (h6 >> 23) | SHL32(h7,3);
+ s[23] = h7 >> 5;
+ s[24] = h7 >> 13;
+ s[25] = (h7 >> 21) | SHL32(h8,4);
+ s[26] = h8 >> 4;
+ s[27] = h8 >> 12;
+ s[28] = (h8 >> 20) | SHL32(h9,6);
+ s[29] = h9 >> 2;
+ s[30] = h9 >> 10;
+ s[31] = h9 >> 18;
+}
diff --git a/src/ext/ed25519/ref10/ge.h b/src/ext/ed25519/ref10/ge.h
new file mode 100644
index 0000000000..55e95f95b6
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge.h
@@ -0,0 +1,95 @@
+#ifndef GE_H
+#define GE_H
+
+/*
+ge means group element.
+
+Here the group is the set of pairs (x,y) of field elements (see fe.h)
+satisfying -x^2 + y^2 = 1 + d x^2y^2
+where d = -121665/121666.
+
+Representations:
+ ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z
+ ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT
+ ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T
+ ge_precomp (Duif): (y+x,y-x,2dxy)
+*/
+
+#include "fe.h"
+
+typedef struct {
+ fe X;
+ fe Y;
+ fe Z;
+} ge_p2;
+
+typedef struct {
+ fe X;
+ fe Y;
+ fe Z;
+ fe T;
+} ge_p3;
+
+typedef struct {
+ fe X;
+ fe Y;
+ fe Z;
+ fe T;
+} ge_p1p1;
+
+typedef struct {
+ fe yplusx;
+ fe yminusx;
+ fe xy2d;
+} ge_precomp;
+
+typedef struct {
+ fe YplusX;
+ fe YminusX;
+ fe Z;
+ fe T2d;
+} ge_cached;
+
+#define ge_frombytes_negate_vartime crypto_sign_ed25519_ref10_ge_frombytes_negate_vartime
+#define ge_tobytes crypto_sign_ed25519_ref10_ge_tobytes
+#define ge_p3_tobytes crypto_sign_ed25519_ref10_ge_p3_tobytes
+
+#define ge_p2_0 crypto_sign_ed25519_ref10_ge_p2_0
+#define ge_p3_0 crypto_sign_ed25519_ref10_ge_p3_0
+#define ge_precomp_0 crypto_sign_ed25519_ref10_ge_precomp_0
+#define ge_p3_to_p2 crypto_sign_ed25519_ref10_ge_p3_to_p2
+#define ge_p3_to_cached crypto_sign_ed25519_ref10_ge_p3_to_cached
+#define ge_p1p1_to_p2 crypto_sign_ed25519_ref10_ge_p1p1_to_p2
+#define ge_p1p1_to_p3 crypto_sign_ed25519_ref10_ge_p1p1_to_p3
+#define ge_p2_dbl crypto_sign_ed25519_ref10_ge_p2_dbl
+#define ge_p3_dbl crypto_sign_ed25519_ref10_ge_p3_dbl
+
+#define ge_madd crypto_sign_ed25519_ref10_ge_madd
+#define ge_msub crypto_sign_ed25519_ref10_ge_msub
+#define ge_add crypto_sign_ed25519_ref10_ge_add
+#define ge_sub crypto_sign_ed25519_ref10_ge_sub
+#define ge_scalarmult_base crypto_sign_ed25519_ref10_ge_scalarmult_base
+#define ge_double_scalarmult_vartime crypto_sign_ed25519_ref10_ge_double_scalarmult_vartime
+
+extern void ge_tobytes(unsigned char *,const ge_p2 *);
+extern void ge_p3_tobytes(unsigned char *,const ge_p3 *);
+extern int ge_frombytes_negate_vartime(ge_p3 *,const unsigned char *);
+
+extern void ge_p2_0(ge_p2 *);
+extern void ge_p3_0(ge_p3 *);
+extern void ge_precomp_0(ge_precomp *);
+extern void ge_p3_to_p2(ge_p2 *,const ge_p3 *);
+extern void ge_p3_to_cached(ge_cached *,const ge_p3 *);
+extern void ge_p1p1_to_p2(ge_p2 *,const ge_p1p1 *);
+extern void ge_p1p1_to_p3(ge_p3 *,const ge_p1p1 *);
+extern void ge_p2_dbl(ge_p1p1 *,const ge_p2 *);
+extern void ge_p3_dbl(ge_p1p1 *,const ge_p3 *);
+
+extern void ge_madd(ge_p1p1 *,const ge_p3 *,const ge_precomp *);
+extern void ge_msub(ge_p1p1 *,const ge_p3 *,const ge_precomp *);
+extern void ge_add(ge_p1p1 *,const ge_p3 *,const ge_cached *);
+extern void ge_sub(ge_p1p1 *,const ge_p3 *,const ge_cached *);
+extern void ge_scalarmult_base(ge_p3 *,const unsigned char *);
+extern void ge_double_scalarmult_vartime(ge_p2 *,const unsigned char *,const ge_p3 *,const unsigned char *);
+
+#endif
diff --git a/src/ext/ed25519/ref10/ge_add.c b/src/ext/ed25519/ref10/ge_add.c
new file mode 100644
index 0000000000..da7ff5d2eb
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_add.c
@@ -0,0 +1,11 @@
+#include "ge.h"
+
+/*
+r = p + q
+*/
+
+void ge_add(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)
+{
+ fe t0;
+#include "ge_add.h"
+}
diff --git a/src/ext/ed25519/ref10/ge_add.h b/src/ext/ed25519/ref10/ge_add.h
new file mode 100644
index 0000000000..7481f8ffbe
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_add.h
@@ -0,0 +1,97 @@
+
+/* qhasm: enter ge_add */
+
+/* qhasm: fe X1 */
+
+/* qhasm: fe Y1 */
+
+/* qhasm: fe Z1 */
+
+/* qhasm: fe Z2 */
+
+/* qhasm: fe T1 */
+
+/* qhasm: fe ZZ */
+
+/* qhasm: fe YpX2 */
+
+/* qhasm: fe YmX2 */
+
+/* qhasm: fe T2d2 */
+
+/* qhasm: fe X3 */
+
+/* qhasm: fe Y3 */
+
+/* qhasm: fe Z3 */
+
+/* qhasm: fe T3 */
+
+/* qhasm: fe YpX1 */
+
+/* qhasm: fe YmX1 */
+
+/* qhasm: fe A */
+
+/* qhasm: fe B */
+
+/* qhasm: fe C */
+
+/* qhasm: fe D */
+
+/* qhasm: YpX1 = Y1+X1 */
+/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
+fe_add(r->X,p->Y,p->X);
+
+/* qhasm: YmX1 = Y1-X1 */
+/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
+fe_sub(r->Y,p->Y,p->X);
+
+/* qhasm: A = YpX1*YpX2 */
+/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YpX2=fe#15); */
+/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YpX2=q->YplusX); */
+fe_mul(r->Z,r->X,q->YplusX);
+
+/* qhasm: B = YmX1*YmX2 */
+/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YmX2=fe#16); */
+/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YmX2=q->YminusX); */
+fe_mul(r->Y,r->Y,q->YminusX);
+
+/* qhasm: C = T2d2*T1 */
+/* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */
+/* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */
+fe_mul(r->T,q->T2d,p->T);
+
+/* qhasm: ZZ = Z1*Z2 */
+/* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */
+/* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */
+fe_mul(r->X,p->Z,q->Z);
+
+/* qhasm: D = 2*ZZ */
+/* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */
+/* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */
+fe_add(t0,r->X,r->X);
+
+/* qhasm: X3 = A-B */
+/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
+fe_sub(r->X,r->Z,r->Y);
+
+/* qhasm: Y3 = A+B */
+/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
+fe_add(r->Y,r->Z,r->Y);
+
+/* qhasm: Z3 = D+C */
+/* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */
+fe_add(r->Z,t0,r->T);
+
+/* qhasm: T3 = D-C */
+/* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */
+fe_sub(r->T,t0,r->T);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/ge_add.q b/src/ext/ed25519/ref10/ge_add.q
new file mode 100644
index 0000000000..a6572ab0f8
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_add.q
@@ -0,0 +1,49 @@
+:name:fe:r->X:r->Y:r->Z:r->T:t0:t1:t2:t3:t4:t5:p->X:p->Y:p->Z:p->T:q->YplusX:q->YminusX:q->Z:q->T2d:
+fe r:var/r=fe:
+
+enter f:enter/f:>X1=fe#11:>Y1=fe#12:>Z1=fe#13:>T1=fe#14:>YpX2=fe#15:>YmX2=fe#16:>Z2=fe#17:>T2d2=fe#18:
+return:nofallthrough:<X3=fe#1:<Y3=fe#2:<Z3=fe#3:<T3=fe#4:leave:
+
+h=f+g:<f=fe:<g=fe:>h=fe:asm/fe_add(>h,<f,<g);:
+h=f-g:<f=fe:<g=fe:>h=fe:asm/fe_sub(>h,<f,<g);:
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2:<f=fe:>h=fe:asm/fe_sq(>h,<f);:
+h=2*g:<g=fe:>h=fe:asm/fe_add(>h,<g,<g);:
+
+:
+
+enter ge_add
+
+fe X1
+fe Y1
+fe Z1
+fe Z2
+fe T1
+fe ZZ
+fe YpX2
+fe YmX2
+fe T2d2
+fe X3
+fe Y3
+fe Z3
+fe T3
+fe YpX1
+fe YmX1
+fe A
+fe B
+fe C
+fe D
+
+YpX1 = Y1+X1
+YmX1 = Y1-X1
+A = YpX1*YpX2
+B = YmX1*YmX2
+C = T2d2*T1
+ZZ = Z1*Z2
+D = 2*ZZ
+X3 = A-B
+Y3 = A+B
+Z3 = D+C
+T3 = D-C
+
+return
diff --git a/src/ext/ed25519/ref10/ge_double_scalarmult.c b/src/ext/ed25519/ref10/ge_double_scalarmult.c
new file mode 100644
index 0000000000..f8bf4bf775
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_double_scalarmult.c
@@ -0,0 +1,96 @@
+#include "ge.h"
+
+static void slide(signed char *r,const unsigned char *a)
+{
+ int i;
+ int b;
+ int k;
+
+ for (i = 0;i < 256;++i)
+ r[i] = 1 & (a[i >> 3] >> (i & 7));
+
+ for (i = 0;i < 256;++i)
+ if (r[i]) {
+ for (b = 1;b <= 6 && i + b < 256;++b) {
+ if (r[i + b]) {
+ if (r[i] + (r[i + b] << b) <= 15) {
+ r[i] += r[i + b] << b; r[i + b] = 0;
+ } else if (r[i] - (r[i + b] << b) >= -15) {
+ r[i] -= r[i + b] << b;
+ for (k = i + b;k < 256;++k) {
+ if (!r[k]) {
+ r[k] = 1;
+ break;
+ }
+ r[k] = 0;
+ }
+ } else
+ break;
+ }
+ }
+ }
+
+}
+
+static ge_precomp Bi[8] = {
+#include "base2.h"
+} ;
+
+/*
+r = a * A + b * B
+where a = a[0]+256*a[1]+...+256^31 a[31].
+and b = b[0]+256*b[1]+...+256^31 b[31].
+B is the Ed25519 base point (x,4/5) with x positive.
+*/
+
+void ge_double_scalarmult_vartime(ge_p2 *r,const unsigned char *a,const ge_p3 *A,const unsigned char *b)
+{
+ signed char aslide[256];
+ signed char bslide[256];
+ ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */
+ ge_p1p1 t;
+ ge_p3 u;
+ ge_p3 A2;
+ int i;
+
+ slide(aslide,a);
+ slide(bslide,b);
+
+ ge_p3_to_cached(&Ai[0],A);
+ ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);
+ ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);
+ ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);
+ ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);
+ ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);
+ ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);
+ ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);
+ ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);
+
+ ge_p2_0(r);
+
+ for (i = 255;i >= 0;--i) {
+ if (aslide[i] || bslide[i]) break;
+ }
+
+ for (;i >= 0;--i) {
+ ge_p2_dbl(&t,r);
+
+ if (aslide[i] > 0) {
+ ge_p1p1_to_p3(&u,&t);
+ ge_add(&t,&u,&Ai[aslide[i]/2]);
+ } else if (aslide[i] < 0) {
+ ge_p1p1_to_p3(&u,&t);
+ ge_sub(&t,&u,&Ai[(-aslide[i])/2]);
+ }
+
+ if (bslide[i] > 0) {
+ ge_p1p1_to_p3(&u,&t);
+ ge_madd(&t,&u,&Bi[bslide[i]/2]);
+ } else if (bslide[i] < 0) {
+ ge_p1p1_to_p3(&u,&t);
+ ge_msub(&t,&u,&Bi[(-bslide[i])/2]);
+ }
+
+ ge_p1p1_to_p2(r,&t);
+ }
+}
diff --git a/src/ext/ed25519/ref10/ge_frombytes.c b/src/ext/ed25519/ref10/ge_frombytes.c
new file mode 100644
index 0000000000..1a059ee93f
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_frombytes.c
@@ -0,0 +1,50 @@
+#include "ge.h"
+
+static const fe d = {
+#include "d.h"
+} ;
+
+static const fe sqrtm1 = {
+#include "sqrtm1.h"
+} ;
+
+int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s)
+{
+ fe u;
+ fe v;
+ fe v3;
+ fe vxx;
+ fe check;
+
+ fe_frombytes(h->Y,s);
+ fe_1(h->Z);
+ fe_sq(u,h->Y);
+ fe_mul(v,u,d);
+ fe_sub(u,u,h->Z); /* u = y^2-1 */
+ fe_add(v,v,h->Z); /* v = dy^2+1 */
+
+ fe_sq(v3,v);
+ fe_mul(v3,v3,v); /* v3 = v^3 */
+ fe_sq(h->X,v3);
+ fe_mul(h->X,h->X,v);
+ fe_mul(h->X,h->X,u); /* x = uv^7 */
+
+ fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
+ fe_mul(h->X,h->X,v3);
+ fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */
+
+ fe_sq(vxx,h->X);
+ fe_mul(vxx,vxx,v);
+ fe_sub(check,vxx,u); /* vx^2-u */
+ if (fe_isnonzero(check)) {
+ fe_add(check,vxx,u); /* vx^2+u */
+ if (fe_isnonzero(check)) return -1;
+ fe_mul(h->X,h->X,sqrtm1);
+ }
+
+ if (fe_isnegative(h->X) == (s[31] >> 7))
+ fe_neg(h->X,h->X);
+
+ fe_mul(h->T,h->X,h->Y);
+ return 0;
+}
diff --git a/src/ext/ed25519/ref10/ge_madd.c b/src/ext/ed25519/ref10/ge_madd.c
new file mode 100644
index 0000000000..622571774b
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_madd.c
@@ -0,0 +1,11 @@
+#include "ge.h"
+
+/*
+r = p + q
+*/
+
+void ge_madd(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)
+{
+ fe t0;
+#include "ge_madd.h"
+}
diff --git a/src/ext/ed25519/ref10/ge_madd.h b/src/ext/ed25519/ref10/ge_madd.h
new file mode 100644
index 0000000000..ecae84952b
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_madd.h
@@ -0,0 +1,88 @@
+
+/* qhasm: enter ge_madd */
+
+/* qhasm: fe X1 */
+
+/* qhasm: fe Y1 */
+
+/* qhasm: fe Z1 */
+
+/* qhasm: fe T1 */
+
+/* qhasm: fe ypx2 */
+
+/* qhasm: fe ymx2 */
+
+/* qhasm: fe xy2d2 */
+
+/* qhasm: fe X3 */
+
+/* qhasm: fe Y3 */
+
+/* qhasm: fe Z3 */
+
+/* qhasm: fe T3 */
+
+/* qhasm: fe YpX1 */
+
+/* qhasm: fe YmX1 */
+
+/* qhasm: fe A */
+
+/* qhasm: fe B */
+
+/* qhasm: fe C */
+
+/* qhasm: fe D */
+
+/* qhasm: YpX1 = Y1+X1 */
+/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
+fe_add(r->X,p->Y,p->X);
+
+/* qhasm: YmX1 = Y1-X1 */
+/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
+fe_sub(r->Y,p->Y,p->X);
+
+/* qhasm: A = YpX1*ypx2 */
+/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ypx2=fe#15); */
+/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ypx2=q->yplusx); */
+fe_mul(r->Z,r->X,q->yplusx);
+
+/* qhasm: B = YmX1*ymx2 */
+/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ymx2=fe#16); */
+/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ymx2=q->yminusx); */
+fe_mul(r->Y,r->Y,q->yminusx);
+
+/* qhasm: C = xy2d2*T1 */
+/* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */
+/* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */
+fe_mul(r->T,q->xy2d,p->T);
+
+/* qhasm: D = 2*Z1 */
+/* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */
+/* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */
+fe_add(t0,p->Z,p->Z);
+
+/* qhasm: X3 = A-B */
+/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
+fe_sub(r->X,r->Z,r->Y);
+
+/* qhasm: Y3 = A+B */
+/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
+fe_add(r->Y,r->Z,r->Y);
+
+/* qhasm: Z3 = D+C */
+/* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */
+fe_add(r->Z,t0,r->T);
+
+/* qhasm: T3 = D-C */
+/* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */
+fe_sub(r->T,t0,r->T);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/ge_madd.q b/src/ext/ed25519/ref10/ge_madd.q
new file mode 100644
index 0000000000..aa3db454e6
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_madd.q
@@ -0,0 +1,46 @@
+:name:fe:r->X:r->Y:r->Z:r->T:t0:t1:t2:t3:t4:t5:p->X:p->Y:p->Z:p->T:q->yplusx:q->yminusx:q->xy2d:
+fe r:var/r=fe:
+
+enter f:enter/f:>X1=fe#11:>Y1=fe#12:>Z1=fe#13:>T1=fe#14:>ypx2=fe#15:>ymx2=fe#16:>xy2d2=fe#17:
+return:nofallthrough:<X3=fe#1:<Y3=fe#2:<Z3=fe#3:<T3=fe#4:leave:
+
+h=f+g:<f=fe:<g=fe:>h=fe:asm/fe_add(>h,<f,<g);:
+h=f-g:<f=fe:<g=fe:>h=fe:asm/fe_sub(>h,<f,<g);:
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2:<f=fe:>h=fe:asm/fe_sq(>h,<f);:
+h=2*g:<g=fe:>h=fe:asm/fe_add(>h,<g,<g);:
+
+:
+
+enter ge_madd
+
+fe X1
+fe Y1
+fe Z1
+fe T1
+fe ypx2
+fe ymx2
+fe xy2d2
+fe X3
+fe Y3
+fe Z3
+fe T3
+fe YpX1
+fe YmX1
+fe A
+fe B
+fe C
+fe D
+
+YpX1 = Y1+X1
+YmX1 = Y1-X1
+A = YpX1*ypx2
+B = YmX1*ymx2
+C = xy2d2*T1
+D = 2*Z1
+X3 = A-B
+Y3 = A+B
+Z3 = D+C
+T3 = D-C
+
+return
diff --git a/src/ext/ed25519/ref10/ge_msub.c b/src/ext/ed25519/ref10/ge_msub.c
new file mode 100644
index 0000000000..741ecbf113
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_msub.c
@@ -0,0 +1,11 @@
+#include "ge.h"
+
+/*
+r = p - q
+*/
+
+void ge_msub(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)
+{
+ fe t0;
+#include "ge_msub.h"
+}
diff --git a/src/ext/ed25519/ref10/ge_msub.h b/src/ext/ed25519/ref10/ge_msub.h
new file mode 100644
index 0000000000..500f986ba0
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_msub.h
@@ -0,0 +1,88 @@
+
+/* qhasm: enter ge_msub */
+
+/* qhasm: fe X1 */
+
+/* qhasm: fe Y1 */
+
+/* qhasm: fe Z1 */
+
+/* qhasm: fe T1 */
+
+/* qhasm: fe ypx2 */
+
+/* qhasm: fe ymx2 */
+
+/* qhasm: fe xy2d2 */
+
+/* qhasm: fe X3 */
+
+/* qhasm: fe Y3 */
+
+/* qhasm: fe Z3 */
+
+/* qhasm: fe T3 */
+
+/* qhasm: fe YpX1 */
+
+/* qhasm: fe YmX1 */
+
+/* qhasm: fe A */
+
+/* qhasm: fe B */
+
+/* qhasm: fe C */
+
+/* qhasm: fe D */
+
+/* qhasm: YpX1 = Y1+X1 */
+/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
+fe_add(r->X,p->Y,p->X);
+
+/* qhasm: YmX1 = Y1-X1 */
+/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
+fe_sub(r->Y,p->Y,p->X);
+
+/* qhasm: A = YpX1*ymx2 */
+/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ymx2=fe#16); */
+/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ymx2=q->yminusx); */
+fe_mul(r->Z,r->X,q->yminusx);
+
+/* qhasm: B = YmX1*ypx2 */
+/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ypx2=fe#15); */
+/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ypx2=q->yplusx); */
+fe_mul(r->Y,r->Y,q->yplusx);
+
+/* qhasm: C = xy2d2*T1 */
+/* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */
+/* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */
+fe_mul(r->T,q->xy2d,p->T);
+
+/* qhasm: D = 2*Z1 */
+/* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */
+/* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */
+fe_add(t0,p->Z,p->Z);
+
+/* qhasm: X3 = A-B */
+/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
+fe_sub(r->X,r->Z,r->Y);
+
+/* qhasm: Y3 = A+B */
+/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
+fe_add(r->Y,r->Z,r->Y);
+
+/* qhasm: Z3 = D-C */
+/* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */
+fe_sub(r->Z,t0,r->T);
+
+/* qhasm: T3 = D+C */
+/* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */
+fe_add(r->T,t0,r->T);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/ge_msub.q b/src/ext/ed25519/ref10/ge_msub.q
new file mode 100644
index 0000000000..e3cadd882d
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_msub.q
@@ -0,0 +1,46 @@
+:name:fe:r->X:r->Y:r->Z:r->T:t0:t1:t2:t3:t4:t5:p->X:p->Y:p->Z:p->T:q->yplusx:q->yminusx:q->xy2d:
+fe r:var/r=fe:
+
+enter f:enter/f:>X1=fe#11:>Y1=fe#12:>Z1=fe#13:>T1=fe#14:>ypx2=fe#15:>ymx2=fe#16:>xy2d2=fe#17:
+return:nofallthrough:<X3=fe#1:<Y3=fe#2:<Z3=fe#3:<T3=fe#4:leave:
+
+h=f+g:<f=fe:<g=fe:>h=fe:asm/fe_add(>h,<f,<g);:
+h=f-g:<f=fe:<g=fe:>h=fe:asm/fe_sub(>h,<f,<g);:
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2:<f=fe:>h=fe:asm/fe_sq(>h,<f);:
+h=2*g:<g=fe:>h=fe:asm/fe_add(>h,<g,<g);:
+
+:
+
+enter ge_msub
+
+fe X1
+fe Y1
+fe Z1
+fe T1
+fe ypx2
+fe ymx2
+fe xy2d2
+fe X3
+fe Y3
+fe Z3
+fe T3
+fe YpX1
+fe YmX1
+fe A
+fe B
+fe C
+fe D
+
+YpX1 = Y1+X1
+YmX1 = Y1-X1
+A = YpX1*ymx2
+B = YmX1*ypx2
+C = xy2d2*T1
+D = 2*Z1
+X3 = A-B
+Y3 = A+B
+Z3 = D-C
+T3 = D+C
+
+return
diff --git a/src/ext/ed25519/ref10/ge_p1p1_to_p2.c b/src/ext/ed25519/ref10/ge_p1p1_to_p2.c
new file mode 100644
index 0000000000..9bb5013d66
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p1p1_to_p2.c
@@ -0,0 +1,12 @@
+#include "ge.h"
+
+/*
+r = p
+*/
+
+extern void ge_p1p1_to_p2(ge_p2 *r,const ge_p1p1 *p)
+{
+ fe_mul(r->X,p->X,p->T);
+ fe_mul(r->Y,p->Y,p->Z);
+ fe_mul(r->Z,p->Z,p->T);
+}
diff --git a/src/ext/ed25519/ref10/ge_p1p1_to_p3.c b/src/ext/ed25519/ref10/ge_p1p1_to_p3.c
new file mode 100644
index 0000000000..2f57b10968
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p1p1_to_p3.c
@@ -0,0 +1,13 @@
+#include "ge.h"
+
+/*
+r = p
+*/
+
+extern void ge_p1p1_to_p3(ge_p3 *r,const ge_p1p1 *p)
+{
+ fe_mul(r->X,p->X,p->T);
+ fe_mul(r->Y,p->Y,p->Z);
+ fe_mul(r->Z,p->Z,p->T);
+ fe_mul(r->T,p->X,p->Y);
+}
diff --git a/src/ext/ed25519/ref10/ge_p2_0.c b/src/ext/ed25519/ref10/ge_p2_0.c
new file mode 100644
index 0000000000..6191d1e6e4
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p2_0.c
@@ -0,0 +1,8 @@
+#include "ge.h"
+
+void ge_p2_0(ge_p2 *h)
+{
+ fe_0(h->X);
+ fe_1(h->Y);
+ fe_1(h->Z);
+}
diff --git a/src/ext/ed25519/ref10/ge_p2_dbl.c b/src/ext/ed25519/ref10/ge_p2_dbl.c
new file mode 100644
index 0000000000..2e332b5cee
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p2_dbl.c
@@ -0,0 +1,11 @@
+#include "ge.h"
+
+/*
+r = 2 * p
+*/
+
+void ge_p2_dbl(ge_p1p1 *r,const ge_p2 *p)
+{
+ fe t0;
+#include "ge_p2_dbl.h"
+}
diff --git a/src/ext/ed25519/ref10/ge_p2_dbl.h b/src/ext/ed25519/ref10/ge_p2_dbl.h
new file mode 100644
index 0000000000..128efed907
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p2_dbl.h
@@ -0,0 +1,73 @@
+
+/* qhasm: enter ge_p2_dbl */
+
+/* qhasm: fe X1 */
+
+/* qhasm: fe Y1 */
+
+/* qhasm: fe Z1 */
+
+/* qhasm: fe A */
+
+/* qhasm: fe AA */
+
+/* qhasm: fe XX */
+
+/* qhasm: fe YY */
+
+/* qhasm: fe B */
+
+/* qhasm: fe X3 */
+
+/* qhasm: fe Y3 */
+
+/* qhasm: fe Z3 */
+
+/* qhasm: fe T3 */
+
+/* qhasm: XX=X1^2 */
+/* asm 1: fe_sq(>XX=fe#1,<X1=fe#11); */
+/* asm 2: fe_sq(>XX=r->X,<X1=p->X); */
+fe_sq(r->X,p->X);
+
+/* qhasm: YY=Y1^2 */
+/* asm 1: fe_sq(>YY=fe#3,<Y1=fe#12); */
+/* asm 2: fe_sq(>YY=r->Z,<Y1=p->Y); */
+fe_sq(r->Z,p->Y);
+
+/* qhasm: B=2*Z1^2 */
+/* asm 1: fe_sq2(>B=fe#4,<Z1=fe#13); */
+/* asm 2: fe_sq2(>B=r->T,<Z1=p->Z); */
+fe_sq2(r->T,p->Z);
+
+/* qhasm: A=X1+Y1 */
+/* asm 1: fe_add(>A=fe#2,<X1=fe#11,<Y1=fe#12); */
+/* asm 2: fe_add(>A=r->Y,<X1=p->X,<Y1=p->Y); */
+fe_add(r->Y,p->X,p->Y);
+
+/* qhasm: AA=A^2 */
+/* asm 1: fe_sq(>AA=fe#5,<A=fe#2); */
+/* asm 2: fe_sq(>AA=t0,<A=r->Y); */
+fe_sq(t0,r->Y);
+
+/* qhasm: Y3=YY+XX */
+/* asm 1: fe_add(>Y3=fe#2,<YY=fe#3,<XX=fe#1); */
+/* asm 2: fe_add(>Y3=r->Y,<YY=r->Z,<XX=r->X); */
+fe_add(r->Y,r->Z,r->X);
+
+/* qhasm: Z3=YY-XX */
+/* asm 1: fe_sub(>Z3=fe#3,<YY=fe#3,<XX=fe#1); */
+/* asm 2: fe_sub(>Z3=r->Z,<YY=r->Z,<XX=r->X); */
+fe_sub(r->Z,r->Z,r->X);
+
+/* qhasm: X3=AA-Y3 */
+/* asm 1: fe_sub(>X3=fe#1,<AA=fe#5,<Y3=fe#2); */
+/* asm 2: fe_sub(>X3=r->X,<AA=t0,<Y3=r->Y); */
+fe_sub(r->X,t0,r->Y);
+
+/* qhasm: T3=B-Z3 */
+/* asm 1: fe_sub(>T3=fe#4,<B=fe#4,<Z3=fe#3); */
+/* asm 2: fe_sub(>T3=r->T,<B=r->T,<Z3=r->Z); */
+fe_sub(r->T,r->T,r->Z);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/ge_p2_dbl.q b/src/ext/ed25519/ref10/ge_p2_dbl.q
new file mode 100644
index 0000000000..170d42f9a7
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p2_dbl.q
@@ -0,0 +1,41 @@
+:name:fe:r->X:r->Y:r->Z:r->T:t0:t1:t2:t3:t4:t5:p->X:p->Y:p->Z:
+fe r:var/r=fe:
+
+enter f:enter/f:>X1=fe#11:>Y1=fe#12:>Z1=fe#13:
+return:nofallthrough:<X3=fe#1:<Y3=fe#2:<Z3=fe#3:<T3=fe#4:leave:
+
+h=f+g:<f=fe:<g=fe:>h=fe:asm/fe_add(>h,<f,<g);:
+h=f-g:<f=fe:<g=fe:>h=fe:asm/fe_sub(>h,<f,<g);:
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2:<f=fe:>h=fe:asm/fe_sq(>h,<f);:
+h=2*f^2:<f=fe:>h=fe:asm/fe_sq2(>h,<f);:
+h=2*g:<g=fe:>h=fe:asm/fe_add(>h,<g,<g);:
+
+:
+
+enter ge_p2_dbl
+
+fe X1
+fe Y1
+fe Z1
+fe A
+fe AA
+fe XX
+fe YY
+fe B
+fe X3
+fe Y3
+fe Z3
+fe T3
+
+XX=X1^2
+YY=Y1^2
+B=2*Z1^2
+A=X1+Y1
+AA=A^2
+Y3=YY+XX
+Z3=YY-XX
+X3=AA-Y3
+T3=B-Z3
+
+return
diff --git a/src/ext/ed25519/ref10/ge_p3_0.c b/src/ext/ed25519/ref10/ge_p3_0.c
new file mode 100644
index 0000000000..401b2935a1
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p3_0.c
@@ -0,0 +1,9 @@
+#include "ge.h"
+
+void ge_p3_0(ge_p3 *h)
+{
+ fe_0(h->X);
+ fe_1(h->Y);
+ fe_1(h->Z);
+ fe_0(h->T);
+}
diff --git a/src/ext/ed25519/ref10/ge_p3_dbl.c b/src/ext/ed25519/ref10/ge_p3_dbl.c
new file mode 100644
index 0000000000..0d8a05915d
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p3_dbl.c
@@ -0,0 +1,12 @@
+#include "ge.h"
+
+/*
+r = 2 * p
+*/
+
+void ge_p3_dbl(ge_p1p1 *r,const ge_p3 *p)
+{
+ ge_p2 q;
+ ge_p3_to_p2(&q,p);
+ ge_p2_dbl(r,&q);
+}
diff --git a/src/ext/ed25519/ref10/ge_p3_to_cached.c b/src/ext/ed25519/ref10/ge_p3_to_cached.c
new file mode 100644
index 0000000000..bde64228cf
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p3_to_cached.c
@@ -0,0 +1,17 @@
+#include "ge.h"
+
+/*
+r = p
+*/
+
+static const fe d2 = {
+#include "d2.h"
+} ;
+
+extern void ge_p3_to_cached(ge_cached *r,const ge_p3 *p)
+{
+ fe_add(r->YplusX,p->Y,p->X);
+ fe_sub(r->YminusX,p->Y,p->X);
+ fe_copy(r->Z,p->Z);
+ fe_mul(r->T2d,p->T,d2);
+}
diff --git a/src/ext/ed25519/ref10/ge_p3_to_p2.c b/src/ext/ed25519/ref10/ge_p3_to_p2.c
new file mode 100644
index 0000000000..e532a9e4cb
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p3_to_p2.c
@@ -0,0 +1,12 @@
+#include "ge.h"
+
+/*
+r = p
+*/
+
+extern void ge_p3_to_p2(ge_p2 *r,const ge_p3 *p)
+{
+ fe_copy(r->X,p->X);
+ fe_copy(r->Y,p->Y);
+ fe_copy(r->Z,p->Z);
+}
diff --git a/src/ext/ed25519/ref10/ge_p3_tobytes.c b/src/ext/ed25519/ref10/ge_p3_tobytes.c
new file mode 100644
index 0000000000..21cb2fc656
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_p3_tobytes.c
@@ -0,0 +1,14 @@
+#include "ge.h"
+
+void ge_p3_tobytes(unsigned char *s,const ge_p3 *h)
+{
+ fe recip;
+ fe x;
+ fe y;
+
+ fe_invert(recip,h->Z);
+ fe_mul(x,h->X,recip);
+ fe_mul(y,h->Y,recip);
+ fe_tobytes(s,y);
+ s[31] ^= fe_isnegative(x) << 7;
+}
diff --git a/src/ext/ed25519/ref10/ge_precomp_0.c b/src/ext/ed25519/ref10/ge_precomp_0.c
new file mode 100644
index 0000000000..2e218861d8
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_precomp_0.c
@@ -0,0 +1,8 @@
+#include "ge.h"
+
+void ge_precomp_0(ge_precomp *h)
+{
+ fe_1(h->yplusx);
+ fe_1(h->yminusx);
+ fe_0(h->xy2d);
+}
diff --git a/src/ext/ed25519/ref10/ge_scalarmult_base.c b/src/ext/ed25519/ref10/ge_scalarmult_base.c
new file mode 100644
index 0000000000..5292f83221
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_scalarmult_base.c
@@ -0,0 +1,109 @@
+#include "ge.h"
+#include "crypto_uint32.h"
+
+/* Rename this so as not to interfere with select() which torint.h apparently
+ * grabs. :p */
+#define select ed25519_ref10_select
+
+static unsigned char equal(signed char b,signed char c)
+{
+ unsigned char ub = b;
+ unsigned char uc = c;
+ unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */
+ crypto_uint32 y = x; /* 0: yes; 1..255: no */
+ y -= 1; /* 4294967295: yes; 0..254: no */
+ y >>= 31; /* 1: yes; 0: no */
+ return y;
+}
+
+static unsigned char negative(signed char b)
+{
+ uint64_t x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */
+ x >>= 63; /* 1: yes; 0: no */
+ return x;
+}
+
+static void cmov(ge_precomp *t,ge_precomp *u,unsigned char b)
+{
+ fe_cmov(t->yplusx,u->yplusx,b);
+ fe_cmov(t->yminusx,u->yminusx,b);
+ fe_cmov(t->xy2d,u->xy2d,b);
+}
+
+/* base[i][j] = (j+1)*256^i*B */
+static ge_precomp base[32][8] = {
+#include "base.h"
+} ;
+
+static void select(ge_precomp *t,int pos,signed char b)
+{
+ ge_precomp minust;
+ unsigned char bnegative = negative(b);
+ unsigned char babs = b - SHL8( (-bnegative) & (unsigned char)b, 1);
+
+ ge_precomp_0(t);
+ cmov(t,&base[pos][0],equal(babs,1));
+ cmov(t,&base[pos][1],equal(babs,2));
+ cmov(t,&base[pos][2],equal(babs,3));
+ cmov(t,&base[pos][3],equal(babs,4));
+ cmov(t,&base[pos][4],equal(babs,5));
+ cmov(t,&base[pos][5],equal(babs,6));
+ cmov(t,&base[pos][6],equal(babs,7));
+ cmov(t,&base[pos][7],equal(babs,8));
+ fe_copy(minust.yplusx,t->yminusx);
+ fe_copy(minust.yminusx,t->yplusx);
+ fe_neg(minust.xy2d,t->xy2d);
+ cmov(t,&minust,bnegative);
+}
+
+/*
+h = a * B
+where a = a[0]+256*a[1]+...+256^31 a[31]
+B is the Ed25519 base point (x,4/5) with x positive.
+
+Preconditions:
+ a[31] <= 127
+*/
+
+void ge_scalarmult_base(ge_p3 *h,const unsigned char *a)
+{
+ signed char e[64];
+ signed char carry;
+ ge_p1p1 r;
+ ge_p2 s;
+ ge_precomp t;
+ int i;
+
+ for (i = 0;i < 32;++i) {
+ e[2 * i + 0] = (a[i] >> 0) & 15;
+ e[2 * i + 1] = (a[i] >> 4) & 15;
+ }
+ /* each e[i] is between 0 and 15 */
+ /* e[63] is between 0 and 7 */
+
+ carry = 0;
+ for (i = 0;i < 63;++i) {
+ e[i] += carry;
+ carry = e[i] + 8;
+ carry >>= 4;
+ e[i] -= SHL8(carry,4);
+ }
+ e[63] += carry;
+ /* each e[i] is between -8 and 8 */
+
+ ge_p3_0(h);
+ for (i = 1;i < 64;i += 2) {
+ select(&t,i / 2,e[i]);
+ ge_madd(&r,h,&t); ge_p1p1_to_p3(h,&r);
+ }
+
+ ge_p3_dbl(&r,h); ge_p1p1_to_p2(&s,&r);
+ ge_p2_dbl(&r,&s); ge_p1p1_to_p2(&s,&r);
+ ge_p2_dbl(&r,&s); ge_p1p1_to_p2(&s,&r);
+ ge_p2_dbl(&r,&s); ge_p1p1_to_p3(h,&r);
+
+ for (i = 0;i < 64;i += 2) {
+ select(&t,i / 2,e[i]);
+ ge_madd(&r,h,&t); ge_p1p1_to_p3(h,&r);
+ }
+}
diff --git a/src/ext/ed25519/ref10/ge_sub.c b/src/ext/ed25519/ref10/ge_sub.c
new file mode 100644
index 0000000000..69f3d54062
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_sub.c
@@ -0,0 +1,11 @@
+#include "ge.h"
+
+/*
+r = p - q
+*/
+
+void ge_sub(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)
+{
+ fe t0;
+#include "ge_sub.h"
+}
diff --git a/src/ext/ed25519/ref10/ge_sub.h b/src/ext/ed25519/ref10/ge_sub.h
new file mode 100644
index 0000000000..b4ef1f5dd0
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_sub.h
@@ -0,0 +1,97 @@
+
+/* qhasm: enter ge_sub */
+
+/* qhasm: fe X1 */
+
+/* qhasm: fe Y1 */
+
+/* qhasm: fe Z1 */
+
+/* qhasm: fe Z2 */
+
+/* qhasm: fe T1 */
+
+/* qhasm: fe ZZ */
+
+/* qhasm: fe YpX2 */
+
+/* qhasm: fe YmX2 */
+
+/* qhasm: fe T2d2 */
+
+/* qhasm: fe X3 */
+
+/* qhasm: fe Y3 */
+
+/* qhasm: fe Z3 */
+
+/* qhasm: fe T3 */
+
+/* qhasm: fe YpX1 */
+
+/* qhasm: fe YmX1 */
+
+/* qhasm: fe A */
+
+/* qhasm: fe B */
+
+/* qhasm: fe C */
+
+/* qhasm: fe D */
+
+/* qhasm: YpX1 = Y1+X1 */
+/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
+fe_add(r->X,p->Y,p->X);
+
+/* qhasm: YmX1 = Y1-X1 */
+/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
+/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
+fe_sub(r->Y,p->Y,p->X);
+
+/* qhasm: A = YpX1*YmX2 */
+/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YmX2=fe#16); */
+/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YmX2=q->YminusX); */
+fe_mul(r->Z,r->X,q->YminusX);
+
+/* qhasm: B = YmX1*YpX2 */
+/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YpX2=fe#15); */
+/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YpX2=q->YplusX); */
+fe_mul(r->Y,r->Y,q->YplusX);
+
+/* qhasm: C = T2d2*T1 */
+/* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */
+/* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */
+fe_mul(r->T,q->T2d,p->T);
+
+/* qhasm: ZZ = Z1*Z2 */
+/* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */
+/* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */
+fe_mul(r->X,p->Z,q->Z);
+
+/* qhasm: D = 2*ZZ */
+/* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */
+/* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */
+fe_add(t0,r->X,r->X);
+
+/* qhasm: X3 = A-B */
+/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
+fe_sub(r->X,r->Z,r->Y);
+
+/* qhasm: Y3 = A+B */
+/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
+/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
+fe_add(r->Y,r->Z,r->Y);
+
+/* qhasm: Z3 = D-C */
+/* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */
+fe_sub(r->Z,t0,r->T);
+
+/* qhasm: T3 = D+C */
+/* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */
+/* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */
+fe_add(r->T,t0,r->T);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/ge_sub.q b/src/ext/ed25519/ref10/ge_sub.q
new file mode 100644
index 0000000000..2779a4a201
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_sub.q
@@ -0,0 +1,49 @@
+:name:fe:r->X:r->Y:r->Z:r->T:t0:t1:t2:t3:t4:t5:p->X:p->Y:p->Z:p->T:q->YplusX:q->YminusX:q->Z:q->T2d:
+fe r:var/r=fe:
+
+enter f:enter/f:>X1=fe#11:>Y1=fe#12:>Z1=fe#13:>T1=fe#14:>YpX2=fe#15:>YmX2=fe#16:>Z2=fe#17:>T2d2=fe#18:
+return:nofallthrough:<X3=fe#1:<Y3=fe#2:<Z3=fe#3:<T3=fe#4:leave:
+
+h=f+g:<f=fe:<g=fe:>h=fe:asm/fe_add(>h,<f,<g);:
+h=f-g:<f=fe:<g=fe:>h=fe:asm/fe_sub(>h,<f,<g);:
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2:<f=fe:>h=fe:asm/fe_sq(>h,<f);:
+h=2*g:<g=fe:>h=fe:asm/fe_add(>h,<g,<g);:
+
+:
+
+enter ge_sub
+
+fe X1
+fe Y1
+fe Z1
+fe Z2
+fe T1
+fe ZZ
+fe YpX2
+fe YmX2
+fe T2d2
+fe X3
+fe Y3
+fe Z3
+fe T3
+fe YpX1
+fe YmX1
+fe A
+fe B
+fe C
+fe D
+
+YpX1 = Y1+X1
+YmX1 = Y1-X1
+A = YpX1*YmX2
+B = YmX1*YpX2
+C = T2d2*T1
+ZZ = Z1*Z2
+D = 2*ZZ
+X3 = A-B
+Y3 = A+B
+Z3 = D-C
+T3 = D+C
+
+return
diff --git a/src/ext/ed25519/ref10/ge_tobytes.c b/src/ext/ed25519/ref10/ge_tobytes.c
new file mode 100644
index 0000000000..31b3d33e09
--- /dev/null
+++ b/src/ext/ed25519/ref10/ge_tobytes.c
@@ -0,0 +1,14 @@
+#include "ge.h"
+
+void ge_tobytes(unsigned char *s,const ge_p2 *h)
+{
+ fe recip;
+ fe x;
+ fe y;
+
+ fe_invert(recip,h->Z);
+ fe_mul(x,h->X,recip);
+ fe_mul(y,h->Y,recip);
+ fe_tobytes(s,y);
+ s[31] ^= fe_isnegative(x) << 7;
+}
diff --git a/src/ext/ed25519/ref10/keyconv.c b/src/ext/ed25519/ref10/keyconv.c
new file mode 100644
index 0000000000..854b150d69
--- /dev/null
+++ b/src/ext/ed25519/ref10/keyconv.c
@@ -0,0 +1,37 @@
+/* Added to ref10 for Tor. We place this in the public domain. Alternatively,
+ * you may have it under the Creative Commons 0 "CC0" license. */
+#include "fe.h"
+#include "ed25519_ref10.h"
+
+int ed25519_ref10_pubkey_from_curve25519_pubkey(unsigned char *out,
+ const unsigned char *inp,
+ int signbit)
+{
+ fe u;
+ fe one;
+ fe y;
+ fe uplus1;
+ fe uminus1;
+ fe inv_uplus1;
+
+ /* From prop228:
+
+ Given a curve25519 x-coordinate (u), we can get the y coordinate
+ of the ed25519 key using
+
+ y = (u-1)/(u+1)
+ */
+ fe_frombytes(u, inp);
+ fe_1(one);
+ fe_sub(uminus1, u, one);
+ fe_add(uplus1, u, one);
+ fe_invert(inv_uplus1, uplus1);
+ fe_mul(y, uminus1, inv_uplus1);
+
+ fe_tobytes(out, y);
+
+ /* propagate sign. */
+ out[31] |= (!!signbit) << 7;
+
+ return 0;
+}
diff --git a/src/ext/ed25519/ref10/keypair.c b/src/ext/ed25519/ref10/keypair.c
new file mode 100644
index 0000000000..7ddbaa971e
--- /dev/null
+++ b/src/ext/ed25519/ref10/keypair.c
@@ -0,0 +1,51 @@
+/* Modified for Tor: new API, 64-byte secret keys. */
+#include <string.h>
+#include "randombytes.h"
+#include "crypto_sign.h"
+#include "crypto_hash_sha512.h"
+#include "ge.h"
+
+int
+crypto_sign_seckey(unsigned char *sk)
+{
+ unsigned char seed[32];
+
+ if (randombytes(seed,32) < 0)
+ return -1;
+
+ crypto_sign_seckey_expand(sk, seed);
+
+ memwipe(seed, 0, 32);
+
+ return 0;
+}
+
+int crypto_sign_seckey_expand(unsigned char *sk, const unsigned char *skseed)
+{
+ crypto_hash_sha512(sk,skseed,32);
+ sk[0] &= 248;
+ sk[31] &= 63;
+ sk[31] |= 64;
+
+ return 0;
+}
+
+int crypto_sign_pubkey(unsigned char *pk,const unsigned char *sk)
+{
+ ge_p3 A;
+
+ ge_scalarmult_base(&A,sk);
+ ge_p3_tobytes(pk,&A);
+
+ return 0;
+}
+
+
+int crypto_sign_keypair(unsigned char *pk,unsigned char *sk)
+{
+ crypto_sign_seckey(sk);
+ crypto_sign_pubkey(pk, sk);
+
+ return 0;
+}
+
diff --git a/src/ext/ed25519/ref10/open.c b/src/ext/ed25519/ref10/open.c
new file mode 100644
index 0000000000..9dbeb4cdd0
--- /dev/null
+++ b/src/ext/ed25519/ref10/open.c
@@ -0,0 +1,42 @@
+/* (Modified by Tor to verify signature separately from message) */
+#include <string.h>
+#include "crypto_sign.h"
+#include "crypto_hash_sha512.h"
+#include "crypto_verify_32.h"
+#include "ge.h"
+#include "sc.h"
+
+/* 'signature' must be 64-bytes long. */
+int crypto_sign_open(
+ const unsigned char *signature,
+ const unsigned char *m, size_t mlen,
+ const unsigned char *pk
+)
+{
+ unsigned char pkcopy[32];
+ unsigned char rcopy[32];
+ unsigned char scopy[32];
+ unsigned char h[64];
+ unsigned char rcheck[32];
+ ge_p3 A;
+ ge_p2 R;
+
+ if (signature[63] & 224) goto badsig;
+ if (ge_frombytes_negate_vartime(&A,pk) != 0) goto badsig;
+
+ memmove(pkcopy,pk,32);
+ memmove(rcopy,signature,32);
+ memmove(scopy,signature + 32,32);
+
+ crypto_hash_sha512_3(h, rcopy, 32, pkcopy, 32, m, mlen);
+ sc_reduce(h);
+
+ ge_double_scalarmult_vartime(&R,h,&A,scopy);
+ ge_tobytes(rcheck,&R);
+ if (crypto_verify_32(rcheck,rcopy) == 0) {
+ return 0;
+ }
+
+badsig:
+ return -1;
+}
diff --git a/src/ext/ed25519/ref10/pow22523.h b/src/ext/ed25519/ref10/pow22523.h
new file mode 100644
index 0000000000..9204ff838f
--- /dev/null
+++ b/src/ext/ed25519/ref10/pow22523.h
@@ -0,0 +1,161 @@
+/* Modified by Tor: pointless loops removed to appease analysis tools */
+
+/* qhasm: fe z1 */
+
+/* qhasm: fe z2 */
+
+/* qhasm: fe z8 */
+
+/* qhasm: fe z9 */
+
+/* qhasm: fe z11 */
+
+/* qhasm: fe z22 */
+
+/* qhasm: fe z_5_0 */
+
+/* qhasm: fe z_10_5 */
+
+/* qhasm: fe z_10_0 */
+
+/* qhasm: fe z_20_10 */
+
+/* qhasm: fe z_20_0 */
+
+/* qhasm: fe z_40_20 */
+
+/* qhasm: fe z_40_0 */
+
+/* qhasm: fe z_50_10 */
+
+/* qhasm: fe z_50_0 */
+
+/* qhasm: fe z_100_50 */
+
+/* qhasm: fe z_100_0 */
+
+/* qhasm: fe z_200_100 */
+
+/* qhasm: fe z_200_0 */
+
+/* qhasm: fe z_250_50 */
+
+/* qhasm: fe z_250_0 */
+
+/* qhasm: fe z_252_2 */
+
+/* qhasm: fe z_252_3 */
+
+/* qhasm: enter pow22523 */
+
+/* qhasm: z2 = z1^2^1 */
+/* asm 1: fe_sq(>z2=fe#1,<z1=fe#11); for (i = 1;i < 1;++i) fe_sq(>z2=fe#1,>z2=fe#1); */
+/* asm 2: fe_sq(>z2=t0,<z1=z); for (i = 1;i < 1;++i) fe_sq(>z2=t0,>z2=t0); */
+fe_sq(t0,z); /* DEADCODE This loop has no effect: for (i = 1;i < 1;++i) fe_sq(t0,t0); */
+
+/* qhasm: z8 = z2^2^2 */
+/* asm 1: fe_sq(>z8=fe#2,<z2=fe#1); for (i = 1;i < 2;++i) fe_sq(>z8=fe#2,>z8=fe#2); */
+/* asm 2: fe_sq(>z8=t1,<z2=t0); for (i = 1;i < 2;++i) fe_sq(>z8=t1,>z8=t1); */
+fe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1);
+
+/* qhasm: z9 = z1*z8 */
+/* asm 1: fe_mul(>z9=fe#2,<z1=fe#11,<z8=fe#2); */
+/* asm 2: fe_mul(>z9=t1,<z1=z,<z8=t1); */
+fe_mul(t1,z,t1);
+
+/* qhasm: z11 = z2*z9 */
+/* asm 1: fe_mul(>z11=fe#1,<z2=fe#1,<z9=fe#2); */
+/* asm 2: fe_mul(>z11=t0,<z2=t0,<z9=t1); */
+fe_mul(t0,t0,t1);
+
+/* qhasm: z22 = z11^2^1 */
+/* asm 1: fe_sq(>z22=fe#1,<z11=fe#1); for (i = 1;i < 1;++i) fe_sq(>z22=fe#1,>z22=fe#1); */
+/* asm 2: fe_sq(>z22=t0,<z11=t0); for (i = 1;i < 1;++i) fe_sq(>z22=t0,>z22=t0); */
+fe_sq(t0,t0); /* DEADCODE This loop has no effect: for (i = 1;i < 1;++i) fe_sq(t0,t0); */
+
+/* qhasm: z_5_0 = z9*z22 */
+/* asm 1: fe_mul(>z_5_0=fe#1,<z9=fe#2,<z22=fe#1); */
+/* asm 2: fe_mul(>z_5_0=t0,<z9=t1,<z22=t0); */
+fe_mul(t0,t1,t0);
+
+/* qhasm: z_10_5 = z_5_0^2^5 */
+/* asm 1: fe_sq(>z_10_5=fe#2,<z_5_0=fe#1); for (i = 1;i < 5;++i) fe_sq(>z_10_5=fe#2,>z_10_5=fe#2); */
+/* asm 2: fe_sq(>z_10_5=t1,<z_5_0=t0); for (i = 1;i < 5;++i) fe_sq(>z_10_5=t1,>z_10_5=t1); */
+fe_sq(t1,t0); for (i = 1;i < 5;++i) fe_sq(t1,t1);
+
+/* qhasm: z_10_0 = z_10_5*z_5_0 */
+/* asm 1: fe_mul(>z_10_0=fe#1,<z_10_5=fe#2,<z_5_0=fe#1); */
+/* asm 2: fe_mul(>z_10_0=t0,<z_10_5=t1,<z_5_0=t0); */
+fe_mul(t0,t1,t0);
+
+/* qhasm: z_20_10 = z_10_0^2^10 */
+/* asm 1: fe_sq(>z_20_10=fe#2,<z_10_0=fe#1); for (i = 1;i < 10;++i) fe_sq(>z_20_10=fe#2,>z_20_10=fe#2); */
+/* asm 2: fe_sq(>z_20_10=t1,<z_10_0=t0); for (i = 1;i < 10;++i) fe_sq(>z_20_10=t1,>z_20_10=t1); */
+fe_sq(t1,t0); for (i = 1;i < 10;++i) fe_sq(t1,t1);
+
+/* qhasm: z_20_0 = z_20_10*z_10_0 */
+/* asm 1: fe_mul(>z_20_0=fe#2,<z_20_10=fe#2,<z_10_0=fe#1); */
+/* asm 2: fe_mul(>z_20_0=t1,<z_20_10=t1,<z_10_0=t0); */
+fe_mul(t1,t1,t0);
+
+/* qhasm: z_40_20 = z_20_0^2^20 */
+/* asm 1: fe_sq(>z_40_20=fe#3,<z_20_0=fe#2); for (i = 1;i < 20;++i) fe_sq(>z_40_20=fe#3,>z_40_20=fe#3); */
+/* asm 2: fe_sq(>z_40_20=t2,<z_20_0=t1); for (i = 1;i < 20;++i) fe_sq(>z_40_20=t2,>z_40_20=t2); */
+fe_sq(t2,t1); for (i = 1;i < 20;++i) fe_sq(t2,t2);
+
+/* qhasm: z_40_0 = z_40_20*z_20_0 */
+/* asm 1: fe_mul(>z_40_0=fe#2,<z_40_20=fe#3,<z_20_0=fe#2); */
+/* asm 2: fe_mul(>z_40_0=t1,<z_40_20=t2,<z_20_0=t1); */
+fe_mul(t1,t2,t1);
+
+/* qhasm: z_50_10 = z_40_0^2^10 */
+/* asm 1: fe_sq(>z_50_10=fe#2,<z_40_0=fe#2); for (i = 1;i < 10;++i) fe_sq(>z_50_10=fe#2,>z_50_10=fe#2); */
+/* asm 2: fe_sq(>z_50_10=t1,<z_40_0=t1); for (i = 1;i < 10;++i) fe_sq(>z_50_10=t1,>z_50_10=t1); */
+fe_sq(t1,t1); for (i = 1;i < 10;++i) fe_sq(t1,t1);
+
+/* qhasm: z_50_0 = z_50_10*z_10_0 */
+/* asm 1: fe_mul(>z_50_0=fe#1,<z_50_10=fe#2,<z_10_0=fe#1); */
+/* asm 2: fe_mul(>z_50_0=t0,<z_50_10=t1,<z_10_0=t0); */
+fe_mul(t0,t1,t0);
+
+/* qhasm: z_100_50 = z_50_0^2^50 */
+/* asm 1: fe_sq(>z_100_50=fe#2,<z_50_0=fe#1); for (i = 1;i < 50;++i) fe_sq(>z_100_50=fe#2,>z_100_50=fe#2); */
+/* asm 2: fe_sq(>z_100_50=t1,<z_50_0=t0); for (i = 1;i < 50;++i) fe_sq(>z_100_50=t1,>z_100_50=t1); */
+fe_sq(t1,t0); for (i = 1;i < 50;++i) fe_sq(t1,t1);
+
+/* qhasm: z_100_0 = z_100_50*z_50_0 */
+/* asm 1: fe_mul(>z_100_0=fe#2,<z_100_50=fe#2,<z_50_0=fe#1); */
+/* asm 2: fe_mul(>z_100_0=t1,<z_100_50=t1,<z_50_0=t0); */
+fe_mul(t1,t1,t0);
+
+/* qhasm: z_200_100 = z_100_0^2^100 */
+/* asm 1: fe_sq(>z_200_100=fe#3,<z_100_0=fe#2); for (i = 1;i < 100;++i) fe_sq(>z_200_100=fe#3,>z_200_100=fe#3); */
+/* asm 2: fe_sq(>z_200_100=t2,<z_100_0=t1); for (i = 1;i < 100;++i) fe_sq(>z_200_100=t2,>z_200_100=t2); */
+fe_sq(t2,t1); for (i = 1;i < 100;++i) fe_sq(t2,t2);
+
+/* qhasm: z_200_0 = z_200_100*z_100_0 */
+/* asm 1: fe_mul(>z_200_0=fe#2,<z_200_100=fe#3,<z_100_0=fe#2); */
+/* asm 2: fe_mul(>z_200_0=t1,<z_200_100=t2,<z_100_0=t1); */
+fe_mul(t1,t2,t1);
+
+/* qhasm: z_250_50 = z_200_0^2^50 */
+/* asm 1: fe_sq(>z_250_50=fe#2,<z_200_0=fe#2); for (i = 1;i < 50;++i) fe_sq(>z_250_50=fe#2,>z_250_50=fe#2); */
+/* asm 2: fe_sq(>z_250_50=t1,<z_200_0=t1); for (i = 1;i < 50;++i) fe_sq(>z_250_50=t1,>z_250_50=t1); */
+fe_sq(t1,t1); for (i = 1;i < 50;++i) fe_sq(t1,t1);
+
+/* qhasm: z_250_0 = z_250_50*z_50_0 */
+/* asm 1: fe_mul(>z_250_0=fe#1,<z_250_50=fe#2,<z_50_0=fe#1); */
+/* asm 2: fe_mul(>z_250_0=t0,<z_250_50=t1,<z_50_0=t0); */
+fe_mul(t0,t1,t0);
+
+/* qhasm: z_252_2 = z_250_0^2^2 */
+/* asm 1: fe_sq(>z_252_2=fe#1,<z_250_0=fe#1); for (i = 1;i < 2;++i) fe_sq(>z_252_2=fe#1,>z_252_2=fe#1); */
+/* asm 2: fe_sq(>z_252_2=t0,<z_250_0=t0); for (i = 1;i < 2;++i) fe_sq(>z_252_2=t0,>z_252_2=t0); */
+fe_sq(t0,t0); for (i = 1;i < 2;++i) fe_sq(t0,t0);
+
+/* qhasm: z_252_3 = z_252_2*z1 */
+/* asm 1: fe_mul(>z_252_3=fe#12,<z_252_2=fe#1,<z1=fe#11); */
+/* asm 2: fe_mul(>z_252_3=out,<z_252_2=t0,<z1=z); */
+fe_mul(out,t0,z);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/pow22523.q b/src/ext/ed25519/ref10/pow22523.q
new file mode 100644
index 0000000000..2ce1da9d4d
--- /dev/null
+++ b/src/ext/ed25519/ref10/pow22523.q
@@ -0,0 +1,61 @@
+:name:fe:t0:t1:t2:t3:t4:t5:t6:t7:t8:t9:z:out:
+fe r:var/r=fe:
+
+enter f:enter/f:>z1=fe#11:
+return:nofallthrough:<z_252_3=fe#12:leave:
+
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2^k:<f=fe:>h=fe:#k:asm/fe_sq(>h,<f); for (i = 1;i !lt; #k;++i) fe_sq(>h,>h);:
+
+:
+
+fe z1
+fe z2
+fe z8
+fe z9
+fe z11
+fe z22
+fe z_5_0
+fe z_10_5
+fe z_10_0
+fe z_20_10
+fe z_20_0
+fe z_40_20
+fe z_40_0
+fe z_50_10
+fe z_50_0
+fe z_100_50
+fe z_100_0
+fe z_200_100
+fe z_200_0
+fe z_250_50
+fe z_250_0
+fe z_252_2
+fe z_252_3
+
+enter pow22523
+
+z2 = z1^2^1
+z8 = z2^2^2
+z9 = z1*z8
+z11 = z2*z9
+z22 = z11^2^1
+z_5_0 = z9*z22
+z_10_5 = z_5_0^2^5
+z_10_0 = z_10_5*z_5_0
+z_20_10 = z_10_0^2^10
+z_20_0 = z_20_10*z_10_0
+z_40_20 = z_20_0^2^20
+z_40_0 = z_40_20*z_20_0
+z_50_10 = z_40_0^2^10
+z_50_0 = z_50_10*z_10_0
+z_100_50 = z_50_0^2^50
+z_100_0 = z_100_50*z_50_0
+z_200_100 = z_100_0^2^100
+z_200_0 = z_200_100*z_100_0
+z_250_50 = z_200_0^2^50
+z_250_0 = z_250_50*z_50_0
+z_252_2 = z_250_0^2^2
+z_252_3 = z_252_2*z1
+
+return
diff --git a/src/ext/ed25519/ref10/pow225521.h b/src/ext/ed25519/ref10/pow225521.h
new file mode 100644
index 0000000000..fe2af94c03
--- /dev/null
+++ b/src/ext/ed25519/ref10/pow225521.h
@@ -0,0 +1,161 @@
+/* Modified by Tor: pointless loops removed to appease analysis tools */
+
+/* qhasm: fe z1 */
+
+/* qhasm: fe z2 */
+
+/* qhasm: fe z8 */
+
+/* qhasm: fe z9 */
+
+/* qhasm: fe z11 */
+
+/* qhasm: fe z22 */
+
+/* qhasm: fe z_5_0 */
+
+/* qhasm: fe z_10_5 */
+
+/* qhasm: fe z_10_0 */
+
+/* qhasm: fe z_20_10 */
+
+/* qhasm: fe z_20_0 */
+
+/* qhasm: fe z_40_20 */
+
+/* qhasm: fe z_40_0 */
+
+/* qhasm: fe z_50_10 */
+
+/* qhasm: fe z_50_0 */
+
+/* qhasm: fe z_100_50 */
+
+/* qhasm: fe z_100_0 */
+
+/* qhasm: fe z_200_100 */
+
+/* qhasm: fe z_200_0 */
+
+/* qhasm: fe z_250_50 */
+
+/* qhasm: fe z_250_0 */
+
+/* qhasm: fe z_255_5 */
+
+/* qhasm: fe z_255_21 */
+
+/* qhasm: enter pow225521 */
+
+/* qhasm: z2 = z1^2^1 */
+/* asm 1: fe_sq(>z2=fe#1,<z1=fe#11); for (i = 1;i < 1;++i) fe_sq(>z2=fe#1,>z2=fe#1); */
+/* asm 2: fe_sq(>z2=t0,<z1=z); for (i = 1;i < 1;++i) fe_sq(>z2=t0,>z2=t0); */
+fe_sq(t0,z); /* DEADCODE This loop has no effect: for (i = 1;i < 1;++i) fe_sq(t0,t0); */
+
+/* qhasm: z8 = z2^2^2 */
+/* asm 1: fe_sq(>z8=fe#2,<z2=fe#1); for (i = 1;i < 2;++i) fe_sq(>z8=fe#2,>z8=fe#2); */
+/* asm 2: fe_sq(>z8=t1,<z2=t0); for (i = 1;i < 2;++i) fe_sq(>z8=t1,>z8=t1); */
+fe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1);
+
+/* qhasm: z9 = z1*z8 */
+/* asm 1: fe_mul(>z9=fe#2,<z1=fe#11,<z8=fe#2); */
+/* asm 2: fe_mul(>z9=t1,<z1=z,<z8=t1); */
+fe_mul(t1,z,t1);
+
+/* qhasm: z11 = z2*z9 */
+/* asm 1: fe_mul(>z11=fe#1,<z2=fe#1,<z9=fe#2); */
+/* asm 2: fe_mul(>z11=t0,<z2=t0,<z9=t1); */
+fe_mul(t0,t0,t1);
+
+/* qhasm: z22 = z11^2^1 */
+/* asm 1: fe_sq(>z22=fe#3,<z11=fe#1); for (i = 1;i < 1;++i) fe_sq(>z22=fe#3,>z22=fe#3); */
+/* asm 2: fe_sq(>z22=t2,<z11=t0); for (i = 1;i < 1;++i) fe_sq(>z22=t2,>z22=t2); */
+fe_sq(t2,t0); /* DEADCODE This loop has no effect for (i = 1;i < 1;++i) fe_sq(t2,t2); */
+
+/* qhasm: z_5_0 = z9*z22 */
+/* asm 1: fe_mul(>z_5_0=fe#2,<z9=fe#2,<z22=fe#3); */
+/* asm 2: fe_mul(>z_5_0=t1,<z9=t1,<z22=t2); */
+fe_mul(t1,t1,t2);
+
+/* qhasm: z_10_5 = z_5_0^2^5 */
+/* asm 1: fe_sq(>z_10_5=fe#3,<z_5_0=fe#2); for (i = 1;i < 5;++i) fe_sq(>z_10_5=fe#3,>z_10_5=fe#3); */
+/* asm 2: fe_sq(>z_10_5=t2,<z_5_0=t1); for (i = 1;i < 5;++i) fe_sq(>z_10_5=t2,>z_10_5=t2); */
+fe_sq(t2,t1); for (i = 1;i < 5;++i) fe_sq(t2,t2);
+
+/* qhasm: z_10_0 = z_10_5*z_5_0 */
+/* asm 1: fe_mul(>z_10_0=fe#2,<z_10_5=fe#3,<z_5_0=fe#2); */
+/* asm 2: fe_mul(>z_10_0=t1,<z_10_5=t2,<z_5_0=t1); */
+fe_mul(t1,t2,t1);
+
+/* qhasm: z_20_10 = z_10_0^2^10 */
+/* asm 1: fe_sq(>z_20_10=fe#3,<z_10_0=fe#2); for (i = 1;i < 10;++i) fe_sq(>z_20_10=fe#3,>z_20_10=fe#3); */
+/* asm 2: fe_sq(>z_20_10=t2,<z_10_0=t1); for (i = 1;i < 10;++i) fe_sq(>z_20_10=t2,>z_20_10=t2); */
+fe_sq(t2,t1); for (i = 1;i < 10;++i) fe_sq(t2,t2);
+
+/* qhasm: z_20_0 = z_20_10*z_10_0 */
+/* asm 1: fe_mul(>z_20_0=fe#3,<z_20_10=fe#3,<z_10_0=fe#2); */
+/* asm 2: fe_mul(>z_20_0=t2,<z_20_10=t2,<z_10_0=t1); */
+fe_mul(t2,t2,t1);
+
+/* qhasm: z_40_20 = z_20_0^2^20 */
+/* asm 1: fe_sq(>z_40_20=fe#4,<z_20_0=fe#3); for (i = 1;i < 20;++i) fe_sq(>z_40_20=fe#4,>z_40_20=fe#4); */
+/* asm 2: fe_sq(>z_40_20=t3,<z_20_0=t2); for (i = 1;i < 20;++i) fe_sq(>z_40_20=t3,>z_40_20=t3); */
+fe_sq(t3,t2); for (i = 1;i < 20;++i) fe_sq(t3,t3);
+
+/* qhasm: z_40_0 = z_40_20*z_20_0 */
+/* asm 1: fe_mul(>z_40_0=fe#3,<z_40_20=fe#4,<z_20_0=fe#3); */
+/* asm 2: fe_mul(>z_40_0=t2,<z_40_20=t3,<z_20_0=t2); */
+fe_mul(t2,t3,t2);
+
+/* qhasm: z_50_10 = z_40_0^2^10 */
+/* asm 1: fe_sq(>z_50_10=fe#3,<z_40_0=fe#3); for (i = 1;i < 10;++i) fe_sq(>z_50_10=fe#3,>z_50_10=fe#3); */
+/* asm 2: fe_sq(>z_50_10=t2,<z_40_0=t2); for (i = 1;i < 10;++i) fe_sq(>z_50_10=t2,>z_50_10=t2); */
+fe_sq(t2,t2); for (i = 1;i < 10;++i) fe_sq(t2,t2);
+
+/* qhasm: z_50_0 = z_50_10*z_10_0 */
+/* asm 1: fe_mul(>z_50_0=fe#2,<z_50_10=fe#3,<z_10_0=fe#2); */
+/* asm 2: fe_mul(>z_50_0=t1,<z_50_10=t2,<z_10_0=t1); */
+fe_mul(t1,t2,t1);
+
+/* qhasm: z_100_50 = z_50_0^2^50 */
+/* asm 1: fe_sq(>z_100_50=fe#3,<z_50_0=fe#2); for (i = 1;i < 50;++i) fe_sq(>z_100_50=fe#3,>z_100_50=fe#3); */
+/* asm 2: fe_sq(>z_100_50=t2,<z_50_0=t1); for (i = 1;i < 50;++i) fe_sq(>z_100_50=t2,>z_100_50=t2); */
+fe_sq(t2,t1); for (i = 1;i < 50;++i) fe_sq(t2,t2);
+
+/* qhasm: z_100_0 = z_100_50*z_50_0 */
+/* asm 1: fe_mul(>z_100_0=fe#3,<z_100_50=fe#3,<z_50_0=fe#2); */
+/* asm 2: fe_mul(>z_100_0=t2,<z_100_50=t2,<z_50_0=t1); */
+fe_mul(t2,t2,t1);
+
+/* qhasm: z_200_100 = z_100_0^2^100 */
+/* asm 1: fe_sq(>z_200_100=fe#4,<z_100_0=fe#3); for (i = 1;i < 100;++i) fe_sq(>z_200_100=fe#4,>z_200_100=fe#4); */
+/* asm 2: fe_sq(>z_200_100=t3,<z_100_0=t2); for (i = 1;i < 100;++i) fe_sq(>z_200_100=t3,>z_200_100=t3); */
+fe_sq(t3,t2); for (i = 1;i < 100;++i) fe_sq(t3,t3);
+
+/* qhasm: z_200_0 = z_200_100*z_100_0 */
+/* asm 1: fe_mul(>z_200_0=fe#3,<z_200_100=fe#4,<z_100_0=fe#3); */
+/* asm 2: fe_mul(>z_200_0=t2,<z_200_100=t3,<z_100_0=t2); */
+fe_mul(t2,t3,t2);
+
+/* qhasm: z_250_50 = z_200_0^2^50 */
+/* asm 1: fe_sq(>z_250_50=fe#3,<z_200_0=fe#3); for (i = 1;i < 50;++i) fe_sq(>z_250_50=fe#3,>z_250_50=fe#3); */
+/* asm 2: fe_sq(>z_250_50=t2,<z_200_0=t2); for (i = 1;i < 50;++i) fe_sq(>z_250_50=t2,>z_250_50=t2); */
+fe_sq(t2,t2); for (i = 1;i < 50;++i) fe_sq(t2,t2);
+
+/* qhasm: z_250_0 = z_250_50*z_50_0 */
+/* asm 1: fe_mul(>z_250_0=fe#2,<z_250_50=fe#3,<z_50_0=fe#2); */
+/* asm 2: fe_mul(>z_250_0=t1,<z_250_50=t2,<z_50_0=t1); */
+fe_mul(t1,t2,t1);
+
+/* qhasm: z_255_5 = z_250_0^2^5 */
+/* asm 1: fe_sq(>z_255_5=fe#2,<z_250_0=fe#2); for (i = 1;i < 5;++i) fe_sq(>z_255_5=fe#2,>z_255_5=fe#2); */
+/* asm 2: fe_sq(>z_255_5=t1,<z_250_0=t1); for (i = 1;i < 5;++i) fe_sq(>z_255_5=t1,>z_255_5=t1); */
+fe_sq(t1,t1); for (i = 1;i < 5;++i) fe_sq(t1,t1);
+
+/* qhasm: z_255_21 = z_255_5*z11 */
+/* asm 1: fe_mul(>z_255_21=fe#12,<z_255_5=fe#2,<z11=fe#1); */
+/* asm 2: fe_mul(>z_255_21=out,<z_255_5=t1,<z11=t0); */
+fe_mul(out,t1,t0);
+
+/* qhasm: return */
diff --git a/src/ext/ed25519/ref10/pow225521.q b/src/ext/ed25519/ref10/pow225521.q
new file mode 100644
index 0000000000..45be57c08a
--- /dev/null
+++ b/src/ext/ed25519/ref10/pow225521.q
@@ -0,0 +1,61 @@
+:name:fe:t0:t1:t2:t3:t4:t5:t6:t7:t8:t9:z:out:
+fe r:var/r=fe:
+
+enter f:enter/f:>z1=fe#11:
+return:nofallthrough:<z_255_21=fe#12:leave:
+
+h=f*g:<f=fe:<g=fe:>h=fe:asm/fe_mul(>h,<f,<g);:
+h=f^2^k:<f=fe:>h=fe:#k:asm/fe_sq(>h,<f); for (i = 1;i !lt; #k;++i) fe_sq(>h,>h);:
+
+:
+
+fe z1
+fe z2
+fe z8
+fe z9
+fe z11
+fe z22
+fe z_5_0
+fe z_10_5
+fe z_10_0
+fe z_20_10
+fe z_20_0
+fe z_40_20
+fe z_40_0
+fe z_50_10
+fe z_50_0
+fe z_100_50
+fe z_100_0
+fe z_200_100
+fe z_200_0
+fe z_250_50
+fe z_250_0
+fe z_255_5
+fe z_255_21
+
+enter pow225521
+
+z2 = z1^2^1
+z8 = z2^2^2
+z9 = z1*z8
+z11 = z2*z9
+z22 = z11^2^1
+z_5_0 = z9*z22
+z_10_5 = z_5_0^2^5
+z_10_0 = z_10_5*z_5_0
+z_20_10 = z_10_0^2^10
+z_20_0 = z_20_10*z_10_0
+z_40_20 = z_20_0^2^20
+z_40_0 = z_40_20*z_20_0
+z_50_10 = z_40_0^2^10
+z_50_0 = z_50_10*z_10_0
+z_100_50 = z_50_0^2^50
+z_100_0 = z_100_50*z_50_0
+z_200_100 = z_100_0^2^100
+z_200_0 = z_200_100*z_100_0
+z_250_50 = z_200_0^2^50
+z_250_0 = z_250_50*z_50_0
+z_255_5 = z_250_0^2^5
+z_255_21 = z_255_5*z11
+
+return
diff --git a/src/ext/ed25519/ref10/q2h.sh b/src/ext/ed25519/ref10/q2h.sh
new file mode 100755
index 0000000000..47ec5110e8
--- /dev/null
+++ b/src/ext/ed25519/ref10/q2h.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+sed 's/^#.*//' \
+| qhasm-generic \
+| sed 's_//\(.*\)$_/*\1 */_'
diff --git a/src/ext/ed25519/ref10/randombytes.h b/src/ext/ed25519/ref10/randombytes.h
new file mode 100644
index 0000000000..fc709fcefc
--- /dev/null
+++ b/src/ext/ed25519/ref10/randombytes.h
@@ -0,0 +1,4 @@
+/* Added for Tor. */
+#include "crypto.h"
+#define randombytes(b, n) \
+ (crypto_strongest_rand((b), (n)))
diff --git a/src/ext/ed25519/ref10/sc.h b/src/ext/ed25519/ref10/sc.h
new file mode 100644
index 0000000000..d32ed2e8ca
--- /dev/null
+++ b/src/ext/ed25519/ref10/sc.h
@@ -0,0 +1,15 @@
+#ifndef SC_H
+#define SC_H
+
+/*
+The set of scalars is \Z/l
+where l = 2^252 + 27742317777372353535851937790883648493.
+*/
+
+#define sc_reduce crypto_sign_ed25519_ref10_sc_reduce
+#define sc_muladd crypto_sign_ed25519_ref10_sc_muladd
+
+extern void sc_reduce(unsigned char *);
+extern void sc_muladd(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *);
+
+#endif
diff --git a/src/ext/ed25519/ref10/sc_muladd.c b/src/ext/ed25519/ref10/sc_muladd.c
new file mode 100644
index 0000000000..20b94c1049
--- /dev/null
+++ b/src/ext/ed25519/ref10/sc_muladd.c
@@ -0,0 +1,368 @@
+#include "sc.h"
+#include "crypto_int64.h"
+#include "crypto_uint32.h"
+#include "crypto_uint64.h"
+
+static crypto_uint64 load_3(const unsigned char *in)
+{
+ crypto_uint64 result;
+ result = (crypto_uint64) in[0];
+ result |= ((crypto_uint64) in[1]) << 8;
+ result |= ((crypto_uint64) in[2]) << 16;
+ return result;
+}
+
+static crypto_uint64 load_4(const unsigned char *in)
+{
+ crypto_uint64 result;
+ result = (crypto_uint64) in[0];
+ result |= ((crypto_uint64) in[1]) << 8;
+ result |= ((crypto_uint64) in[2]) << 16;
+ result |= ((crypto_uint64) in[3]) << 24;
+ return result;
+}
+
+/*
+Input:
+ a[0]+256*a[1]+...+256^31*a[31] = a
+ b[0]+256*b[1]+...+256^31*b[31] = b
+ c[0]+256*c[1]+...+256^31*c[31] = c
+
+Output:
+ s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l
+ where l = 2^252 + 27742317777372353535851937790883648493.
+*/
+
+void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,const unsigned char *c)
+{
+ crypto_int64 a0 = 2097151 & load_3(a);
+ crypto_int64 a1 = 2097151 & (load_4(a + 2) >> 5);
+ crypto_int64 a2 = 2097151 & (load_3(a + 5) >> 2);
+ crypto_int64 a3 = 2097151 & (load_4(a + 7) >> 7);
+ crypto_int64 a4 = 2097151 & (load_4(a + 10) >> 4);
+ crypto_int64 a5 = 2097151 & (load_3(a + 13) >> 1);
+ crypto_int64 a6 = 2097151 & (load_4(a + 15) >> 6);
+ crypto_int64 a7 = 2097151 & (load_3(a + 18) >> 3);
+ crypto_int64 a8 = 2097151 & load_3(a + 21);
+ crypto_int64 a9 = 2097151 & (load_4(a + 23) >> 5);
+ crypto_int64 a10 = 2097151 & (load_3(a + 26) >> 2);
+ crypto_int64 a11 = (load_4(a + 28) >> 7);
+ crypto_int64 b0 = 2097151 & load_3(b);
+ crypto_int64 b1 = 2097151 & (load_4(b + 2) >> 5);
+ crypto_int64 b2 = 2097151 & (load_3(b + 5) >> 2);
+ crypto_int64 b3 = 2097151 & (load_4(b + 7) >> 7);
+ crypto_int64 b4 = 2097151 & (load_4(b + 10) >> 4);
+ crypto_int64 b5 = 2097151 & (load_3(b + 13) >> 1);
+ crypto_int64 b6 = 2097151 & (load_4(b + 15) >> 6);
+ crypto_int64 b7 = 2097151 & (load_3(b + 18) >> 3);
+ crypto_int64 b8 = 2097151 & load_3(b + 21);
+ crypto_int64 b9 = 2097151 & (load_4(b + 23) >> 5);
+ crypto_int64 b10 = 2097151 & (load_3(b + 26) >> 2);
+ crypto_int64 b11 = (load_4(b + 28) >> 7);
+ crypto_int64 c0 = 2097151 & load_3(c);
+ crypto_int64 c1 = 2097151 & (load_4(c + 2) >> 5);
+ crypto_int64 c2 = 2097151 & (load_3(c + 5) >> 2);
+ crypto_int64 c3 = 2097151 & (load_4(c + 7) >> 7);
+ crypto_int64 c4 = 2097151 & (load_4(c + 10) >> 4);
+ crypto_int64 c5 = 2097151 & (load_3(c + 13) >> 1);
+ crypto_int64 c6 = 2097151 & (load_4(c + 15) >> 6);
+ crypto_int64 c7 = 2097151 & (load_3(c + 18) >> 3);
+ crypto_int64 c8 = 2097151 & load_3(c + 21);
+ crypto_int64 c9 = 2097151 & (load_4(c + 23) >> 5);
+ crypto_int64 c10 = 2097151 & (load_3(c + 26) >> 2);
+ crypto_int64 c11 = (load_4(c + 28) >> 7);
+ crypto_int64 s0;
+ crypto_int64 s1;
+ crypto_int64 s2;
+ crypto_int64 s3;
+ crypto_int64 s4;
+ crypto_int64 s5;
+ crypto_int64 s6;
+ crypto_int64 s7;
+ crypto_int64 s8;
+ crypto_int64 s9;
+ crypto_int64 s10;
+ crypto_int64 s11;
+ crypto_int64 s12;
+ crypto_int64 s13;
+ crypto_int64 s14;
+ crypto_int64 s15;
+ crypto_int64 s16;
+ crypto_int64 s17;
+ crypto_int64 s18;
+ crypto_int64 s19;
+ crypto_int64 s20;
+ crypto_int64 s21;
+ crypto_int64 s22;
+ crypto_int64 s23;
+ crypto_int64 carry0;
+ crypto_int64 carry1;
+ crypto_int64 carry2;
+ crypto_int64 carry3;
+ crypto_int64 carry4;
+ crypto_int64 carry5;
+ crypto_int64 carry6;
+ crypto_int64 carry7;
+ crypto_int64 carry8;
+ crypto_int64 carry9;
+ crypto_int64 carry10;
+ crypto_int64 carry11;
+ crypto_int64 carry12;
+ crypto_int64 carry13;
+ crypto_int64 carry14;
+ crypto_int64 carry15;
+ crypto_int64 carry16;
+ crypto_int64 carry17;
+ crypto_int64 carry18;
+ crypto_int64 carry19;
+ crypto_int64 carry20;
+ crypto_int64 carry21;
+ crypto_int64 carry22;
+
+ s0 = c0 + a0*b0;
+ s1 = c1 + a0*b1 + a1*b0;
+ s2 = c2 + a0*b2 + a1*b1 + a2*b0;
+ s3 = c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0;
+ s4 = c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0;
+ s5 = c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0;
+ s6 = c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0;
+ s7 = c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0;
+ s8 = c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0;
+ s9 = c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0;
+ s10 = c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0;
+ s11 = c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0;
+ s12 = a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1;
+ s13 = a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2;
+ s14 = a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3;
+ s15 = a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4;
+ s16 = a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5;
+ s17 = a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6;
+ s18 = a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7;
+ s19 = a8*b11 + a9*b10 + a10*b9 + a11*b8;
+ s20 = a9*b11 + a10*b10 + a11*b9;
+ s21 = a10*b11 + a11*b10;
+ s22 = a11*b11;
+ s23 = 0;
+
+ carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+ carry12 = (s12 + (1<<20)) >> 21; s13 += carry12; s12 -= SHL64(carry12,21);
+ carry14 = (s14 + (1<<20)) >> 21; s15 += carry14; s14 -= SHL64(carry14,21);
+ carry16 = (s16 + (1<<20)) >> 21; s17 += carry16; s16 -= SHL64(carry16,21);
+ carry18 = (s18 + (1<<20)) >> 21; s19 += carry18; s18 -= SHL64(carry18,21);
+ carry20 = (s20 + (1<<20)) >> 21; s21 += carry20; s20 -= SHL64(carry20,21);
+ carry22 = (s22 + (1<<20)) >> 21; s23 += carry22; s22 -= SHL64(carry22,21);
+
+ carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+ carry13 = (s13 + (1<<20)) >> 21; s14 += carry13; s13 -= SHL64(carry13,21);
+ carry15 = (s15 + (1<<20)) >> 21; s16 += carry15; s15 -= SHL64(carry15,21);
+ carry17 = (s17 + (1<<20)) >> 21; s18 += carry17; s17 -= SHL64(carry17,21);
+ carry19 = (s19 + (1<<20)) >> 21; s20 += carry19; s19 -= SHL64(carry19,21);
+ carry21 = (s21 + (1<<20)) >> 21; s22 += carry21; s21 -= SHL64(carry21,21);
+
+ s11 += s23 * 666643;
+ s12 += s23 * 470296;
+ s13 += s23 * 654183;
+ s14 -= s23 * 997805;
+ s15 += s23 * 136657;
+ s16 -= s23 * 683901;
+ s23 = 0;
+
+ s10 += s22 * 666643;
+ s11 += s22 * 470296;
+ s12 += s22 * 654183;
+ s13 -= s22 * 997805;
+ s14 += s22 * 136657;
+ s15 -= s22 * 683901;
+ s22 = 0;
+
+ s9 += s21 * 666643;
+ s10 += s21 * 470296;
+ s11 += s21 * 654183;
+ s12 -= s21 * 997805;
+ s13 += s21 * 136657;
+ s14 -= s21 * 683901;
+ s21 = 0;
+
+ s8 += s20 * 666643;
+ s9 += s20 * 470296;
+ s10 += s20 * 654183;
+ s11 -= s20 * 997805;
+ s12 += s20 * 136657;
+ s13 -= s20 * 683901;
+ s20 = 0;
+
+ s7 += s19 * 666643;
+ s8 += s19 * 470296;
+ s9 += s19 * 654183;
+ s10 -= s19 * 997805;
+ s11 += s19 * 136657;
+ s12 -= s19 * 683901;
+ s19 = 0;
+
+ s6 += s18 * 666643;
+ s7 += s18 * 470296;
+ s8 += s18 * 654183;
+ s9 -= s18 * 997805;
+ s10 += s18 * 136657;
+ s11 -= s18 * 683901;
+ s18 = 0;
+
+ carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+ carry12 = (s12 + (1<<20)) >> 21; s13 += carry12; s12 -= SHL64(carry12,21);
+ carry14 = (s14 + (1<<20)) >> 21; s15 += carry14; s14 -= SHL64(carry14,21);
+ carry16 = (s16 + (1<<20)) >> 21; s17 += carry16; s16 -= SHL64(carry16,21);
+
+ carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+ carry13 = (s13 + (1<<20)) >> 21; s14 += carry13; s13 -= SHL64(carry13,21);
+ carry15 = (s15 + (1<<20)) >> 21; s16 += carry15; s15 -= SHL64(carry15,21);
+
+ s5 += s17 * 666643;
+ s6 += s17 * 470296;
+ s7 += s17 * 654183;
+ s8 -= s17 * 997805;
+ s9 += s17 * 136657;
+ s10 -= s17 * 683901;
+ s17 = 0;
+
+ s4 += s16 * 666643;
+ s5 += s16 * 470296;
+ s6 += s16 * 654183;
+ s7 -= s16 * 997805;
+ s8 += s16 * 136657;
+ s9 -= s16 * 683901;
+ s16 = 0;
+
+ s3 += s15 * 666643;
+ s4 += s15 * 470296;
+ s5 += s15 * 654183;
+ s6 -= s15 * 997805;
+ s7 += s15 * 136657;
+ s8 -= s15 * 683901;
+ s15 = 0;
+
+ s2 += s14 * 666643;
+ s3 += s14 * 470296;
+ s4 += s14 * 654183;
+ s5 -= s14 * 997805;
+ s6 += s14 * 136657;
+ s7 -= s14 * 683901;
+ s14 = 0;
+
+ s1 += s13 * 666643;
+ s2 += s13 * 470296;
+ s3 += s13 * 654183;
+ s4 -= s13 * 997805;
+ s5 += s13 * 136657;
+ s6 -= s13 * 683901;
+ s13 = 0;
+
+ s0 += s12 * 666643;
+ s1 += s12 * 470296;
+ s2 += s12 * 654183;
+ s3 -= s12 * 997805;
+ s4 += s12 * 136657;
+ s5 -= s12 * 683901;
+ s12 = 0;
+
+ carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+
+ carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+
+ s0 += s12 * 666643;
+ s1 += s12 * 470296;
+ s2 += s12 * 654183;
+ s3 -= s12 * 997805;
+ s4 += s12 * 136657;
+ s5 -= s12 * 683901;
+ s12 = 0;
+
+ carry0 = s0 >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry1 = s1 >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry2 = s2 >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry3 = s3 >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry4 = s4 >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry5 = s5 >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry6 = s6 >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry7 = s7 >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry8 = s8 >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry9 = s9 >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry10 = s10 >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+ carry11 = s11 >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+
+ s0 += s12 * 666643;
+ s1 += s12 * 470296;
+ s2 += s12 * 654183;
+ s3 -= s12 * 997805;
+ s4 += s12 * 136657;
+ s5 -= s12 * 683901;
+ s12 = 0;
+
+ carry0 = s0 >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry1 = s1 >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry2 = s2 >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry3 = s3 >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry4 = s4 >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry5 = s5 >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry6 = s6 >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry7 = s7 >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry8 = s8 >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry9 = s9 >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry10 = s10 >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+
+ s[0] = s0 >> 0;
+ s[1] = s0 >> 8;
+ s[2] = (s0 >> 16) | SHL64(s1,5);
+ s[3] = s1 >> 3;
+ s[4] = s1 >> 11;
+ s[5] = (s1 >> 19) | SHL64(s2,2);
+ s[6] = s2 >> 6;
+ s[7] = (s2 >> 14) | SHL64(s3,7);
+ s[8] = s3 >> 1;
+ s[9] = s3 >> 9;
+ s[10] = (s3 >> 17) | SHL64(s4,4);
+ s[11] = s4 >> 4;
+ s[12] = s4 >> 12;
+ s[13] = (s4 >> 20) | SHL64(s5,1);
+ s[14] = s5 >> 7;
+ s[15] = (s5 >> 15) | SHL64(s6,6);
+ s[16] = s6 >> 2;
+ s[17] = s6 >> 10;
+ s[18] = (s6 >> 18) | SHL64(s7,3);
+ s[19] = s7 >> 5;
+ s[20] = s7 >> 13;
+ s[21] = s8 >> 0;
+ s[22] = s8 >> 8;
+ s[23] = (s8 >> 16) | SHL64(s9,5);
+ s[24] = s9 >> 3;
+ s[25] = s9 >> 11;
+ s[26] = (s9 >> 19) | SHL64(s10,2);
+ s[27] = s10 >> 6;
+ s[28] = (s10 >> 14) | SHL64(s11,7);
+ s[29] = s11 >> 1;
+ s[30] = s11 >> 9;
+ s[31] = s11 >> 17;
+}
diff --git a/src/ext/ed25519/ref10/sc_reduce.c b/src/ext/ed25519/ref10/sc_reduce.c
new file mode 100644
index 0000000000..c5afa53741
--- /dev/null
+++ b/src/ext/ed25519/ref10/sc_reduce.c
@@ -0,0 +1,275 @@
+#include "sc.h"
+#include "crypto_int64.h"
+#include "crypto_uint32.h"
+#include "crypto_uint64.h"
+
+static crypto_uint64 load_3(const unsigned char *in)
+{
+ crypto_uint64 result;
+ result = (crypto_uint64) in[0];
+ result |= ((crypto_uint64) in[1]) << 8;
+ result |= ((crypto_uint64) in[2]) << 16;
+ return result;
+}
+
+static crypto_uint64 load_4(const unsigned char *in)
+{
+ crypto_uint64 result;
+ result = (crypto_uint64) in[0];
+ result |= ((crypto_uint64) in[1]) << 8;
+ result |= ((crypto_uint64) in[2]) << 16;
+ result |= ((crypto_uint64) in[3]) << 24;
+ return result;
+}
+
+/*
+Input:
+ s[0]+256*s[1]+...+256^63*s[63] = s
+
+Output:
+ s[0]+256*s[1]+...+256^31*s[31] = s mod l
+ where l = 2^252 + 27742317777372353535851937790883648493.
+ Overwrites s in place.
+*/
+
+void sc_reduce(unsigned char *s)
+{
+ crypto_int64 s0 = 2097151 & load_3(s);
+ crypto_int64 s1 = 2097151 & (load_4(s + 2) >> 5);
+ crypto_int64 s2 = 2097151 & (load_3(s + 5) >> 2);
+ crypto_int64 s3 = 2097151 & (load_4(s + 7) >> 7);
+ crypto_int64 s4 = 2097151 & (load_4(s + 10) >> 4);
+ crypto_int64 s5 = 2097151 & (load_3(s + 13) >> 1);
+ crypto_int64 s6 = 2097151 & (load_4(s + 15) >> 6);
+ crypto_int64 s7 = 2097151 & (load_3(s + 18) >> 3);
+ crypto_int64 s8 = 2097151 & load_3(s + 21);
+ crypto_int64 s9 = 2097151 & (load_4(s + 23) >> 5);
+ crypto_int64 s10 = 2097151 & (load_3(s + 26) >> 2);
+ crypto_int64 s11 = 2097151 & (load_4(s + 28) >> 7);
+ crypto_int64 s12 = 2097151 & (load_4(s + 31) >> 4);
+ crypto_int64 s13 = 2097151 & (load_3(s + 34) >> 1);
+ crypto_int64 s14 = 2097151 & (load_4(s + 36) >> 6);
+ crypto_int64 s15 = 2097151 & (load_3(s + 39) >> 3);
+ crypto_int64 s16 = 2097151 & load_3(s + 42);
+ crypto_int64 s17 = 2097151 & (load_4(s + 44) >> 5);
+ crypto_int64 s18 = 2097151 & (load_3(s + 47) >> 2);
+ crypto_int64 s19 = 2097151 & (load_4(s + 49) >> 7);
+ crypto_int64 s20 = 2097151 & (load_4(s + 52) >> 4);
+ crypto_int64 s21 = 2097151 & (load_3(s + 55) >> 1);
+ crypto_int64 s22 = 2097151 & (load_4(s + 57) >> 6);
+ crypto_int64 s23 = (load_4(s + 60) >> 3);
+ crypto_int64 carry0;
+ crypto_int64 carry1;
+ crypto_int64 carry2;
+ crypto_int64 carry3;
+ crypto_int64 carry4;
+ crypto_int64 carry5;
+ crypto_int64 carry6;
+ crypto_int64 carry7;
+ crypto_int64 carry8;
+ crypto_int64 carry9;
+ crypto_int64 carry10;
+ crypto_int64 carry11;
+ crypto_int64 carry12;
+ crypto_int64 carry13;
+ crypto_int64 carry14;
+ crypto_int64 carry15;
+ crypto_int64 carry16;
+
+ s11 += s23 * 666643;
+ s12 += s23 * 470296;
+ s13 += s23 * 654183;
+ s14 -= s23 * 997805;
+ s15 += s23 * 136657;
+ s16 -= s23 * 683901;
+ s23 = 0;
+
+ s10 += s22 * 666643;
+ s11 += s22 * 470296;
+ s12 += s22 * 654183;
+ s13 -= s22 * 997805;
+ s14 += s22 * 136657;
+ s15 -= s22 * 683901;
+ s22 = 0;
+
+ s9 += s21 * 666643;
+ s10 += s21 * 470296;
+ s11 += s21 * 654183;
+ s12 -= s21 * 997805;
+ s13 += s21 * 136657;
+ s14 -= s21 * 683901;
+ s21 = 0;
+
+ s8 += s20 * 666643;
+ s9 += s20 * 470296;
+ s10 += s20 * 654183;
+ s11 -= s20 * 997805;
+ s12 += s20 * 136657;
+ s13 -= s20 * 683901;
+ s20 = 0;
+
+ s7 += s19 * 666643;
+ s8 += s19 * 470296;
+ s9 += s19 * 654183;
+ s10 -= s19 * 997805;
+ s11 += s19 * 136657;
+ s12 -= s19 * 683901;
+ s19 = 0;
+
+ s6 += s18 * 666643;
+ s7 += s18 * 470296;
+ s8 += s18 * 654183;
+ s9 -= s18 * 997805;
+ s10 += s18 * 136657;
+ s11 -= s18 * 683901;
+ s18 = 0;
+
+ carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+ carry12 = (s12 + (1<<20)) >> 21; s13 += carry12; s12 -= SHL64(carry12,21);
+ carry14 = (s14 + (1<<20)) >> 21; s15 += carry14; s14 -= SHL64(carry14,21);
+ carry16 = (s16 + (1<<20)) >> 21; s17 += carry16; s16 -= SHL64(carry16,21);
+
+ carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+ carry13 = (s13 + (1<<20)) >> 21; s14 += carry13; s13 -= SHL64(carry13,21);
+ carry15 = (s15 + (1<<20)) >> 21; s16 += carry15; s15 -= SHL64(carry15,21);
+
+ s5 += s17 * 666643;
+ s6 += s17 * 470296;
+ s7 += s17 * 654183;
+ s8 -= s17 * 997805;
+ s9 += s17 * 136657;
+ s10 -= s17 * 683901;
+ s17 = 0;
+
+ s4 += s16 * 666643;
+ s5 += s16 * 470296;
+ s6 += s16 * 654183;
+ s7 -= s16 * 997805;
+ s8 += s16 * 136657;
+ s9 -= s16 * 683901;
+ s16 = 0;
+
+ s3 += s15 * 666643;
+ s4 += s15 * 470296;
+ s5 += s15 * 654183;
+ s6 -= s15 * 997805;
+ s7 += s15 * 136657;
+ s8 -= s15 * 683901;
+ s15 = 0;
+
+ s2 += s14 * 666643;
+ s3 += s14 * 470296;
+ s4 += s14 * 654183;
+ s5 -= s14 * 997805;
+ s6 += s14 * 136657;
+ s7 -= s14 * 683901;
+ s14 = 0;
+
+ s1 += s13 * 666643;
+ s2 += s13 * 470296;
+ s3 += s13 * 654183;
+ s4 -= s13 * 997805;
+ s5 += s13 * 136657;
+ s6 -= s13 * 683901;
+ s13 = 0;
+
+ s0 += s12 * 666643;
+ s1 += s12 * 470296;
+ s2 += s12 * 654183;
+ s3 -= s12 * 997805;
+ s4 += s12 * 136657;
+ s5 -= s12 * 683901;
+ s12 = 0;
+
+ carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+
+ carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+
+ s0 += s12 * 666643;
+ s1 += s12 * 470296;
+ s2 += s12 * 654183;
+ s3 -= s12 * 997805;
+ s4 += s12 * 136657;
+ s5 -= s12 * 683901;
+ s12 = 0;
+
+ carry0 = s0 >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry1 = s1 >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry2 = s2 >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry3 = s3 >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry4 = s4 >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry5 = s5 >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry6 = s6 >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry7 = s7 >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry8 = s8 >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry9 = s9 >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry10 = s10 >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+ carry11 = s11 >> 21; s12 += carry11; s11 -= SHL64(carry11,21);
+
+ s0 += s12 * 666643;
+ s1 += s12 * 470296;
+ s2 += s12 * 654183;
+ s3 -= s12 * 997805;
+ s4 += s12 * 136657;
+ s5 -= s12 * 683901;
+ s12 = 0;
+
+ carry0 = s0 >> 21; s1 += carry0; s0 -= SHL64(carry0,21);
+ carry1 = s1 >> 21; s2 += carry1; s1 -= SHL64(carry1,21);
+ carry2 = s2 >> 21; s3 += carry2; s2 -= SHL64(carry2,21);
+ carry3 = s3 >> 21; s4 += carry3; s3 -= SHL64(carry3,21);
+ carry4 = s4 >> 21; s5 += carry4; s4 -= SHL64(carry4,21);
+ carry5 = s5 >> 21; s6 += carry5; s5 -= SHL64(carry5,21);
+ carry6 = s6 >> 21; s7 += carry6; s6 -= SHL64(carry6,21);
+ carry7 = s7 >> 21; s8 += carry7; s7 -= SHL64(carry7,21);
+ carry8 = s8 >> 21; s9 += carry8; s8 -= SHL64(carry8,21);
+ carry9 = s9 >> 21; s10 += carry9; s9 -= SHL64(carry9,21);
+ carry10 = s10 >> 21; s11 += carry10; s10 -= SHL64(carry10,21);
+
+ s[0] = s0 >> 0;
+ s[1] = s0 >> 8;
+ s[2] = (s0 >> 16) | SHL64(s1,5);
+ s[3] = s1 >> 3;
+ s[4] = s1 >> 11;
+ s[5] = (s1 >> 19) | SHL64(s2,2);
+ s[6] = s2 >> 6;
+ s[7] = (s2 >> 14) | SHL64(s3,7);
+ s[8] = s3 >> 1;
+ s[9] = s3 >> 9;
+ s[10] = (s3 >> 17) | SHL64(s4,4);
+ s[11] = s4 >> 4;
+ s[12] = s4 >> 12;
+ s[13] = (s4 >> 20) | SHL64(s5,1);
+ s[14] = s5 >> 7;
+ s[15] = (s5 >> 15) | SHL64(s6,6);
+ s[16] = s6 >> 2;
+ s[17] = s6 >> 10;
+ s[18] = (s6 >> 18) | SHL64(s7,3);
+ s[19] = s7 >> 5;
+ s[20] = s7 >> 13;
+ s[21] = s8 >> 0;
+ s[22] = s8 >> 8;
+ s[23] = (s8 >> 16) | SHL64(s9,5);
+ s[24] = s9 >> 3;
+ s[25] = s9 >> 11;
+ s[26] = (s9 >> 19) | SHL64(s10,2);
+ s[27] = s10 >> 6;
+ s[28] = (s10 >> 14) | SHL64(s11,7);
+ s[29] = s11 >> 1;
+ s[30] = s11 >> 9;
+ s[31] = s11 >> 17;
+}
diff --git a/src/ext/ed25519/ref10/sign.c b/src/ext/ed25519/ref10/sign.c
new file mode 100644
index 0000000000..1190a0fc99
--- /dev/null
+++ b/src/ext/ed25519/ref10/sign.c
@@ -0,0 +1,29 @@
+/* (Modified by Tor to generate detached signatures.) */
+#include <string.h>
+#include "crypto_sign.h"
+#include "crypto_hash_sha512.h"
+#include "ge.h"
+#include "sc.h"
+
+int crypto_sign(
+ unsigned char *sig,
+ const unsigned char *m, size_t mlen,
+ const unsigned char *sk,const unsigned char *pk
+)
+{
+ unsigned char nonce[64];
+ unsigned char hram[64];
+ ge_p3 R;
+
+ crypto_hash_sha512_2(nonce, sk+32, 32, m, mlen);
+
+ sc_reduce(nonce);
+ ge_scalarmult_base(&R,nonce);
+ ge_p3_tobytes(sig,&R);
+
+ crypto_hash_sha512_3(hram, sig, 32, pk, 32, m, mlen);
+ sc_reduce(hram);
+ sc_muladd(sig + 32,hram,sk,nonce);
+
+ return 0;
+}
diff --git a/src/ext/ed25519/ref10/sqrtm1.h b/src/ext/ed25519/ref10/sqrtm1.h
new file mode 100644
index 0000000000..d8caa23b6a
--- /dev/null
+++ b/src/ext/ed25519/ref10/sqrtm1.h
@@ -0,0 +1 @@
+-32595792,-7943725,9377950,3500415,12389472,-272473,-25146209,-2005654,326686,11406482
diff --git a/src/ext/ed25519/ref10/sqrtm1.py b/src/ext/ed25519/ref10/sqrtm1.py
new file mode 100644
index 0000000000..9a47fbc12a
--- /dev/null
+++ b/src/ext/ed25519/ref10/sqrtm1.py
@@ -0,0 +1,28 @@
+q = 2**255 - 19
+
+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,q-2,q)
+
+def radix255(x):
+ x = x % q
+ if x + x > q: x -= q
+ x = [x,0,0,0,0,0,0,0,0,0]
+ bits = [26,25,26,25,26,25,26,25,26,25]
+ for i in range(9):
+ carry = (x[i] + 2**(bits[i]-1)) / 2**bits[i]
+ x[i] -= carry * 2**bits[i]
+ x[i + 1] += carry
+ result = ""
+ for i in range(9):
+ result = result+str(x[i])+","
+ result = result+str(x[9])
+ return result
+
+I = expmod(2,(q-1)/4,q)
+print radix255(I)
diff --git a/src/ext/ht.h b/src/ext/ht.h
index 61e9719224..09f5dcccd5 100644
--- a/src/ext/ht.h
+++ b/src/ext/ht.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2002, Christopher Clark.
* Copyright (c) 2005-2006, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See license at end. */
/* Based on ideas by Christopher Clark and interfaces from Niels Provos. */
@@ -38,8 +38,9 @@
}
#endif
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
#define HT_EMPTY(head) \
- ((head)->hth_n_entries == 0)
+ (((head)->hth_n_entries == 0) || 0)
/* How many elements in 'head'? */
#define HT_SIZE(head) \
diff --git a/src/ext/include.am b/src/ext/include.am
index 26e194e88e..576fd4efb8 100644
--- a/src/ext/include.am
+++ b/src/ext/include.am
@@ -15,4 +15,80 @@ EXTHEADERS = \
noinst_HEADERS+= $(EXTHEADERS)
+src_ext_ed25519_ref10_libed25519_ref10_a_CFLAGS=
+
+src_ext_ed25519_ref10_libed25519_ref10_a_SOURCES= \
+ src/ext/ed25519/ref10/fe_0.c \
+ src/ext/ed25519/ref10/fe_1.c \
+ src/ext/ed25519/ref10/fe_add.c \
+ src/ext/ed25519/ref10/fe_cmov.c \
+ src/ext/ed25519/ref10/fe_copy.c \
+ src/ext/ed25519/ref10/fe_frombytes.c \
+ src/ext/ed25519/ref10/fe_invert.c \
+ src/ext/ed25519/ref10/fe_isnegative.c \
+ src/ext/ed25519/ref10/fe_isnonzero.c \
+ src/ext/ed25519/ref10/fe_mul.c \
+ src/ext/ed25519/ref10/fe_neg.c \
+ src/ext/ed25519/ref10/fe_pow22523.c \
+ src/ext/ed25519/ref10/fe_sq.c \
+ src/ext/ed25519/ref10/fe_sq2.c \
+ src/ext/ed25519/ref10/fe_sub.c \
+ src/ext/ed25519/ref10/fe_tobytes.c \
+ src/ext/ed25519/ref10/ge_add.c \
+ src/ext/ed25519/ref10/ge_double_scalarmult.c \
+ src/ext/ed25519/ref10/ge_frombytes.c \
+ src/ext/ed25519/ref10/ge_madd.c \
+ src/ext/ed25519/ref10/ge_msub.c \
+ src/ext/ed25519/ref10/ge_p1p1_to_p2.c \
+ src/ext/ed25519/ref10/ge_p1p1_to_p3.c \
+ src/ext/ed25519/ref10/ge_p2_0.c \
+ src/ext/ed25519/ref10/ge_p2_dbl.c \
+ src/ext/ed25519/ref10/ge_p3_0.c \
+ src/ext/ed25519/ref10/ge_p3_dbl.c \
+ src/ext/ed25519/ref10/ge_p3_to_cached.c \
+ src/ext/ed25519/ref10/ge_p3_to_p2.c \
+ src/ext/ed25519/ref10/ge_p3_tobytes.c \
+ src/ext/ed25519/ref10/ge_precomp_0.c \
+ src/ext/ed25519/ref10/ge_scalarmult_base.c \
+ src/ext/ed25519/ref10/ge_sub.c \
+ src/ext/ed25519/ref10/ge_tobytes.c \
+ src/ext/ed25519/ref10/keypair.c \
+ src/ext/ed25519/ref10/open.c \
+ src/ext/ed25519/ref10/sc_muladd.c \
+ src/ext/ed25519/ref10/sc_reduce.c \
+ src/ext/ed25519/ref10/sign.c \
+ src/ext/ed25519/ref10/keyconv.c \
+ src/ext/ed25519/ref10/blinding.c
+
+ED25519_REF10_HDRS = \
+ src/ext/ed25519/ref10/api.h \
+ src/ext/ed25519/ref10/base.h \
+ src/ext/ed25519/ref10/base2.h \
+ src/ext/ed25519/ref10/crypto_hash_sha512.h \
+ src/ext/ed25519/ref10/crypto_int32.h \
+ src/ext/ed25519/ref10/crypto_int64.h \
+ src/ext/ed25519/ref10/crypto_sign.h \
+ src/ext/ed25519/ref10/crypto_uint32.h \
+ src/ext/ed25519/ref10/crypto_uint64.h \
+ src/ext/ed25519/ref10/crypto_verify_32.h \
+ src/ext/ed25519/ref10/d.h \
+ src/ext/ed25519/ref10/d2.h \
+ src/ext/ed25519/ref10/ed25519_ref10.h \
+ src/ext/ed25519/ref10/fe.h \
+ src/ext/ed25519/ref10/ge.h \
+ src/ext/ed25519/ref10/ge_add.h \
+ src/ext/ed25519/ref10/ge_madd.h \
+ src/ext/ed25519/ref10/ge_msub.h \
+ src/ext/ed25519/ref10/ge_p2_dbl.h \
+ src/ext/ed25519/ref10/ge_sub.h \
+ src/ext/ed25519/ref10/pow22523.h \
+ src/ext/ed25519/ref10/pow225521.h \
+ src/ext/ed25519/ref10/randombytes.h \
+ src/ext/ed25519/ref10/sc.h \
+ src/ext/ed25519/ref10/sqrtm1.h
+
+noinst_HEADERS += $(ED25519_REF10_HDRS)
+
+LIBED25519_REF10=src/ext/ed25519/ref10/libed25519_ref10.a
+noinst_LIBRARIES += $(LIBED25519_REF10)
diff --git a/src/ext/tinytest_demo.c b/src/ext/tinytest_demo.c
index 634e112cb8..c07f099791 100644
--- a/src/ext/tinytest_demo.c
+++ b/src/ext/tinytest_demo.c
@@ -74,13 +74,13 @@ test_strcmp(void *data)
values of the failing things.
Fail unless strcmp("abc, "abc") == 0 */
- tt_int_op(strcmp("abc", "abc"), ==, 0);
+ tt_int_op(strcmp("abc", "abc"), OP_EQ, 0);
/* Fail unless strcmp("abc, "abcd") is less than 0 */
- tt_int_op(strcmp("abc", "abcd"), < , 0);
+ tt_int_op(strcmp("abc", "abcd"), OP_LT, 0);
/* Incidentally, there's a test_str_op that uses strcmp internally. */
- tt_str_op("abc", <, "abcd");
+ tt_str_op("abc", OP_LT, "abcd");
/* Every test-case function needs to finish with an "end:"
@@ -153,11 +153,11 @@ test_memcpy(void *ptr)
/* Let's make sure that memcpy does what we'd like. */
strcpy(db->buffer1, "String 0");
memcpy(db->buffer2, db->buffer1, sizeof(db->buffer1));
- tt_str_op(db->buffer1, ==, db->buffer2);
+ tt_str_op(db->buffer1, OP_EQ, 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));
+ tt_mem_op(db->buffer1, OP_LT, 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. */
@@ -165,7 +165,7 @@ test_memcpy(void *ptr)
tt_assert(mem);
/* Another rather trivial test. */
- tt_str_op(db->buffer1, !=, mem);
+ tt_str_op(db->buffer1, OP_NE, mem);
end:
/* This time our end block has something to do. */
@@ -186,9 +186,9 @@ test_timeout(void *ptr)
#endif
t2 = time(NULL);
- tt_int_op(t2-t1, >=, 4);
+ tt_int_op(t2-t1, OP_GE, 4);
- tt_int_op(t2-t1, <=, 6);
+ tt_int_op(t2-t1, OP_LE, 6);
end:
;
diff --git a/src/ext/tor_queue.h b/src/ext/tor_queue.h
index f05e48c18e..a6530c2b9b 100644
--- a/src/ext/tor_queue.h
+++ b/src/ext/tor_queue.h
@@ -109,7 +109,8 @@ struct { \
*/
#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))
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
+#define TOR_SLIST_EMPTY(head) ((SLIST_FIRST(head) == TOR_SLIST_END(head)) || 0)
#define TOR_SLIST_NEXT(elm, field) ((elm)->field.sle_next)
#define TOR_SLIST_FOREACH(var, head, field) \
@@ -181,9 +182,11 @@ struct { \
/*
* 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_FIRST(head) ((head)->lh_first)
+#define TOR_LIST_END(head) NULL
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
+#define TOR_LIST_EMPTY(head) \
+ ((TOR_LIST_FIRST(head) == TOR_LIST_END(head)) || 0)
#define TOR_LIST_NEXT(elm, field) ((elm)->field.le_next)
#define TOR_LIST_FOREACH(var, head, field) \
@@ -265,8 +268,10 @@ struct { \
* 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_END(head) NULL
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
+#define TOR_SIMPLEQ_EMPTY(head) \
+ ((TOR_SIMPLEQ_FIRST(head) == TOR_SIMPLEQ_END(head)) || 0)
#define TOR_SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
#define TOR_SIMPLEQ_FOREACH(var, head, field) \
@@ -345,8 +350,9 @@ struct { \
/* XXX */
#define TOR_TAILQ_PREV(elm, headname, field) \
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
#define TOR_TAILQ_EMPTY(head) \
- (TOR_TAILQ_FIRST(head) == TOR_TAILQ_END(head))
+ ((TOR_TAILQ_FIRST(head) == TOR_TAILQ_END(head)) || 0)
#define TOR_TAILQ_FOREACH(var, head, field) \
for((var) = TOR_TAILQ_FIRST(head); \
@@ -462,8 +468,9 @@ struct { \
#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)
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
#define TOR_CIRCLEQ_EMPTY(head) \
- (TOR_CIRCLEQ_FIRST(head) == TOR_CIRCLEQ_END(head))
+ ((TOR_CIRCLEQ_FIRST(head) == TOR_CIRCLEQ_END(head)) || 0)
#define TOR_CIRCLEQ_FOREACH(var, head, field) \
for((var) = TOR_CIRCLEQ_FIRST(head); \
diff --git a/src/ext/trunnel/trunnel-impl.h b/src/ext/trunnel/trunnel-impl.h
new file mode 100644
index 0000000000..c88ee3988e
--- /dev/null
+++ b/src/ext/trunnel/trunnel-impl.h
@@ -0,0 +1,310 @@
+/* trunnel-impl.h -- copied from Trunnel v1.2
+ * https://gitweb.torproject.org/trunnel.git
+ * You probably shouldn't edit this file.
+ */
+/* trunnel-impl.h -- Implementation helpers for trunnel, included by
+ * generated trunnel files
+ *
+ * Copyright 2014, The Tor Project, Inc.
+ * See license at the end of this file for copying information.
+ */
+
+#ifndef TRUNNEL_IMPL_H_INCLUDED_
+#define TRUNNEL_IMPL_H_INCLUDED_
+#include "trunnel.h"
+#include <assert.h>
+#include <string.h>
+#ifdef TRUNNEL_LOCAL_H
+#include "trunnel-local.h"
+#endif
+
+#ifdef _MSC_VER
+#define uint8_t unsigned char
+#define uint16_t unsigned short
+#define uint32_t unsigned int
+#define uint64_t unsigned __int64
+#define inline __inline
+#else
+#include <stdint.h>
+#endif
+
+#ifdef _WIN32
+uint32_t trunnel_htonl(uint32_t a);
+uint32_t trunnel_ntohl(uint32_t a);
+uint16_t trunnel_htons(uint16_t a);
+uint16_t trunnel_ntohs(uint16_t a);
+#else
+#include <arpa/inet.h>
+#define trunnel_htonl(x) htonl(x)
+#define trunnel_htons(x) htons(x)
+#define trunnel_ntohl(x) ntohl(x)
+#define trunnel_ntohs(x) ntohs(x)
+#endif
+uint64_t trunnel_htonll(uint64_t a);
+uint64_t trunnel_ntohll(uint64_t a);
+
+#ifndef trunnel_assert
+#define trunnel_assert(x) assert(x)
+#endif
+
+static inline void
+trunnel_set_uint64(void *p, uint64_t v) {
+ memcpy(p, &v, 8);
+}
+static inline void
+trunnel_set_uint32(void *p, uint32_t v) {
+ memcpy(p, &v, 4);
+}
+static inline void
+trunnel_set_uint16(void *p, uint16_t v) {
+ memcpy(p, &v, 2);
+}
+static inline void
+trunnel_set_uint8(void *p, uint8_t v) {
+ memcpy(p, &v, 1);
+}
+
+static inline uint64_t
+trunnel_get_uint64(const void *p) {
+ uint64_t x;
+ memcpy(&x, p, 8);
+ return x;
+}
+static inline uint32_t
+trunnel_get_uint32(const void *p) {
+ uint32_t x;
+ memcpy(&x, p, 4);
+ return x;
+}
+static inline uint16_t
+trunnel_get_uint16(const void *p) {
+ uint16_t x;
+ memcpy(&x, p, 2);
+ return x;
+}
+static inline uint8_t
+trunnel_get_uint8(const void *p) {
+ return *(const uint8_t*)p;
+}
+
+
+#ifdef TRUNNEL_DEBUG_FAILING_ALLOC
+extern int trunnel_provoke_alloc_failure;
+
+static inline void *
+trunnel_malloc(size_t n)
+{
+ if (trunnel_provoke_alloc_failure) {
+ if (--trunnel_provoke_alloc_failure == 0)
+ return NULL;
+ }
+ return malloc(n);
+}
+static inline void *
+trunnel_calloc(size_t a, size_t b)
+{
+ if (trunnel_provoke_alloc_failure) {
+ if (--trunnel_provoke_alloc_failure == 0)
+ return NULL;
+ }
+ return calloc(a,b);
+}
+static inline char *
+trunnel_strdup(const char *s)
+{
+ if (trunnel_provoke_alloc_failure) {
+ if (--trunnel_provoke_alloc_failure == 0)
+ return NULL;
+ }
+ return strdup(s);
+}
+#else
+#ifndef trunnel_malloc
+#define trunnel_malloc(x) (malloc((x)))
+#endif
+#ifndef trunnel_calloc
+#define trunnel_calloc(a,b) (calloc((a),(b)))
+#endif
+#ifndef trunnel_strdup
+#define trunnel_strdup(s) (strdup((s)))
+#endif
+#endif
+
+#ifndef trunnel_realloc
+#define trunnel_realloc(a,b) realloc((a),(b))
+#endif
+
+#ifndef trunnel_free_
+#define trunnel_free_(x) (free(x))
+#endif
+#define trunnel_free(x) ((x) ? (trunnel_free_(x),0) : (0))
+
+#ifndef trunnel_abort
+#define trunnel_abort() abort()
+#endif
+
+#ifndef trunnel_memwipe
+#define trunnel_memwipe(mem, len) ((void)0)
+#define trunnel_wipestr(s) ((void)0)
+#else
+#define trunnel_wipestr(s) do { \
+ if (s) \
+ trunnel_memwipe(s, strlen(s)); \
+ } while (0)
+#endif
+
+/* ====== dynamic arrays ======== */
+
+#ifdef NDEBUG
+#define TRUNNEL_DYNARRAY_GET(da, n) \
+ ((da)->elts_[(n)])
+#else
+/** Return the 'n'th element of 'da'. */
+#define TRUNNEL_DYNARRAY_GET(da, n) \
+ (((n) >= (da)->n_ ? (trunnel_abort(),0) : 0), (da)->elts_[(n)])
+#endif
+
+/** Change the 'n'th element of 'da' to 'v'. */
+#define TRUNNEL_DYNARRAY_SET(da, n, v) do { \
+ trunnel_assert((n) < (da)->n_); \
+ (da)->elts_[(n)] = (v); \
+ } while (0)
+
+/** Expand the dynamic array 'da' of 'elttype' so that it can hold at least
+ * 'howmanymore' elements than its current capacity. Always tries to increase
+ * the length of the array. On failure, run the code in 'on_fail' and goto
+ * trunnel_alloc_failed. */
+#define TRUNNEL_DYNARRAY_EXPAND(elttype, da, howmanymore, on_fail) do { \
+ elttype *newarray; \
+ newarray = trunnel_dynarray_expand(&(da)->allocated_, \
+ (da)->elts_, (howmanymore), \
+ sizeof(elttype)); \
+ if (newarray == NULL) { \
+ on_fail; \
+ goto trunnel_alloc_failed; \
+ } \
+ (da)->elts_ = newarray; \
+ } while (0)
+
+/** Add 'v' to the end of the dynamic array 'da' of 'elttype', expanding it if
+ * necessary. code in 'on_fail' and goto trunnel_alloc_failed. */
+#define TRUNNEL_DYNARRAY_ADD(elttype, da, v, on_fail) do { \
+ if ((da)->n_ == (da)->allocated_) { \
+ TRUNNEL_DYNARRAY_EXPAND(elttype, da, 1, on_fail); \
+ } \
+ (da)->elts_[(da)->n_++] = (v); \
+ } while (0)
+
+/** Return the number of elements in 'da'. */
+#define TRUNNEL_DYNARRAY_LEN(da) ((da)->n_)
+
+/** Remove all storage held by 'da' and set it to be empty. Does not free
+ * storage held by the elements themselves. */
+#define TRUNNEL_DYNARRAY_CLEAR(da) do { \
+ trunnel_free((da)->elts_); \
+ (da)->elts_ = NULL; \
+ (da)->n_ = (da)->allocated_ = 0; \
+ } while (0)
+
+/** Remove all storage held by 'da' and set it to be empty. Does not free
+ * storage held by the elements themselves. */
+#define TRUNNEL_DYNARRAY_WIPE(da) do { \
+ trunnel_memwipe((da)->elts_, (da)->allocated_ * sizeof((da)->elts_[0])); \
+ } while (0)
+
+/** Helper: wraps or implements an OpenBSD-style reallocarray. Behaves
+ * as realloc(a, x*y), but verifies that no overflow will occur in the
+ * multiplication. Returns NULL on failure. */
+#ifndef trunnel_reallocarray
+void *trunnel_reallocarray(void *a, size_t x, size_t y);
+#endif
+
+/** Helper to expand a dynamic array. Behaves as TRUNNEL_DYNARRAY_EXPAND(),
+ * taking the array of elements in 'ptr', a pointer to thethe current number
+ * of allocated elements in allocated_p, the minimum numbeer of elements to
+ * add in 'howmanymore', and the size of a single element in 'eltsize'.
+ *
+ * On success, adjust *allocated_p, and return the new value for the array of
+ * elements. On failure, adjust nothing and return NULL.
+ */
+void *trunnel_dynarray_expand(size_t *allocated_p, void *ptr,
+ size_t howmanymore, size_t eltsize);
+
+/** Type for a function to free members of a dynarray of pointers. */
+typedef void (*trunnel_free_fn_t)(void *);
+
+/**
+ * Helper to change the length of a dynamic array. Takes pointers to the
+ * current allocated and n fields of the array in 'allocated_p' and 'len_p',
+ * and the current array of elements in 'ptr'; takes the length of a single
+ * element in 'eltsize'. Changes the length to 'newlen'. If 'newlen' is
+ * greater than the current length, pads the new elements with 0. If newlen
+ * is less than the current length, and free_fn is non-NULL, treat the
+ * array as an array of void *, and invoke free_fn() on each removed element.
+ *
+ * On success, adjust *allocated_p and *len_p, and return the new value for
+ * the array of elements. On failure, adjust nothing, set *errcode_ptr to 1,
+ * and return NULL.
+ */
+void *trunnel_dynarray_setlen(size_t *allocated_p, size_t *len_p,
+ void *ptr, size_t newlen,
+ size_t eltsize, trunnel_free_fn_t free_fn,
+ uint8_t *errcode_ptr);
+
+/**
+ * Helper: return a pointer to the value of 'str' as a NUL-terminated string.
+ * Might have to reallocate the storage for 'str' in order to fit in the final
+ * NUL character. On allocation failure, return NULL.
+ */
+const char *trunnel_string_getstr(trunnel_string_t *str);
+
+/**
+ * Helper: change the contents of 'str' to hold the 'len'-byte string in
+ * 'inp'. Adjusts the storage to have a terminating NUL that doesn't count
+ * towards the length of the string. On success, return 0. On failure, set
+ * *errcode_ptr to 1 and return -1.
+ */
+int trunnel_string_setstr0(trunnel_string_t *str, const char *inp, size_t len,
+ uint8_t *errcode_ptr);
+
+/**
+ * As trunnel_dynarray_setlen, but adjusts a string rather than a dynamic
+ * array, and ensures that the new string is NUL-terminated.
+ */
+int trunnel_string_setlen(trunnel_string_t *str, size_t newlen,
+ uint8_t *errcode_ptr);
+
+#endif
+
+
+/*
+Copyright 2014 The Tor Project, Inc.
+
+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 names of the copyright owners 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.
+*/
diff --git a/src/ext/trunnel/trunnel.c b/src/ext/trunnel/trunnel.c
new file mode 100644
index 0000000000..a18d67584e
--- /dev/null
+++ b/src/ext/trunnel/trunnel.c
@@ -0,0 +1,247 @@
+/* trunnel.c -- copied from Trunnel v1.4-pre
+ * https://gitweb.torproject.org/trunnel.git
+ * You probably shouldn't edit this file.
+ */
+/* trunnel.c -- Helper functions to implement trunnel.
+ *
+ * Copyright 2014, The Tor Project, Inc.
+ * See license at the end of this file for copying information.
+ *
+ * See trunnel-impl.h for documentation of these functions.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "trunnel-impl.h"
+
+#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
+ __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+# define IS_LITTLE_ENDIAN 1
+#elif defined(BYTE_ORDER) && defined(ORDER_LITTLE_ENDIAN) && \
+ BYTE_ORDER == __ORDER_LITTLE_ENDIAN
+# define IS_LITTLE_ENDIAN 1
+#elif defined(_WIN32)
+# define IS_LITTLE_ENDIAN 1
+#elif defined(__APPLE__)
+# include <libkern/OSByteOrder.h>
+# define BSWAP64(x) OSSwapLittleToHostInt64(x)
+#elif defined(sun) || defined(__sun)
+# include <sys/byteorder.h>
+# ifndef _BIG_ENDIAN
+# define IS_LITTLE_ENDIAN
+# endif
+#else
+# 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 IS_LITTLE_ENDIAN
+# endif
+#endif
+
+#ifdef _WIN32
+uint16_t
+trunnel_htons(uint16_t s)
+{
+ return (s << 8) | (s >> 8);
+}
+uint16_t
+trunnel_ntohs(uint16_t s)
+{
+ return (s << 8) | (s >> 8);
+}
+uint32_t
+trunnel_htonl(uint32_t s)
+{
+ return (s << 24) |
+ ((s << 8)&0xff0000) |
+ ((s >> 8)&0xff00) |
+ (s >> 24);
+}
+uint32_t
+trunnel_ntohl(uint32_t s)
+{
+ return (s << 24) |
+ ((s << 8)&0xff0000) |
+ ((s >> 8)&0xff00) |
+ (s >> 24);
+}
+#endif
+
+uint64_t
+trunnel_htonll(uint64_t a)
+{
+#ifdef IS_LITTLE_ENDIAN
+ return trunnel_htonl((uint32_t)(a>>32))
+ | (((uint64_t)trunnel_htonl((uint32_t)a))<<32);
+#else
+ return a;
+#endif
+}
+
+uint64_t
+trunnel_ntohll(uint64_t a)
+{
+ return trunnel_htonll(a);
+}
+
+#ifdef TRUNNEL_DEBUG_FAILING_ALLOC
+/** Used for debugging and running tricky test cases: Makes the nth
+ * memoryation allocation call from now fail.
+ */
+int trunnel_provoke_alloc_failure = 0;
+#endif
+
+void *
+trunnel_dynarray_expand(size_t *allocated_p, void *ptr,
+ size_t howmanymore, size_t eltsize)
+{
+ size_t newsize = howmanymore + *allocated_p;
+ void *newarray = NULL;
+ if (newsize < 8)
+ newsize = 8;
+ if (newsize < *allocated_p * 2)
+ newsize = *allocated_p * 2;
+ if (newsize <= *allocated_p || newsize < howmanymore)
+ return NULL;
+ newarray = trunnel_reallocarray(ptr, newsize, eltsize);
+ if (newarray == NULL)
+ return NULL;
+
+ *allocated_p = newsize;
+ return newarray;
+}
+
+#ifndef trunnel_reallocarray
+void *
+trunnel_reallocarray(void *a, size_t x, size_t y)
+{
+#ifdef TRUNNEL_DEBUG_FAILING_ALLOC
+ if (trunnel_provoke_alloc_failure) {
+ if (--trunnel_provoke_alloc_failure == 0)
+ return NULL;
+ }
+#endif
+ if (x > SIZE_MAX / y)
+ return NULL;
+ return trunnel_realloc(a, x * y);
+}
+#endif
+
+const char *
+trunnel_string_getstr(trunnel_string_t *str)
+{
+ trunnel_assert(str->allocated_ >= str->n_);
+ if (str->allocated_ == str->n_) {
+ TRUNNEL_DYNARRAY_EXPAND(char, str, 1, {});
+ }
+ str->elts_[str->n_] = 0;
+ return str->elts_;
+trunnel_alloc_failed:
+ return NULL;
+}
+
+int
+trunnel_string_setstr0(trunnel_string_t *str, const char *val, size_t len,
+ uint8_t *errcode_ptr)
+{
+ if (len == SIZE_MAX)
+ goto trunnel_alloc_failed;
+ if (str->allocated_ <= len) {
+ TRUNNEL_DYNARRAY_EXPAND(char, str, len + 1 - str->allocated_, {});
+ }
+ memcpy(str->elts_, val, len);
+ str->n_ = len;
+ str->elts_[len] = 0;
+ return 0;
+trunnel_alloc_failed:
+ *errcode_ptr = 1;
+ return -1;
+}
+
+int
+trunnel_string_setlen(trunnel_string_t *str, size_t newlen,
+ uint8_t *errcode_ptr)
+{
+ if (newlen == SIZE_MAX)
+ goto trunnel_alloc_failed;
+ if (str->allocated_ < newlen + 1) {
+ TRUNNEL_DYNARRAY_EXPAND(char, str, newlen + 1 - str->allocated_, {});
+ }
+ if (str->n_ < newlen) {
+ memset(& (str->elts_[str->n_]), 0, (newlen - str->n_));
+ }
+ str->n_ = newlen;
+ str->elts_[newlen] = 0;
+ return 0;
+
+ trunnel_alloc_failed:
+ *errcode_ptr = 1;
+ return -1;
+}
+
+void *
+trunnel_dynarray_setlen(size_t *allocated_p, size_t *len_p,
+ void *ptr, size_t newlen,
+ size_t eltsize, trunnel_free_fn_t free_fn,
+ uint8_t *errcode_ptr)
+{
+ if (*allocated_p < newlen) {
+ void *newptr = trunnel_dynarray_expand(allocated_p, ptr,
+ newlen - *allocated_p, eltsize);
+ if (newptr == NULL)
+ goto trunnel_alloc_failed;
+ ptr = newptr;
+ }
+ if (free_fn && *len_p > newlen) {
+ size_t i;
+ void **elts = (void **) ptr;
+ for (i = newlen; i < *len_p; ++i) {
+ free_fn(elts[i]);
+ elts[i] = NULL;
+ }
+ }
+ if (*len_p < newlen) {
+ memset( ((char*)ptr) + (eltsize * *len_p), 0, (newlen - *len_p) * eltsize);
+ }
+ *len_p = newlen;
+ return ptr;
+ trunnel_alloc_failed:
+ *errcode_ptr = 1;
+ return NULL;
+}
+
+/*
+Copyright 2014 The Tor Project, Inc.
+
+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 names of the copyright owners 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.
+*/
diff --git a/src/ext/trunnel/trunnel.h b/src/ext/trunnel/trunnel.h
new file mode 100644
index 0000000000..f51cade03f
--- /dev/null
+++ b/src/ext/trunnel/trunnel.h
@@ -0,0 +1,64 @@
+/* trunnel.h -- copied from Trunnel v1.2
+ * https://gitweb.torproject.org/trunnel.git
+ * You probably shouldn't edit this file.
+ */
+/* trunnel.h -- Public declarations for trunnel, to be included
+ * in trunnel header files.
+
+ * Copyright 2014, The Tor Project, Inc.
+ * See license at the end of this file for copying information.
+ */
+
+#ifndef TRUNNEL_H_INCLUDED_
+#define TRUNNEL_H_INCLUDED_
+
+#include <sys/types.h>
+
+/** Macro to declare a variable-length dynamically allocated array. Trunnel
+ * uses these to store all variable-length arrays. */
+#define TRUNNEL_DYNARRAY_HEAD(name, elttype) \
+ struct name { \
+ size_t n_; \
+ size_t allocated_; \
+ elttype *elts_; \
+ }
+
+/** Initializer for a dynamic array of a given element type. */
+#define TRUNNEL_DYNARRAY_INIT(elttype) { 0, 0, (elttype*)NULL }
+
+/** Typedef used for storing variable-length arrays of char. */
+typedef TRUNNEL_DYNARRAY_HEAD(trunnel_string_st, char) trunnel_string_t;
+
+#endif
+
+/*
+Copyright 2014 The Tor Project, Inc.
+
+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 names of the copyright owners 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.
+*/
diff --git a/src/include.am b/src/include.am
index d0693e25b0..c468af3649 100644
--- a/src/include.am
+++ b/src/include.am
@@ -1,7 +1,9 @@
include src/ext/include.am
+include src/trunnel/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/addressmap.c b/src/or/addressmap.c
index 998770a3db..d7ac7c8ec7 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define ADDRESSMAP_PRIVATE
diff --git a/src/or/addressmap.h b/src/or/addressmap.h
index 417832b31f..598f7b0e3e 100644
--- a/src/or/addressmap.h
+++ b/src/or/addressmap.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_ADDRESSMAP_H
diff --git a/src/or/buffers.c b/src/or/buffers.c
index 85eff36b4c..4cdc03bc03 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -55,6 +55,9 @@
* forever.
*/
+static void socks_request_set_socks5_error(socks_request_t *req,
+ socks5_reply_status_t reason);
+
static int parse_socks(const char *data, size_t datalen, socks_request_t *req,
int log_sockstype, int safe_socks, ssize_t *drain_out,
size_t *want_length_out);
@@ -1831,6 +1834,21 @@ fetch_ext_or_command_from_evbuffer(struct evbuffer *buf, ext_or_cmd_t **out)
}
#endif
+/** Create a SOCKS5 reply message with <b>reason</b> in its REP field and
+ * have Tor send it as error response to <b>req</b>.
+ */
+static void
+socks_request_set_socks5_error(socks_request_t *req,
+ socks5_reply_status_t reason)
+{
+ req->replylen = 10;
+ memset(req->reply,0,10);
+
+ req->reply[0] = 0x05; // VER field.
+ req->reply[1] = reason; // REP field.
+ req->reply[3] = 0x01; // ATYP field.
+}
+
/** 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
@@ -1894,7 +1912,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
}
*drain_out = 2u + usernamelen + 1u + passlen;
req->got_auth = 1;
- *want_length_out = 7; /* Minimal socks5 sommand. */
+ *want_length_out = 7; /* Minimal socks5 command. */
return 0;
} else if (req->auth_type == SOCKS_USER_PASS) {
/* unknown version byte */
@@ -1966,6 +1984,8 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
req->command != SOCKS_COMMAND_RESOLVE &&
req->command != SOCKS_COMMAND_RESOLVE_PTR) {
/* not a connect or resolve or a resolve_ptr? we don't support it. */
+ socks_request_set_socks5_error(req,SOCKS5_COMMAND_NOT_SUPPORTED);
+
log_warn(LD_APP,"socks5: command %d not recognized. Rejecting.",
req->command);
return -1;
@@ -1989,6 +2009,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
tor_addr_to_str(tmpbuf, &destaddr, sizeof(tmpbuf), 1);
if (strlen(tmpbuf)+1 > MAX_SOCKS_ADDR_LEN) {
+ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR);
log_warn(LD_APP,
"socks5 IP takes %d bytes, which doesn't fit in %d. "
"Rejecting.",
@@ -2001,14 +2022,18 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
if (req->command != SOCKS_COMMAND_RESOLVE_PTR &&
!addressmap_have_mapping(req->address,0)) {
log_unsafe_socks_warning(5, req->address, req->port, safe_socks);
- if (safe_socks)
+ if (safe_socks) {
+ socks_request_set_socks5_error(req, SOCKS5_NOT_ALLOWED);
return -1;
+ }
}
return 1;
}
case 3: /* fqdn */
log_debug(LD_APP,"socks5: fqdn address type");
if (req->command == SOCKS_COMMAND_RESOLVE_PTR) {
+ socks_request_set_socks5_error(req,
+ SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED);
log_warn(LD_APP, "socks5 received RESOLVE_PTR command with "
"hostname type. Rejecting.");
return -1;
@@ -2019,6 +2044,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return 0; /* not yet */
}
if (len+1 > MAX_SOCKS_ADDR_LEN) {
+ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR);
log_warn(LD_APP,
"socks5 hostname is %d bytes, which doesn't fit in "
"%d. Rejecting.", len+1,MAX_SOCKS_ADDR_LEN);
@@ -2028,7 +2054,20 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
req->address[len] = 0;
req->port = ntohs(get_uint16(data+5+len));
*drain_out = 5+len+2;
- if (!tor_strisprint(req->address) || strchr(req->address,'\"')) {
+
+ if (string_is_valid_ipv4_address(req->address) ||
+ string_is_valid_ipv6_address(req->address)) {
+ log_unsafe_socks_warning(5,req->address,req->port,safe_socks);
+
+ if (safe_socks) {
+ socks_request_set_socks5_error(req, SOCKS5_NOT_ALLOWED);
+ return -1;
+ }
+ }
+
+ if (!string_is_valid_hostname(req->address)) {
+ socks_request_set_socks5_error(req, SOCKS5_GENERAL_ERROR);
+
log_warn(LD_PROTOCOL,
"Your application (using socks5 to port %d) gave Tor "
"a malformed hostname: %s. Rejecting the connection.",
@@ -2042,6 +2081,8 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
"necessary. This is good.", req->port);
return 1;
default: /* unsupported */
+ socks_request_set_socks5_error(req,
+ SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED);
log_warn(LD_APP,"socks5: unsupported address type %d. Rejecting.",
(int) *(data+3));
return -1;
diff --git a/src/or/buffers.h b/src/or/buffers.h
index 6b91a2d6c1..4687fbefd7 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/channel.c b/src/or/channel.c
index edeee6937a..5ee0748802 100644
--- a/src/or/channel.c
+++ b/src/or/channel.c
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/channel.h b/src/or/channel.h
index dd0ca369cd..5c2a1a35e2 100644
--- a/src/or/channel.h
+++ b/src/or/channel.h
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index a8222dea35..719a153dd6 100644
--- a/src/or/channeltls.c
+++ b/src/or/channeltls.c
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -932,8 +932,8 @@ channel_tls_handle_state_change_on_orconn(channel_tls_t *chan,
tor_assert(conn);
tor_assert(conn->chan == chan);
tor_assert(chan->conn == conn);
- /* -Werror appeasement */
- tor_assert(old_state == old_state);
+ /* Shut the compiler up without triggering -Wtautological-compare */
+ (void)old_state;
base_chan = TLS_CHAN_TO_BASE(chan);
diff --git a/src/or/channeltls.h b/src/or/channeltls.h
index 5eb6e126bc..133ad43bb4 100644
--- a/src/or/channeltls.h
+++ b/src/or/channeltls.h
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circpathbias.c b/src/or/circpathbias.c
index 59024abd12..a6858a3460 100644
--- a/src/or/circpathbias.c
+++ b/src/or/circpathbias.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
diff --git a/src/or/circpathbias.h b/src/or/circpathbias.h
index c95d801a4b..bb8846353c 100644
--- a/src/or/circpathbias.h
+++ b/src/or/circpathbias.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 7a23fbaa79..ddb186bea4 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -60,9 +60,7 @@ 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);
-#ifdef CURVE25519_ENABLED
static int circuits_can_use_ntor(void);
-#endif
/** This function tries to get a channel to the specified endpoint,
* and then calls command_setup_channel() to give it the right
@@ -369,7 +367,6 @@ 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)
@@ -389,9 +386,6 @@ circuit_cpath_supports_ntor(const origin_circuit_t *circ)
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. */
@@ -399,11 +393,7 @@ static int
onion_populate_cpath(origin_circuit_t *circ)
{
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
@@ -773,7 +763,6 @@ 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. */
@@ -785,7 +774,6 @@ circuits_can_use_ntor(void)
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>
@@ -795,7 +783,6 @@ 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()) {
@@ -803,9 +790,6 @@ circuit_pick_create_handshake(uint8_t *cell_type_out,
*handshake_type_out = ONION_HANDSHAKE_TYPE_NTOR;
return;
}
-#else
- (void) ei;
-#endif
*cell_type_out = CELL_CREATE;
*handshake_type_out = ONION_HANDSHAKE_TYPE_TAP;
@@ -960,9 +944,9 @@ circuit_send_next_onion_skin(origin_circuit_t *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) {
+ if (!have_completed_a_circuit() && !circ->build_state->onehop_tunnel) {
const or_options_t *options = get_options();
- can_complete_circuit=1;
+ note_that_we_completed_a_circuit();
/* FFFF Log a count of known routers here */
log_notice(LD_GENERAL,
"Tor has successfully opened a circuit. "
@@ -1050,7 +1034,8 @@ circuit_note_clock_jumped(int seconds_elapsed)
seconds_elapsed >=0 ? "forward" : "backward");
control_event_general_status(LOG_WARN, "CLOCK_JUMPED TIME=%d",
seconds_elapsed);
- can_complete_circuit=0; /* so it'll log when it works again */
+ /* so we log when it works again */
+ note_that_we_maybe_cant_complete_circuits();
control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s",
"CLOCK_JUMPED");
circuit_mark_all_unused_circs();
@@ -1565,7 +1550,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
* -1 means "Don't use this router at all."
*/
the_nodes = nodelist_get_list();
- n_supported = tor_calloc(sizeof(int), smartlist_len(the_nodes));
+ n_supported = tor_calloc(smartlist_len(the_nodes), sizeof(int));
SMARTLIST_FOREACH_BEGIN(the_nodes, const node_t *, node) {
const int i = node_sl_idx;
if (router_digest_is_me(node->identity)) {
@@ -2199,13 +2184,9 @@ extend_info_new(const char *nickname, const char *digest,
strlcpy(info->nickname, nickname, sizeof(info->nickname));
if (onion_key)
info->onion_key = crypto_pk_dup_key(onion_key);
-#ifdef CURVE25519_ENABLED
if (curve25519_key)
memcpy(&info->curve25519_onion_key, curve25519_key,
sizeof(curve25519_public_key_t));
-#else
- (void)curve25519_key;
-#endif
tor_addr_copy(&info->addr, addr);
info->port = port;
return info;
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index 71caea94ed..e70cdc5825 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 7b4eda3fa7..0e88b47676 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -1,7 +1,7 @@
/* Copyright 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1719,30 +1719,36 @@ circuit_mark_for_close_, (circuit_t *circ, int reason, int line,
tor_assert(circ->state == CIRCUIT_STATE_OPEN);
tor_assert(ocirc->build_state->chosen_exit);
tor_assert(ocirc->rend_data);
- /* treat this like getting a nack from it */
- log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s",
- safe_str_client(ocirc->rend_data->onion_address),
- safe_str_client(build_state_get_exit_nickname(ocirc->build_state)),
- timed_out ? "Recording timeout." : "Removing from descriptor.");
- rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
- ocirc->rend_data,
- timed_out ?
- INTRO_POINT_FAILURE_TIMEOUT :
- INTRO_POINT_FAILURE_GENERIC);
+ if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) {
+ /* treat this like getting a nack from it */
+ log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s",
+ safe_str_client(ocirc->rend_data->onion_address),
+ safe_str_client(build_state_get_exit_nickname(ocirc->build_state)),
+ timed_out ? "Recording timeout." : "Removing from descriptor.");
+ rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
+ ocirc->rend_data,
+ timed_out ?
+ INTRO_POINT_FAILURE_TIMEOUT :
+ INTRO_POINT_FAILURE_GENERIC);
+ }
} else if (circ->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
reason != END_CIRC_REASON_TIMEOUT) {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
if (ocirc->build_state->chosen_exit && ocirc->rend_data) {
- log_info(LD_REND, "Failed intro circ %s to %s "
- "(building circuit to intro point). "
- "Marking intro point as possibly unreachable.",
- safe_str_client(ocirc->rend_data->onion_address),
- safe_str_client(build_state_get_exit_nickname(ocirc->build_state)));
- rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
- ocirc->rend_data,
- INTRO_POINT_FAILURE_UNREACHABLE);
+ if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) {
+ log_info(LD_REND, "Failed intro circ %s to %s "
+ "(building circuit to intro point). "
+ "Marking intro point as possibly unreachable.",
+ safe_str_client(ocirc->rend_data->onion_address),
+ safe_str_client(build_state_get_exit_nickname(
+ ocirc->build_state)));
+ rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
+ ocirc->rend_data,
+ INTRO_POINT_FAILURE_UNREACHABLE);
+ }
}
}
+
if (circ->n_chan) {
circuit_clear_cell_queue(circ, circ->n_chan);
/* Only send destroy if the channel isn't closing anyway */
diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h
index a8d746be53..ea1076d53f 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c
index 7175b6bf13..443dad0a54 100644
--- a/src/or/circuitmux.c
+++ b/src/or/circuitmux.c
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h
index 00707d97e2..53092cd66c 100644
--- a/src/or/circuitmux.h
+++ b/src/or/circuitmux.h
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuitmux_ewma.c b/src/or/circuitmux_ewma.c
index 3a2df26771..0d7d6ef197 100644
--- a/src/or/circuitmux_ewma.c
+++ b/src/or/circuitmux_ewma.c
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -277,8 +277,8 @@ ewma_alloc_circ_data(circuitmux_t *cmux,
tor_assert(circ);
tor_assert(direction == CELL_DIRECTION_OUT ||
direction == CELL_DIRECTION_IN);
- /* Shut the compiler up */
- tor_assert(cell_count == cell_count);
+ /* Shut the compiler up without triggering -Wtautological-compare */
+ (void)cell_count;
cdata = tor_malloc_zero(sizeof(*cdata));
cdata->base_.magic = EWMA_POL_CIRC_DATA_MAGIC;
diff --git a/src/or/circuitmux_ewma.h b/src/or/circuitmux_ewma.h
index a512745c77..ce78a8ef0d 100644
--- a/src/or/circuitmux_ewma.h
+++ b/src/or/circuitmux_ewma.h
@@ -1,4 +1,4 @@
-/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* * Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
index c24259c22c..a136278e58 100644
--- a/src/or/circuitstats.c
+++ b/src/or/circuitstats.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define CIRCUITSTATS_PRIVATE
@@ -404,7 +404,7 @@ circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
* distress anyway, so memory correctness here is paramount over
* doing acrobatics to preserve the array.
*/
- recent_circs = tor_calloc(sizeof(int8_t), num);
+ recent_circs = tor_calloc(num, sizeof(int8_t));
if (cbt->liveness.timeouts_after_firsthop &&
cbt->liveness.num_recent_circs > 0) {
memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop,
@@ -508,7 +508,7 @@ circuit_build_times_init(circuit_build_times_t *cbt)
cbt->liveness.num_recent_circs =
circuit_build_times_recent_circuit_count(NULL);
cbt->liveness.timeouts_after_firsthop =
- tor_calloc(sizeof(int8_t), cbt->liveness.num_recent_circs);
+ tor_calloc(cbt->liveness.num_recent_circs, sizeof(int8_t));
} else {
cbt->liveness.num_recent_circs = 0;
cbt->liveness.timeouts_after_firsthop = NULL;
@@ -873,7 +873,7 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
}
/* build_time_t 0 means uninitialized */
- loaded_times = tor_calloc(sizeof(build_time_t), state->TotalBuildTimes);
+ loaded_times = tor_calloc(state->TotalBuildTimes, sizeof(build_time_t));
for (line = state->BuildtimeHistogram; line; line = line->next) {
smartlist_t *args = smartlist_new();
@@ -1085,7 +1085,21 @@ circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
tor_assert(1.0-quantile > 0);
tor_assert(cbt->Xm > 0);
- ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
+ /* If either alpha or p are 0, we would divide by zero, yielding an
+ * infinite (double) result; which would be clamped to INT32_MAX.
+ * Instead, initialise ret to INT32_MAX, and skip over these
+ * potentially illegal/trapping divides by zero.
+ */
+ ret = INT32_MAX;
+
+ if (cbt->alpha > 0) {
+ double p;
+ p = pow(1.0-quantile,1.0/cbt->alpha);
+ if (p > 0) {
+ ret = cbt->Xm/p;
+ }
+ }
+
if (ret > INT32_MAX) {
ret = INT32_MAX;
}
diff --git a/src/or/circuitstats.h b/src/or/circuitstats.h
index 3343310b8e..7cef4f7fb1 100644
--- a/src/or/circuitstats.h
+++ b/src/or/circuitstats.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 9ea0023568..ad4a3a546d 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -200,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_began, &b->timestamp_began, >))
+ timercmp(&a->timestamp_began, &b->timestamp_began, OP_GT))
return 1;
if (ob->build_state->is_internal)
/* XXX023 what the heck is this internal thing doing here. I
@@ -514,7 +514,7 @@ circuit_expire_building(void)
if (TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out)
cutoff = hs_extremely_old_cutoff;
- if (timercmp(&victim->timestamp_began, &cutoff, >))
+ if (timercmp(&victim->timestamp_began, &cutoff, OP_GT))
continue; /* it's still young, leave it alone */
/* We need to double-check the opened state here because
@@ -524,7 +524,7 @@ circuit_expire_building(void)
* 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 (timercmp(&victim->timestamp_began, &close_cutoff, OP_GT)) {
if (!TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout) {
int first_hop_succeeded = TO_ORIGIN_CIRCUIT(victim)->cpath->state
== CPATH_STATE_OPEN;
@@ -672,7 +672,7 @@ 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_began, &extremely_old_cutoff, <)) {
+ if (timercmp(&victim->timestamp_began, &extremely_old_cutoff, OP_LT)) {
log_notice(LD_CIRC,
"Extremely large value for circuit build timeout: %lds. "
"Assuming clock jump. Purpose %d (%s)",
@@ -1255,7 +1255,7 @@ circuit_expire_old_circuits_clientside(void)
if (circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING)
circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
} else if (!circ->timestamp_dirty && circ->state == CIRCUIT_STATE_OPEN) {
- if (timercmp(&circ->timestamp_began, &cutoff, <)) {
+ if (timercmp(&circ->timestamp_began, &cutoff, OP_LT)) {
if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL ||
circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT ||
circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -2324,7 +2324,7 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
tor_assert(rendcirc);
/* one is already established, attach */
log_info(LD_REND,
- "rend joined circ %d already here. attaching. "
+ "rend joined circ %u already here. attaching. "
"(stream %d sec old)",
(unsigned)rendcirc->base_.n_circ_id, conn_age);
/* Mark rendezvous circuits as 'newly dirty' every time you use
diff --git a/src/or/circuituse.h b/src/or/circuituse.h
index 4c5977bee0..ce044d30dc 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/command.c b/src/or/command.c
index 1f6f93a868..268c495371 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/command.h b/src/or/command.h
index adea6adeaa..509b4a0e9f 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/config.c b/src/or/config.c
index c12437232d..ced4288f00 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -127,6 +127,7 @@ static config_abbrev_t option_abbrevs_[] = {
*/
static config_var_t option_vars_[] = {
V(AccountingMax, MEMUNIT, "0 bytes"),
+ VAR("AccountingRule", STRING, AccountingRule_option, "max"),
V(AccountingStart, STRING, NULL),
V(Address, STRING, NULL),
V(AllowDotExit, BOOL, "0"),
@@ -262,6 +263,7 @@ static config_var_t option_vars_[] = {
V(HashedControlPassword, LINELIST, NULL),
V(HidServDirectoryV2, BOOL, "1"),
VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL),
+ VAR("HiddenServiceDirGroupReadable", LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines, NULL),
VAR("HiddenServicePort", LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines, NULL),
@@ -379,7 +381,7 @@ static config_var_t option_vars_[] = {
OBSOLETE("StrictEntryNodes"),
OBSOLETE("StrictExitNodes"),
V(StrictNodes, BOOL, "0"),
- V(Support022HiddenServices, AUTOBOOL, "auto"),
+ OBSOLETE("Support022HiddenServices"),
V(TestSocks, BOOL, "0"),
V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"),
V(Tor2webMode, BOOL, "0"),
@@ -442,6 +444,7 @@ static config_var_t option_vars_[] = {
V(TestingDescriptorMaxDownloadTries, UINT, "8"),
V(TestingMicrodescMaxDownloadTries, UINT, "8"),
V(TestingCertMaxDownloadTries, UINT, "8"),
+ V(TestingDirAuthVoteExit, ROUTERSET, NULL),
V(TestingDirAuthVoteGuard, ROUTERSET, NULL),
VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "0"),
@@ -512,12 +515,6 @@ static int options_transition_affects_workers(
static int options_transition_affects_descriptor(
const or_options_t *old_options, const or_options_t *new_options);
static int check_nickname_list(char **lst, const char *name, char **msg);
-
-static int parse_client_transport_line(const or_options_t *options,
- const char *line, int validate_only);
-
-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,
@@ -820,7 +817,9 @@ escaped_safe_str(const char *address)
}
/** Add the default directory authorities directly into the trusted dir list,
- * but only add them insofar as they share bits with <b>type</b>. */
+ * but only add them insofar as they share bits with <b>type</b>.
+ * Each authority's bits are restricted to the bits shared with <b>type</b>.
+ * If <b>type</b> is ALL_DIRINFO or NO_DIRINFO (zero), add all authorities. */
static void
add_default_trusted_dir_authorities(dirinfo_type_t type)
{
@@ -829,22 +828,22 @@ add_default_trusted_dir_authorities(dirinfo_type_t type)
"moria1 orport=9101 "
"v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 "
"128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31",
- "tor26 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 "
+ "dizum orport=443 "
+ "v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
"194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",
- "Tonga orport=443 bridge 82.94.251.203:80 "
- "4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D",
- "turtles orport=9090 "
- "v3ident=27B6B5996C426270A5C95488AA5BCEB6BCC86956 "
- "76.73.17.194:9030 F397 038A DC51 3361 35E7 B80B D99C A384 4360 292B",
+ "Tonga orport=443 bridge "
+ "82.94.251.203:80 4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D",
"gabelmoo orport=443 "
"v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
"131.188.40.189:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281",
"dannenberg orport=443 "
"v3ident=585769C78764D58426B8B52B6651A5A71137189A "
"193.23.244.244:80 7BE6 83E6 5D48 1413 21C5 ED92 F075 C553 64AC 7123",
- "urras orport=80 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 "
"v3ident=49015F787433103580E3B66A1707A00E60F2D15B "
@@ -852,6 +851,9 @@ add_default_trusted_dir_authorities(dirinfo_type_t type)
"Faravahar orport=443 "
"v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 "
"154.35.32.5:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC",
+ "longclaw orport=443 "
+ "v3ident=23D15D965BC35114467363C165C4F724B64B4F66 "
+ "199.254.238.52:80 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145",
NULL
};
for (i=0; authorities[i]; i++) {
@@ -962,7 +964,10 @@ consider_adding_dir_servers(const or_options_t *options,
type |= BRIDGE_DIRINFO;
if (!options->AlternateDirAuthority)
type |= V3_DIRINFO | EXTRAINFO_DIRINFO | MICRODESC_DIRINFO;
- add_default_trusted_dir_authorities(type);
+ /* if type == NO_DIRINFO, we don't want to add any of the
+ * default authorities, because we've replaced them all */
+ if (type != NO_DIRINFO)
+ add_default_trusted_dir_authorities(type);
}
if (!options->FallbackDir)
add_default_fallback_dir_servers();
@@ -998,7 +1003,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
int running_tor = options->command == CMD_RUN_TOR;
int set_conn_limit = 0;
int r = -1;
- int logs_marked = 0;
+ int logs_marked = 0, logs_initialized = 0;
int old_min_log_level = get_min_log_level();
/* Daemonize _first_, since we only want to open most of this stuff in
@@ -1081,6 +1086,8 @@ options_act_reversible(const or_options_t *old_options, char **msg)
"non-control network connections. Shutting down all existing "
"connections.");
connection_mark_all_noncontrol_connections();
+ /* We can't complete circuits until the network is re-enabled. */
+ note_that_we_maybe_cant_complete_circuits();
}
}
@@ -1136,6 +1143,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
*msg = tor_strdup("Failed to init Log options. See logs for details.");
goto rollback;
}
+ logs_initialized = 1;
commit:
r = 0;
@@ -1148,6 +1156,9 @@ options_act_reversible(const or_options_t *old_options, char **msg)
tor_free(severity);
tor_log_update_sigsafe_err_fds();
}
+ if (logs_initialized) {
+ flush_log_messages_from_startup();
+ }
{
const char *badness = NULL;
@@ -1411,24 +1422,26 @@ options_act(const or_options_t *old_options)
mark_transport_list();
pt_prepare_proxy_list_for_config_read();
- if (options->ClientTransportPlugin) {
- for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(options, cl->value, 0)<0) {
- log_warn(LD_BUG,
- "Previously validated ClientTransportPlugin line "
- "could not be added!");
- return -1;
+ if (!options->DisableNetwork) {
+ if (options->ClientTransportPlugin) {
+ for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
+ if (parse_transport_line(options, cl->value, 0, 0) < 0) {
+ log_warn(LD_BUG,
+ "Previously validated ClientTransportPlugin line "
+ "could not be added!");
+ return -1;
+ }
}
}
- }
- if (options->ServerTransportPlugin && server_mode(options)) {
- for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
- if (parse_server_transport_line(options, cl->value, 0)<0) {
- log_warn(LD_BUG,
- "Previously validated ServerTransportPlugin line "
- "could not be added!");
- return -1;
+ if (options->ServerTransportPlugin && server_mode(options)) {
+ for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
+ if (parse_transport_line(options, cl->value, 0, 1) < 0) {
+ log_warn(LD_BUG,
+ "Previously validated ServerTransportPlugin line "
+ "could not be added!");
+ return -1;
+ }
}
}
}
@@ -1691,7 +1704,7 @@ options_act(const or_options_t *old_options)
if (server_mode(options) && !server_mode(old_options)) {
ip_address_changed(0);
- if (can_complete_circuit || !any_predicted_circuits(time(NULL)))
+ if (have_completed_a_circuit() || !any_predicted_circuits(time(NULL)))
inform_testing_reachability();
}
cpuworkers_rotate();
@@ -1707,7 +1720,6 @@ options_act(const or_options_t *old_options)
connection_or_update_token_buckets(get_connection_array(), options);
}
-
/* Only collect directory-request statistics on relays and bridges. */
options->DirReqStatistics = options->DirReqStatistics_option &&
server_mode(options);
@@ -2034,7 +2046,7 @@ print_usage(void)
printf(
"Copyright (c) 2001-2004, Roger Dingledine\n"
"Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson\n"
-"Copyright (c) 2007-2013, The Tor Project, Inc.\n\n"
+"Copyright (c) 2007-2014, The Tor Project, Inc.\n\n"
"tor -f <torrc> [args]\n"
"See man page for options, or https://www.torproject.org/ for "
"documentation.\n");
@@ -2066,6 +2078,13 @@ get_last_resolved_addr(void)
return last_resolved_addr;
}
+/** Reset last_resolved_addr from outside this file. */
+void
+reset_last_resolved_addr(void)
+{
+ last_resolved_addr = 0;
+}
+
/**
* Use <b>options-\>Address</b> to guess our public IP address.
*
@@ -3141,6 +3160,16 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
}
+ options->AccountingRule = ACCT_MAX;
+ if (options->AccountingRule_option) {
+ if (!strcmp(options->AccountingRule_option, "sum"))
+ options->AccountingRule = ACCT_SUM;
+ else if (!strcmp(options->AccountingRule_option, "max"))
+ options->AccountingRule = ACCT_MAX;
+ else
+ REJECT("AccountingRule must be 'sum' or 'max'");
+ }
+
if (options->HTTPProxy) { /* parse it now */
if (tor_addr_port_lookup(options->HTTPProxy,
&options->HTTPProxyAddr, &options->HTTPProxyPort) < 0)
@@ -3301,12 +3330,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(options, cl->value, 1)<0)
+ if (parse_transport_line(options, cl->value, 1, 0) < 0)
REJECT("Invalid client transport line. See logs for details.");
}
for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
- if (parse_server_transport_line(options, cl->value, 1)<0)
+ if (parse_transport_line(options, cl->value, 1, 1) < 0)
REJECT("Invalid server transport line. See logs for details.");
}
@@ -4762,46 +4791,52 @@ parse_bridge_line(const char *line)
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.
+/** Read the contents of a ClientTransportPlugin or ServerTransportPlugin
+ * line from <b>line</b>, depending on the value of <b>server</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 the
- * transport is needed by some bridge:
+ * 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 or_options_t *options,
- const char *line, int validate_only)
+ * - If it's a managed proxy line, launch the managed proxy.
+ */
+
+STATIC int
+parse_transport_line(const or_options_t *options,
+ const char *line, int validate_only,
+ int server)
{
+
smartlist_t *items = NULL;
int r;
- char *field2=NULL;
-
- const char *transports=NULL;
- smartlist_t *transport_list=NULL;
- char *addrport=NULL;
+ const char *transports = NULL;
+ smartlist_t *transport_list = NULL;
+ char *type = NULL;
+ char *addrport = NULL;
tor_addr_t addr;
uint16_t port = 0;
- int socks_ver=PROXY_NONE;
+ int socks_ver = PROXY_NONE;
/* managed proxy options */
- int is_managed=0;
- char **proxy_argv=NULL;
- char **tmp=NULL;
+ int is_managed = 0;
+ char **proxy_argv = NULL;
+ char **tmp = NULL;
int proxy_argc, i;
- int is_useless_proxy=1;
+ int is_useless_proxy = 1;
int line_length;
+ /* Split the line into space-separated tokens */
items = smartlist_new();
smartlist_split_string(items, line, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ line_length = smartlist_len(items);
- line_length = smartlist_len(items);
if (line_length < 3) {
- log_warn(LD_CONFIG, "Too few arguments on ClientTransportPlugin line.");
+ log_warn(LD_CONFIG,
+ "Too few arguments on %sTransportPlugin line.",
+ server ? "Server" : "Client");
goto err;
}
@@ -4825,71 +4860,97 @@ parse_client_transport_line(const or_options_t *options,
is_useless_proxy = 0;
} SMARTLIST_FOREACH_END(transport_name);
- /* field2 is either a SOCKS version or "exec" */
- field2 = smartlist_get(items, 1);
-
- if (!strcmp(field2,"socks4")) {
+ type = smartlist_get(items, 1);
+ if (!strcmp(type, "exec")) {
+ is_managed = 1;
+ } else if (server && !strcmp(type, "proxy")) {
+ /* 'proxy' syntax only with ServerTransportPlugin */
+ is_managed = 0;
+ } else if (!server && !strcmp(type, "socks4")) {
+ /* 'socks4' syntax only with ClientTransportPlugin */
+ is_managed = 0;
socks_ver = PROXY_SOCKS4;
- } else if (!strcmp(field2,"socks5")) {
+ } else if (!server && !strcmp(type, "socks5")) {
+ /* 'socks5' syntax only with ClientTransportPlugin */
+ is_managed = 0;
socks_ver = PROXY_SOCKS5;
- } else if (!strcmp(field2,"exec")) {
- is_managed=1;
} else {
- log_warn(LD_CONFIG, "Strange ClientTransportPlugin field '%s'.",
- field2);
+ log_warn(LD_CONFIG,
+ "Strange %sTransportPlugin type '%s'",
+ server ? "Server" : "Client", type);
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));
+ log_warn(LD_CONFIG,
+ "Managed proxies are not compatible with Sandbox mode."
+ "(%sTransportPlugin line was %s)",
+ server ? "Server" : "Client", escaped(line));
goto err;
}
- if (is_managed) { /* managed */
- if (!validate_only && is_useless_proxy) {
- log_info(LD_GENERAL, "Pluggable transport proxy (%s) does not provide "
- "any needed transports and will not be launched.", line);
+ if (is_managed) {
+ /* managed */
+
+ if (!server && !validate_only && is_useless_proxy) {
+ log_info(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;
+ /*
+ * 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 && (server || !is_useless_proxy)) {
+ proxy_argc = line_length - 2;
tor_assert(proxy_argc > 0);
- proxy_argv = tor_calloc(sizeof(char *), (proxy_argc + 1));
+ proxy_argv = tor_calloc((proxy_argc + 1), sizeof(char *));
tmp = proxy_argv;
- for (i=0;i<proxy_argc;i++) { /* store arguments */
+
+ for (i = 0; i < proxy_argc; i++) {
+ /* store arguments */
*tmp++ = smartlist_get(items, 2);
smartlist_del_keeporder(items, 2);
}
- *tmp = NULL; /*terminated with NULL, just like execve() likes it*/
+ *tmp = NULL; /* terminated with NULL, just like execve() likes it */
/* kickstart the thing */
- pt_kickstart_client_proxy(transport_list, proxy_argv);
+ if (server) {
+ pt_kickstart_server_proxy(transport_list, proxy_argv);
+ } else {
+ pt_kickstart_client_proxy(transport_list, proxy_argv);
+ }
}
- } else { /* external */
+ } else {
+ /* external */
+
/* ClientTransportPlugins connecting through a proxy is managed only. */
- if (options->Socks4Proxy || options->Socks5Proxy || options->HTTPSProxy) {
+ if (!server && (options->Socks4Proxy || options->Socks5Proxy ||
+ options->HTTPSProxy)) {
log_warn(LD_CONFIG, "You have configured an external proxy with another "
"proxy type. (Socks4Proxy|Socks5Proxy|HTTPSProxy)");
goto err;
}
if (smartlist_len(transport_list) != 1) {
- log_warn(LD_CONFIG, "You can't have an external proxy with "
- "more than one transports.");
+ log_warn(LD_CONFIG,
+ "You can't have an external proxy with more than "
+ "one transport.");
goto err;
}
addrport = smartlist_get(items, 2);
- if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
- log_warn(LD_CONFIG, "Error parsing transport "
- "address '%s'", addrport);
+ if (tor_addr_port_lookup(addrport, &addr, &port) < 0) {
+ log_warn(LD_CONFIG,
+ "Error parsing transport address '%s'", addrport);
goto err;
}
+
if (!port) {
log_warn(LD_CONFIG,
"Transport address '%s' has no port.", addrport);
@@ -4897,11 +4958,15 @@ parse_client_transport_line(const or_options_t *options,
}
if (!validate_only) {
- transport_add_from_config(&addr, port, smartlist_get(transport_list, 0),
- socks_ver);
-
- log_info(LD_DIR, "Transport '%s' found at %s",
+ log_info(LD_DIR, "%s '%s' at %s.",
+ server ? "Server transport" : "Transport",
transports, fmt_addrport(&addr, port));
+
+ if (!server) {
+ transport_add_from_config(&addr, port,
+ smartlist_get(transport_list, 0),
+ socks_ver);
+ }
}
}
@@ -5073,138 +5138,12 @@ get_options_for_server_transport(const char *transport)
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 or_options_t *options,
- const char *line, int validate_only)
-{
- smartlist_t *items = NULL;
- int r;
- const char *transports=NULL;
- smartlist_t *transport_list=NULL;
- char *type=NULL;
- char *addrport=NULL;
- tor_addr_t addr;
- uint16_t port = 0;
-
- /* managed proxy options */
- int is_managed=0;
- char **proxy_argv=NULL;
- char **tmp=NULL;
- int proxy_argc,i;
-
- int line_length;
-
- items = smartlist_new();
- smartlist_split_string(items, line, NULL,
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
-
- line_length = smartlist_len(items);
- if (line_length < 3) {
- log_warn(LD_CONFIG, "Too few arguments on ServerTransportPlugin line.");
- goto err;
- }
-
- /* Get the first line element, split it to commas into
- transport_list (in case it's multiple transports) and validate
- the transport names. */
- transports = smartlist_get(items, 0);
- transport_list = smartlist_new();
- smartlist_split_string(transport_list, transports, ",",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) {
- if (!string_is_C_identifier(transport_name)) {
- log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
- transport_name);
- goto err;
- }
- } SMARTLIST_FOREACH_END(transport_name);
-
- type = smartlist_get(items, 1);
-
- if (!strcmp(type, "exec")) {
- is_managed=1;
- } else if (!strcmp(type, "proxy")) {
- is_managed=0;
- } else {
- log_warn(LD_CONFIG, "Strange ServerTransportPlugin type '%s'", type);
- goto err;
- }
-
- if (is_managed && 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;
- tor_assert(proxy_argc > 0);
- proxy_argv = tor_calloc(sizeof(char *), (proxy_argc + 1));
- tmp = proxy_argv;
-
- for (i=0;i<proxy_argc;i++) { /* store arguments */
- *tmp++ = smartlist_get(items, 2);
- smartlist_del_keeporder(items, 2);
- }
- *tmp = NULL; /*terminated with NULL, just like execve() likes it*/
-
- /* kickstart the thing */
- pt_kickstart_server_proxy(transport_list, proxy_argv);
- }
- } else { /* external */
- if (smartlist_len(transport_list) != 1) {
- log_warn(LD_CONFIG, "You can't have an external proxy with "
- "more than one transports.");
- goto err;
- }
-
- addrport = smartlist_get(items, 2);
-
- if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
- log_warn(LD_CONFIG, "Error parsing transport "
- "address '%s'", addrport);
- goto err;
- }
- if (!port) {
- log_warn(LD_CONFIG,
- "Transport address '%s' has no port.", addrport);
- goto err;
- }
-
- if (!validate_only) {
- log_info(LD_DIR, "Server transport '%s' at %s.",
- transports, fmt_addrport(&addr, port));
- }
- }
-
- r = 0;
- goto done;
-
- err:
- r = -1;
-
- done:
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- if (transport_list) {
- SMARTLIST_FOREACH(transport_list, char*, s, tor_free(s));
- smartlist_free(transport_list);
- }
-
- return r;
-}
-
/** Read the contents of a 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,
+ * is NO_DIRINFO (zero), then add the dirserver described in the line
+ * (minus whatever bits it's missing) as a valid authority.
+ * Return 0 on success or filtering out by type,
* or -1 if the line isn't well-formed or if we can't add it. */
static int
parse_dir_authority_line(const char *line, dirinfo_type_t required_type,
diff --git a/src/or/config.h b/src/or/config.h
index bf176a6860..133b472eb2 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -29,6 +29,7 @@ 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);
+void reset_last_resolved_addr(void);
int resolve_my_address(int warn_severity, const or_options_t *options,
uint32_t *addr_out,
const char **method_out, char **hostname_out);
@@ -140,6 +141,9 @@ STATIC int options_validate(or_options_t *old_options,
or_options_t *options,
or_options_t *default_options,
int from_setconf, char **msg);
+STATIC int parse_transport_line(const or_options_t *options,
+ const char *line, int validate_only,
+ int server);
#endif
#endif
diff --git a/src/or/confparse.c b/src/or/confparse.c
index c5400a6512..8ee985c92a 100644
--- a/src/or/confparse.c
+++ b/src/or/confparse.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
diff --git a/src/or/confparse.h b/src/or/confparse.h
index 2cd6c49a2a..3712924ac7 100644
--- a/src/or/confparse.h
+++ b/src/or/confparse.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_CONFPARSE_H
diff --git a/src/or/connection.c b/src/or/connection.c
index 525f4b5e85..ce3fda89c1 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -894,9 +894,9 @@ create_unix_sockaddr(const char *listenaddress, char **readable_address,
}
#endif /* HAVE_SYS_UN_H */
-/** Warn that an accept or a connect has failed because we're running up
- * against our ulimit. Rate-limit these warnings so that we don't spam
- * the log. */
+/** Warn that an accept or a connect has failed because we're running out of
+ * TCP sockets we can use on current system. Rate-limit these warnings so
+ * that we don't spam the log. */
static void
warn_too_many_conns(void)
{
@@ -906,7 +906,7 @@ warn_too_many_conns(void)
if ((m = rate_limit_log(&last_warned, approx_time()))) {
int n_conns = get_n_open_sockets();
log_warn(LD_NET,"Failing because we have %d connections already. Please "
- "raise your ulimit -n.%s", n_conns, m);
+ "read doc/TUNING for guidance.%s", n_conns, m);
tor_free(m);
control_event_general_status(LOG_WARN, "TOO_MANY_CONNECTIONS CURRENT=%d",
n_conns);
@@ -4388,6 +4388,8 @@ client_check_address_changed(tor_socket_t sock)
SMARTLIST_FOREACH(outgoing_addrs, tor_addr_t*, a_ptr, tor_free(a_ptr));
smartlist_clear(outgoing_addrs);
smartlist_add(outgoing_addrs, tor_memdup(&out_addr, sizeof(tor_addr_t)));
+ /* We'll need to resolve ourselves again. */
+ reset_last_resolved_addr();
/* Okay, now change our keys. */
ip_address_changed(1);
}
diff --git a/src/or/connection.h b/src/or/connection.h
index 13dcbcd919..7cdfd3e253 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -189,7 +189,8 @@ dir_connection_t *connection_dir_get_by_purpose_and_resource(
int any_other_active_or_conns(const or_connection_t *this_conn);
-#define connection_speaks_cells(conn) ((conn)->type == CONN_TYPE_OR)
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
+#define connection_speaks_cells(conn) (((conn)->type == CONN_TYPE_OR) || 0)
int connection_is_listener(connection_t *conn);
int connection_state_is_open(connection_t *conn);
int connection_state_is_connecting(connection_t *conn);
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 522807d7ba..14b391180e 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index 3c0e30a973..5071086a41 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 52f417d9dd..f228450723 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index c922fb5d52..b82896e26d 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/control.c b/src/or/control.c
index df694930bd..dc67588d6a 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -47,6 +47,7 @@
#include <sys/resource.h>
#endif
+#include "crypto_s2k.h"
#include "procmon.h"
/** Yield true iff <b>s</b> is the state of a control_connection_t that has
@@ -995,7 +996,8 @@ handle_control_setevents(control_connection_t *conn, uint32_t len,
/** Decode the hashed, base64'd passwords stored in <b>passwords</b>.
* Return a smartlist of acceptable passwords (unterminated strings of
- * length S2K_SPECIFIER_LEN+DIGEST_LEN) on success, or NULL on failure.
+ * length S2K_RFC2440_SPECIFIER_LEN+DIGEST_LEN) on success, or NULL on
+ * failure.
*/
smartlist_t *
decode_hashed_passwords(config_line_t *passwords)
@@ -1011,16 +1013,17 @@ decode_hashed_passwords(config_line_t *passwords)
if (!strcmpstart(hashed, "16:")) {
if (base16_decode(decoded, sizeof(decoded), hashed+3, strlen(hashed+3))<0
- || strlen(hashed+3) != (S2K_SPECIFIER_LEN+DIGEST_LEN)*2) {
+ || strlen(hashed+3) != (S2K_RFC2440_SPECIFIER_LEN+DIGEST_LEN)*2) {
goto err;
}
} else {
if (base64_decode(decoded, sizeof(decoded), hashed, strlen(hashed))
- != S2K_SPECIFIER_LEN+DIGEST_LEN) {
+ != S2K_RFC2440_SPECIFIER_LEN+DIGEST_LEN) {
goto err;
}
}
- smartlist_add(sl, tor_memdup(decoded, S2K_SPECIFIER_LEN+DIGEST_LEN));
+ smartlist_add(sl,
+ tor_memdup(decoded, S2K_RFC2440_SPECIFIER_LEN+DIGEST_LEN));
}
return sl;
@@ -1170,11 +1173,14 @@ handle_control_authenticate(control_connection_t *conn, uint32_t len,
bad_password = 1;
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_free(sl);
+ sl = NULL;
} else {
SMARTLIST_FOREACH(sl, char *, expected,
{
- secret_to_key(received,DIGEST_LEN,password,password_len,expected);
- if (tor_memeq(expected+S2K_SPECIFIER_LEN, received, DIGEST_LEN))
+ secret_to_key_rfc2440(received,DIGEST_LEN,
+ password,password_len,expected);
+ if (tor_memeq(expected + S2K_RFC2440_SPECIFIER_LEN,
+ received, DIGEST_LEN))
goto ok;
});
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
@@ -1257,6 +1263,7 @@ static const struct signal_t signal_table[] = {
{ SIGTERM, "INT" },
{ SIGNEWNYM, "NEWNYM" },
{ SIGCLEARDNSCACHE, "CLEARDNSCACHE"},
+ { SIGHEARTBEAT, "HEARTBEAT"},
{ 0, NULL },
};
@@ -2009,7 +2016,7 @@ getinfo_helper_events(control_connection_t *control_conn,
/* Note that status/ is not a catch-all for events; there's only supposed
* to be a status GETINFO if there's a corresponding STATUS event. */
if (!strcmp(question, "status/circuit-established")) {
- *answer = tor_strdup(can_complete_circuit ? "1" : "0");
+ *answer = tor_strdup(have_completed_a_circuit() ? "1" : "0");
} else if (!strcmp(question, "status/enough-dir-info")) {
*answer = tor_strdup(router_have_minimum_dir_info() ? "1" : "0");
} else if (!strcmp(question, "status/good-server-descriptor") ||
@@ -4448,6 +4455,9 @@ control_event_signal(uintptr_t signal)
case SIGCLEARDNSCACHE:
signal_string = "CLEARDNSCACHE";
break;
+ case SIGHEARTBEAT:
+ signal_string = "HEARTBEAT";
+ break;
default:
log_warn(LD_BUG, "Unrecognized signal %lu in control_event_signal",
(unsigned long)signal);
@@ -5090,20 +5100,30 @@ control_event_hs_descriptor_requested(const rend_data_t *rend_query,
void
control_event_hs_descriptor_receive_end(const char *action,
const rend_data_t *rend_query,
- const char *id_digest)
+ const char *id_digest,
+ const char *reason)
{
+ char *reason_field = NULL;
+
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;
}
+ if (reason) {
+ tor_asprintf(&reason_field, " REASON=%s", reason);
+ }
+
send_control_event(EVENT_HS_DESC, ALL_FORMATS,
- "650 HS_DESC %s %s %s %s\r\n",
+ "650 HS_DESC %s %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));
+ node_describe_longname_by_id(id_digest),
+ reason_field ? reason_field : "");
+
+ tor_free(reason_field);
}
/** send HS_DESC RECEIVED event
@@ -5119,23 +5139,27 @@ control_event_hs_descriptor_received(const rend_data_t *rend_query,
rend_query, id_digest);
return;
}
- control_event_hs_descriptor_receive_end("RECEIVED", rend_query, id_digest);
+ control_event_hs_descriptor_receive_end("RECEIVED", rend_query,
+ id_digest, NULL);
}
-/** send HS_DESC FAILED event
- *
- * called when request for hidden service descriptor returned failure.
+/** Send HS_DESC event to inform controller that query <b>rend_query</b>
+ * failed to retrieve hidden service descriptor identified by
+ * <b>id_digest</b>. If <b>reason</b> is not NULL, add it to REASON=
+ * field.
*/
void
control_event_hs_descriptor_failed(const rend_data_t *rend_query,
- const char *id_digest)
+ const char *id_digest,
+ const char *reason)
{
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);
+ control_event_hs_descriptor_receive_end("FAILED", rend_query,
+ id_digest, reason);
}
/** Free any leftover allocated memory of the control.c subsystem. */
diff --git a/src/or/control.h b/src/or/control.h
index 494f04b3bd..f62084b931 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -108,11 +108,13 @@ void control_event_hs_descriptor_requested(const rend_data_t *rend_query,
const char *hs_dir);
void control_event_hs_descriptor_receive_end(const char *action,
const rend_data_t *rend_query,
- const char *hs_dir);
+ const char *hs_dir,
+ const char *reason);
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);
+ const char *hs_dir,
+ const char *reason);
void control_free_all(void);
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 94138f8c1e..568d9e42d8 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -510,7 +510,7 @@ spawn_cpuworker(void)
connection_t *conn;
int err;
- fdarray = tor_calloc(sizeof(tor_socket_t), 2);
+ fdarray = tor_calloc(2, sizeof(tor_socket_t));
if ((err = tor_socketpair(AF_UNIX, SOCK_STREAM, 0, fdarray)) < 0) {
log_warn(LD_NET, "Couldn't construct socketpair for cpuworker: %s",
tor_socket_strerror(-err));
diff --git a/src/or/cpuworker.h b/src/or/cpuworker.h
index 317cef43ba..f7f1d8346b 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/directory.c b/src/or/directory.c
index 1aaa75ccee..e1f5964e1e 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -452,7 +452,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
return;
if (!get_via_tor) {
- if (options->UseBridges && type != BRIDGE_DIRINFO) {
+ if (options->UseBridges && !(type & BRIDGE_DIRINFO)) {
/* We want to ask a running bridge for which we have a descriptor.
*
* When we ask choose_random_entry() for a bridge, we specify what
@@ -479,7 +479,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
"nodes are available yet.");
return;
} else {
- if (prefer_authority || type == BRIDGE_DIRINFO) {
+ if (prefer_authority || (type & BRIDGE_DIRINFO)) {
/* only ask authdirservers, and don't ask myself */
rs = router_pick_trusteddirserver(type, pds_flags);
if (rs == NULL && (pds_flags & (PDS_NO_EXISTING_SERVERDESC_FETCH|
@@ -506,7 +506,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
return;
}
}
- if (!rs && type != BRIDGE_DIRINFO) {
+ if (!rs && !(type & BRIDGE_DIRINFO)) {
/* */
rs = directory_pick_generic_dirserver(type, pds_flags,
dir_purpose);
@@ -523,12 +523,12 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
/* anybody with a non-zero dirport will do. Disregard firewalls. */
pds_flags |= PDS_IGNORE_FASCISTFIREWALL;
rs = router_pick_directory_server(type, pds_flags);
- /* If we have any hope of building an indirect conn, we know some router
- * descriptors. If (rs==NULL), we can't build circuits anyway, so
- * there's no point in falling back to the authorities in this case. */
}
}
+ /* If we have any hope of building an indirect conn, we know some router
+ * descriptors. If (rs==NULL), we can't build circuits anyway, so
+ * there's no point in falling back to the authorities in this case. */
if (rs) {
const dir_indirection_t indirection =
get_via_tor ? DIRIND_ANONYMOUS : DIRIND_ONEHOP;
@@ -2073,23 +2073,25 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
}
if (conn->base_.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
- #define SEND_HS_DESC_FAILED_EVENT() ( \
+ #define SEND_HS_DESC_FAILED_EVENT(reason) ( \
control_event_hs_descriptor_failed(conn->rend_data, \
- conn->identity_digest) )
+ conn->identity_digest, \
+ reason) )
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:
- switch (rend_cache_store_v2_desc_as_client(body, conn->rend_data)) {
+ switch (rend_cache_store_v2_desc_as_client(body,
+ conn->requested_resource, conn->rend_data)) {
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();
+ SEND_HS_DESC_FAILED_EVENT("BAD_DESC");
break;
case RCS_OKAY:
default:
@@ -2108,14 +2110,14 @@ 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();
+ SEND_HS_DESC_FAILED_EVENT("NOT_FOUND");
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();
+ SEND_HS_DESC_FAILED_EVENT("QUERY_REJECTED");
break;
default:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
@@ -2124,7 +2126,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
"Retrying at another directory.",
status_code, escaped(reason), conn->base_.address,
conn->base_.port);
- SEND_HS_DESC_FAILED_EVENT();
+ SEND_HS_DESC_FAILED_EVENT("UNEXPECTED");
break;
}
}
@@ -3442,6 +3444,9 @@ download_status_increment_failure(download_status_t *dls, int status_code,
void
download_status_reset(download_status_t *dls)
{
+ if (dls->n_download_failures == IMPOSSIBLE_TO_DOWNLOAD)
+ return; /* Don't reset this. */
+
const smartlist_t *schedule = find_dl_schedule_and_len(
dls, get_options()->DirPort_set);
diff --git a/src/or/directory.h b/src/or/directory.h
index bc200797d4..d78046912c 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 91314405df..d31bb72361 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define DIRSERV_PRIVATE
@@ -478,7 +478,7 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
s = desc;
list = smartlist_new();
if (!router_parse_list_from_string(&s, NULL, list, SAVED_NOWHERE, 0, 0,
- annotation_buf)) {
+ annotation_buf, NULL)) {
SMARTLIST_FOREACH(list, routerinfo_t *, ri, {
msg_out = NULL;
tor_assert(ri->purpose == purpose);
@@ -494,7 +494,7 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
s = desc;
if (!router_parse_list_from_string(&s, NULL, list, SAVED_NOWHERE, 1, 0,
- NULL)) {
+ NULL, NULL)) {
SMARTLIST_FOREACH(list, extrainfo_t *, ei, {
msg_out = NULL;
@@ -512,7 +512,7 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose,
if (!n_parsed) {
*msg = "No descriptors found in your POST.";
if (WRA_WAS_ADDED(r))
- r = ROUTER_WAS_NOT_NEW;
+ r = ROUTER_IS_ALREADY_KNOWN;
} else {
*msg = "(no message)";
}
@@ -574,7 +574,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
ri->cache_info.signed_descriptor_body,
ri->cache_info.signed_descriptor_len, *msg);
routerinfo_free(ri);
- return ROUTER_WAS_NOT_NEW;
+ return ROUTER_IS_ALREADY_KNOWN;
}
/* Make a copy of desc, since router_add_to_routerlist might free
@@ -646,7 +646,7 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg)
if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, NULL, msg))) {
extrainfo_free(ei);
- return r < 0 ? ROUTER_WAS_NOT_NEW : ROUTER_BAD_EI;
+ return r < 0 ? ROUTER_IS_ALREADY_KNOWN : ROUTER_BAD_EI;
}
router_add_extrainfo_to_routerlist(ei, msg, 0, 0);
return ROUTER_ADDED_SUCCESSFULLY;
@@ -1369,18 +1369,18 @@ dirserv_compute_performance_thresholds(routerlist_t *rl,
* sort them and use that to compute thresholds. */
n_active = n_active_nonexit = 0;
/* Uptime for every active router. */
- uptimes = tor_calloc(sizeof(uint32_t), smartlist_len(rl->routers));
+ uptimes = tor_calloc(smartlist_len(rl->routers), sizeof(uint32_t));
/* Bandwidth for every active router. */
- bandwidths_kb = tor_calloc(sizeof(uint32_t), smartlist_len(rl->routers));
+ bandwidths_kb = tor_calloc(smartlist_len(rl->routers), sizeof(uint32_t));
/* Bandwidth for every active non-exit router. */
bandwidths_excluding_exits_kb =
- tor_calloc(sizeof(uint32_t), smartlist_len(rl->routers));
+ tor_calloc(smartlist_len(rl->routers), sizeof(uint32_t));
/* Weighted mean time between failure for each active router. */
- mtbfs = tor_calloc(sizeof(double), smartlist_len(rl->routers));
+ mtbfs = tor_calloc(smartlist_len(rl->routers), sizeof(double));
/* Time-known for each active router. */
- tks = tor_calloc(sizeof(long), smartlist_len(rl->routers));
+ tks = tor_calloc(smartlist_len(rl->routers), sizeof(long));
/* Weighted fractional uptime for each active router. */
- wfus = tor_calloc(sizeof(double), smartlist_len(rl->routers));
+ wfus = tor_calloc(smartlist_len(rl->routers), sizeof(double));
nodelist_assert_ok();
@@ -1395,6 +1395,8 @@ dirserv_compute_performance_thresholds(routerlist_t *rl,
routerinfo_t *ri = node->ri;
const char *id = node->identity;
uint32_t bw_kb;
+ /* resolve spurious clang shallow analysis null pointer errors */
+ tor_assert(ri);
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);
@@ -2026,75 +2028,6 @@ get_possible_sybil_list(const smartlist_t *routers)
return omit_as_sybil;
}
-/** Return non-zero iff a relay running the Tor version specified in
- * <b>platform</b> is suitable for use as a potential entry guard. */
-static int
-is_router_version_good_for_possible_guard(const char *platform)
-{
- static int parsed_versions_initialized = 0;
- static tor_version_t first_good_0_2_1_guard_version;
- static tor_version_t first_good_0_2_2_guard_version;
- static tor_version_t first_good_later_guard_version;
-
- tor_version_t router_version;
-
- /* XXX024 This block should be extracted into its own function. */
- /* XXXX Begin code copied from tor_version_as_new_as (in routerparse.c) */
- {
- char *s, *s2, *start;
- char tmp[128];
-
- tor_assert(platform);
-
- /* nonstandard Tor; be safe and say yes */
- if (strcmpstart(platform,"Tor "))
- return 1;
-
- start = (char *)eat_whitespace(platform+3);
- if (!*start) return 0;
- s = (char *)find_whitespace(start); /* also finds '\0', which is fine */
- s2 = (char*)eat_whitespace(s);
- if (!strcmpstart(s2, "(r") || !strcmpstart(s2, "(git-"))
- s = (char*)find_whitespace(s2);
-
- if ((size_t)(s-start+1) >= sizeof(tmp)) /* too big, no */
- return 0;
- strlcpy(tmp, start, s-start+1);
-
- if (tor_version_parse(tmp, &router_version)<0) {
- log_info(LD_DIR,"Router version '%s' unparseable.",tmp);
- return 1; /* be safe and say yes */
- }
- }
- /* XXXX End code copied from tor_version_as_new_as (in routerparse.c) */
-
- if (!parsed_versions_initialized) {
- /* CVE-2011-2769 was fixed on the relay side in Tor versions
- * 0.2.1.31, 0.2.2.34, and 0.2.3.6-alpha. */
- tor_assert(tor_version_parse("0.2.1.31",
- &first_good_0_2_1_guard_version)>=0);
- tor_assert(tor_version_parse("0.2.2.34",
- &first_good_0_2_2_guard_version)>=0);
- tor_assert(tor_version_parse("0.2.3.6-alpha",
- &first_good_later_guard_version)>=0);
-
- /* Don't parse these constant version strings once for every relay
- * for every vote. */
- parsed_versions_initialized = 1;
- }
-
- return ((tor_version_same_series(&first_good_0_2_1_guard_version,
- &router_version) &&
- tor_version_compare(&first_good_0_2_1_guard_version,
- &router_version) <= 0) ||
- (tor_version_same_series(&first_good_0_2_2_guard_version,
- &router_version) &&
- tor_version_compare(&first_good_0_2_2_guard_version,
- &router_version) <= 0) ||
- (tor_version_compare(&first_good_later_guard_version,
- &router_version) <= 0));
-}
-
/** Extract status information from <b>ri</b> and from other authority
* functions and store it in <b>rs</b>>.
*
@@ -2133,8 +2066,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
((options->AuthDirGuardBWGuarantee &&
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)) {
+ guard_bandwidth_excluding_exits_kb))) {
long tk = rep_hist_get_weighted_time_known(
node->identity, now);
double wfu = rep_hist_get_weighted_fractional_uptime(
@@ -2167,12 +2099,19 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
rs->ipv6_orport = ri->ipv6_orport;
}
- /* Iff we are in a testing network, use TestingDirAuthVoteGuard to
+ /* Iff we are in a testing network, use TestingDirAuthVoteExit to
+ give out Exit flags, and TestingDirAuthVoteGuard to
give out Guard flags. */
- if (options->TestingTorNetwork &&
- routerset_contains_routerstatus(options->TestingDirAuthVoteGuard,
+ if (options->TestingTorNetwork) {
+ if (routerset_contains_routerstatus(options->TestingDirAuthVoteExit,
+ rs, 0)) {
+ rs->is_exit = 1;
+ }
+
+ if (routerset_contains_routerstatus(options->TestingDirAuthVoteGuard,
rs, 0)) {
- rs->is_possible_guard = 1;
+ rs->is_possible_guard = 1;
+ }
}
}
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index 5d5ef2b732..57cec3401f 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 9ad92ca116..39505a4f9e 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define DIRVOTE_PRIVATE
@@ -611,7 +611,7 @@ dirvote_compute_params(smartlist_t *votes, int method, int total_authorities)
between INT32_MIN and INT32_MAX inclusive. This should be guaranteed by
the parsing code. */
- vals = tor_calloc(sizeof(int), n_votes);
+ vals = tor_calloc(n_votes, sizeof(int));
SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) {
if (!v->net_params)
@@ -647,6 +647,8 @@ dirvote_compute_params(smartlist_t *votes, int method, int total_authorities)
next_param = NULL;
else
next_param = smartlist_get(param_list, param_sl_idx+1);
+ /* resolve spurious clang shallow analysis null pointer errors */
+ tor_assert(param);
if (!next_param || strncmp(next_param, param, cur_param_len)) {
/* We've reached the end of a series. */
/* Make sure enough authorities voted on this param, unless the
@@ -1256,10 +1258,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_kb = tor_calloc(sizeof(uint32_t),
- smartlist_len(votes));
- uint32_t *measured_bws_kb = tor_calloc(sizeof(uint32_t),
- smartlist_len(votes));
+ uint32_t *bandwidths_kb = tor_calloc(smartlist_len(votes),
+ sizeof(uint32_t));
+ uint32_t *measured_bws_kb = tor_calloc(smartlist_len(votes),
+ sizeof(uint32_t));
int num_bandwidths;
int num_mbws;
@@ -1279,13 +1281,13 @@ networkstatus_compute_consensus(smartlist_t *votes,
memset(conflict, 0, sizeof(conflict));
memset(unknown, 0xff, sizeof(conflict));
- index = tor_calloc(sizeof(int), smartlist_len(votes));
- size = tor_calloc(sizeof(int), smartlist_len(votes));
- n_voter_flags = tor_calloc(sizeof(int), smartlist_len(votes));
- n_flag_voters = tor_calloc(sizeof(int), smartlist_len(flags));
- flag_map = tor_calloc(sizeof(int *), smartlist_len(votes));
- named_flag = tor_calloc(sizeof(int), smartlist_len(votes));
- unnamed_flag = tor_calloc(sizeof(int), smartlist_len(votes));
+ index = tor_calloc(smartlist_len(votes), sizeof(int));
+ size = tor_calloc(smartlist_len(votes), sizeof(int));
+ n_voter_flags = tor_calloc(smartlist_len(votes), sizeof(int));
+ n_flag_voters = tor_calloc(smartlist_len(flags), sizeof(int));
+ flag_map = tor_calloc(smartlist_len(votes), sizeof(int *));
+ named_flag = tor_calloc(smartlist_len(votes), sizeof(int));
+ unnamed_flag = tor_calloc(smartlist_len(votes), sizeof(int));
for (i = 0; i < smartlist_len(votes); ++i)
unnamed_flag[i] = named_flag[i] = -1;
@@ -1296,8 +1298,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
* 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_calloc(sizeof(int),
- smartlist_len(v->known_flags));
+ flag_map[v_sl_idx] = tor_calloc(smartlist_len(v->known_flags),
+ sizeof(int));
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));
@@ -1377,7 +1379,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
);
/* Now go through all the votes */
- flag_counts = tor_calloc(sizeof(int), smartlist_len(flags));
+ flag_counts = tor_calloc(smartlist_len(flags), sizeof(int));
while (1) {
vote_routerstatus_t *rs;
routerstatus_t rs_out;
@@ -3286,8 +3288,8 @@ dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method)
{
smartlist_t *lst = microdescs_parse_from_string(output,
- output+strlen(output), 0,
- SAVED_NOWHERE);
+ output+strlen(output), 0,
+ SAVED_NOWHERE, NULL);
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));
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index 7fa4010cf8..5d44ba4320 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/dns.c b/src/or/dns.c
index 362b97033e..7bf64dc4ff 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/dns.h b/src/or/dns.h
index 022cd4ac63..cabbb9ba09 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index ecd45be77c..3d63874a65 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/dnsserv.h b/src/or/dnsserv.h
index 687a77e59e..c8074dfaa0 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index b1fd310f97..b18aabe1f4 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1003,7 +1003,8 @@ node_understands_microdescriptors(const node_t *node)
}
/** Return true iff <b>node</b> is able to answer directory questions
- * of type <b>dirinfo</b>. */
+ * of type <b>dirinfo</b>. Always returns true if <b>dirinfo</b> is
+ * NO_DIRINFO (zero). */
static int
node_can_handle_dirinfo(const node_t *node, dirinfo_type_t dirinfo)
{
@@ -1025,13 +1026,13 @@ node_can_handle_dirinfo(const node_t *node, dirinfo_type_t dirinfo)
* <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
+ * guard (likely a bridge). If <b>dirinfo</b> is not NO_DIRINFO (zero),
+ * 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);
+ return choose_random_entry_impl(state, 0, NO_DIRINFO, NULL);
}
/** Pick a live (up and listed) directory guard from entry_guards for
@@ -1139,7 +1140,9 @@ populate_live_entry_guards(smartlist_t *live_entry_guards,
* If <b>for_directory</b> is set, we are looking for a directory guard.
*
* <b>dirinfo_type</b> contains the kind of directory information we
- * are looking for in our node.
+ * are looking for in our node, or NO_DIRINFO (zero) if we are not
+ * looking for any particular directory information (when set to
+ * NO_DIRINFO, the <b>dirinfo_type</b> filter is ignored).
*
* If <b>n_options_out</b> is set, we set it to the number of
* candidate guard nodes we had before picking a specific guard node.
@@ -1916,8 +1919,8 @@ bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
/** 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)
+MOCK_IMPL(int,
+transport_is_needed, (const char *transport_name))
{
if (!bridge_list)
return 0;
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
index 52b31a225d..5416398430 100644
--- a/src/or/entrynodes.h
+++ b/src/or/entrynodes.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -154,7 +154,7 @@ 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);
+MOCK_DECL(int, transport_is_needed, (const char *transport_name));
int validate_pluggable_transports_config(void);
double pathbias_get_close_success_count(entry_guard_t *guard);
diff --git a/src/or/eventdns_tor.h b/src/or/eventdns_tor.h
index 69662281bc..b135a534fc 100644
--- a/src/or/eventdns_tor.h
+++ b/src/or/eventdns_tor.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_EVENTDNS_TOR_H
diff --git a/src/or/ext_orport.h b/src/or/ext_orport.h
index ce45e5f418..277bbfdbcf 100644
--- a/src/or/ext_orport.h
+++ b/src/or/ext_orport.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef EXT_ORPORT_H
diff --git a/src/or/fp_pair.c b/src/or/fp_pair.c
index 1be169609a..fc7d107ba7 100644
--- a/src/or/fp_pair.c
+++ b/src/or/fp_pair.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
diff --git a/src/or/fp_pair.h b/src/or/fp_pair.h
index 89f664a813..67b94fb6b4 100644
--- a/src/or/fp_pair.h
+++ b/src/or/fp_pair.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/geoip.c b/src/or/geoip.c
index cdf2797db0..c02343d489 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -963,7 +963,7 @@ geoip_get_dirreq_history(dirreq_type_t type)
/* We may have rounded 'completed' up. Here we want to use the
* real value. */
complete = smartlist_len(dirreq_completed);
- dltimes = tor_calloc(sizeof(uint32_t), complete);
+ dltimes = tor_calloc(complete, sizeof(uint32_t));
SMARTLIST_FOREACH_BEGIN(dirreq_completed, dirreq_map_entry_t *, ent) {
uint32_t bytes_per_second;
uint32_t time_diff = (uint32_t) tv_mdiff(&ent->request_time,
@@ -1033,7 +1033,7 @@ geoip_get_client_history(geoip_client_action_t action,
if (!geoip_is_loaded(AF_INET) && !geoip_is_loaded(AF_INET6))
return -1;
- counts = tor_calloc(sizeof(unsigned), n_countries);
+ counts = tor_calloc(n_countries, sizeof(unsigned));
HT_FOREACH(ent, clientmap, &client_history) {
int country;
if ((*ent)->action != (int)action)
diff --git a/src/or/geoip.h b/src/or/geoip.h
index f702617d9c..cec19ea564 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index c433ac1be9..4f0660c2dc 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -410,6 +410,17 @@ configure_accounting(time_t now)
accounting_set_wakeup_time();
}
+/** Return the relevant number of bytes sent/received this interval
+ * based on the set AccountingRule */
+static uint64_t
+get_accounting_bytes(void)
+{
+ if (get_options()->AccountingRule == ACCT_SUM)
+ return n_bytes_read_in_interval+n_bytes_written_in_interval;
+ else
+ return MAX(n_bytes_read_in_interval, n_bytes_written_in_interval);
+}
+
/** Set expected_bandwidth_usage based on how much we sent/received
* per minute last interval (if we were up for at least 30 minutes),
* or based on our declared bandwidth otherwise. */
@@ -421,6 +432,11 @@ update_expected_bandwidth(void)
uint64_t max_configured = (options->RelayBandwidthRate > 0 ?
options->RelayBandwidthRate :
options->BandwidthRate) * 60;
+ /* max_configured is the larger of bytes read and bytes written
+ * If we are accounting based on sum, worst case is both are
+ * at max, doubling the expected sum of bandwidth */
+ if (get_options()->AccountingRule == ACCT_SUM)
+ max_configured *= 2;
#define MIN_TIME_FOR_MEASUREMENT (1800)
@@ -439,8 +455,7 @@ update_expected_bandwidth(void)
* doesn't know to store soft-limit info. Just take rate at which
* we were reading/writing in the last interval as our expected rate.
*/
- uint64_t used = MAX(n_bytes_written_in_interval,
- n_bytes_read_in_interval);
+ uint64_t used = get_accounting_bytes();
expected = used / (n_seconds_active_in_interval / 60);
} else {
/* If we haven't gotten enough data last interval, set 'expected'
@@ -715,8 +730,7 @@ hibernate_hard_limit_reached(void)
uint64_t hard_limit = get_options()->AccountingMax;
if (!hard_limit)
return 0;
- return n_bytes_read_in_interval >= hard_limit
- || n_bytes_written_in_interval >= hard_limit;
+ return get_accounting_bytes() >= hard_limit;
}
/** Return true iff we have sent/received almost all the bytes we are willing
@@ -747,8 +761,7 @@ hibernate_soft_limit_reached(void)
if (!soft_limit)
return 0;
- return n_bytes_read_in_interval >= soft_limit
- || n_bytes_written_in_interval >= soft_limit;
+ return get_accounting_bytes() >= soft_limit;
}
/** Called when we get a SIGINT, or when bandwidth soft limit is
@@ -772,8 +785,7 @@ hibernate_begin(hibernate_state_t new_state, time_t now)
hibernate_state == HIBERNATE_STATE_LIVE) {
soft_limit_hit_at = now;
n_seconds_to_hit_soft_limit = n_seconds_active_in_interval;
- n_bytes_at_soft_limit = MAX(n_bytes_read_in_interval,
- n_bytes_written_in_interval);
+ n_bytes_at_soft_limit = get_accounting_bytes();
}
/* close listeners. leave control listener(s). */
@@ -1003,13 +1015,22 @@ getinfo_helper_accounting(control_connection_t *conn,
U64_PRINTF_ARG(n_bytes_written_in_interval));
} else if (!strcmp(question, "accounting/bytes-left")) {
uint64_t limit = get_options()->AccountingMax;
- uint64_t read_left = 0, write_left = 0;
- if (n_bytes_read_in_interval < limit)
- read_left = limit - n_bytes_read_in_interval;
- if (n_bytes_written_in_interval < limit)
- write_left = limit - n_bytes_written_in_interval;
- tor_asprintf(answer, U64_FORMAT" "U64_FORMAT,
- U64_PRINTF_ARG(read_left), U64_PRINTF_ARG(write_left));
+ if (get_options()->AccountingRule == ACCT_SUM) {
+ uint64_t total_left = 0;
+ uint64_t total_bytes = get_accounting_bytes();
+ if (total_bytes < limit)
+ total_left = limit - total_bytes;
+ tor_asprintf(answer, U64_FORMAT" "U64_FORMAT,
+ U64_PRINTF_ARG(total_left), U64_PRINTF_ARG(total_left));
+ } else {
+ uint64_t read_left = 0, write_left = 0;
+ if (n_bytes_read_in_interval < limit)
+ read_left = limit - n_bytes_read_in_interval;
+ if (n_bytes_written_in_interval < limit)
+ write_left = limit - n_bytes_written_in_interval;
+ tor_asprintf(answer, U64_FORMAT" "U64_FORMAT,
+ U64_PRINTF_ARG(read_left), U64_PRINTF_ARG(write_left));
+ }
} else if (!strcmp(question, "accounting/interval-start")) {
*answer = tor_malloc(ISO_TIME_LEN+1);
format_iso_time(*answer, interval_start_time);
diff --git a/src/or/hibernate.h b/src/or/hibernate.h
index 38ecb75129..0616e11c57 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -28,6 +28,7 @@ void consider_hibernation(time_t now);
int getinfo_helper_accounting(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);
+uint64_t get_accounting_max_total(void);
#ifdef HIBERNATE_PRIVATE
/** Possible values of hibernate_state */
diff --git a/src/or/include.am b/src/or/include.am
index b2b940614f..643f7ce001 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -23,12 +23,6 @@ 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 \
@@ -83,9 +77,9 @@ LIBTOR_A_SOURCES = \
src/or/scheduler.c \
src/or/statefile.c \
src/or/status.c \
+ src/or/onion_ntor.c \
$(evdns_source) \
$(tor_platform_source) \
- $(onion_ntor_source) \
src/or/config_codedigest.c
src_or_libtor_a_SOURCES = $(LIBTOR_A_SOURCES)
diff --git a/src/or/main.c b/src/or/main.c
index 7b38f45b22..64ccbd496c 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -28,6 +28,7 @@
#include "connection_or.h"
#include "control.h"
#include "cpuworker.h"
+#include "crypto_s2k.h"
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
@@ -150,7 +151,7 @@ static int called_loop_once = 0;
* any longer (a big time jump happened, when we notice our directory is
* heinously out-of-date, etc.
*/
-int can_complete_circuit=0;
+static int can_complete_circuits = 0;
/** How often do we check for router descriptors that we should download
* when we have too little directory info? */
@@ -171,11 +172,11 @@ int quiet_level = 0;
/********* END VARIABLES ************/
/****************************************************************************
-*
-* This section contains accessors and other methods on the connection_array
-* variables (which are global within this file and unavailable outside it).
-*
-****************************************************************************/
+ *
+ * This section contains accessors and other methods on the connection_array
+ * variables (which are global within this file and unavailable outside it).
+ *
+ ****************************************************************************/
#if 0 && defined(USE_BUFFEREVENTS)
static void
@@ -223,6 +224,32 @@ set_buffer_lengths_to_zero(tor_socket_t s)
}
#endif
+
+/** Return 1 if we have successfully built a circuit, and nothing has changed
+ * to make us think that maybe we can't.
+ */
+int
+have_completed_a_circuit(void)
+{
+ return can_complete_circuits;
+}
+
+/** Note that we have successfully built a circuit, so that reachability
+ * testing and introduction points and so on may be attempted. */
+void
+note_that_we_completed_a_circuit(void)
+{
+ can_complete_circuits = 1;
+}
+
+/** Note that something has happened (like a clock jump, or DisableNetwork) to
+ * make us think that maybe we can't complete circuits. */
+void
+note_that_we_maybe_cant_complete_circuits(void)
+{
+ can_complete_circuits = 0;
+}
+
/** Add <b>conn</b> to the array of connections that we can poll on. The
* connection's socket must be set; the connection starts out
* non-reading and non-writing.
@@ -999,7 +1026,7 @@ directory_info_has_arrived(time_t now, int from_cache)
}
if (server_mode(options) && !net_is_disabled() && !from_cache &&
- (can_complete_circuit || !any_predicted_circuits(now)))
+ (have_completed_a_circuit() || !any_predicted_circuits(now)))
consider_testing_reachability(1, 1);
}
@@ -1436,7 +1463,7 @@ run_scheduled_events(time_t now)
/* also, check religiously for reachability, if it's within the first
* 20 minutes of our uptime. */
if (is_server &&
- (can_complete_circuit || !any_predicted_circuits(now)) &&
+ (have_completed_a_circuit() || !any_predicted_circuits(now)) &&
!we_are_hibernating()) {
if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
consider_testing_reachability(1, dirport_reachability_count==0);
@@ -1549,7 +1576,7 @@ run_scheduled_events(time_t now)
circuit_close_all_marked();
/* 7. And upload service descriptors if necessary. */
- if (can_complete_circuit && !net_is_disabled()) {
+ if (have_completed_a_circuit() && !net_is_disabled()) {
rend_consider_services_upload(now);
rend_consider_descriptor_republication();
}
@@ -1680,7 +1707,7 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
if (server_mode(options) &&
!net_is_disabled() &&
seconds_elapsed > 0 &&
- can_complete_circuit &&
+ have_completed_a_circuit() &&
stats_n_seconds_working / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT !=
(stats_n_seconds_working+seconds_elapsed) /
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
@@ -2137,6 +2164,10 @@ process_signal(uintptr_t sig)
addressmap_clear_transient();
control_event_signal(sig);
break;
+ case SIGHEARTBEAT:
+ log_heartbeat(time(NULL));
+ control_event_signal(sig);
+ break;
}
}
@@ -2676,11 +2707,11 @@ do_hash_password(void)
{
char output[256];
- char key[S2K_SPECIFIER_LEN+DIGEST_LEN];
+ char key[S2K_RFC2440_SPECIFIER_LEN+DIGEST_LEN];
- crypto_rand(key, S2K_SPECIFIER_LEN-1);
- key[S2K_SPECIFIER_LEN-1] = (uint8_t)96; /* Hash 64 K of data. */
- secret_to_key(key+S2K_SPECIFIER_LEN, DIGEST_LEN,
+ crypto_rand(key, S2K_RFC2440_SPECIFIER_LEN-1);
+ key[S2K_RFC2440_SPECIFIER_LEN-1] = (uint8_t)96; /* Hash 64 K of data. */
+ secret_to_key_rfc2440(key+S2K_RFC2440_SPECIFIER_LEN, DIGEST_LEN,
get_options()->command_arg, strlen(get_options()->command_arg),
key);
base16_encode(output, sizeof(output), key, sizeof(key));
@@ -2956,7 +2987,7 @@ tor_main(int argc, char *argv[])
update_approx_time(time(NULL));
tor_threads_init();
- init_logging();
+ init_logging(0);
#ifdef USE_DMALLOC
{
/* Instruct OpenSSL to use our internal wrappers for malloc,
diff --git a/src/or/main.h b/src/or/main.h
index a3bce3486f..7d98983100 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,7 +12,9 @@
#ifndef TOR_MAIN_H
#define TOR_MAIN_H
-extern int can_complete_circuit;
+int have_completed_a_circuit(void);
+void note_that_we_completed_a_circuit(void);
+void note_that_we_maybe_cant_complete_circuits(void);
int connection_add_impl(connection_t *conn, int is_connecting);
#define connection_add(conn) connection_add_impl((conn), 0)
diff --git a/src/or/microdesc.c b/src/or/microdesc.c
index 576fed0066..7b826008b5 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2013, The Tor Project, Inc. */
+/* Copyright (c) 2009-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -147,39 +147,81 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
int no_save, time_t listed_at,
smartlist_t *requested_digests256)
{
+ void * const DIGEST_REQUESTED = (void*)1;
+ void * const DIGEST_RECEIVED = (void*)2;
+ void * const DIGEST_INVALID = (void*)3;
+
smartlist_t *descriptors, *added;
const int allow_annotations = (where != SAVED_NOWHERE);
+ smartlist_t *invalid_digests = smartlist_new();
descriptors = microdescs_parse_from_string(s, eos,
allow_annotations,
- where);
+ where, invalid_digests);
if (listed_at != (time_t)-1) {
SMARTLIST_FOREACH(descriptors, microdesc_t *, md,
md->last_listed = listed_at);
}
if (requested_digests256) {
- digestmap_t *requested; /* XXXX actually we should just use a
- digest256map */
- requested = digestmap_new();
- SMARTLIST_FOREACH(requested_digests256, const char *, cp,
- digestmap_set(requested, cp, (void*)1));
+ digest256map_t *requested;
+ requested = digest256map_new();
+ /* Set requested[d] to DIGEST_REQUESTED for every md we requested. */
+ SMARTLIST_FOREACH(requested_digests256, const uint8_t *, cp,
+ digest256map_set(requested, cp, DIGEST_REQUESTED));
+ /* Set requested[d] to DIGEST_INVALID for every md we requested which we
+ * will never be able to parse. Remove the ones we didn't request from
+ * invalid_digests.
+ */
+ SMARTLIST_FOREACH_BEGIN(invalid_digests, uint8_t *, cp) {
+ if (digest256map_get(requested, cp)) {
+ digest256map_set(requested, cp, DIGEST_INVALID);
+ } else {
+ tor_free(cp);
+ SMARTLIST_DEL_CURRENT(invalid_digests, cp);
+ }
+ } SMARTLIST_FOREACH_END(cp);
+ /* Update requested[d] to 2 for the mds we asked for and got. Delete the
+ * ones we never requested from the 'descriptors' smartlist.
+ */
SMARTLIST_FOREACH_BEGIN(descriptors, microdesc_t *, md) {
- if (digestmap_get(requested, md->digest)) {
- digestmap_set(requested, md->digest, (void*)2);
+ if (digest256map_get(requested, (const uint8_t*)md->digest)) {
+ digest256map_set(requested, (const uint8_t*)md->digest,
+ DIGEST_RECEIVED);
} else {
log_fn(LOG_PROTOCOL_WARN, LD_DIR, "Received non-requested microdesc");
microdesc_free(md);
SMARTLIST_DEL_CURRENT(descriptors, md);
}
} SMARTLIST_FOREACH_END(md);
- SMARTLIST_FOREACH_BEGIN(requested_digests256, char *, cp) {
- if (digestmap_get(requested, cp) == (void*)2) {
+ /* Remove the ones we got or the invalid ones from requested_digests256.
+ */
+ SMARTLIST_FOREACH_BEGIN(requested_digests256, uint8_t *, cp) {
+ void *status = digest256map_get(requested, cp);
+ if (status == DIGEST_RECEIVED || status == DIGEST_INVALID) {
tor_free(cp);
SMARTLIST_DEL_CURRENT(requested_digests256, cp);
}
} SMARTLIST_FOREACH_END(cp);
- digestmap_free(requested, NULL);
+ digest256map_free(requested, NULL);
+ }
+
+ /* For every requested microdescriptor that was unparseable, mark it
+ * as not to be retried. */
+ if (smartlist_len(invalid_digests)) {
+ networkstatus_t *ns =
+ networkstatus_get_latest_consensus_by_flavor(FLAV_MICRODESC);
+ if (ns) {
+ SMARTLIST_FOREACH_BEGIN(invalid_digests, char *, d) {
+ routerstatus_t *rs =
+ router_get_mutable_consensus_status_by_descriptor_digest(ns, d);
+ if (rs && tor_memeq(d, rs->descriptor_digest, DIGEST256_LEN)) {
+ download_status_mark_impossible(&rs->dl_status);
+ }
+ } SMARTLIST_FOREACH_END(d);
+ }
}
+ SMARTLIST_FOREACH(invalid_digests, uint8_t *, d, tor_free(d));
+ smartlist_free(invalid_digests);
added = microdescs_add_list_to_cache(cache, descriptors, where, no_save);
smartlist_free(descriptors);
@@ -752,7 +794,7 @@ microdesc_average_size(microdesc_cache_t *cache)
* smartlist. Omit all microdescriptors whose digest appear in <b>skip</b>. */
smartlist_t *
microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache,
- int downloadable_only, digestmap_t *skip)
+ int downloadable_only, digest256map_t *skip)
{
smartlist_t *result = smartlist_new();
time_t now = time(NULL);
@@ -764,7 +806,7 @@ microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache,
!download_status_is_ready(&rs->dl_status, now,
get_options()->TestingMicrodescMaxDownloadTries))
continue;
- if (skip && digestmap_get(skip, rs->descriptor_digest))
+ if (skip && digest256map_get(skip, (const uint8_t*)rs->descriptor_digest))
continue;
if (tor_mem_is_zero(rs->descriptor_digest, DIGEST256_LEN))
continue;
@@ -789,7 +831,7 @@ update_microdesc_downloads(time_t now)
const or_options_t *options = get_options();
networkstatus_t *consensus;
smartlist_t *missing;
- digestmap_t *pending;
+ digest256map_t *pending;
if (should_delay_dir_fetches(options, NULL))
return;
@@ -803,14 +845,14 @@ update_microdesc_downloads(time_t now)
if (!we_fetch_microdescriptors(options))
return;
- pending = digestmap_new();
+ pending = digest256map_new();
list_pending_microdesc_downloads(pending);
missing = microdesc_list_missing_digest256(consensus,
get_microdesc_cache(),
1,
pending);
- digestmap_free(pending, NULL);
+ digest256map_free(pending, NULL);
launch_descriptor_downloads(DIR_PURPOSE_FETCH_MICRODESC,
missing, NULL, now);
diff --git a/src/or/microdesc.h b/src/or/microdesc.h
index 7adb8c68af..fdfe8922ab 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -37,7 +37,7 @@ size_t microdesc_average_size(microdesc_cache_t *cache);
smartlist_t *microdesc_list_missing_digest256(networkstatus_t *ns,
microdesc_cache_t *cache,
int downloadable_only,
- digestmap_t *skip);
+ digest256map_t *skip);
void microdesc_free_(microdesc_t *md, const char *fname, int line);
#define microdesc_free(md) \
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index c7bed9b059..21efdd129d 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -595,10 +595,10 @@ networkstatus_vote_find_entry_idx(networkstatus_t *ns,
/** As router_get_consensus_status_by_descriptor_digest, but does not return
* a const pointer. */
-routerstatus_t *
-router_get_mutable_consensus_status_by_descriptor_digest(
+MOCK_IMPL(routerstatus_t *,
+router_get_mutable_consensus_status_by_descriptor_digest,(
networkstatus_t *consensus,
- const char *digest)
+ const char *digest))
{
if (!consensus)
consensus = current_consensus;
@@ -628,8 +628,8 @@ router_get_consensus_status_by_descriptor_digest(networkstatus_t *consensus,
/** Given the digest of a router descriptor, return its current download
* status, or NULL if the digest is unrecognized. */
-download_status_t *
-router_get_dl_status_by_descriptor_digest(const char *d)
+MOCK_IMPL(download_status_t *,
+router_get_dl_status_by_descriptor_digest,(const char *d))
{
routerstatus_t *rs;
if (!current_ns_consensus)
@@ -995,8 +995,8 @@ networkstatus_get_latest_consensus(void)
/** Return the latest consensus we have whose flavor matches <b>f</b>, or NULL
* if we don't have one. */
-networkstatus_t *
-networkstatus_get_latest_consensus_by_flavor(consensus_flavor_t f)
+MOCK_IMPL(networkstatus_t *,
+networkstatus_get_latest_consensus_by_flavor,(consensus_flavor_t f))
{
if (f == FLAV_NS)
return current_ns_consensus;
@@ -1123,7 +1123,7 @@ networkstatus_copy_old_consensus_info(networkstatus_t *new_c,
rs_new->last_dir_503_at = rs_old->last_dir_503_at;
if (tor_memeq(rs_old->descriptor_digest, rs_new->descriptor_digest,
- DIGEST_LEN)) {
+ DIGEST256_LEN)) {
/* And the same descriptor too! */
memcpy(&rs_new->dl_status, &rs_old->dl_status,sizeof(download_status_t));
}
@@ -1678,17 +1678,22 @@ 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;
+ char *thresholds = NULL;
+ char *published_thresholds_and_status = NULL;
routerlist_t *rl = router_get_routerlist();
+ char published[ISO_TIME_LEN+1];
+
+ format_iso_time(published, now);
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(&published_thresholds_and_status,
+ "published %s\nflag-thresholds %s\n%s",
+ published, thresholds, status);
tor_asprintf(&fname, "%s"PATH_SEPARATOR"networkstatus-bridges",
options->DataDirectory);
- write_str_to_file(fname,thresholds_and_status,0);
+ write_str_to_file(fname,published_thresholds_and_status,0);
tor_free(thresholds);
- tor_free(thresholds_and_status);
+ tor_free(published_thresholds_and_status);
tor_free(fname);
tor_free(status);
}
diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h
index be0a86cdd8..a087a79ac3 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,6 +12,8 @@
#ifndef TOR_NETWORKSTATUS_H
#define TOR_NETWORKSTATUS_H
+#include "testsupport.h"
+
void networkstatus_reset_warnings(void);
void networkstatus_reset_download_failures(void);
int router_reload_consensus_networkstatus(void);
@@ -35,16 +37,19 @@ 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);
-download_status_t *router_get_dl_status_by_descriptor_digest(const char *d);
+
+MOCK_DECL(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(
const char *digest);
const routerstatus_t *router_get_consensus_status_by_descriptor_digest(
networkstatus_t *consensus,
const char *digest);
-routerstatus_t *router_get_mutable_consensus_status_by_descriptor_digest(
- networkstatus_t *consensus,
- const char *digest);
+MOCK_DECL(routerstatus_t *,
+ router_get_mutable_consensus_status_by_descriptor_digest,
+ (networkstatus_t *consensus, const char *digest));
const routerstatus_t *router_get_consensus_status_by_nickname(
const char *nickname,
int warn_if_unnamed);
@@ -60,8 +65,8 @@ int consensus_is_waiting_for_certs(void);
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);
+MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus_by_flavor,
+ (consensus_flavor_t f));
networkstatus_t *networkstatus_get_live_consensus(time_t now);
networkstatus_t *networkstatus_get_reasonably_live_consensus(time_t now,
int flavor);
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index f37fb49927..e0e01ec190 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -1562,7 +1562,7 @@ update_router_have_minimum_dir_info(void)
* 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;
+ note_that_we_maybe_cant_complete_circuits();
control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
}
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index cb54cecf1d..48b0e94be0 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/ntmain.c b/src/or/ntmain.c
index e848314043..ea6ec3b03e 100644
--- a/src/or/ntmain.c
+++ b/src/or/ntmain.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
diff --git a/src/or/ntmain.h b/src/or/ntmain.h
index d09a413aee..68565e17ca 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/onion.c b/src/or/onion.c
index ae39f451f4..b8f85f9194 100644
--- a/src/or/onion.c
+++ b/src/or/onion.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -111,15 +111,11 @@ have_room_for_onionskin(uint16_t type)
(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;
}
@@ -353,11 +349,9 @@ 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>
@@ -370,10 +364,8 @@ release_server_onion_keys(server_onion_keys_t *keys)
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));
}
@@ -391,12 +383,10 @@ onion_handshake_state_release(onion_handshake_state_t *state)
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);
@@ -436,7 +426,6 @@ onion_skin_create(int type,
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;
@@ -447,9 +436,6 @@ onion_skin_create(int type,
return -1;
r = NTOR_ONIONSKIN_LEN;
-#else
- return -1;
-#endif
break;
default:
log_warn(LD_BUG, "called with unknown handshake state type %d", type);
@@ -501,7 +487,6 @@ onion_skin_server_handshake(int type,
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;
{
@@ -522,9 +507,6 @@ onion_skin_server_handshake(int type,
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);
@@ -577,7 +559,6 @@ onion_skin_client_handshake(int type,
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.");
@@ -598,7 +579,6 @@ onion_skin_client_handshake(int type,
tor_free(keys_tmp);
}
return 0;
-#endif
default:
log_warn(LD_BUG, "called with unknown handshake state type %d", type);
tor_fragile_assert();
@@ -637,12 +617,10 @@ check_create_cell(const create_cell_t *cell, int unknown_ok)
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;
diff --git a/src/or/onion.h b/src/or/onion.h
index d62f032b87..2fd86206e4 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -23,10 +23,8 @@ 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;
#define MAX_ONIONSKIN_CHALLENGE_LEN 255
diff --git a/src/or/onion_fast.c b/src/or/onion_fast.c
index 38b62decc3..0ca3e3a5a0 100644
--- a/src/or/onion_fast.c
+++ b/src/or/onion_fast.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/onion_fast.h b/src/or/onion_fast.h
index 8c078378d2..2fc605fc42 100644
--- a/src/or/onion_fast.h
+++ b/src/or/onion_fast.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/onion_ntor.c b/src/or/onion_ntor.c
index ef501f69da..c028ed0ff9 100644
--- a/src/or/onion_ntor.c
+++ b/src/or/onion_ntor.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
diff --git a/src/or/onion_ntor.h b/src/or/onion_ntor.h
index c942e6e0f0..29178e942d 100644
--- a/src/or/onion_ntor.h
+++ b/src/or/onion_ntor.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_ONION_NTOR_H
@@ -17,7 +17,6 @@ typedef struct ntor_handshake_state_t ntor_handshake_state_t;
/** 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,
@@ -59,5 +58,3 @@ struct ntor_handshake_state_t {
#endif
-#endif
-
diff --git a/src/or/onion_tap.c b/src/or/onion_tap.c
index 65f8275f75..b3b2a008bc 100644
--- a/src/or/onion_tap.c
+++ b/src/or/onion_tap.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/onion_tap.h b/src/or/onion_tap.h
index b978b66737..36fb649d60 100644
--- a/src/or/onion_tap.h
+++ b/src/or/onion_tap.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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/or.h b/src/or/or.h
index 25df54a669..ccb29ee7df 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -119,6 +119,7 @@
* conflict with system-defined signals. */
#define SIGNEWNYM 129
#define SIGCLEARDNSCACHE 130
+#define SIGHEARTBEAT 131
#if (SIZEOF_CELL_T != 0)
/* On Irix, stdlib.h defines a cell_t type, so we need to make sure
@@ -241,7 +242,7 @@ typedef enum {
#define PROXY_CONNECT 1
#define PROXY_SOCKS4 2
#define PROXY_SOCKS5 3
-/* !!!! If there is ever a PROXY_* type over 2, we must grow the proxy_type
+/* !!!! If there is ever a PROXY_* type over 3, we must grow the proxy_type
* field in or_connection_t */
/* Pluggable transport proxy type. Don't use this in or_connection_t,
@@ -676,6 +677,10 @@ typedef enum {
/* Negative reasons are internal: we never send them in a DESTROY or TRUNCATE
* call; they only go to the controller for tracking */
+
+/* Closing introduction point that were opened in parallel. */
+#define END_CIRC_REASON_IP_NOW_REDUNDANT -4
+
/** Our post-timeout circuit time measurement period expired.
* We must give up now */
#define END_CIRC_REASON_MEASUREMENT_EXPIRED -3
@@ -1976,6 +1981,7 @@ typedef struct download_status_t {
uint8_t n_download_failures; /**< Number of failures trying to download the
* most recent descriptor. */
download_schedule_bitfield_t schedule : 8;
+
} download_status_t;
/** If n_download_failures is this high, the download can never happen. */
@@ -2571,9 +2577,7 @@ 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
@@ -3247,6 +3251,14 @@ static const or_circuit_t *CONST_TO_OR_CIRCUIT(const circuit_t *);
static origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *);
static const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT(const circuit_t *);
+/** Return 1 iff <b>node</b> has Exit flag and no BadExit flag.
+ * Otherwise, return 0.
+ */
+static INLINE int node_is_good_exit(const node_t *node)
+{
+ return node->is_exit && ! node->is_bad_exit;
+}
+
static INLINE or_circuit_t *TO_OR_CIRCUIT(circuit_t *x)
{
tor_assert(x->magic == OR_CIRCUIT_MAGIC);
@@ -3793,6 +3805,11 @@ typedef struct {
uint64_t AccountingMax; /**< How many bytes do we allow per accounting
* interval before hibernation? 0 for "never
* hibernate." */
+ /** How do we determine when our AccountingMax has been reached?
+ * "max" for when in or out reaches AccountingMax
+ * "sum for when in plus out reaches AccountingMax */
+ char *AccountingRule_option;
+ enum { ACCT_MAX, ACCT_SUM } AccountingRule;
/** Base64-encoded hash of accepted passwords for the control system. */
config_line_t *HashedControlPassword;
@@ -4069,6 +4086,10 @@ typedef struct {
/** Minimum value for the Fast flag threshold on testing networks. */
uint64_t TestingMinFastFlagThreshold;
+ /** Relays in a testing network which should be voted Exit
+ * regardless of exit policy. */
+ routerset_t *TestingDirAuthVoteExit;
+
/** Relays in a testing network which should be voted Guard
* regardless of uptime and bandwidth. */
routerset_t *TestingDirAuthVoteGuard;
@@ -4227,9 +4248,6 @@ typedef struct {
/** 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;
-
/** Low-water mark for global scheduler - start sending when estimated
* queued size falls below this threshold.
*/
@@ -4332,7 +4350,8 @@ static INLINE void or_state_mark_dirty(or_state_t *state, time_t when)
/** Please turn this IP address into an FQDN, privately. */
#define SOCKS_COMMAND_RESOLVE_PTR 0xF1
-#define SOCKS_COMMAND_IS_CONNECT(c) ((c)==SOCKS_COMMAND_CONNECT)
+/* || 0 is for -Wparentheses-equality (-Wall?) appeasement under clang */
+#define SOCKS_COMMAND_IS_CONNECT(c) (((c)==SOCKS_COMMAND_CONNECT) || 0)
#define SOCKS_COMMAND_IS_RESOLVE(c) ((c)==SOCKS_COMMAND_RESOLVE || \
(c)==SOCKS_COMMAND_RESOLVE_PTR)
@@ -5012,14 +5031,31 @@ typedef enum {
/** Return value for router_add_to_routerlist() and dirserv_add_descriptor() */
typedef enum was_router_added_t {
+ /* Router was added successfully. */
ROUTER_ADDED_SUCCESSFULLY = 1,
+ /* Router descriptor was added with warnings to submitter. */
ROUTER_ADDED_NOTIFY_GENERATOR = 0,
+ /* Extrainfo document was rejected because no corresponding router
+ * descriptor was found OR router descriptor was rejected because
+ * it was incompatible with its extrainfo document. */
ROUTER_BAD_EI = -1,
- ROUTER_WAS_NOT_NEW = -2,
+ /* Router descriptor was rejected because it is already known. */
+ ROUTER_IS_ALREADY_KNOWN = -2,
+ /* General purpose router was rejected, because it was not listed
+ * in consensus. */
ROUTER_NOT_IN_CONSENSUS = -3,
+ /* Router was neither in directory consensus nor in any of
+ * networkstatus documents. Caching it to access later.
+ * (Applies to fetched descriptors only.) */
ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS = -4,
+ /* Router was rejected by directory authority. */
ROUTER_AUTHDIR_REJECTS = -5,
- ROUTER_WAS_NOT_WANTED = -6
+ /* Bridge descriptor was rejected because such bridge was not one
+ * of the bridges we have listed in our configuration. */
+ ROUTER_WAS_NOT_WANTED = -6,
+ /* Router descriptor was rejected because it was older than
+ * OLD_ROUTER_DESC_MAX_AGE. */
+ ROUTER_WAS_TOO_OLD = -7, /* note contrast with 'NOT_NEW' */
} was_router_added_t;
/********************************* routerparse.c ************************/
diff --git a/src/or/policies.c b/src/or/policies.c
index 7090eda2c4..d10bebd79a 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/policies.h b/src/or/policies.h
index 0b47b761ec..90d94190dd 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/reasons.c b/src/or/reasons.c
index 1a53a93d88..b0f1b65131 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/reasons.h b/src/or/reasons.h
index fe7e67722a..8b3694b05a 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/relay.c b/src/or/relay.c
index fee2eec39d..b95e5841e7 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1719,7 +1719,7 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
if (circ->package_window + CIRCWINDOW_INCREMENT >
CIRCWINDOW_START_MAX) {
static struct ratelim_t client_warn_ratelim = RATELIM_INIT(600);
- log_fn_ratelim(&client_warn_ratelim, LOG_WARN, LD_PROTOCOL,
+ log_fn_ratelim(&client_warn_ratelim,LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Unexpected sendme cell from client. "
"Closing circ (window %d).",
circ->package_window);
diff --git a/src/or/relay.h b/src/or/relay.h
index 68b4fdf197..351516aada 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index bc34695bc0..f351ae7161 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -130,16 +130,6 @@ 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.
*/
@@ -251,14 +241,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
REND_DESC_COOKIE_LEN);
v3_shift += 2+REND_DESC_COOKIE_LEN;
}
- 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);
- }
+ /* Once this held a timestamp. */
+ set_uint32(tmp+v3_shift+1, 0);
v3_shift += 4;
} /* if version 2 only write version number */
else if (entry->parsed->protocols & (1<<2)) {
@@ -370,8 +354,7 @@ rend_client_rendcirc_has_opened(origin_circuit_t *circ)
}
/**
- * Called to close other intro circuits we launched in parallel
- * due to timeout.
+ * Called to close other intro circuits we launched in parallel.
*/
static void
rend_client_close_other_intros(const char *onion_address)
@@ -388,7 +371,7 @@ rend_client_close_other_intros(const char *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);
+ circuit_mark_for_close(c, END_CIRC_REASON_IP_NOW_REDUNDANT);
}
}
}
diff --git a/src/or/rendclient.h b/src/or/rendclient.h
index 1f731d0ae5..40d388c489 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index 269cd65679..df74b745a2 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -1034,10 +1034,14 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
* If the descriptor's service ID does not match
* <b>rend_query</b>-\>onion_address, reject it.
*
+ * If the descriptor's descriptor ID doesn't match <b>desc_id_base32</b>,
+ * reject it.
+ *
* Return an appropriate rend_cache_store_status_t.
*/
rend_cache_store_status_t
rend_cache_store_v2_desc_as_client(const char *desc,
+ const char *desc_id_base32,
const rend_data_t *rend_query)
{
/*XXXX this seems to have a bit of duplicate code with
@@ -1064,10 +1068,19 @@ rend_cache_store_v2_desc_as_client(const char *desc,
time_t now = time(NULL);
char key[REND_SERVICE_ID_LEN_BASE32+2];
char service_id[REND_SERVICE_ID_LEN_BASE32+1];
+ char want_desc_id[DIGEST_LEN];
rend_cache_entry_t *e;
rend_cache_store_status_t retval = RCS_BADDESC;
tor_assert(rend_cache);
tor_assert(desc);
+ tor_assert(desc_id_base32);
+ memset(want_desc_id, 0, sizeof(want_desc_id));
+ if (base32_decode(want_desc_id, sizeof(want_desc_id),
+ desc_id_base32, strlen(desc_id_base32)) != 0) {
+ log_warn(LD_BUG, "Couldn't decode base32 %s for descriptor id.",
+ escaped_safe_str_client(desc_id_base32));
+ goto err;
+ }
/* Parse the descriptor. */
if (rend_parse_v2_service_descriptor(&parsed, desc_id, &intro_content,
&intro_size, &encoded_size,
@@ -1086,6 +1099,12 @@ rend_cache_store_v2_desc_as_client(const char *desc,
service_id, safe_str(rend_query->onion_address));
goto err;
}
+ if (tor_memneq(desc_id, want_desc_id, DIGEST_LEN)) {
+ log_warn(LD_REND, "Received service descriptor for %s with incorrect "
+ "descriptor ID.", service_id);
+ goto err;
+ }
+
/* Decode/decrypt introduction points. */
if (intro_content) {
int n_intro_points;
diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h
index 07a47accfe..186326a0c1 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -49,6 +49,7 @@ typedef enum {
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 char *desc_id_base32,
const rend_data_t *rend_query);
int rend_encode_v2_descriptors(smartlist_t *descs_out,
diff --git a/src/or/rendmid.c b/src/or/rendmid.c
index d89cdf6bed..6a701e7a77 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -188,7 +188,7 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
"Unable to send INTRODUCE2 cell to Tor client.");
goto err;
}
- /* And sent an ack down Alice's circuit. Empty body means succeeded. */
+ /* And send an ack down Alice's circuit. Empty body means succeeded. */
if (relay_send_command_from_edge(0,TO_CIRCUIT(circ),
RELAY_COMMAND_INTRODUCE_ACK,
NULL,0,NULL)) {
@@ -199,7 +199,7 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
return 0;
err:
- /* Send the client an NACK */
+ /* Send the client a NACK */
nak_body[0] = 1;
if (relay_send_command_from_edge(0,TO_CIRCUIT(circ),
RELAY_COMMAND_INTRODUCE_ACK,
diff --git a/src/or/rendmid.h b/src/or/rendmid.h
index 310276ac96..25c711fa7b 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 31b612bb26..ead9f3fe66 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -16,6 +16,7 @@
#include "circuituse.h"
#include "config.h"
#include "directory.h"
+#include "main.h"
#include "networkstatus.h"
#include "nodelist.h"
#include "rendclient.h"
@@ -95,6 +96,8 @@ typedef struct rend_service_port_config_t {
typedef struct rend_service_t {
/* Fields specified in config file */
char *directory; /**< where in the filesystem it stores it */
+ int dir_group_readable; /**< if 1, allow group read
+ permissions on directory */
smartlist_t *ports; /**< List of rend_service_port_config_t */
rend_auth_type_t auth_type; /**< Client authorization type or 0 if no client
* authorization is performed. */
@@ -359,6 +362,7 @@ rend_config_services(const or_options_t *options, int validate_only)
rend_service_t *service = NULL;
rend_service_port_config_t *portcfg;
smartlist_t *old_service_list = NULL;
+ int ok = 0;
if (!validate_only) {
old_service_list = rend_service_list;
@@ -393,6 +397,20 @@ rend_config_services(const or_options_t *options, int validate_only)
return -1;
}
smartlist_add(service->ports, portcfg);
+ } else if (!strcasecmp(line->key,
+ "HiddenServiceDirGroupReadable")) {
+ service->dir_group_readable = (int)tor_parse_long(line->value,
+ 10, 0, 1, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG,
+ "HiddenServiceDirGroupReadable should be 0 or 1, not %s",
+ line->value);
+ rend_service_free(service);
+ return -1;
+ }
+ log_info(LD_CONFIG,
+ "HiddenServiceDirGroupReadable=%d for %s",
+ service->dir_group_readable, service->directory);
} else if (!strcasecmp(line->key, "HiddenServiceAuthorizeClient")) {
/* Parse auth type and comma-separated list of client names and add a
* rend_authorized_client_t for each client to the service's list
@@ -513,10 +531,11 @@ rend_config_services(const or_options_t *options, int validate_only)
}
}
if (service) {
- if (validate_only)
+ if (validate_only) {
rend_service_free(service);
- else
+ } else {
rend_add_service(service);
+ }
}
/* If this is a reload and there were hidden services configured before,
@@ -693,10 +712,23 @@ rend_service_load_keys(rend_service_t *s)
{
char fname[512];
char buf[128];
+ cpd_check_t check_opts = CPD_CREATE;
+ if (s->dir_group_readable) {
+ check_opts |= CPD_GROUP_READ;
+ }
/* Check/create directory */
- if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0)
+ if (check_private_dir(s->directory, check_opts, get_options()->User) < 0) {
return -1;
+ }
+#ifndef _WIN32
+ if (s->dir_group_readable) {
+ /* Only new dirs created get new opts, also enforce group read. */
+ if (chmod(s->directory, 0750)) {
+ log_warn(LD_FS,"Unable to make %s group-readable.", s->directory);
+ }
+ }
+#endif
/* Load key */
if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
@@ -733,6 +765,15 @@ rend_service_load_keys(rend_service_t *s)
memwipe(buf, 0, sizeof(buf));
return -1;
}
+#ifndef _WIN32
+ if (s->dir_group_readable) {
+ /* Also verify hostname file created with group read. */
+ if (chmod(fname, 0640))
+ log_warn(LD_FS,"Unable to make hidden hostname file %s group-readable.",
+ fname);
+ }
+#endif
+
memwipe(buf, 0, sizeof(buf));
/* If client authorization is configured, load or generate keys. */
@@ -3028,15 +3069,19 @@ rend_services_introduce(void)
int intro_point_set_changed, prev_intro_nodes;
unsigned int n_intro_points_unexpired;
unsigned int n_intro_points_to_open;
- smartlist_t *intro_nodes;
time_t now;
const or_options_t *options = get_options();
+ /* List of nodes we need to _exclude_ when choosing a new node to establish
+ * an intro point to. */
+ smartlist_t *exclude_nodes = smartlist_new();
+
+ if (!have_completed_a_circuit())
+ return;
- intro_nodes = smartlist_new();
now = time(NULL);
for (i=0; i < smartlist_len(rend_service_list); ++i) {
- smartlist_clear(intro_nodes);
+ smartlist_clear(exclude_nodes);
service = smartlist_get(rend_service_list, i);
tor_assert(service);
@@ -3135,8 +3180,10 @@ rend_services_introduce(void)
if (intro != NULL && intro->time_expiring == -1)
++n_intro_points_unexpired;
+ /* Add the valid node to the exclusion list so we don't try to establish
+ * an introduction point to it again. */
if (node)
- smartlist_add(intro_nodes, (void*)node);
+ smartlist_add(exclude_nodes, (void*)node);
} SMARTLIST_FOREACH_END(intro);
if (!intro_point_set_changed &&
@@ -3172,7 +3219,7 @@ rend_services_introduce(void)
router_crn_flags_t flags = CRN_NEED_UPTIME|CRN_NEED_DESC;
if (get_options()->AllowInvalid_ & ALLOW_INVALID_INTRODUCTION)
flags |= CRN_ALLOW_INVALID;
- node = router_choose_random_node(intro_nodes,
+ node = router_choose_random_node(exclude_nodes,
options->ExcludeNodes, flags);
if (!node) {
log_warn(LD_REND,
@@ -3183,7 +3230,9 @@ rend_services_introduce(void)
break;
}
intro_point_set_changed = 1;
- smartlist_add(intro_nodes, (void*)node);
+ /* Add the choosen node to the exclusion list in order to avoid to pick
+ * it again in the next iteration. */
+ smartlist_add(exclude_nodes, (void*)node);
intro = tor_malloc_zero(sizeof(rend_intro_point_t));
intro->extend_info = extend_info_from_node(node, 0);
intro->intro_key = crypto_pk_new();
@@ -3212,7 +3261,7 @@ rend_services_introduce(void)
}
}
}
- smartlist_free(intro_nodes);
+ smartlist_free(exclude_nodes);
}
/** Regenerate and upload rendezvous service descriptors for all
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index 40198b07ec..c2342ef573 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/rephist.c b/src/or/rephist.c
index cd92b0adc5..f1e882729b 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/rephist.h b/src/or/rephist.h
index cd6231e6e4..d853fe2e00 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/replaycache.c b/src/or/replaycache.c
index 90f87c12d5..6d1b59101d 100644
--- a/src/or/replaycache.c
+++ b/src/or/replaycache.c
@@ -1,4 +1,4 @@
- /* Copyright (c) 2012-2013, The Tor Project, Inc. */
+ /* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/*
diff --git a/src/or/replaycache.h b/src/or/replaycache.h
index cd713fe891..904fd45ff1 100644
--- a/src/or/replaycache.h
+++ b/src/or/replaycache.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/router.c b/src/or/router.c
index 4af8d262f9..01838b4b3e 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define ROUTER_PRIVATE
@@ -55,13 +55,11 @@ 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;
@@ -134,7 +132,6 @@ 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 *
@@ -181,7 +178,6 @@ ntor_key_map_free(di_digest256_map_t *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
@@ -313,9 +309,7 @@ rotate_onion_key(void)
char *fname, *fname_prev;
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");
@@ -335,7 +329,6 @@ rotate_onion_key(void)
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");
@@ -351,18 +344,15 @@ rotate_onion_key(void)
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);
@@ -374,13 +364,31 @@ 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);
}
+/** Log greeting message that points to new relay lifecycle document the
+ * first time this function has been called.
+ */
+static void
+log_new_relay_greeting(void)
+{
+ static int already_logged = 0;
+
+ if (already_logged)
+ return;
+
+ tor_log(LOG_NOTICE, LD_GENERAL, "You are running a new relay. "
+ "Thanks for helping the Tor network! If you wish to know "
+ "what will happen in the upcoming weeks regarding its usage, "
+ "have a look at https://blog.torproject.org/blog/lifecycle-of"
+ "-a-new-relay");
+
+ already_logged = 1;
+}
+
/** Try to read an RSA key from <b>fname</b>. If <b>fname</b> doesn't exist
* and <b>generate</b> is true, create a new RSA key and save it in
* <b>fname</b>. Return the read/created key, or NULL on error. Log all
@@ -425,6 +433,7 @@ init_key_from_file(const char *fname, int generate, int severity)
goto error;
}
log_info(LD_GENERAL, "Generated key seems valid");
+ log_new_relay_greeting();
if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
tor_log(severity, LD_FS,
"Couldn't write generated key to \"%s\".", fname);
@@ -450,7 +459,6 @@ 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
@@ -488,7 +496,7 @@ init_curve25519_keypair_from_file(curve25519_keypair_t *keys_out,
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));
+ memwipe(keys_out, 0, sizeof(*keys_out));
goto error;
}
} else {
@@ -519,7 +527,6 @@ init_curve25519_keypair_from_file(curve25519_keypair_t *keys_out,
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
@@ -875,7 +882,6 @@ init_keys(void)
}
tor_free(keydir);
-#ifdef CURVE25519_ENABLED
{
/* 2b. Load curve25519 onion keys. */
int r;
@@ -896,7 +902,6 @@ init_keys(void)
}
tor_free(keydir);
}
-#endif
/* 3. Initialize link key and TLS context. */
if (router_initialize_tls_context() < 0) {
@@ -917,7 +922,7 @@ init_keys(void)
}
if (mydesc) {
was_router_added_t added;
- ri = router_parse_entry_from_string(mydesc, NULL, 1, 0, NULL);
+ ri = router_parse_entry_from_string(mydesc, NULL, 1, 0, NULL, NULL);
if (!ri) {
log_err(LD_GENERAL,"Generated a routerinfo we couldn't parse.");
return -1;
@@ -1080,6 +1085,7 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
* they're confused or to get statistics. */
int interval_length = accounting_get_interval_length();
uint32_t effective_bw = get_effective_bwrate(options);
+ uint64_t acc_bytes;
if (!interval_length) {
log_warn(LD_BUG, "An accounting interval is not allowed to be zero "
"seconds long. Raising to 1.");
@@ -1090,8 +1096,12 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
"accounting interval length %d", effective_bw,
U64_PRINTF_ARG(options->AccountingMax),
interval_length);
+
+ acc_bytes = options->AccountingMax;
+ if (get_options()->AccountingRule == ACCT_SUM)
+ acc_bytes /= 2;
if (effective_bw >=
- options->AccountingMax / interval_length) {
+ acc_bytes / interval_length) {
new_choice = 0;
reason = "AccountingMax enabled";
}
@@ -1801,11 +1811,9 @@ router_rebuild_descriptor(int force)
ri->cache_info.published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
* main thread */
-#ifdef CURVE25519_ENABLED
ri->onion_curve25519_pkey =
tor_memdup(&get_current_curve25519_keypair()->pubkey,
sizeof(curve25519_public_key_t));
-#endif
/* For now, at most one IPv6 or-address is being advertised. */
{
@@ -2384,7 +2392,6 @@ router_dump_router_to_string(routerinfo_t *router,
smartlist_add_asprintf(chunks, "contact %s\n", ci);
}
-#ifdef CURVE25519_ENABLED
if (router->onion_curve25519_pkey) {
char kbuf[128];
base64_encode(kbuf, sizeof(kbuf),
@@ -2392,7 +2399,6 @@ router_dump_router_to_string(routerinfo_t *router,
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)) {
@@ -2442,7 +2448,7 @@ router_dump_router_to_string(routerinfo_t *router,
const char *cp;
routerinfo_t *ri_tmp;
cp = s_dup = tor_strdup(output);
- ri_tmp = router_parse_entry_from_string(cp, NULL, 1, 0, NULL);
+ ri_tmp = router_parse_entry_from_string(cp, NULL, 1, 0, NULL, NULL);
if (!ri_tmp) {
log_err(LD_BUG,
"We just generated a router descriptor we can't parse.");
@@ -2724,7 +2730,7 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
s = smartlist_join_strings(chunks, "", 0, NULL);
cp = s_dup = tor_strdup(s);
- ei_tmp = extrainfo_parse_entry_from_string(cp, NULL, 1, NULL);
+ ei_tmp = extrainfo_parse_entry_from_string(cp, NULL, 1, NULL, NULL);
if (!ei_tmp) {
if (write_stats_to_extrainfo) {
log_warn(LD_GENERAL, "We just generated an extra-info descriptor "
@@ -3068,10 +3074,8 @@ 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));
diff --git a/src/or/router.h b/src/or/router.h
index d18ff065ea..16d3845be1 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -32,10 +32,8 @@ 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);
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 1faa05f06f..8379bc80b3 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -79,6 +79,7 @@ static const char *signed_descriptor_get_body_impl(
const signed_descriptor_t *desc,
int with_annotations);
static void list_pending_downloads(digestmap_t *result,
+ digest256map_t *result256,
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,
@@ -475,6 +476,8 @@ trusted_dirs_remove_old_certs(void)
time_t cert_published;
if (newest == cert)
continue;
+ /* resolve spurious clang shallow analysis null pointer errors */
+ tor_assert(cert);
expired = now > cert->expires;
cert_published = cert->cache_info.published_on;
/* Store expired certs for 48 hours after a newer arrives;
@@ -715,7 +718,8 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now)
* 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_downloads(pending_id, NULL,
+ DIR_PURPOSE_FETCH_CERTIFICATE, "fp/");
list_pending_fpsk_downloads(pending_cert);
/*
@@ -1532,7 +1536,7 @@ dirserver_choose_by_weight(const smartlist_t *servers, double authority_weight)
u64_dbl_t *weights;
const dir_server_t *ds;
- weights = tor_calloc(sizeof(u64_dbl_t), n);
+ weights = tor_calloc(n, sizeof(u64_dbl_t));
for (i = 0; i < n; ++i) {
ds = smartlist_get(servers, i);
weights[i].dbl = ds->weight;
@@ -2026,9 +2030,10 @@ compute_weighted_bandwidths(const smartlist_t *sl,
if (Wg < 0 || Wm < 0 || We < 0 || Wd < 0 || Wgb < 0 || Wmb < 0 || Wdb < 0
|| Web < 0) {
log_debug(LD_CIRC,
- "Got negative bandwidth weights. Defaulting to old selection"
+ "Got negative bandwidth weights. Defaulting to naive selection"
" algorithm.");
- return -1; // Use old algorithm.
+ Wg = Wm = We = Wd = weight_scale;
+ Wgb = Wmb = Web = Wdb = weight_scale;
}
Wg /= weight_scale;
@@ -2041,9 +2046,10 @@ compute_weighted_bandwidths(const smartlist_t *sl,
Web /= weight_scale;
Wdb /= weight_scale;
- bandwidths = tor_calloc(sizeof(u64_dbl_t), smartlist_len(sl));
+ bandwidths = tor_calloc(smartlist_len(sl), sizeof(u64_dbl_t));
// Cycle through smartlist and total the bandwidth.
+ static int warned_missing_bw = 0;
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0;
double weight = 1;
@@ -2052,15 +2058,18 @@ compute_weighted_bandwidths(const smartlist_t *sl,
is_dir = node_is_dir(node);
if (node->rs) {
if (!node->rs->has_bandwidth) {
- tor_free(bandwidths);
/* This should never happen, unless all the authorites downgrade
* to 0.2.0 or rogue routerstatuses get inserted into our consensus. */
- log_warn(LD_BUG,
- "Consensus is not listing bandwidths. Defaulting back to "
- "old router selection algorithm.");
- return -1;
+ if (! warned_missing_bw) {
+ log_warn(LD_BUG,
+ "Consensus is missing some bandwidths. Using a naive "
+ "router selection algorithm");
+ warned_missing_bw = 1;
+ }
+ this_bw = 30000; /* Chosen arbitrarily */
+ } else {
+ this_bw = kb_to_bytes(node->rs->bandwidth_kb);
}
- 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);
@@ -2137,226 +2146,13 @@ frac_nodes_with_descriptors(const smartlist_t *sl,
return present / total;
}
-/** Helper function:
- * choose a random node_t element of smartlist <b>sl</b>, weighted by
- * the advertised bandwidth of each element.
- *
- * If <b>rule</b>==WEIGHT_FOR_EXIT. we're picking an exit node: consider all
- * nodes' bandwidth equally regardless of their Exit status, since there may
- * be some in the list because they exit to obscure ports. If
- * <b>rule</b>==NO_WEIGHTING, we're picking a non-exit node: weight
- * exit-node's bandwidth less depending on the smallness of the fraction of
- * Exit-to-total bandwidth. If <b>rule</b>==WEIGHT_FOR_GUARD, we're picking a
- * guard node: consider all guard's bandwidth equally. Otherwise, weight
- * guards proportionally less.
- */
-static const node_t *
-smartlist_choose_node_by_bandwidth(const smartlist_t *sl,
- bandwidth_weight_rule_t rule)
-{
- unsigned int i;
- u64_dbl_t *bandwidths;
- int is_exit;
- int is_guard;
- 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;
-
- // This function does not support WEIGHT_FOR_DIR
- // or WEIGHT_FOR_MID
- if (rule == WEIGHT_FOR_DIR || rule == WEIGHT_FOR_MID) {
- rule = NO_WEIGHTING;
- }
-
- /* Can't choose exit and guard at same time */
- tor_assert(rule == NO_WEIGHTING ||
- rule == WEIGHT_FOR_EXIT ||
- rule == WEIGHT_FOR_GUARD);
-
- if (smartlist_len(sl) == 0) {
- log_info(LD_CIRC,
- "Empty routerlist passed in to old node selection for rule %s",
- bandwidth_weight_rule_to_string(rule));
- return NULL;
- }
-
- /* First count the total bandwidth weight, and make a list
- * of each value. We use UINT64_MAX to indicate "unknown". */
- bandwidths = tor_calloc(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));
-
- /* Iterate over all the routerinfo_t or routerstatus_t, and */
- SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
- /* first, learn what bandwidth we think i has */
- int is_known = 1;
- uint32_t this_bw = 0;
- i = 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_kb);
- } else { /* guess */
- is_known = 0;
- }
- } else if (node->ri) {
- /* Must be a bridge if we're willing to use it */
- this_bw = bridge_get_advertised_bandwidth_bounded(node->ri);
- }
-
- if (is_exit)
- 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].dbl = this_bw;
- if (is_guard)
- total_guard_bw += this_bw;
- else
- total_nonguard_bw += this_bw;
- if (is_exit)
- total_exit_bw += this_bw;
- else
- total_nonexit_bw += this_bw;
- } else {
- ++n_unknown;
- 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 < 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;
- avg_fast = avg_slow = (int32_t)
- ((total_exit_bw+total_nonexit_bw)/((uint64_t) n_known));
- } else {
- avg_fast = 40000;
- avg_slow = 20000;
- }
- for (i=0; i<(unsigned)smartlist_len(sl); ++i) {
- if (bandwidths[i].dbl >= 0.0)
- continue;
- 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].dbl;
- else
- total_nonexit_bw += bandwidths[i].dbl;
- if (is_guard)
- total_guard_bw += bandwidths[i].dbl;
- else
- total_nonguard_bw += bandwidths[i].dbl;
- }
- }
-
- /* If there's no bandwidth at all, pick at random. */
- 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);
- }
-
- /* Figure out how to weight exits and guards */
- {
- double all_bw = U64_TO_DBL(total_exit_bw+total_nonexit_bw);
- double exit_bw = U64_TO_DBL(total_exit_bw);
- double guard_bw = U64_TO_DBL(total_guard_bw);
- /*
- * 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<EPSILON)
- exit_weight = 1.0;
- else
- exit_weight = 1.0 - all_bw/(3.0*exit_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);
-
- if (exit_weight <= 0.0)
- exit_weight = 0.0;
-
- if (guard_weight <= 0.0)
- guard_weight = 0.0;
-
- for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- 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)
- bandwidths[i].dbl *= exit_weight * guard_weight;
- else if (is_guard)
- bandwidths[i].dbl *= guard_weight;
- else if (is_exit)
- bandwidths[i].dbl *= exit_weight;
- }
- }
-
-#if 0
- log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
- ", exit bw = "U64_FORMAT
- ", nonexit bw = "U64_FORMAT", exit weight = %f "
- "(for exit == %d)"
- ", guard bw = "U64_FORMAT
- ", nonguard bw = "U64_FORMAT", guard weight = %f "
- "(for guard == %d)",
- U64_PRINTF_ARG(total_bw),
- U64_PRINTF_ARG(total_exit_bw), U64_PRINTF_ARG(total_nonexit_bw),
- 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
-
- scale_array_elements_to_u64(bandwidths, smartlist_len(sl), NULL);
-
- {
- 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);
- }
-}
-
/** 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(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{ /*XXXX MOVE */
- const node_t *ret;
- if ((ret = smartlist_choose_node_by_bandwidth_weights(sl, rule))) {
- return ret;
- } else {
- return smartlist_choose_node_by_bandwidth(sl, rule);
- }
+ return smartlist_choose_node_by_bandwidth_weights(sl, rule);
}
/** Return a random running node from the nodelist. Never
@@ -2532,7 +2328,7 @@ router_is_named(const routerinfo_t *router)
/** 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. */
+ * is zero (NO_DIRINFO), or ALL_DIRINFO, any authority is okay. */
int
router_digest_is_trusted_dir_type(const char *digest, dirinfo_type_t type)
{
@@ -2613,8 +2409,8 @@ router_get_by_descriptor_digest(const char *digest)
/** Return the signed descriptor for the router in our routerlist whose
* 20-byte extra-info digest is <b>digest</b>. Return NULL if no such router
* is known. */
-signed_descriptor_t *
-router_get_by_extrainfo_digest(const char *digest)
+MOCK_IMPL(signed_descriptor_t *,
+router_get_by_extrainfo_digest,(const char *digest))
{
tor_assert(digest);
@@ -2935,12 +2731,13 @@ routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
}
/** Adds the extrainfo_t <b>ei</b> to the routerlist <b>rl</b>, if there is a
- * corresponding router in rl-\>routers or rl-\>old_routers. Return true iff
- * we actually inserted <b>ei</b>. Free <b>ei</b> if it isn't inserted. */
-static int
-extrainfo_insert(routerlist_t *rl, extrainfo_t *ei)
+ * corresponding router in rl-\>routers or rl-\>old_routers. Return the status
+ * of inserting <b>ei</b>. Free <b>ei</b> if it isn't inserted. */
+MOCK_IMPL(STATIC was_router_added_t,
+extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei))
{
- int r = 0;
+ was_router_added_t r;
+ const char *compatibility_error_msg;
routerinfo_t *ri = rimap_get(rl->identity_map,
ei->cache_info.identity_digest);
signed_descriptor_t *sd =
@@ -2954,9 +2751,17 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei)
if (!ri) {
/* This router is unknown; we can't even verify the signature. Give up.*/
+ r = ROUTER_NOT_IN_CONSENSUS;
goto done;
}
- if (routerinfo_incompatible_with_extrainfo(ri, ei, sd, NULL)) {
+ if (routerinfo_incompatible_with_extrainfo(ri, ei, sd,
+ &compatibility_error_msg)) {
+ r = (ri->cache_info.extrainfo_is_bogus) ?
+ ROUTER_BAD_EI : ROUTER_NOT_IN_CONSENSUS;
+
+ log_warn(LD_DIR,"router info incompatible with extra info (reason: %s)",
+ compatibility_error_msg);
+
goto done;
}
@@ -2966,7 +2771,7 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei)
ei_tmp = eimap_set(rl->extra_info_map,
ei->cache_info.signed_descriptor_digest,
ei);
- r = 1;
+ r = ROUTER_ADDED_SUCCESSFULLY;
if (ei_tmp) {
rl->extrainfo_store.bytes_dropped +=
ei_tmp->cache_info.signed_descriptor_len;
@@ -2974,7 +2779,7 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei)
}
done:
- if (r == 0)
+ if (r != ROUTER_ADDED_SUCCESSFULLY)
extrainfo_free(ei);
#ifdef DEBUG_ROUTERLIST
@@ -3249,7 +3054,7 @@ routerlist_reparse_old(routerlist_t *rl, signed_descriptor_t *sd)
ri = router_parse_entry_from_string(body,
body+sd->signed_descriptor_len+sd->annotations_len,
- 0, 1, NULL);
+ 0, 1, NULL, NULL);
if (!ri)
return NULL;
memcpy(&ri->cache_info, sd, sizeof(signed_descriptor_t));
@@ -3300,7 +3105,7 @@ routerlist_reset_warnings(void)
MOCK_IMPL(int,
router_descriptor_is_older_than,(const routerinfo_t *router, int seconds))
{
- return router->cache_info.published_on < time(NULL) - seconds;
+ return router->cache_info.published_on < approx_time() - seconds;
}
/** Add <b>router</b> to the routerlist, if we don't already have it. Replace
@@ -3369,7 +3174,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router_describe(router));
*msg = "Router descriptor was not new.";
routerinfo_free(router);
- return ROUTER_WAS_NOT_NEW;
+ return ROUTER_IS_ALREADY_KNOWN;
}
}
@@ -3454,7 +3259,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
&routerlist->desc_store);
routerlist_insert_old(routerlist, router);
*msg = "Router descriptor was not new.";
- return ROUTER_WAS_NOT_NEW;
+ return ROUTER_IS_ALREADY_KNOWN;
} else {
/* Same key, and either new, or listed in the consensus. */
log_debug(LD_DIR, "Replacing entry for router %s",
@@ -3475,7 +3280,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router_descriptor_is_older_than(router, OLD_ROUTER_DESC_MAX_AGE)) {
*msg = "Router descriptor was really old.";
routerinfo_free(router);
- return ROUTER_WAS_NOT_NEW;
+ return ROUTER_WAS_TOO_OLD;
}
/* We haven't seen a router with this identity before. Add it to the end of
@@ -3496,21 +3301,18 @@ was_router_added_t
router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg,
int from_cache, int from_fetch)
{
- int inserted;
+ was_router_added_t inserted;
(void)from_fetch;
if (msg) *msg = NULL;
/*XXXX023 Do something with msg */
inserted = extrainfo_insert(router_get_routerlist(), ei);
- if (inserted && !from_cache)
+ if (WRA_WAS_ADDED(inserted) && !from_cache)
signed_desc_append_to_journal(&ei->cache_info,
&routerlist->extrainfo_store);
- if (inserted)
- return ROUTER_ADDED_SUCCESSFULLY;
- else
- return ROUTER_BAD_EI;
+ return inserted;
}
/** Sorting helper: return &lt;0, 0, or &gt;0 depending on whether the
@@ -3580,9 +3382,9 @@ routerlist_remove_old_cached_routers_with_id(time_t now,
n_extra = n - mdpr;
}
- lifespans = tor_calloc(sizeof(struct duration_idx_t), n);
- rmv = tor_calloc(sizeof(uint8_t), n);
- must_keep = tor_calloc(sizeof(uint8_t), n);
+ lifespans = tor_calloc(n, sizeof(struct duration_idx_t));
+ rmv = tor_calloc(n, sizeof(uint8_t));
+ must_keep = tor_calloc(n, sizeof(uint8_t));
/* Set lifespans to contain the lifespan and index of each server. */
/* Set rmv[i-lo]=1 if we're going to remove a server for being too old. */
for (i = lo; i <= hi; ++i) {
@@ -3805,7 +3607,8 @@ router_load_single_router(const char *s, uint8_t purpose, int cache,
"@source controller\n"
"@purpose %s\n", router_purpose_to_string(purpose));
- if (!(ri = router_parse_entry_from_string(s, NULL, 1, 0, annotation_buf))) {
+ if (!(ri = router_parse_entry_from_string(s, NULL, 1, 0,
+ annotation_buf, NULL))) {
log_warn(LD_DIR, "Error parsing router descriptor; dropping.");
*msg = "Couldn't parse router descriptor.";
return -1;
@@ -3869,9 +3672,11 @@ router_load_routers_from_string(const char *s, const char *eos,
int from_cache = (saved_location != SAVED_NOWHERE);
int allow_annotations = (saved_location != SAVED_NOWHERE);
int any_changed = 0;
+ smartlist_t *invalid_digests = smartlist_new();
router_parse_list_from_string(&s, eos, routers, saved_location, 0,
- allow_annotations, prepend_annotations);
+ allow_annotations, prepend_annotations,
+ invalid_digests);
routers_update_status_from_consensus_networkstatus(routers, !from_cache);
@@ -3907,7 +3712,7 @@ router_load_routers_from_string(const char *s, const char *eos,
smartlist_add(changed, ri);
routerlist_descriptors_added(changed, from_cache);
smartlist_clear(changed);
- } else if (WRA_WAS_REJECTED(r)) {
+ } else if (WRA_NEVER_DOWNLOADABLE(r)) {
download_status_t *dl_status;
dl_status = router_get_dl_status_by_descriptor_digest(d);
if (dl_status) {
@@ -3918,6 +3723,27 @@ router_load_routers_from_string(const char *s, const char *eos,
}
} SMARTLIST_FOREACH_END(ri);
+ SMARTLIST_FOREACH_BEGIN(invalid_digests, const uint8_t *, bad_digest) {
+ /* This digest is never going to be parseable. */
+ base16_encode(fp, sizeof(fp), (char*)bad_digest, DIGEST_LEN);
+ if (requested_fingerprints && descriptor_digests) {
+ if (! smartlist_contains_string(requested_fingerprints, fp)) {
+ /* But we didn't ask for it, so we should assume shennanegans. */
+ continue;
+ }
+ smartlist_string_remove(requested_fingerprints, fp);
+ }
+ download_status_t *dls;
+ dls = router_get_dl_status_by_descriptor_digest((char*)bad_digest);
+ if (dls) {
+ log_info(LD_GENERAL, "Marking router with descriptor %s as unparseable, "
+ "and therefore undownloadable", fp);
+ download_status_mark_impossible(dls);
+ }
+ } SMARTLIST_FOREACH_END(bad_digest);
+ SMARTLIST_FOREACH(invalid_digests, uint8_t *, d, tor_free(d));
+ smartlist_free(invalid_digests);
+
routerlist_assert_ok(routerlist);
if (any_changed)
@@ -3941,13 +3767,16 @@ router_load_extrainfo_from_string(const char *s, const char *eos,
smartlist_t *extrainfo_list = smartlist_new();
const char *msg;
int from_cache = (saved_location != SAVED_NOWHERE);
+ smartlist_t *invalid_digests = smartlist_new();
router_parse_list_from_string(&s, eos, extrainfo_list, saved_location, 1, 0,
- NULL);
+ NULL, invalid_digests);
log_info(LD_DIR, "%d elements to add", smartlist_len(extrainfo_list));
SMARTLIST_FOREACH_BEGIN(extrainfo_list, extrainfo_t *, ei) {
+ uint8_t d[DIGEST_LEN];
+ memcpy(d, ei->cache_info.signed_descriptor_digest, DIGEST_LEN);
was_router_added_t added =
router_add_extrainfo_to_routerlist(ei, &msg, from_cache, !from_cache);
if (WRA_WAS_ADDED(added) && requested_fingerprints) {
@@ -3961,9 +3790,39 @@ router_load_extrainfo_from_string(const char *s, const char *eos,
* so long as we would have wanted them anyway. Since we always fetch
* all the extrainfos we want, and we never actually act on them
* inside Tor, this should be harmless. */
+ } else if (WRA_NEVER_DOWNLOADABLE(added)) {
+ signed_descriptor_t *sd = router_get_by_extrainfo_digest((char*)d);
+ if (sd) {
+ log_info(LD_GENERAL, "Marking extrainfo with descriptor %s as "
+ "unparseable, and therefore undownloadable",
+ hex_str((char*)d,DIGEST_LEN));
+ download_status_mark_impossible(&sd->ei_dl_status);
+ }
}
} SMARTLIST_FOREACH_END(ei);
+ SMARTLIST_FOREACH_BEGIN(invalid_digests, const uint8_t *, bad_digest) {
+ /* This digest is never going to be parseable. */
+ char fp[HEX_DIGEST_LEN+1];
+ base16_encode(fp, sizeof(fp), (char*)bad_digest, DIGEST_LEN);
+ if (requested_fingerprints) {
+ if (! smartlist_contains_string(requested_fingerprints, fp)) {
+ /* But we didn't ask for it, so we should assume shennanegans. */
+ continue;
+ }
+ smartlist_string_remove(requested_fingerprints, fp);
+ }
+ signed_descriptor_t *sd =
+ router_get_by_extrainfo_digest((char*)bad_digest);
+ if (sd) {
+ log_info(LD_GENERAL, "Marking extrainfo with descriptor %s as "
+ "unparseable, and therefore undownloadable", fp);
+ download_status_mark_impossible(&sd->ei_dl_status);
+ }
+ } SMARTLIST_FOREACH_END(bad_digest);
+ SMARTLIST_FOREACH(invalid_digests, uint8_t *, d, tor_free(d));
+ smartlist_free(invalid_digests);
+
routerlist_assert_ok(routerlist);
router_rebuild_store(0, &router_get_routerlist()->extrainfo_store);
@@ -4209,7 +4068,7 @@ clear_dir_servers(void)
* corresponding elements of <b>result</b> to a nonzero value.
*/
static void
-list_pending_downloads(digestmap_t *result,
+list_pending_downloads(digestmap_t *result, digest256map_t *result256,
int purpose, const char *prefix)
{
const size_t p_len = strlen(prefix);
@@ -4219,7 +4078,7 @@ list_pending_downloads(digestmap_t *result,
if (purpose == DIR_PURPOSE_FETCH_MICRODESC)
flags = DSR_DIGEST256|DSR_BASE64;
- tor_assert(result);
+ tor_assert(result || result256);
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
if (conn->type == CONN_TYPE_DIR &&
@@ -4232,11 +4091,19 @@ list_pending_downloads(digestmap_t *result,
}
} SMARTLIST_FOREACH_END(conn);
- SMARTLIST_FOREACH(tmp, char *, d,
+ if (result) {
+ SMARTLIST_FOREACH(tmp, char *, d,
{
digestmap_set(result, d, (void*)1);
tor_free(d);
});
+ } else if (result256) {
+ SMARTLIST_FOREACH(tmp, uint8_t *, d,
+ {
+ digest256map_set(result256, d, (void*)1);
+ tor_free(d);
+ });
+ }
smartlist_free(tmp);
}
@@ -4248,20 +4115,16 @@ list_pending_descriptor_downloads(digestmap_t *result, int extrainfo)
{
int purpose =
extrainfo ? DIR_PURPOSE_FETCH_EXTRAINFO : DIR_PURPOSE_FETCH_SERVERDESC;
- list_pending_downloads(result, purpose, "d/");
+ list_pending_downloads(result, NULL, purpose, "d/");
}
/** For every microdescriptor we are currently downloading by descriptor
- * digest, set result[d] to (void*)1. (Note that microdescriptor digests
- * are 256-bit, and digestmap_t only holds 160-bit digests, so we're only
- * getting the first 20 bytes of each digest here.)
- *
- * XXXX Let there be a digestmap256_t, and use that instead.
+ * digest, set result[d] to (void*)1.
*/
void
-list_pending_microdesc_downloads(digestmap_t *result)
+list_pending_microdesc_downloads(digest256map_t *result)
{
- list_pending_downloads(result, DIR_PURPOSE_FETCH_MICRODESC, "d/");
+ list_pending_downloads(NULL, result, DIR_PURPOSE_FETCH_MICRODESC, "d/");
}
/** For every certificate we are currently downloading by (identity digest,
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index 52f2303c7c..e73e69b63a 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -82,7 +82,8 @@ int hexdigest_to_digest(const char *hexdigest, char *digest);
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);
-signed_descriptor_t *router_get_by_extrainfo_digest(const char *digest);
+MOCK_DECL(signed_descriptor_t *,router_get_by_extrainfo_digest,
+ (const char *digest));
signed_descriptor_t *extrainfo_get_by_descriptor_digest(const char *digest);
const char *signed_descriptor_get_body(const signed_descriptor_t *desc);
const char *signed_descriptor_get_annotations(const signed_descriptor_t *desc);
@@ -99,6 +100,7 @@ void routerlist_reset_warnings(void);
static int WRA_WAS_ADDED(was_router_added_t s);
static int WRA_WAS_OUTDATED(was_router_added_t s);
static int WRA_WAS_REJECTED(was_router_added_t s);
+static int WRA_NEVER_DOWNLOADABLE(was_router_added_t s);
/** Return true iff the outcome code in <b>s</b> indicates that the descriptor
* was added. It might still be necessary to check whether the descriptor
* generator should be notified.
@@ -115,7 +117,8 @@ WRA_WAS_ADDED(was_router_added_t s) {
*/
static INLINE int WRA_WAS_OUTDATED(was_router_added_t s)
{
- return (s == ROUTER_WAS_NOT_NEW ||
+ return (s == ROUTER_WAS_TOO_OLD ||
+ s == ROUTER_IS_ALREADY_KNOWN ||
s == ROUTER_NOT_IN_CONSENSUS ||
s == ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS);
}
@@ -125,6 +128,14 @@ static INLINE int WRA_WAS_REJECTED(was_router_added_t s)
{
return (s == ROUTER_AUTHDIR_REJECTS);
}
+/** Return true iff the outcome code in <b>s</b> indicates that the descriptor
+ * was flat-out rejected. */
+static INLINE int WRA_NEVER_DOWNLOADABLE(was_router_added_t s)
+{
+ return (s == ROUTER_AUTHDIR_REJECTS ||
+ s == ROUTER_BAD_EI ||
+ s == ROUTER_WAS_TOO_OLD);
+}
was_router_added_t router_add_to_routerlist(routerinfo_t *router,
const char **msg,
int from_cache,
@@ -185,7 +196,7 @@ int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
int hid_serv_acting_as_directory(void);
int hid_serv_responsible_for_desc_id(const char *id);
-void list_pending_microdesc_downloads(digestmap_t *result);
+void list_pending_microdesc_downloads(digest256map_t *result);
void launch_descriptor_downloads(int purpose,
smartlist_t *downloadable,
const routerstatus_t *source,
@@ -215,6 +226,9 @@ STATIC void scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
MOCK_DECL(int, router_descriptor_is_older_than, (const routerinfo_t *router,
int seconds));
+MOCK_DECL(STATIC was_router_added_t, extrainfo_insert,
+ (routerlist_t *rl, extrainfo_t *ei));
+
#endif
#endif
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 250d1cd062..bc3b00226a 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -911,7 +911,9 @@ find_start_of_next_router_or_extrainfo(const char **s_ptr,
* descriptor in the signed_descriptor_body field of each routerinfo_t. If it
* isn't SAVED_NOWHERE, remember the offset of each descriptor.
*
- * Returns 0 on success and -1 on failure.
+ * Returns 0 on success and -1 on failure. Adds a digest to
+ * <b>invalid_digests_out</b> for every entry that was unparseable or
+ * invalid. (This may cause duplicate entries.)
*/
int
router_parse_list_from_string(const char **s, const char *eos,
@@ -919,7 +921,8 @@ router_parse_list_from_string(const char **s, const char *eos,
saved_location_t saved_location,
int want_extrainfo,
int allow_annotations,
- const char *prepend_annotations)
+ const char *prepend_annotations,
+ smartlist_t *invalid_digests_out)
{
routerinfo_t *router;
extrainfo_t *extrainfo;
@@ -939,6 +942,9 @@ router_parse_list_from_string(const char **s, const char *eos,
tor_assert(eos >= *s);
while (1) {
+ char raw_digest[DIGEST_LEN];
+ int have_raw_digest = 0;
+ int dl_again = 0;
if (find_start_of_next_router_or_extrainfo(s, eos, &have_extrainfo) < 0)
break;
@@ -955,18 +961,20 @@ router_parse_list_from_string(const char **s, const char *eos,
if (have_extrainfo && want_extrainfo) {
routerlist_t *rl = router_get_routerlist();
+ have_raw_digest = router_get_extrainfo_hash(*s, end-*s, raw_digest) == 0;
extrainfo = extrainfo_parse_entry_from_string(*s, end,
saved_location != SAVED_IN_CACHE,
- rl->identity_map);
+ rl->identity_map, &dl_again);
if (extrainfo) {
signed_desc = &extrainfo->cache_info;
elt = extrainfo;
}
} else if (!have_extrainfo && !want_extrainfo) {
+ have_raw_digest = router_get_router_hash(*s, end-*s, raw_digest) == 0;
router = router_parse_entry_from_string(*s, end,
saved_location != SAVED_IN_CACHE,
allow_annotations,
- prepend_annotations);
+ prepend_annotations, &dl_again);
if (router) {
log_debug(LD_DIR, "Read router '%s', purpose '%s'",
router_describe(router),
@@ -975,6 +983,9 @@ router_parse_list_from_string(const char **s, const char *eos,
elt = router;
}
}
+ if (! elt && ! dl_again && have_raw_digest && invalid_digests_out) {
+ smartlist_add(invalid_digests_out, tor_memdup(raw_digest, DIGEST_LEN));
+ }
if (!elt) {
*s = end;
continue;
@@ -1068,11 +1079,17 @@ find_single_ipv6_orport(const smartlist_t *list,
* around when caching the router.
*
* Only one of allow_annotations and prepend_annotations may be set.
+ *
+ * If <b>can_dl_again_out</b> is provided, set *<b>can_dl_again_out</b> to 1
+ * if it's okay to try to download a descriptor with this same digest again,
+ * and 0 if it isn't. (It might not be okay to download it again if part of
+ * the part covered by the digest is invalid.)
*/
routerinfo_t *
router_parse_entry_from_string(const char *s, const char *end,
int cache_copy, int allow_annotations,
- const char *prepend_annotations)
+ const char *prepend_annotations,
+ int *can_dl_again_out)
{
routerinfo_t *router = NULL;
char digest[128];
@@ -1083,6 +1100,9 @@ router_parse_entry_from_string(const char *s, const char *end,
size_t prepend_len = prepend_annotations ? strlen(prepend_annotations) : 0;
int ok = 1;
memarea_t *area = NULL;
+ /* Do not set this to '1' until we have parsed everything that we intend to
+ * parse that's covered by the hash. */
+ int can_dl_again = 0;
tor_assert(!allow_annotations || !prepend_annotations);
@@ -1389,19 +1409,21 @@ router_parse_entry_from_string(const char *s, const char *end,
verified_digests = digestmap_new();
digestmap_set(verified_digests, signed_digest, (void*)(uintptr_t)1);
#endif
- if (check_signature_token(digest, DIGEST_LEN, tok, router->identity_pkey, 0,
- "router descriptor") < 0)
- goto err;
if (!router->or_port) {
log_warn(LD_DIR,"or_port unreadable or 0. Failing.");
goto err;
}
+ /* We've checked everything that's covered by the hash. */
+ can_dl_again = 1;
+ if (check_signature_token(digest, DIGEST_LEN, tok, router->identity_pkey, 0,
+ "router descriptor") < 0)
+ goto err;
+
if (!router->platform) {
router->platform = tor_strdup("<unknown>");
}
-
goto done;
err:
@@ -1418,6 +1440,8 @@ router_parse_entry_from_string(const char *s, const char *end,
DUMP_AREA(area, "routerinfo");
memarea_drop_all(area);
}
+ if (can_dl_again_out)
+ *can_dl_again_out = can_dl_again;
return router;
}
@@ -1426,10 +1450,16 @@ router_parse_entry_from_string(const char *s, const char *end,
* <b>cache_copy</b> is true, make a copy of the extra-info document in the
* cache_info fields of the result. If <b>routermap</b> is provided, use it
* as a map from router identity to routerinfo_t when looking up signing keys.
+ *
+ * If <b>can_dl_again_out</b> is provided, set *<b>can_dl_again_out</b> to 1
+ * if it's okay to try to download an extrainfo with this same digest again,
+ * and 0 if it isn't. (It might not be okay to download it again if part of
+ * the part covered by the digest is invalid.)
*/
extrainfo_t *
extrainfo_parse_entry_from_string(const char *s, const char *end,
- int cache_copy, struct digest_ri_map_t *routermap)
+ int cache_copy, struct digest_ri_map_t *routermap,
+ int *can_dl_again_out)
{
extrainfo_t *extrainfo = NULL;
char digest[128];
@@ -1439,6 +1469,9 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
routerinfo_t *router = NULL;
memarea_t *area = NULL;
const char *s_dup = s;
+ /* Do not set this to '1' until we have parsed everything that we intend to
+ * parse that's covered by the hash. */
+ int can_dl_again = 0;
if (!end) {
end = s + strlen(s);
@@ -1498,6 +1531,9 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
goto err;
}
+ /* We've checked everything that's covered by the hash. */
+ can_dl_again = 1;
+
if (routermap &&
(router = digestmap_get((digestmap_t*)routermap,
extrainfo->cache_info.identity_digest))) {
@@ -1540,6 +1576,8 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
DUMP_AREA(area, "extrainfo");
memarea_drop_all(area);
}
+ if (can_dl_again_out)
+ *can_dl_again_out = can_dl_again;
return extrainfo;
}
@@ -4006,12 +4044,15 @@ find_start_of_next_microdesc(const char *s, const char *eos)
* 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. */
+ * Return all newly parsed microdescriptors in a newly allocated
+ * smartlist_t. If <b>invalid_disgests_out</b> is provided, add a SHA256
+ * microdesc digest to it for every microdesc that we found to be badly
+ * formed. (This may cause duplicates) */
smartlist_t *
microdescs_parse_from_string(const char *s, const char *eos,
int allow_annotations,
- saved_location_t where)
+ saved_location_t where,
+ smartlist_t *invalid_digests_out)
{
smartlist_t *tokens;
smartlist_t *result;
@@ -4033,16 +4074,12 @@ microdescs_parse_from_string(const char *s, const char *eos,
tokens = smartlist_new();
while (s < eos) {
+ int okay = 0;
+
start_of_next_microdesc = find_start_of_next_microdesc(s, eos);
if (!start_of_next_microdesc)
start_of_next_microdesc = eos;
- if (tokenize_string(area, s, start_of_next_microdesc, tokens,
- microdesc_token_table, flags)) {
- log_warn(LD_DIR, "Unparseable microdescriptor");
- goto next;
- }
-
md = tor_malloc_zero(sizeof(microdesc_t));
{
const char *cp = tor_memstr(s, start_of_next_microdesc-s,
@@ -4057,6 +4094,13 @@ microdescs_parse_from_string(const char *s, const char *eos,
md->body = (char*)cp;
md->off = cp - start;
}
+ crypto_digest256(md->digest, md->body, md->bodylen, DIGEST_SHA256);
+
+ if (tokenize_string(area, s, start_of_next_microdesc, tokens,
+ microdesc_token_table, flags)) {
+ log_warn(LD_DIR, "Unparseable microdescriptor");
+ goto next;
+ }
if ((tok = find_opt_by_keyword(tokens, A_LAST_LISTED))) {
if (parse_iso_time(tok->args[0], &md->last_listed)) {
@@ -4113,12 +4157,15 @@ microdescs_parse_from_string(const char *s, const char *eos,
md->ipv6_exit_policy = parse_short_policy(tok->args[0]);
}
- crypto_digest256(md->digest, md->body, md->bodylen, DIGEST_SHA256);
-
smartlist_add(result, md);
+ okay = 1;
md = NULL;
next:
+ if (! okay && invalid_digests_out) {
+ smartlist_add(invalid_digests_out,
+ tor_memdup(md->digest, DIGEST256_LEN));
+ }
microdesc_free(md);
md = NULL;
diff --git a/src/or/routerparse.h b/src/or/routerparse.h
index fa275c8265..e950548f8c 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -29,14 +29,17 @@ int router_parse_list_from_string(const char **s, const char *eos,
saved_location_t saved_location,
int is_extrainfo,
int allow_annotations,
- const char *prepend_annotations);
+ const char *prepend_annotations,
+ smartlist_t *invalid_digests_out);
routerinfo_t *router_parse_entry_from_string(const char *s, const char *end,
int cache_copy,
int allow_annotations,
- const char *prepend_annotations);
+ const char *prepend_annotations,
+ int *can_dl_again_out);
extrainfo_t *extrainfo_parse_entry_from_string(const char *s, const char *end,
- int cache_copy, struct digest_ri_map_t *routermap);
+ int cache_copy, struct digest_ri_map_t *routermap,
+ int *can_dl_again_out);
MOCK_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
(const char *s, int assume_action));
version_status_t tor_version_is_obsolete(const char *myversion,
@@ -60,7 +63,8 @@ ns_detached_signatures_t *networkstatus_parse_detached_signatures(
smartlist_t *microdescs_parse_from_string(const char *s, const char *eos,
int allow_annotations,
- saved_location_t where);
+ saved_location_t where,
+ smartlist_t *invalid_digests_out);
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
index e1b8e23742..38aed77ee9 100644
--- a/src/or/routerset.c
+++ b/src/or/routerset.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define ROUTERSET_PRIVATE
diff --git a/src/or/routerset.h b/src/or/routerset.h
index eafd331b00..a741eb5fda 100644
--- a/src/or/routerset.h
+++ b/src/or/routerset.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/or/statefile.c b/src/or/statefile.c
index 7b9998fc1a..2ce53fdfca 100644
--- a/src/or/statefile.c
+++ b/src/or/statefile.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define STATEFILE_PRIVATE
diff --git a/src/or/statefile.h b/src/or/statefile.h
index 15bb0b4aae..1f3aebee4f 100644
--- a/src/or/statefile.h
+++ b/src/or/statefile.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_STATEFILE_H
diff --git a/src/or/status.c b/src/or/status.c
index c4156d0cc3..c11d99ba7f 100644
--- a/src/or/status.c
+++ b/src/or/status.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Tor Project, Inc. */
+/* Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -145,10 +145,14 @@ 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);
+ uint64_t acc_bytes = options->AccountingMax;
+ char *acc_max;
time_t interval_end = accounting_get_end_time();
char end_buf[ISO_TIME_LEN + 1];
char *remaining = NULL;
+ if (options->AccountingRule == ACCT_SUM)
+ acc_bytes *= 2;
+ acc_max = bytes_to_usage(acc_bytes);
format_local_iso_time(end_buf, interval_end);
remaining = secs_to_uptime(interval_end - now);
diff --git a/src/or/status.h b/src/or/status.h
index 13458ea476..451f343963 100644
--- a/src/or/status.h
+++ b/src/or/status.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Tor Project, Inc. */
+/* Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_STATUS_H
diff --git a/src/or/tor_main.c b/src/or/tor_main.c
index 05dc0bf0bf..9489cdca7f 100644
--- a/src/or/tor_main.c
+++ b/src/or/tor_main.c
@@ -1,6 +1,6 @@
/* Copyright 2001-2004 Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/** String describing which Tor Git repository version the source was
diff --git a/src/or/transports.c b/src/or/transports.c
index 5c7c0b7130..2623f807d0 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Tor Project, Inc. */
+/* Copyright (c) 2011-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -326,9 +326,9 @@ transport_add(transport_t *t)
/** 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)
+MOCK_IMPL(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);
@@ -1456,9 +1456,9 @@ managed_proxy_create(const smartlist_t *transport_list,
* Requires that proxy_argv be a NULL-terminated array of command-line
* elements, containing at least one element.
**/
-void
-pt_kickstart_proxy(const smartlist_t *transport_list,
- char **proxy_argv, int is_server)
+MOCK_IMPL(void,
+pt_kickstart_proxy, (const smartlist_t *transport_list,
+ char **proxy_argv, int is_server))
{
managed_proxy_t *mp=NULL;
transport_t *old_transport = NULL;
diff --git a/src/or/transports.h b/src/or/transports.h
index 25fe5a29a9..2958d5e187 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -32,14 +32,16 @@ typedef struct 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);
+MOCK_DECL(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);
+MOCK_DECL(void, pt_kickstart_proxy,
+ (const smartlist_t *transport_list, char **proxy_argv,
+ int is_server));
#define pt_kickstart_client_proxy(tl, pa) \
pt_kickstart_proxy(tl, pa, 0)
diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake
index e2cf53895f..0435617683 100644
--- a/src/test/Makefile.nmake
+++ b/src/test/Makefile.nmake
@@ -12,9 +12,10 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \
crypt32.lib gdi32.lib user32.lib
TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_channeltls.obj \
- test_containers.obj test_controller_events.obj 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_relay.obj test_replay.obj \
+ test_containers.obj \
+ test_controller_events.obj test_crypto.obj test_data.obj test_dir.obj \
+ test_checkdir.obj test_microdesc.obj test_pt.obj test_util.obj test_config.obj \
+ test_cell_formats.obj test_relay.obj test_replay.obj \
test_scheduler.obj test_introduce.obj test_hs.obj tinytest.obj
tinytest.obj: ..\ext\tinytest.c
diff --git a/src/test/bench.c b/src/test/bench.c
index f6c33626f2..74af06c6e6 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
@@ -26,10 +26,9 @@ const char tor_git_revision[] = "";
#endif
#include "config.h"
-#ifdef CURVE25519_ENABLED
#include "crypto_curve25519.h"
#include "onion_ntor.h"
-#endif
+#include "crypto_ed25519.h"
#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
static uint64_t nanostart;
@@ -79,6 +78,9 @@ perftime(void)
#define NANOCOUNT(start,end,iters) \
( ((double)((end)-(start))) / (iters) )
+#define MICROCOUNT(start,end,iters) \
+ ( NANOCOUNT((start), (end), (iters)) / 1000.0 )
+
/** Run AES performance benchmarks. */
static void
bench_aes(void)
@@ -175,7 +177,6 @@ bench_onion_TAP(void)
crypto_pk_free(key2);
}
-#ifdef CURVE25519_ENABLED
static void
bench_onion_ntor(void)
{
@@ -232,7 +233,63 @@ bench_onion_ntor(void)
ntor_handshake_state_free(state);
dimap_free(keymap, NULL);
}
-#endif
+
+static void
+bench_ed25519(void)
+{
+ uint64_t start, end;
+ const int iters = 1<<12;
+ int i;
+ const uint8_t msg[] = "but leaving, could not tell what they had heard";
+ ed25519_signature_t sig;
+ ed25519_keypair_t kp;
+ curve25519_keypair_t curve_kp;
+ ed25519_public_key_t pubkey_tmp;
+
+ ed25519_secret_key_generate(&kp.seckey, 0);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ ed25519_public_key_generate(&kp.pubkey, &kp.seckey);
+ }
+ end = perftime();
+ printf("Generate public key: %.2f usec\n",
+ MICROCOUNT(start, end, iters));
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ ed25519_sign(&sig, msg, sizeof(msg), &kp);
+ }
+ end = perftime();
+ printf("Sign a short message: %.2f usec\n",
+ MICROCOUNT(start, end, iters));
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ ed25519_checksig(&sig, msg, sizeof(msg), &kp.pubkey);
+ }
+ end = perftime();
+ printf("Verify signature: %.2f usec\n",
+ MICROCOUNT(start, end, iters));
+
+ curve25519_keypair_generate(&curve_kp, 0);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ ed25519_public_key_from_curve25519_public_key(&pubkey_tmp,
+ &curve_kp.pubkey, 1);
+ }
+ end = perftime();
+ printf("Convert public point from curve25519: %.2f usec\n",
+ MICROCOUNT(start, end, iters));
+
+ curve25519_keypair_generate(&curve_kp, 0);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ ed25519_public_blind(&pubkey_tmp, &kp.pubkey, msg);
+ }
+ end = perftime();
+ printf("Blind a public key: %.2f usec\n",
+ MICROCOUNT(start, end, iters));
+}
static void
bench_cell_aes(void)
@@ -512,9 +569,9 @@ static struct benchmark_t benchmarks[] = {
ENT(siphash),
ENT(aes),
ENT(onion_TAP),
-#ifdef CURVE25519_ENABLED
ENT(onion_ntor),
-#endif
+ ENT(ed25519),
+
ENT(cell_aes),
ENT(cell_ops),
ENT(dh),
@@ -569,7 +626,7 @@ main(int argc, const char **argv)
crypto_seed_rng(1);
crypto_init_siphash_key();
options = options_new();
- init_logging();
+ init_logging(1);
options->command = CMD_RUN_UNITTESTS;
options->DataDirectory = tor_strdup("");
options_init(options);
diff --git a/src/test/ed25519_exts_ref.py b/src/test/ed25519_exts_ref.py
new file mode 100644
index 0000000000..93dc49ee93
--- /dev/null
+++ b/src/test/ed25519_exts_ref.py
@@ -0,0 +1,234 @@
+#!/usr/bin/python
+# Copyright 2014, The Tor Project, Inc
+# See LICENSE for licensing information
+
+"""
+ Reference implementations for the ed25519 tweaks that Tor uses.
+
+ Includes self-tester and test vector generator.
+"""
+
+import slow_ed25519
+from slow_ed25519 import *
+
+import os
+import random
+import slownacl_curve25519
+import unittest
+import binascii
+import textwrap
+
+#define a synonym that doesn't look like 1
+ell = l
+
+# This replaces expmod above and makes it go a lot faster.
+slow_ed25519.expmod = pow
+
+def curve25519ToEd25519(c, sign):
+ u = decodeint(c)
+ y = ((u - 1) * inv(u + 1)) % q
+ x = xrecover(y)
+ if x & 1 != sign: x = q-x
+ return encodepoint([x,y])
+
+def blindESK(esk, param):
+ h = H("Derive temporary signing key" + param)
+ mult = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
+ s = decodeint(esk[:32])
+ s_prime = (s * mult) % ell
+ k = esk[32:]
+ assert(len(k) == 32)
+ k_prime = H("Derive temporary signing key hash input" + k)[:32]
+ return encodeint(s_prime) + k_prime
+
+def blindPK(pk, param):
+ h = H("Derive temporary signing key" + param)
+ mult = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
+ P = decodepoint(pk)
+ return encodepoint(scalarmult(P, mult))
+
+def expandSK(sk):
+ h = H(sk)
+ a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
+ k = ''.join([h[i] for i in range(b/8,b/4)])
+ assert len(k) == 32
+ return encodeint(a)+k
+
+def publickeyFromESK(h):
+ a = decodeint(h[:32])
+ A = scalarmult(B,a)
+ return encodepoint(A)
+
+def signatureWithESK(m,h,pk):
+ a = decodeint(h[:32])
+ r = Hint(''.join([h[i] for i in range(b/8,b/4)]) + m)
+ R = scalarmult(B,r)
+ S = (r + Hint(encodepoint(R) + pk + m) * a) % l
+ return encodepoint(R) + encodeint(S)
+
+def newSK():
+ return os.urandom(32)
+
+# ------------------------------------------------------------
+
+MSG = "This is extremely silly. But it is also incredibly serious business!"
+
+class SelfTest(unittest.TestCase):
+
+ def _testSignatures(self, esk, pk):
+ sig = signatureWithESK(MSG, esk, pk)
+ checkvalid(sig, MSG, pk)
+ bad = False
+ try:
+ checkvalid(sig, MSG*2, pk)
+ bad = True
+ except Exception:
+ pass
+
+ self.failIf(bad)
+
+ def testExpand(self):
+ sk = newSK()
+ pk = publickey(sk)
+ esk = expandSK(sk)
+ sig1 = signature(MSG, sk, pk)
+ sig2 = signatureWithESK(MSG, esk, pk)
+ self.assertEquals(sig1, sig2)
+
+ def testSignatures(self):
+ sk = newSK()
+ esk = expandSK(sk)
+ pk = publickeyFromESK(esk)
+ pk2 = publickey(sk)
+ self.assertEquals(pk, pk2)
+
+ self._testSignatures(esk, pk)
+
+ def testDerivation(self):
+ priv = slownacl_curve25519.Private()
+ pub = priv.get_public()
+
+ ed_pub0 = publickeyFromESK(priv.private)
+ sign = (ord(ed_pub0[31]) & 255) >> 7
+ ed_pub1 = curve25519ToEd25519(pub.public, sign)
+
+ self.assertEquals(ed_pub0, ed_pub1)
+
+ def testBlinding(self):
+ sk = newSK()
+ esk = expandSK(sk)
+ pk = publickeyFromESK(esk)
+ param = os.urandom(32)
+ besk = blindESK(esk, param)
+ bpk = blindPK(pk, param)
+ bpk2 = publickeyFromESK(besk)
+ self.assertEquals(bpk, bpk2)
+
+ self._testSignatures(besk, bpk)
+
+# ------------------------------------------------------------
+
+# From pprint.pprint([ binascii.b2a_hex(os.urandom(32)) for _ in xrange(8) ])
+RAND_INPUTS = [
+ '26c76712d89d906e6672dafa614c42e5cb1caac8c6568e4d2493087db51f0d36',
+ 'fba7a5366b5cb98c2667a18783f5cf8f4f8d1a2ce939ad22a6e685edde85128d',
+ '67e3aa7a14fac8445d15e45e38a523481a69ae35513c9e4143eb1c2196729a0e',
+ 'd51385942033a76dc17f089a59e6a5a7fe80d9c526ae8ddd8c3a506b99d3d0a6',
+ '5c8eac469bb3f1b85bc7cd893f52dc42a9ab66f1b02b5ce6a68e9b175d3bb433',
+ 'eda433d483059b6d1ff8b7cfbd0fe406bfb23722c8f3c8252629284573b61b86',
+ '4377c40431c30883c5fbd9bc92ae48d1ed8a47b81d13806beac5351739b5533d',
+ 'c6bbcce615839756aed2cc78b1de13884dd3618f48367a17597a16c1cd7a290b']
+
+# From pprint.pprint([ binascii.b2a_hex(os.urandom(32)) for _ in xrange(8) ])
+BLINDING_PARAMS = [
+ '54a513898b471d1d448a2f3c55c1de2c0ef718c447b04497eeb999ed32027823',
+ '831e9b5325b5d31b7ae6197e9c7a7baf2ec361e08248bce055908971047a2347',
+ 'ac78a1d46faf3bfbbdc5af5f053dc6dc9023ed78236bec1760dadfd0b2603760',
+ 'f9c84dc0ac31571507993df94da1b3d28684a12ad14e67d0a068aba5c53019fc',
+ 'b1fe79d1dec9bc108df69f6612c72812755751f21ecc5af99663b30be8b9081f',
+ '81f1512b63ab5fb5c1711a4ec83d379c420574aedffa8c3368e1c3989a3a0084',
+ '97f45142597c473a4b0e9a12d64561133ad9e1155fe5a9807fe6af8a93557818',
+ '3f44f6a5a92cde816635dfc12ade70539871078d2ff097278be2a555c9859cd0']
+
+PREFIX = "ED25519_"
+
+def writeArray(name, array):
+ print "static const char *{prefix}{name}[] = {{".format(
+ prefix=PREFIX,name=name)
+ for a in array:
+ h = binascii.b2a_hex(a)
+ if len(h) > 70:
+ h1 = h[:70]
+ h2 = h[70:]
+ print ' "{0}"\n "{1}",'.format(h1,h2)
+ else:
+ print ' "{0}",'.format(h)
+ print "};\n"
+
+def comment(text, initial="/**"):
+ print initial
+ print textwrap.fill(text,initial_indent=" * ",subsequent_indent=" * ")
+ print " */"
+
+def makeTestVectors():
+ comment("""Test vectors for our ed25519 implementation and related
+ functions. These were automatically generated by the
+ ed25519_exts_ref.py script.""", initial="/*")
+
+
+ comment("""Secret key seeds used as inputs for the ed25519 test vectors.
+ Randomly generated. """)
+ secretKeys = [ binascii.a2b_hex(r) for r in RAND_INPUTS ]
+ writeArray("SECRET_KEYS", secretKeys)
+
+ comment("""Secret ed25519 keys after expansion from seeds. This is how Tor
+ represents them internally.""")
+ expandedSecretKeys = [ expandSK(sk) for sk in secretKeys ]
+ writeArray("EXPANDED_SECRET_KEYS", expandedSecretKeys)
+
+ comment("""Public keys derived from the above secret keys""")
+ publicKeys = [ publickey(sk) for sk in secretKeys ]
+ writeArray("PUBLIC_KEYS", publicKeys)
+
+ comment("""The curve25519 public keys from which the ed25519 keys can be
+ derived. Used to test our 'derive ed25519 from curve25519'
+ code.""")
+ writeArray("CURVE25519_PUBLIC_KEYS",
+ (slownacl_curve25519.smult_curve25519_base(sk[:32])
+ for sk in expandedSecretKeys))
+
+ comment("""Parameters used for key blinding tests. Randomly generated.""")
+ blindingParams = [ binascii.a2b_hex(r) for r in BLINDING_PARAMS ]
+ writeArray("BLINDING_PARAMS", blindingParams)
+
+ comment("""Blinded secret keys for testing key blinding. The nth blinded
+ key corresponds to the nth secret key blidned with the nth
+ blinding parameter.""")
+ writeArray("BLINDED_SECRET_KEYS",
+ (blindESK(expandSK(sk), bp)
+ for sk,bp in zip(secretKeys,blindingParams)))
+
+ comment("""Blinded public keys for testing key blinding. The nth blinded
+ key corresponds to the nth public key blidned with the nth
+ blinding parameter.""")
+ writeArray("BLINDED_PUBLIC_KEYS",
+ (blindPK(pk, bp) for pk,bp in zip(publicKeys,blindingParams)))
+
+ comment("""Signatures of the public keys, made with their corresponding
+ secret keys.""")
+ writeArray("SELF_SIGNATURES",
+ (signature(pk, sk, pk) for pk,sk in zip(publicKeys,secretKeys)))
+
+
+
+if __name__ == '__main__':
+ import sys
+ if len(sys.argv) == 1 or sys.argv[1] not in ("SelfTest", "MakeVectors"):
+ print "You should specify one of 'SelfTest' or 'MakeVectors'"
+ sys.exit(1)
+ if sys.argv[1] == 'SelfTest':
+ unittest.main()
+ else:
+ makeTestVectors()
+
+
diff --git a/src/test/ed25519_vectors.inc b/src/test/ed25519_vectors.inc
new file mode 100644
index 0000000000..760bafb971
--- /dev/null
+++ b/src/test/ed25519_vectors.inc
@@ -0,0 +1,150 @@
+/*
+ * Test vectors for our ed25519 implementation and related
+ * functions. These were automatically generated by the
+ * ed25519_exts_ref.py script.
+ */
+/**
+ * Secret key seeds used as inputs for the ed25519 test vectors.
+ * Randomly generated.
+ */
+static const char *ED25519_SECRET_KEYS[] = {
+ "26c76712d89d906e6672dafa614c42e5cb1caac8c6568e4d2493087db51f0d36",
+ "fba7a5366b5cb98c2667a18783f5cf8f4f8d1a2ce939ad22a6e685edde85128d",
+ "67e3aa7a14fac8445d15e45e38a523481a69ae35513c9e4143eb1c2196729a0e",
+ "d51385942033a76dc17f089a59e6a5a7fe80d9c526ae8ddd8c3a506b99d3d0a6",
+ "5c8eac469bb3f1b85bc7cd893f52dc42a9ab66f1b02b5ce6a68e9b175d3bb433",
+ "eda433d483059b6d1ff8b7cfbd0fe406bfb23722c8f3c8252629284573b61b86",
+ "4377c40431c30883c5fbd9bc92ae48d1ed8a47b81d13806beac5351739b5533d",
+ "c6bbcce615839756aed2cc78b1de13884dd3618f48367a17597a16c1cd7a290b",
+};
+
+/**
+ * Secret ed25519 keys after expansion from seeds. This is how Tor
+ * represents them internally.
+ */
+static const char *ED25519_EXPANDED_SECRET_KEYS[] = {
+ "c0a4de23cc64392d85aa1da82b3defddbea946d13bb053bf8489fa9296281f495022f1"
+ "f7ec0dcf52f07d4c7965c4eaed121d5d88d0a8ff546b06116a20e97755",
+ "18a8a69a06790dac778e882f7e868baacfa12521a5c058f5194f3a729184514a2a656f"
+ "e7799c3e41f43d756da8d9cd47a061316cfe6147e23ea2f90d1ca45f30",
+ "58d84f8862d2ecfa30eb491a81c36d05b574310ea69dae18ecb57e992a896656b98218"
+ "7ee96c15bf4caeeab2d0b0ae4cd0b8d17470fc7efa98bb26428f4ef36d",
+ "50702d20b3550c6e16033db5ad4fba16436f1ecc7485be6af62b0732ceb5d173c47ccd"
+ "9d044b6ea99dd99256adcc9c62191be194e7cb1a5b58ddcec85d876a2b",
+ "7077464c864c2ed5ed21c9916dc3b3ba6256f8b742fec67658d8d233dadc8d5a7a82c3"
+ "71083cc86892c2c8782dda2a09b6baf016aec51b689183ae59ce932ff2",
+ "8883c1387a6c86fc0bd7b9f157b4e4cd83f6885bf55e2706d2235d4527a2f05311a359"
+ "5953282e436df0349e1bb313a19b3ddbf7a7b91ecce8a2c34abadb38b3",
+ "186791ac8d03a3ac8efed6ac360467edd5a3bed2d02b3be713ddd5be53b3287ee37436"
+ "e5fd7ac43794394507ad440ecfdf59c4c255f19b768a273109e06d7d8e",
+ "b003077c1e52a62308eef7950b2d532e1d4a7eea50ad22d8ac11b892851f1c40ffb9c9"
+ "ff8dcd0c6c233f665a2e176324d92416bfcfcd1f787424c0c667452d86",
+};
+
+/**
+ * Public keys derived from the above secret keys
+ */
+static const char *ED25519_PUBLIC_KEYS[] = {
+ "c2247870536a192d142d056abefca68d6193158e7c1a59c1654c954eccaff894",
+ "1519a3b15816a1aafab0b213892026ebf5c0dc232c58b21088d88cb90e9b940d",
+ "081faa81992e360ea22c06af1aba096e7a73f1c665bc8b3e4e531c46455fd1dd",
+ "73cfa1189a723aad7966137cbffa35140bb40d7e16eae4c40b79b5f0360dd65a",
+ "66c1a77104d86461b6f98f73acf3cd229c80624495d2d74d6fda1e940080a96b",
+ "d21c294db0e64cb2d8976625786ede1d9754186ae8197a64d72f68c792eecc19",
+ "c4d58b4cf85a348ff3d410dd936fa460c4f18da962c01b1963792b9dcc8a6ea6",
+ "95126f14d86494020665face03f2d42ee2b312a85bc729903eb17522954a1c4a",
+};
+
+/**
+ * The curve25519 public keys from which the ed25519 keys can be
+ * derived. Used to test our 'derive ed25519 from curve25519'
+ * code.
+ */
+static const char *ED25519_CURVE25519_PUBLIC_KEYS[] = {
+ "17ba77846e04c7ee5ca17cade774ac1884408f9701f439d4df32cbd8736c6a1f",
+ "022be2124bc1899a78ba2b4167d191af3b59cadf94f0382bc31ce183a117f161",
+ "bf4fd38ef22f718f03c0a12ba5127bd1e3afd494793753f519728b29cc577571",
+ "56c493e490261cef31633efd2461d2b896908e90459e4eecde950a895aef681d",
+ "089675a3e8ff2a7d8b2844a79269c95b7f97a4b8b5ea0cbeec669c6f2dea9b39",
+ "59e20dcb691c4a345fe86c8a79ac817e5b514d84bbf0512a842a08e43f7f087e",
+ "9e43b820b320eda35f66f122c155b2bf8e2192c468617b7115bf067d19e08369",
+ "861f33296cb57f8f01e4a5e8a7e5d5d7043a6247586ab36dea8a1a3c4403ee30",
+};
+
+/**
+ * Parameters used for key blinding tests. Randomly generated.
+ */
+static const char *ED25519_BLINDING_PARAMS[] = {
+ "54a513898b471d1d448a2f3c55c1de2c0ef718c447b04497eeb999ed32027823",
+ "831e9b5325b5d31b7ae6197e9c7a7baf2ec361e08248bce055908971047a2347",
+ "ac78a1d46faf3bfbbdc5af5f053dc6dc9023ed78236bec1760dadfd0b2603760",
+ "f9c84dc0ac31571507993df94da1b3d28684a12ad14e67d0a068aba5c53019fc",
+ "b1fe79d1dec9bc108df69f6612c72812755751f21ecc5af99663b30be8b9081f",
+ "81f1512b63ab5fb5c1711a4ec83d379c420574aedffa8c3368e1c3989a3a0084",
+ "97f45142597c473a4b0e9a12d64561133ad9e1155fe5a9807fe6af8a93557818",
+ "3f44f6a5a92cde816635dfc12ade70539871078d2ff097278be2a555c9859cd0",
+};
+
+/**
+ * Blinded secret keys for testing key blinding. The nth blinded
+ * key corresponds to the nth secret key blidned with the nth
+ * blinding parameter.
+ */
+static const char *ED25519_BLINDED_SECRET_KEYS[] = {
+ "014e83abadb2ca9a27e0ffe23920333d817729f48700e97656ec2823d694050e171d43"
+ "f24e3f53e70ec7ac280044ac77d4942dee5d6807118a59bdf3ee647e89",
+ "fad8cca0b4335847795288b1452508752b253e64e6c7c78d4a02dbbd7d46aa0eb8ceff"
+ "20dfcf53eb52b891fc078c934efbf0353af7242e7dc51bb32a093afa29",
+ "116eb0ae0a4a91763365bdf86db427b00862db448487808788cc339ac10e5e089217f5"
+ "2e92797462bd890fc274672e05c98f2c82970d640084781334aae0f940",
+ "bd1fbb0ee5acddc4adbcf5f33e95d9445f40326ce579fdd764a24483a9ccb20f509ece"
+ "e77082ce088f7c19d5a00e955eeef8df6fa41686abc1030c2d76807733",
+ "237f5345cefe8573ce9fa7e216381a1172796c9e3f70668ab503b1352952530fb57b95"
+ "a440570659a440a3e4771465022a8e67af86bdf2d0990c54e7bb87ff9a",
+ "ba8ff23bc4ad2b739e1ccffc9fbc7837053ea81cdfdb15073f56411cfbae1d0ec492fc"
+ "87d5ec2a1b185ca5a40541fdef0b1e128fd5c2380c888bfa924711bcab",
+ "0fa68f969de038c7a90a4a74ee6167c77582006f2dedecc1956501ba6b6fb10391b476"
+ "8f8e556d78f4bdcb9a13b6f6066fe81d3134ae965dc48cd0785b3af2b8",
+ "deaa3456d1c21944d5dcd361a646858c6cf9336b0a6851d925717eb1ae186902053d9c"
+ "00c81e1331c06ab50087be8cfc7dc11691b132614474f1aa9c2503cccd",
+};
+
+/**
+ * Blinded public keys for testing key blinding. The nth blinded
+ * key corresponds to the nth public key blidned with the nth
+ * blinding parameter.
+ */
+static const char *ED25519_BLINDED_PUBLIC_KEYS[] = {
+ "722d6da6348e618967ef782e71061e27163a8b35f21856475d9d2023f65b6495",
+ "1dffa0586da6cbfcff2024eedf4fc6c818242d9a82dbbe635d6da1b975a1160d",
+ "5ed81f98fed5a6acda4ea6da2c34fab0ab359d950c510c256473f1f33ff438b4",
+ "6e6f92a54fb282120c46d9603df41135f025bc1f58f283809d04be96aeb04040",
+ "cda236f28edc4c7e02d18007b8dab49d669265b0f7aefb1824d7cc8e73a2cd63",
+ "367b03b17b67ca7329b89a520bdab91782402a41cd67264e34b5541a4b3f875b",
+ "8d486b03ac4e3b486b7a1d563706c7fdac75aee789a7cf6f22789eedeff61a31",
+ "9f297ff0aa2ceda91c5ab1b6446f12533d145940de6d850dc323417afde0cb78",
+};
+
+/**
+ * Signatures of the public keys, made with their corresponding
+ * secret keys.
+ */
+static const char *ED25519_SELF_SIGNATURES[] = {
+ "d23188eac3773a316d46006fa59c095060be8b1a23582a0dd99002a82a0662bd246d84"
+ "49e172e04c5f46ac0d1404cebe4aabd8a75a1457aa06cae41f3334f104",
+ "3a785ac1201c97ee5f6f0d99323960d5f264c7825e61aa7cc81262f15bef75eb4fa572"
+ "3add9b9d45b12311b6d403eb3ac79ff8e4e631fc3cd51e4ad2185b200b",
+ "cf431fd0416bfbd20c9d95ef9b723e2acddffb33900edc72195dea95965d52d888d30b"
+ "7b8a677c0bd8ae1417b1e1a0ec6700deadd5d8b54b6689275e04a04509",
+ "2375380cd72d1a6c642aeddff862be8a5804b916acb72c02d9ed052c1561881aa658a5"
+ "af856fcd6d43113e42f698cd6687c99efeef7f2ce045824440d26c5d00",
+ "2385a472f599ca965bbe4d610e391cdeabeba9c336694b0d6249e551458280be122c24"
+ "41dd9746a81bbfb9cd619364bab0df37ff4ceb7aefd24469c39d3bc508",
+ "e500cd0b8cfff35442f88008d894f3a2fa26ef7d3a0ca5714ae0d3e2d40caae58ba7cd"
+ "f69dd126994dad6be536fcda846d89dd8138d1683cc144c8853dce7607",
+ "d187b9e334b0050154de10bf69b3e4208a584e1a65015ec28b14bcc252cf84b8baa9c9"
+ "4867daa60f2a82d09ba9652d41e8dde292b624afc8d2c26441b95e3c0e",
+ "815213640a643d198bd056e02bba74e1c8d2d931643e84497adf3347eb485079c9afe0"
+ "afce9284cdc084946b561abbb214f1304ca11228ff82702185cf28f60d",
+};
+
diff --git a/src/test/example_extrainfo.inc b/src/test/example_extrainfo.inc
new file mode 100644
index 0000000000..606279a765
--- /dev/null
+++ b/src/test/example_extrainfo.inc
@@ -0,0 +1,192 @@
+static const char EX_EI_MINIMAL[] =
+ "extra-info bob 3E1B2DC141F2B7C6A0F3C4ED9A14A9C35762E24B\n"
+ "published 2014-10-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "K5GAkVjpUlofL78NIOE1VDxFn8yYbHK50rVuZG2HxqG/727bon+uMprv4MHjfDcP\n"
+ "V3l9u1uUdGiUPOl8j+hRNw4z/ODeCj/24r2+L32MTjyfUhK49Ld2IlK9iZKlgKYi\n"
+ "zyoatxdAjU8Xc5WPX692HO4/R9CGLsUfYcEEFU2R3EA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_MINIMAL_FP[] = "3E1B2DC141F2B7C6A0F3C4ED9A14A9C35762E24B";
+static const char EX_EI_MINIMAL_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALSppIF3t3wOAm4fzxRvK+q/wh1gGAWwS0JEn8d+c/x+rt1oQabGkqsB\n"
+ "GU6rz1z1AN02W0P2+EcyJQVBjGR3gHQNoDGx0KIdnr3caGAw3XmQXrJLPaViEk28\n"
+ "RJMxx6umpP27YKSyEMHgVTDXblKImT0mE7fVOx8tD0EWRYazmp4NAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
+
+static const char EX_EI_MAXIMAL[] =
+ "extra-info bob FF8248FE780A7236D3FA5D62DEA642055135F942\n"
+ "published 2014-10-05 20:07:00\n"
+ "opt foobarbaz\n"
+ "read-history 900 1,2,3\n"
+ "write-history 900 1,2,3\n"
+ "dirreq-v2-ips 1\n"
+ "dirreq-v3-ips 100\n"
+ "dirreq-v3-reqs blahblah\n"
+ "dirreq-v2-share blahblah\n"
+ "dirreq-v3-share blahblah\n"
+ "dirreq-v2-resp djfkdj\n"
+ "dirreq-v3-resp djfkdj\n"
+ "dirreq-v2-direct-dl djfkdj\n"
+ "dirreq-v3-direct-dl djfkdj\n"
+ "dirreq-v2-tunneled-dl djfkdj\n"
+ "dirreq-v3-tunneled-dl djfkdj\n"
+ "dirreq-stats-end foobar\n"
+ "entry-ips jfsdfds\n"
+ "entry-stats-end ksdflkjfdkf\n"
+ "cell-stats-end FOO\n"
+ "cell-processed-cells FOO\n"
+ "cell-queued-cells FOO\n"
+ "cell-time-in-queue FOO\n"
+ "cell-circuits-per-decile FOO\n"
+ "exit-stats-end FOO\n"
+ "exit-kibibytes-written FOO\n"
+ "exit-kibibytes-read FOO\n"
+ "exit-streams-opened FOO\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "ZO79bLlWVNIruCnWW9duDcOKydPWbL5DfrpUv5IRLF4MMFoacMUdJPDUs9e+wY2C\n"
+ "zndHe6i2JK7yKJj+uCOSC8cx61OLG+kVxMLJ/qhA4H5thrYb+GpzMKwbHzQc3PTH\n"
+ "zHRzj041iWXTL7/DMaQlpJOBoac/wTSIKzoV2B00jBw=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_MAXIMAL_FP[] = "FF8248FE780A7236D3FA5D62DEA642055135F942";
+static const char EX_EI_MAXIMAL_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANSpkYhHUW1EqodY4d3JRbvEM1vjjR/vEE8gjONiJ5t2Sten53jzt8bh\n"
+ "8/VJn7pQGs8zR5CIxCw4P68xMtZJJedS3hhjqubheOE/yW1DtpkiCf+zVEaLpeA8\n"
+ "fYQChkRICnR/BZd4W9bbohLVII5ym2PaJt2ihB3FeVZIsGXm4wxhAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
+
+static const char EX_EI_BAD_SIG1[] =
+ "extra-info bob 3E1B2DC141F2B7C6A0F3C4ED9A14A9C35762E24B\n"
+ "published 2014-10-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "K5GAkVjpUlofL78NIOE1VDxFn8yYbHK50rVuZG2HxqG/727bon+uMprv4MHjfDcP\n"
+ "V3l9u1uUdGiUPOl8j+hXXw4z/ODeCj/24r2+L32MTjyfUhK49Ld2IlK9iZKlgKYi\n"
+ "zyoatxdAjU8Xc5WPX692HO4/R9CGLsUfYcEEFU2R3EA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_SIG2[] =
+ "extra-info bob 3E1B2DC141F2B7C6A0F3C4ED9A14A9C35762E24B\n"
+ "published 2014-10-06 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "K5GAkVjpUlofL78NIOE1VDxFn8yYbHK50rVuZG2HxqG/727bon+uMprv4MHjfDcP\n"
+ "V3l9u1uUdGiUPOl8j+hRNw4z/ODeCj/24r2+L32MTjyfUhK49Ld2IlK9iZKlgKYi\n"
+ "zyoatxdAjU8Xc5WPX692HO4/R9CGLsUfYcEEFU2R3EA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_SIG3[] =
+ "extra-info bob 3E1B2DC141F2B7C6A0F3C4ED9A14A9C35762E24B\n"
+ "published 2014-10-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "K5GAkVjpUlofL78NIOE1VDxFn8yYbHK50rVuZG2HxqG/727bon+uMprv4MHjfDcP\n"
+ "V3l9u1uUdGiUPOl8j+hRNw4z/ODeCj/24r2+L32MTjyfUhK49Ld2IlK9iZKlgKYi\n"
+ "zyoatxdAjU8Xc5WPX692HO4/R9CGLsUfYcEEFU2=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_FP[] =
+ "extra-info bob C34293303F0F1E42CB14E593717B834E8E53797D8888\n"
+ "published 2014-10-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "IDA8ryUYeMx7+Au/xQmX7Y8fXksoHUOXmePND2JYM4rPfishQJ1LpQ15KrolOZDH\n"
+ "FVIk3RmCefNlJeS1/UgWPcU8u2nGw1YQuRBHF4ViTmZ0OevI1pTsSApl4+oIx2dy\n"
+ "DGgCQmKfMbaOixIK8Ioh1Z2NUfMkjbUUE2WWgFTAsac=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_FP_FP[] = "C34293303F0F1E42CB14E593717B834E8E53797D";
+static const char EX_EI_BAD_FP_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKXMSbif4fG+BW/5lIq5V1tMRondIUfKiNizp0E6EcBw5LvYfQV6zrj8\n"
+ "HmMFbB/WGf9XGVMxIBzxzeQBRvCQJh+0QH7+ju5/isIHJZsACMILepr6ywmCcjVU\n"
+ "iYRtC8zGQLqfkf2cNoo7AhcI5i/YzyW2u1zmbPX5J+8sUErfxydbAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
+
+static const char EX_EI_BAD_NICKNAME[] =
+ "extra-info bobhasaverylongnameandidontthinkweshouldlethim A4EA2389A52459B3F7C7121A46012F098BDFC2A4\n"
+ "published 2014-10-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "e2wLJFThRMGawxKrQPuH2XCLek/LJsg4XOB8waAjE0xdHOrzjur9x1jIxy7DVU6t\n"
+ "z1edbIoL24qucMJvFy2xjSQhFRX4OsyNc0nWr3LfJnTW9aEmxuwXM+mltUD2uFN1\n"
+ "2vYOIQjUmJwS2yfeSKnhXEl2PWVUmgzYL3r4S5kHco4=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_NICKNAME_FP[] = "A4EA2389A52459B3F7C7121A46012F098BDFC2A4";
+static const char EX_EI_BAD_NICKNAME_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKfq7oxD1kMu1+zeG2UVXN4vOu6FDp0V/olA3ttmXpUCgCiBxWTgtwNl\n"
+ "nPf0HcKMaCp/0D9XrbhvIoOsg0OTf1TcJfGsA/zPG7jrWYa4xhD50KYvty9EINK9\n"
+ "/UBWNSyXCFDMqnddb/LZ8+VgttmxfYkpeRzSSmDijN3RbOvYJhhBAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
+
+const char EX_EI_BAD_TOKENS[] =
+ "extra-info bob 6F314FB01A31162BD5E473D4977AC570DC5B86BB\n"
+ "published 2014-10-05 20:07:00\n"
+ "published 2014-10-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "lhRIafrkKoQmnUoBLiq4XC8XKXrleGJZ5vefkLcgjOJ5IffsvVdIA7Vqq/ISbPrG\n"
+ "b/Zs0sJNL6naHPxJBglgHJqksSyiYHaeOetXg2Rb+vZ1v2S5BrVgk1nPMDhyIzqc\n"
+ "zU7eCxFf/1sXKtWlEKxGdX4LmVfnIln5aI31Bc4xRrE=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+const char EX_EI_BAD_TOKENS_FP[] = "6F314FB01A31162BD5E473D4977AC570DC5B86BB";
+const char EX_EI_BAD_TOKENS_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAL7Z8tz45Tb4tnEFS2sAyjubBV/giSfZdmXRkDV8Jo4xqWqhWFJn7+zN\n"
+ "AXBWBThGeVH2WXrpz5seNJXgZJPxMTMsrnSCGcRXZw0Npti2MkLuQ6+prZa+OPwE\n"
+ "OyC6jivtAaY/o9iYQjDC2avLXD3N4LvoygyF418KnNcjbzuFygffAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
+
+static const char EX_EI_BAD_START[] =
+ "published 2014-10-05 20:07:00\n"
+ "extra-info bob 5CCCACE71A9BDB5E8E0C942AB3407452350434C0\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "BOiWgexqCAMZ8uyJ7jwBwRkz7Ox8cT4BImkmkV3bQiZgcWvPiYA3EnCm2ye48Ldg\n"
+ "zBST2p6zJM5o4MEDYGMxfViS86Abj/z7DOY1gtLhjmAaVjIIpXc3koxEZtzCecqy\n"
+ "JQz6xEg9/KoEuoT0DRrfYQ+KtQfzBDWrotfOvEa1rvc=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_START_FP[] = "5CCCACE71A9BDB5E8E0C942AB3407452350434C0";
+static const char EX_EI_BAD_START_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAK2OCIfM6Cin/lq99Z3w9tl6HeyGlkBZu9MQEPHxqGIHTq78lIC1UkrC\n"
+ "6NTqlrHBV9dmfzdwJn4GgMWsCZafL0FPIH3HNyNKUxLgyjixyKljHx2rfErSfOxI\n"
+ "bMoOGBKv7m1EZZ0O5uG9ly9MBiNGdJyLdlnVvH7wSCnYciizpO4lAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
+
+static const char EX_EI_BAD_PUBLISHED[] =
+ "extra-info bob E67C477E3536BDE348BD407426D9679E5AE0BC16\n"
+ "published 2014-99-05 20:07:00\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "l45IziBaXRKIjPAIUogMFNjQgH6k6Vm0+6r5+oByr4sP+B3ufNdUA6+WqBs43F0Z\n"
+ "IqcJiT9nFn0DuNd/liOyOCixppDLx5h5NrhoGqcT3ySADEEXhzjlmc35TI3YBNVO\n"
+ "v98fotmwIEg9YRWVGPg6XuIn2PRyiboFyjUpaYGCV0Q=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_EI_BAD_PUBLISHED_FP[] = "E67C477E3536BDE348BD407426D9679E5AE0BC16";
+static const char EX_EI_BAD_PUBLISHED_KEY[] =
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAL7q8GEI18iv8Fo0QbNHmFatQ2FNacalPldpmKUdMJYEVZtdOR0nhcrY\n"
+ "BvG6303md3INygg+KP49RvWEJR/cU4RZ9QfHpORxH2OocMyRedw2rLex2E7jNNSi\n"
+ "52yd1sHFYI8ZQ4aff+ZHUjJUGKRyqpbc8okVbq/Rl7vug0dd12eHAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n";
diff --git a/src/test/failing_routerdescs.inc b/src/test/failing_routerdescs.inc
new file mode 100644
index 0000000000..b49d59fd8a
--- /dev/null
+++ b/src/test/failing_routerdescs.inc
@@ -0,0 +1,668 @@
+/* This one actually succeeds */
+static const char EX_RI_MINIMAL[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAObzT4opT9uaThByupbb96tYxVpGxzL9CRPKUcU0beGpHyognD9USHWc\n"
+ "SpSpKfBL5P3xr2i/XTs34M4UTbT9PE7bVyxv7RD/BZmI4gc8R3PMU77xxbpEU5bK\n"
+ "LF3QUPpuB88m/2fXUGgMNVDc5MIq6pod2NRoDpeU7WA8T3ewXzK5AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM1QKsQiup9DNMCgNeE2FkAhCWzpMZKCn1nNlZbDGfE3Z22ex6bdWWY6\n"
+ "ocEZ3JZDsZsnaZrdYxrL3Mquq7MbHdfx90EdlOvDRP1SAIbZ55mLR77fZTu4BKd/\n"
+ "h9BC6I26uZE0QavFq3+BhoVVhVn5Mqv05nR9CeUMSSZLxw/RJm4DAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Ft/y3JXowjItgfTHwYcZzuUgXrskluoINW5sr+GQoNYE2F4sT8o0tBBJwqJ6FwKd\n"
+ "fkIprv9UXqkv5iY+pXSYSI12mY1K5GMNkXiObk46NjuoNNP9l8oidhO6eNfcE+k3\n"
+ "CRIYS4FbBaD0fWUSwgMuo0Bp83/Wzp3B9ytEBh0/624=\n"
+ "-----END SIGNATURE-----\n";
+
+/* So does this, and it's bigger. */
+static const char EX_RI_MAXIMAL[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANNI56H+b7SW5LMzvXyY5NJzXszsHZZ4O1CPm4CePhBsAz1r0s1JYJ1F\n"
+ "Anrc0mEcLtmj0c5+HnhPBNrfpjO6G94Wp3NZMVykHDhfNVDBRyFZMroG8/GlysYB\n"
+ "MQPGQYR0xBgiuclNHoyk/vygQhZekumamu2O86EIPcfg9LhGIgEbAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALvuNVSmg6R9USFbQcNbRjMCJAV0Rwdv0DlS6Rl02ibJgb01G7v391xE\n"
+ "d9Njzgf93n8gOrE195bkUbvS6k/DM3HFGgArq6q9AZ2LTbu3KbAYy1YPsSIh07kB\n"
+ "/8kkvRRGx37X9WGZU3j5VUEuzqI//xDE9lbanlnnFXpnb6ymehDJAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject 127.0.0.1:*\n"
+ "accept *:80\n"
+ "reject *:*\n"
+ "ipv6-policy accept 80,100,101\n"
+ "ntor-onion-key s7rSohmz9SXn8WWh1EefTHIsWePthsEntQi0WL+ScVw\n"
+ "uptime 1000\n"
+ "hibernating 0\n"
+ "unrecognized-keywords are just dandy in this format\n"
+ "platform Tor 0.2.4.23 on a Banana PC Jr 6000 Series\n"
+ "contact O.W.Jones\n"
+ "fingerprint CC43 DC8E 8C9E 3E6D 59CD 0399 2491 0C8C E1E4 50D2\n"
+ "read-history 900 1,2,3,4\n"
+ "write-history 900 1,2,3,4\n"
+ "extra-info-digest AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
+ "hidden-service-dir\n"
+ "allow-single-hop-exits\n"
+ "family $AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA $BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n"
+ "caches-extra-info\n"
+ "or-address [::1:2:3:4]:9999\n"
+ "or-address 127.0.0.99:10000\n"
+ "opt fred is a fine router\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "x5cxL2h2UsEKk2OVnCTxOF8a89HAe/HwQnSlrBy8+l0YdVCcePDJhm1WyWU7ToHZ\n"
+ "K8auwreuw+u/n14sQHPYrM9NQE689hP4LC9AYOnrCnMHysfVqKuou+DSKYYRgs0D\n"
+ "ySCmJ9p+xekfmms+JBmS5o5DVo48VGlG0VksegoB264=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+/* I've messed with 12 bits of the signature on this one */
+static const char EX_RI_BAD_SIG1[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAObzT4opT9uaThByupbb96tYxVpGxzL9CRPKUcU0beGpHyognD9USHWc\n"
+ "SpSpKfBL5P3xr2i/XTs34M4UTbT9PE7bVyxv7RD/BZmI4gc8R3PMU77xxbpEU5bK\n"
+ "LF3QUPpuB88m/2fXUGgMNVDc5MIq6pod2NRoDpeU7WA8T3ewXzK5AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM1QKsQiup9DNMCgNeE2FkAhCWzpMZKCn1nNlZbDGfE3Z22ex6bdWWY6\n"
+ "ocEZ3JZDsZsnaZrdYxrL3Mquq7MbHdfx90EdlOvDRP1SAIbZ55mLR77fZTu4BKd/\n"
+ "h9BC6I26uZE0QavFq3+BhoVVhVn5Mqv05nR9CeUMSSZLxw/RJm4DAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Ft/y3JXowjItgfTHwYcZzuUgXrskluoINW5sr+GQoNYE2F4sT8o0tBBJwqJ6FwKd\n"
+ "fkIprv9UXqkv5iY+pXSYXX12mY1K5GMNkXiObk46NjuoNNP9l8oidhO6eNfcE+k3\n"
+ "CRIYS4FbBaD0fWUSwgMuo0Bp83/Wzp3B9ytEBh0/624=\n"
+ "-----END SIGNATURE-----\n";
+
+/* This is a good signature of the wrong data: I changed 'published' */
+static const char EX_RI_BAD_SIG2[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAObzT4opT9uaThByupbb96tYxVpGxzL9CRPKUcU0beGpHyognD9USHWc\n"
+ "SpSpKfBL5P3xr2i/XTs34M4UTbT9PE7bVyxv7RD/BZmI4gc8R3PMU77xxbpEU5bK\n"
+ "LF3QUPpuB88m/2fXUGgMNVDc5MIq6pod2NRoDpeU7WA8T3ewXzK5AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM1QKsQiup9DNMCgNeE2FkAhCWzpMZKCn1nNlZbDGfE3Z22ex6bdWWY6\n"
+ "ocEZ3JZDsZsnaZrdYxrL3Mquq7MbHdfx90EdlOvDRP1SAIbZ55mLR77fZTu4BKd/\n"
+ "h9BC6I26uZE0QavFq3+BhoVVhVn5Mqv05nR9CeUMSSZLxw/RJm4DAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:01\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Ft/y3JXowjItgfTHwYcZzuUgXrskluoINW5sr+GQoNYE2F4sT8o0tBBJwqJ6FwKd\n"
+ "fkIprv9UXqkv5iY+pXSYSI12mY1K5GMNkXiObk46NjuoNNP9l8oidhO6eNfcE+k3\n"
+ "CRIYS4FbBaD0fWUSwgMuo0Bp83/Wzp3B9ytEBh0/624=\n"
+ "-----END SIGNATURE-----\n";
+
+/* This one will fail while tokenizing the first line. */
+static const char EX_RI_BAD_TOKENS[] =
+ "router bob\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANGCgvZc+JRtAzuzk3gBD2rH9SHrXzjJ1wqdU3tLKr7FamKCMI2pLwSA\n"
+ "FZUpTuSqB9wJ/iVcYws+/kA3FjLqgPtzJFI0SVLvQcz5oIC1rEWpuP6t88duMlO9\n"
+ "flOUzmYu29sBffrXkQr8pesYvakyXArOJVeRR7fSvouneV5aDYWrAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAML+pYZoYc+whKLijupd63xn0gzlEQqe7k07x/lWMqWFT37FfG6YeNr5\n"
+ "fpFoo77FDfuFaL+VfPfI8i88g157hcPKBVX6OyRH54+l5By0tN91S0H+abXjXQpv\n"
+ "U/Bvmul+5QpUeVJa1nPg71HRIauoDnBNexUQ7Xf/Bwb2xCt+IJ6DAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "tbxtYYzyVqi6w6jz1k8NPjFvZaSNR0WzixVTTvKKGoMPx/6+Z8QAFK1ILzRUVucB\n"
+ "nRhmZMFaPr3vREMErLRE47ODAzwoBCE9C+vYFvROhgfzuQ3cYXla+4sMaRXYZzjH\n"
+ "PQ82bTwvSbHsR8fTTgePD/Ac082WxXTGpx6HOLBfNsQ=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_RI_BAD_PUBLISHED[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMoipSwZgTG6SpSOm6ENbyALS1Ljqqa1LSGmtHSRfGYgUQGWZXERXKQj\n"
+ "P5ql6o7EbGr1wnispGW/KB8Age09jGDvd/oGhQ9TDFluhLZon3obkZSFw7f9iA7Q\n"
+ "s29rNxoeXXLZVyS7+sux70b8x2Dt4CeG8GA8nQLljy1euwU+qYYJAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAPzfzQ+2WFMUvnB3z0xD+zwczWcFyYYNW8Lj7/aRGSNN2DICp5uzSjKq\n"
+ "qkYQ+C8jG21+MR2PE+ZBmq6CL5mvlFKlWKouXUlN7BejwWf2gw0UYag0SYctae1b\n"
+ "bu8NuUEvdeGWg5Odgs+abH7U9S0hEtjKrmE5vvJS5L841IcaPLCFAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 99:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "G92pnwCIXGJ9Q0fI9y4m/fHpWCsD0Hnk81/6T4TmRH3jt77fc0uRdomUOC5id4kz\n"
+ "J2M4vqXwRs5OK+eaPbtxf8Yv6FPmB3OBNCIhwNHIIqzKQStHUhPxD3P6j8uJFwot\n"
+ "/CNGciDN+owZ2DzwrXpszDfzcyp/nmwhApbi3W601vY=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+/* Bandwidth field isn't an integer. */
+static const char EX_RI_BAD_BANDWIDTH[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAN32LAvXQaq0p554FcL4LVwnxyiZvscfuFnfpXwWTDRJJHd2+JCttWIx\n"
+ "v+eW7dNq+rq/tzSzaZwnp8b4V2skLRojSt6UUHD234eZcsPwUNhSr0y1eMuoZbnV\n"
+ "UBBPevpuXea85aSFEXXRlIpQfvFc43y3/UFoRzo5iMPqReo2uQ4BAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMBuF1GvOyVcRDNjzlEmGHJkTA7qkaWgTp33NSY/DPEJoahg0Qswuh2w\n"
+ "1YCBqem6Txp+/Vl9hoUoUGwb7Vwq0+YDMSyr0z3Ih2NcNjOMZPVtjJuv+3wXrQC8\n"
+ "LPpCpfU9m9QvhQ7f9zprEqUHOQTT0v5j2a5bpfd++6LFxrMUNwbfAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth hello world today\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "svABTGDNJOgaiPLqDlkRU6ldYJcoEe2qHlr4O30lVM2hS3Gg6o4QARL7QRt7VepT\n"
+ "SruR6pE83xOr7/5Ijq5PlamS4WtODMJSH3DXT2hM5dYYrEX5jsJNZTQ+cYwPQI3y\n"
+ "ykuvQIutH6ipz5MYc9n0GWAzDjLq1G8wlcEfFXQLD10=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+/* Onion key is actually a signature. */
+static const char EX_RI_BAD_ONIONKEY1[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANByIdFOKA3r2nnWyLjdZE8oGHqJE62T1zjW/nsCzCJQ8/kBMRYeGDu4\n"
+ "SeUJJ2rsh2t3PNzkqJM14f4DKmc2q76STsOW0Zcj70Bjhxb9r/OfyELVsi+x3CsE\n"
+ "Zo/W4JtdlVFjqevhODJdyFNLKOvqwG7sZo/K++Hx01Iu0zXLeg8nAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "svABTGDNJOgaiPLqDlkRU6ldYJcoEe2qHlr4O30lVM2hS3Gg6o4QARL7QRt7VepT\n"
+ "SruR6pE83xOr7/5Ijq5PlamS4WtODMJSH3DXT2hM5dYYrEX5jsJNZTQ+cYwPQI3y\n"
+ "ykuvQIutH6ipz5MYc9n0GWAzDjLq1G8wlcEfFXQLD10=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Cc/Y22KFvxXPXZtjvGIyQdjm4EMhXVXJEBwt8PvK7qlO1AgiVjEBPkUrTQQ/paLQ\n"
+ "lmeCN6jEVcZ8lNiVZgzRQ/2mTO3xLBPj26UNSDuouUwZ01tZ4wPENylNYnLKv5hg\n"
+ "gYARg/nXEJiTVe9LHl99Hr9EWWruRG2wFQjjTILaWzI=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+/* Onion key has exponent 3 */
+static const char EX_RI_BAD_ONIONKEY2[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKP1kWHsH/BZhNSZmn0FyzIrAHtMl1IVPzc7ABbx+kK+IIEMD9k1fy2h\n"
+ "AP2JTm2UmJDUwutVxPsxmndI+9QsRDpu33E5Ai4U1Rb6Qu+2BRj43YAyg414caIu\n"
+ "J5LLn6bOzt7gtz0+q69WHbnwgI4zUgUbwYpwoB7k0dRY97xip9fHAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGHAoGBANBKlyoqApWzG7UzmXcxhXM4T370FbN1edPbw4WAczBDXJslXCU9Xk1r\n"
+ "fKfoi/+WiTGvH7RcZWPm7wnThq2u2EAO/IPPcLE9cshLBkK28EvDg5K/WsYedbY9\n"
+ "1Gou+7ZSwMEPv2b13c7eWnSW1YvFa64pVDKu2sKnIjX6Bm0HZGbXAgED\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "cYcBOlapA+R4xq3nn5CjpnzNXdDArMlHuXv4MairjleF1n755ecH8A/R8YIc2ioV\n"
+ "n/C1TACzFVQ12Q9P3iikVOjIXNxYzaz4Lm/L/Lq4sEOPRJC38QEXeIHEaeM51lE6\n"
+ "p6kCqXcGu/51p5vAFCSiXI1ciucmx93N+TH1yGKRLV0=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_RI_BAD_PORTS[] =
+ "router fred 127.0.0.1 900001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANVi/MVWhzT5uo3Jxw4ElS7UGmA24dnckdkCLetMhZOcE9e9mg4WcImL\n"
+ "NuBe2L/9YaL4PFVchCGlq73phKG6yFdqJdjDV8Qh9MJdAYWW2ORrjRvCrspPaYPN\n"
+ "BGJrkD2Gd4u3sq7f26TIkzmBx0Acd/FD4PQf8+XOt9YYd36ooS4vAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALtP4cIpAYp9nqo1ak4SxALcndFw4o51U36R4oa+uJS/lYQPHkMMOj6K\n"
+ "+AVnj9sxkDJ1POaU5lsCQ5JPG1t+Tkh7vDlJb6RCUy25vJOuaQCb9GVVY7KQTJqA\n"
+ "E0fU73JdKACNjMlbF36aliQhrG4Fq2Uv+y7yp8qsRxQ8jvzEMES/AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "xzu2T+pMZtdsS5q1cwXM2hMIH2c8mpAV31G2hKIuiQRwtPD1ne4iJsnoVCXhFakd\n"
+ "QTq7eTXM174fGWyIT93wvQx/Uqnp29dGZp/VaNOsxHFdYVB4VIVqkBh757h+PSJ+\n"
+ "VNV5JUm4XQ1QbmniJGdTQp4PLBM++fOXMR3ZNd6rt4o=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_NEG_BANDWIDTH[] =
+ "router fred 100.127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMCG/ZCXNCF02uXRSCP7qWBN75jDMQZ363ubnQWhF9KDDNWWiwj3UiZR\n"
+ "zqsM4zKRgjtarWZvp2qxKABFAODd+j9iq5DvUGRbbXv+aR8TT/ifMtwwxHZQBk1F\n"
+ "1hbsLdwWzGIiyz5k2MVhXnt6JTlklH2hgT++gt9YTHYKxkssaq5TAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM3vk/4kOTB1VXrve29JeHOzNUsPwKruBcjxJf+aatxjf6KO2/RW41bM\n"
+ "gRYq9V7VAYeZTsbS727fy03F5rk3QIBhMJxm9FHatQ6rT/iEDD4Q1UZQsNtm+OLf\n"
+ "/TkZZhgfB3MiDQ4ld/+GKd7qww8HXTE+m/g1rXNyZPKozn8K7YUHAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 -1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "bUBBZYZWqCbsH4/7fNXtC/HgIZNGOfDF9v4d9YfKaDs5xDYf2o67hRcwx5imhrgC\n"
+ "IU7n9AI4AGxkFoN6g3Y/t4pqebxdkF678rRDCtrlwwreAiUktgrwnetp9Tpo16xj\n"
+ "V7Uf6LcqQdvu78lRh1dsrY78sf7sb90vusFMPLXGUKM=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_IP[] =
+ "router fred 100.127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMtMrM24AJpJCevxnseIpRlSuAIMksfkfky2+noe7Rok8xn6AMQzMrwx\n"
+ "AiCJ8Jy4DBzIKUiJK4/y1FimyM08qZGR0xeqblCxZ1lbSiXv6OYxoaD2xmWw8zEP\n"
+ "Zgu4jKReHh+gan1D+XpAbFNY0KrANhjRo96ZZ3AQsZQcWBiPKCynAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAOPclmBO/amw1RWTSI1y80qY/EPjc0I+sk9HKr0BQOovxqJ0lmy9Gaue\n"
+ "y+MOejQ9H2hNev0nd7z1fPxEogt7SCe22qJHHX3xDf+D9RpKsvVzDYZsk7hVL7T1\n"
+ "mwHzuiV/dtRa7yAMp7+q0vTUGesU2PYFYMOyPvz5skNLSWrXOm05AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "g6besL/zxOp0N6Q5/7QZgai2kmCU5EAWJlvZrf5jyrjKhsv2a4LDkap07m9QRFqW\n"
+ "GGe7g5iiABIqnl0kzv7NLX7ah+d/xxv+IILXyZfVTxSw0e+zFb3uPlQ7f9JsGJ8i\n"
+ "a+w8wyyDBpOAmi8Ny866Cnp9ojVzCyIErUYHFaPvKao=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_RI_BAD_DIRPORT[] =
+ "router fred 127.0.0.1 9001 0 bob\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANKcD6DJ16X3yvdq05jatdwgjO+hyoIpckW9sV/OkdfIZwf+S6Q4pZGC\n"
+ "doMw5XeOM52gjpx42kUp6M2WlTGDFEpaNU0VyeZYG/M1CM1xvfj3+1PoebioAGdf\n"
+ "GuhNBCHZdaYNiOGnh9t2GgUomgpE6njdS/lovSrDeTL469hfcUghAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANWeGHig5wE9UijaNnEW5au3B3hZKSlzCi+T6MYDPbbYhm8qJaVoXUXF\n"
+ "EP1EUgzDcX3dPEo9upUA1+91GkjGQCo9eOYlqGib8kHIwKnHZK+hernBc/DnOeUp\n"
+ "Wyk9SW5s+fi12OQhr3NGjbSn76FMY9XU3Qt7m3EviTwWpI3Jr5eRAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "t77wEoLjyfMf9LKgBfjveosgwvJ8Go0nb27Ae3Ng9tGtR4qaJQfmwZ5fOOuVU9QC\n"
+ "3s8ww3aY91KD3NTcN3v3FKngxWtRM8AIfwh4pqT3zW6OSP4+nO3xml7ql0Zf6wfj\n"
+ "TPFV2941O3yplAsmBJ41sRSWizF04wTtZAIgzY7dMLA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_NAME2[] =
+ "router verylongnamethatnevereverendsandgoesontoolong 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAL0mcUxg7GJ6oxgciLiBCbo+NuZ/OVKRrERCSM6j6iHERcB9+ciSRgQ5\n"
+ "H6o6FUX2LoRmHYzBk1x7kIjHa9kx9g6CAbBamdZrQbdVnc1y2NrdHB/jvwLj3C48\n"
+ "PgzFIrLg9OlkuoWck/E+YpPllONfF65e0+ualgVjPgpQpXwmz+ktAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAOgHvvTAxyjJtHx9W2X7aOI05H9sYDDY+sxhovT/8EpAHrioex54tsMT\n"
+ "ifgtoXTjGIBEOTDi/1ry39nEW5WPbowqvyzRfR2M43pc96WV7e1nhmD/JrnTYgtR\n"
+ "5/15KxcMJxoDhod7WZ/wlXBnHc2VevX8JTaeOe9KYORCj5iNbtVZAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "j/nFT5gyj20cLHWv94O1jmnqy3n6qkO8Av0OdvvfNeXsMK2UHxk84vzFvEwpUF/Y\n"
+ "i+VR3LXY4CjTpuliMtjt7BQGtmJSvB8W0CeIUenIGzfwDxW9dG2o7spDldKDB/OU\n"
+ "C1wyHvKaA6Yss/02RIDa4AxyjsfbgdJ91qK+aAnYAtA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_BANDWIDTH2[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALQDCm9VEopiYILmt4X9kP6DQazfgKnLXv+6rHbc4qtmvQQD3TVYbxMP\n"
+ "F4sEUaz+YHAPnomfDVW3a0YFRYXwDzUm1n47YYCyhUzEaD2f69Mcl/gLpKdg+QOy\n"
+ "boGB1oD4CStWL3y05KhxxTNiTrg+veMzXTqNwryCYm+GoihIAM9fAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALYHwdx6bmYy09AW5ElN/DWh0fHh3mBK97ryiIMi8FImYfzbw2BR6xuT\n"
+ "aQT5omqS3PNJJcNWZt5gOyDtA9kLh03cch7t1PenXSYJshbME2bDrZDJKVJMN6vV\n"
+ "B1v/9HjXsVF50jBzZsJo3j26XCPT5s6u9wqUFWW09QR3E/1HInHVAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 -1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "p09ijyuvcW+WKRj4mJA/nkLCvZkRcMzykAWheJi1IHCoqhXFdkFLiIRqjaeDVHRr\n"
+ "zBtD+YCQiGvFcaQJ9IUhh7IleHcyyljmDYlvuBAxWiKvVZstJac0kclCU4W+g8yK\n"
+ "0Qug3PmGKk115x2TllHaCZqMo5OkK4I/WAsKp+DnJ1A=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_UPTIME[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMM0Nubr1VXQ/FcgIQTFxZpZDlAEh2XN8FoJ8d+X5S46VDGijmMoYmyN\n"
+ "oLXqMTGmOaR0RGZOeGLgDzeY8tLrfF821IjfkXeAANZibUjdsHwqHO3wlWD2v+GN\n"
+ "0GBocWXEdAp/os229mQQKgYAATJ0Ib3jKhBdtgm5R444u8VX5XnbAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMpyOr4kEtSTZw4H9eSkH2+WmwIlO4VBpY2HkPS00l6L5fM2REjt50Xi\n"
+ "lsNOz8Q6mAn5cMYmsGlv61kg01mCvYc7Z715jGh+1hhVAxMaNS3ED/nSPnslyjhq\n"
+ "BUm51LhYNHD4ktISIqPMurx6aC8B68UYgKzLgCYNzkathFXSBpjRAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "uptime forever-and-a-day\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "NHYeiQOu0nZdrhSy31Xz4F0T6OTU23hPQDzoLax1/zq6iTVrz9xi3HGm7HhOMW1j\n"
+ "YgFGK3+Xm4iJL+DwriunsAIuL5axr3z2hlmFDQHYItP//KyPpOqSrfEOhwcuj/PE\n"
+ "VbWsiVYwz9VJLO8SfHoBeHI6PsjQRQFt2REBKZhYdxA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+
+static const char EX_RI_BAD_BANDWIDTH3[] =
+ "router lucy 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAO6HrITQTEjV/v/rInQ2REmCFZa4dZg8zIh6+B51U/I6hDiZaKGwpNey\n"
+ "9OfjoRqT2DwyLEe3ORm9A2RAz2twLBixrpt5IvC0sbGustmW964BHW7k9VvRupwl\n"
+ "ovujHpLIj5dkLxD15jGXHoTp1yHUVk9NkMGN+ahg6y+QhTbIrWbRAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAOEpciJFXauEqs31GMTUTzu6edBj9WtV+sIflhGKvU1KKRfwCgOcuKMx\n"
+ "QiLHHD9AjhMAFGT/qtNbPFkzfYxHKLHw+NLJsxmNtdkYM26FX3ButPiX+69sq9fI\n"
+ "PCHqQy6z/A7hHwtEk6niWgK2PLhAZCg9duAv+mqFVXe2QEBjax/lAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 electric\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Jk0Xk1RMJSjEflNRcp4qznaHKcfe2r0kOc7TdLAnM8zyNDVj6+Bn8HWmyp/oFmf6\n"
+ "xtWKKgkKxriAVIJgqZMchPbr9RuZS+i+cad++FCwpTVkyBP920XWC47jA3ZXSBee\n"
+ "HK6FaoK5LfmUm8XEU9BVhiwISXaUfTdkR8HfzugFbWk=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_NTOR_KEY[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKYDCSr0Jh9d/mJKjnGYAHKNBcxR3EJk6GGLwKUrRpN8z/aHRxdWlZF2\n"
+ "lBml6yQNK/VPftcvOekxrKq3/dISrIFBzFYj6XHNtg31d09UgitVkk0VfRarZiGu\n"
+ "O6Yv55GSJ9a3AZDE4YmIp5eBjVuChyVkeDFYKVn0ed4sj9gg35rjAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALXdUQuq1pYHyYP0qU6Ik+oOmwl0eOsuwiLWf9Vd+dsgEszICX4DRWPx\n"
+ "syDxfxyA/g9FEPvlI7Nglx6cKe2MT0AutSRLbbML4smfuRZNIF35Cnfu5qTGVVzL\n"
+ "GWVSA2Ip7p+9S9xLhLBdc6qmrxEXCPL6anEhCR4f8AeybXAsz2JLAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "ntor-onion-key s7rSohmz9SXn8WWh1EefTHIsWePthsEntQi0WL+ScVfjdklsdfjkf\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Yf9axWyzPudnRvQstNdbtBYo7pGpUEIdECMGcJtFb6v/00pxk4Tt3RiOKa84cOBV\n"
+ "7V9NjOLdqlx88pGz0DNCJKqToIrwjZDeQ8Q1yi9XClLDkC32fQRX4y6vNBZ3LXLe\n"
+ "ayVrdRrb41/DP+E7FP4RNPA5czujTfs8xLBMbGew8AA=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_FINGERPRINT[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM0wDWF2dBLzsmoIDHRugzosCSR9TSvEE0TkvKu6+agfogGtkQJwQ5zO\n"
+ "sGzZbRR+okO7d+QCED2i3rUs1iikoMUT+pwgvOm8Bxg9R64GK7fl9K5WuAiG11Uj\n"
+ "DQAfSx5Fo30+rhOhe16c9CT7xJhj//ZKDbXUW7BrJI8zpuOnvgD5AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKACg1nWM/WjpUiGwlLQsY3Tq1h0RTz/HmOMx/6rTRxS5HLz0KnLg5zV\n"
+ "dvmfhxqQVKBkt1N2+y+qO7x71oFzIsFMfHYWSxOCEo8Nkff1BqAPqxxUHvM0HwJo\n"
+ "d7lswJ/UT1j4+WZNZ4sFIujsIW2/zZqKlxG9xaw0GXJ082Cj9XkPAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "fingerprint 5555\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "mlqyJ/ZGBINKwSNEi7GpNBCMqIVbL0pGAOBYHJF1GbRlU28uRyNyeELIxIK5ZIet\n"
+ "ZzKr7KPvlBxlyolScPhTJfP98TFSubrwYz7NnQv0vLI0bD0OyoBf/9/1GYlzgTso\n"
+ "3mKfnV7THUalpxe9EjQ/x61Yqf26Co0+jYpt8/Ck6tg=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_MISMATCHED_FINGERPRINT[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANUAvwbpGbsAyA+mBwjFkvurtRzdw9btDqNKtPImufIE+q+AFTaCnwPr\n"
+ "kA7vm/O6h6OhgfdYEC2GfYJfwPGM7MDuz+NnuKxUb3qb2DQN2laqow6qWs9La/if\n"
+ "oHKUjC5mNeAgHcbWapx9CygwaFeVW6FBPl6Db6GIRAlywPSX+XMJAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANlSGd+Vm9nLiUk6zgu8dPnSFfw4F0R2GYfmzncIGJWtRFTF9ThW/0av\n"
+ "/9vZAWyVBjjtnpAP5R1BzdJYV2RwimC/6tqoHtkSbCBhdq5Cb/EHG7Xgb8KwNWVJ\n"
+ "NV1EESDwvWnRfSPGTreRw9+2LkdXri17FhDo2GjRxAq/N7YkLK5hAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "fingerprint CC43 DC8E 8C9E 3E6D 59CD 0399 2491 0C8C E1E4 50D2\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Y8MwYBeEfMhoAABK/FgpVRYolZ7jQ2BJL+8Lb6i4yAuk+HeVmPKTX7MqQoekUuin\n"
+ "/HdPKP+g/9HPMS5pCiW4FMwnXAF0ZocPXF0ndmsTuh0/7VWVOUGgvBpPbIW6guvt\n"
+ "sLLQ3Cq9a4Kwmd+koatfLB6xSZjhXmOn7nRy7gOdwJ8=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_HAS_ACCEPT6[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAJfPJNA3zZ77v2nlX2j5dXImcB/NhRtkG8XQgF7z+3H17sqoXgBgZ1dq\n"
+ "IbyJmAy2Lrvk/8VkXNFrT5/ErThn1B98V/PsJOOW1x7jGcix6X4zDYn/MvwC+AxA\n"
+ "zNP0ozNcVZ6BzVYq8w4I1V4O3Cd6VJesxRVX6mUeSeNawOb7fBY7AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKBzfB4mDEJjFTnmtqZxDG8G1yAiccVgAtq9ECEREL/BOQyukixUBeBe\n"
+ "j/FgXzbMJ7DZAuopuJZU2ma6h14G63fZs7eNFceDtmdLpuCOsFuvJ5Mlkf3hDZ1u\n"
+ "1KK5q+tiG7MKxgnGrqjPBUO2uubs2Cpx0HmsqBNUalXd/KAkFJbXAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "accept6 *:80\n"
+ "reject6 *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "Dp9dLgs9s5beMPxfD0m96as9gNBvlmKhH1RQ/kcOKscia4R8Q42CnUtIqLkCdjOu\n"
+ "zErc2Vj9QzjKOvlqUqHxP+J+l+ZJez6F+E1tcmK/Ydz3exL8cg9f4sAOCSXcpBey\n"
+ "llTFDibz6GkQ2j3/Uc4bN/uLzoyZKunpJbSKZP5nt8Q=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_NO_EXIT_POLICY[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAK4fbjTKYqv2fygfjzY53sVTdtbNMjq293/uffKKxFYnOVvPzrHlP6Go\n"
+ "2S19ZcyDxOuH1unbBChPnV0GpxXX6+bgfDkaFh7+jef0RQ3fpJl84hSvdM8J8SCt\n"
+ "Q/F4Oqk3NeKKs+zAHDjhAU1G4LkF9/SZ9WZVXlH4a4pf7xgQtaShAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKahvyDkmh33ob/bLVO1icgz2ntOZN6ZQUfgpMU4Cd6DQtOEwFUGhbVt\n"
+ "gvtMHv2+VbxM31ZfUsyBqJ1rJBLpOqlPvSoYwSac2+twa+w/qjfGqcJYhBjP9TV9\n"
+ "n9y8DzBX85p6vRcCzcuZ4qUJ2nRzdLHwjdgzeLmmCHuPO2dQxQhXAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "ntgCtMC0VrsY42dKts8igGQ2Nu1BpuzUltisIsJz75dDx2LCqTn7p4VpWbTrj1sH\n"
+ "MRNOvEPFxVMs0Lu50ZUGRzeV6GrHmzIRnOIWanb3I/jyrJLM0jTIjCOLwdMRA298\n"
+ "tw8Y9Hnwj4K7K6VvgU8LP4l7MAJNfR6UT46AJ6vkgL0=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_IPV6_EXIT_POLICY[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKHJKLHqjYoW9M+1q0CGHJRT5u2CnZWb8Qr1DpLkkusQ6ru+cDAG12so\n"
+ "IpDQh7IyB2JosVJi9ogekYxJ3O1p5WlFUi0X19DMoer9FJ9J7/3s4enGJ/yMBeuu\n"
+ "jLVRkjMJhsfhj3Cykon+8Rrf520wSmBg1dpJQCXTwtb7DARgYRpZAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAPJH61Ir6XSu9/Q9tXGaINbXO1GWQQUXtwh6TX9lxnaCNDLGnxiY+ZZw\n"
+ "+Vqj3LAQoMrz1PpPsF5e0VIxok10Vc8y4cWC+kIitcecut4vWC5FYTtVVP9wtlyg\n"
+ "YCcVOVhtFQxtLiGqprl84+EVxrR7RQVCMLNDUXIgxAfdnS24eBPDAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "ipv6-policy kfdslfdfj sdjfk sdfjsdf\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "XWorzVT5Owg+QcsBtksiUNtpQQ5+IdvbsN+0O9FbFtGZeaeBAbPJ3Poz+KFCUjZY\n"
+ "DeDAiu1cVgODx2St+99LpwEuIBx78HaD8RYU8tHx8LoA+mGC43ogQQS9lmfxzvP5\n"
+ "eT5WXhkOS5AZ8LZOCOmT+tj/LkSXev2x/NC9+Vc1HPo=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_FAMILY[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM62QoRxSPnm+ZM4fv9p03Qqbz5SzhXYSNjKWqylBruaofTw6oIM8DtX\n"
+ "7QnrEe/ou/WtfB+swV/2rt/r0EzmeWBWuDmuSUrN5TC2AdOi9brSJMgXVW6VW77X\n"
+ "fuIlLd5DVSId2zs3cKLDqp36CUsooA9sS6I5HrvW9QDf3VS3pGBtAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANg1trpnRzkCi4t4Z4qnBKF612H5A3Zrjg7Jo2b3ajUnON/KEuLPTc3t\n"
+ "PPN0W4qqeCMmVQEuxf3DRbTPS20ycy4B/JDWYfxCNwuj5YAx04REf7T0Hlx7Aee/\n"
+ "sHEQBhIBfasA2idhTh3cAm4DMYn+00BqjxF6jmyRA0hyntEABabrAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "family aaaa,bbbb\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "xOgP3liKF/WEvwbbGzUUVRZ5WPrOI7jex8pZU/02UEnHjit7vCf9fsUcvkeo0xjz\n"
+ "n3FQHIO1iAJS7dEaEM4nz6wtPUb2iXSU9QajkGBkJ9/V7NHMFIU3FGfP47PIJJkd\n"
+ "nz5INoS+AsE7PmnDjUMm1H45TCCl8N8y4FO6TtN7p8I=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_BAD_EI_DIGEST[] =
+ "router fred 127.0.0.1 9001 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAJ8Sn8AxBRbeIAHUvaKjqmcYOvXz7YFlpYFiVHp/cn+l+KUkIYTOFQXf\n"
+ "K8AtwjmJ4R2qJIbNlY/6oZGFbizt/B+WPuWsTj+8ACEEDlxx0ibg3EJRB8AZYiWv\n"
+ "0zC/loiUvHm6fXF5ghvDr9BQzEUo9kBk5haoHwROtGawr1+vOEiNAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMzok3ZJtLjXOC8RKltXI8xulwn/ctCvQFHImR0+ccA1uBxaZNYgiIcc\n"
+ "q8XngROfV8xEgDbYPiWiLXJOMSwOd7hfs3YzRWF+LKftYs8PuRyMJcCoBjOPZ4QX\n"
+ "HRfTetEvu2SijZMby+lkqpZg2nuF/ipsXUjrabRZdNiIGhC451vdAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "extra-info-digest not-a-digest\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "c/6zAxO04izQvqdM4bZVGE+ak0nna5pz9XZizFkieZEDWGzWQuVMhXyL5sbsFbsx\n"
+ "6Hn7DvNRYR/2nA0teDeRyIHMoMHi76te5X9OFDgaeUVCbyJ8h/KZYfPnN86IDbsR\n"
+ "dCSmj9kX55keu64ccCAH1CqwcN/UsbplXiJJVG5pTfI=\n"
+ "-----END SIGNATURE-----\n"
+ ;
+static const char EX_RI_ZERO_ORPORT[] =
+ "router fred 127.0.0.1 0 0 9002\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMc4MOhLG3PKPgc+xYVf4eScWzeOf8wq7Cb/JxZm50G0LuvVbhHtHEZX\n"
+ "VOSHI7mLE1ifakJvCFJRLobMU7lU0yhn18/nKl2Cu5NfFHHeF/NieUBSxBGb2wD6\n"
+ "aM1azheXrRqvDVVfbI0DLc/XfQC/YNiohOsQ/c9C6wuffA4+Sg85AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALBWdl9/Vft+NQKQlg5kgvZo+krnhNTRVQojWtUEzom4TFIT+NNKJyMG\n"
+ "reQXcNdzNptTB0aOBGGwqAesqzsZ2Hje699NsDe7hdl7Sb5yhKDqtdQY6yDXJUFt\n"
+ "zqpAUkmYMLe2p3kPiWefNso56KYXrZrlNAiIS/FhQ5cmuMC2jPydAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "published 2014-10-05 12:00:00\n"
+ "bandwidth 1000 1000 1000\n"
+ "reject *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "gFg08P9A6QNQjURlebfdhU3DSV0BeM0j2SFza1jF9JcBOWDRmT8FvYFK1B3js6jK\n"
+ "8LNV8JOUssv14z5CnUY9CO1BD0xSl+vGlSS4VOXD7rxui8IoWgnqnZsitq+Qzs95\n"
+ "wgFKhHI/49NHyWHX5IMQpeicg0T7Qa6qwnUvspH62p8=\n"
+ "-----END SIGNATURE-----\n"
+ ;
diff --git a/src/test/include.am b/src/test/include.am
index 5a8652b031..51c9f73739 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -30,12 +30,14 @@ src_test_test_SOURCES = \
src/test/test_cell_queue.c \
src/test/test_data.c \
src/test/test_dir.c \
+ src/test/test_checkdir.c \
src/test/test_entrynodes.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_accounting.c \
src/test/test_options.c \
src/test/test_pt.c \
src/test/test_relaycell.c \
@@ -64,7 +66,7 @@ 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 \
+ src/common/libor-event-testing.a src/trunnel/libor-trunnel-testing.a \
@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
@@ -78,9 +80,11 @@ src_test_bench_LDADD = src/or/libtor.a src/common/libor.a \
noinst_HEADERS+= \
src/test/test.h \
- src/test/test_descriptors.inc
+ src/test/test_descriptors.inc \
+ src/test/example_extrainfo.inc \
+ src/test/failing_routerdescs.inc \
+ src/test/ed25519_vectors.inc
-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@
@@ -91,9 +95,6 @@ src_test_test_ntor_cl_LDADD = src/or/libtor.a src/common/libor.a \
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
@@ -113,10 +114,8 @@ 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
diff --git a/src/test/slow_ed25519.py b/src/test/slow_ed25519.py
new file mode 100644
index 0000000000..f44708b200
--- /dev/null
+++ b/src/test/slow_ed25519.py
@@ -0,0 +1,115 @@
+# This is the ed25519 implementation from
+# http://ed25519.cr.yp.to/python/ed25519.py .
+# It is in the public domain.
+#
+# It isn't constant-time. Don't use it except for testing. Also, see
+# warnings about how very slow it is. Only use this for generating
+# test vectors, I'd suggest.
+#
+# Don't edit this file. Mess with ed25519_ref.py
+
+import hashlib
+
+b = 256
+q = 2**255 - 19
+l = 2**252 + 27742317777372353535851937790883648493
+
+def H(m):
+ return hashlib.sha512(m).digest()
+
+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,q-2,q)
+
+d = -121665 * inv(121666)
+I = expmod(2,(q-1)/4,q)
+
+def xrecover(y):
+ xx = (y*y-1) * inv(d*y*y+1)
+ x = expmod(xx,(q+3)/8,q)
+ if (x*x - xx) % q != 0: x = (x*I) % q
+ if x % 2 != 0: x = q-x
+ return x
+
+By = 4 * inv(5)
+Bx = xrecover(By)
+B = [Bx % q,By % q]
+
+def edwards(P,Q):
+ x1 = P[0]
+ y1 = P[1]
+ x2 = Q[0]
+ y2 = Q[1]
+ x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2)
+ y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2)
+ return [x3 % q,y3 % q]
+
+def scalarmult(P,e):
+ if e == 0: return [0,1]
+ Q = scalarmult(P,e/2)
+ Q = edwards(Q,Q)
+ if e & 1: Q = edwards(Q,P)
+ return Q
+
+def encodeint(y):
+ bits = [(y >> i) & 1 for i in range(b)]
+ return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)])
+
+def encodepoint(P):
+ x = P[0]
+ y = P[1]
+ bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1]
+ return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)])
+
+def bit(h,i):
+ return (ord(h[i/8]) >> (i%8)) & 1
+
+def publickey(sk):
+ h = H(sk)
+ a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
+ A = scalarmult(B,a)
+ return encodepoint(A)
+
+def Hint(m):
+ h = H(m)
+ return sum(2**i * bit(h,i) for i in range(2*b))
+
+def signature(m,sk,pk):
+ h = H(sk)
+ a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2))
+ r = Hint(''.join([h[i] for i in range(b/8,b/4)]) + m)
+ R = scalarmult(B,r)
+ S = (r + Hint(encodepoint(R) + pk + m) * a) % l
+ return encodepoint(R) + encodeint(S)
+
+def isoncurve(P):
+ x = P[0]
+ y = P[1]
+ return (-x*x + y*y - 1 - d*x*x*y*y) % q == 0
+
+def decodeint(s):
+ return sum(2**i * bit(s,i) for i in range(0,b))
+
+def decodepoint(s):
+ y = sum(2**i * bit(s,i) for i in range(0,b-1))
+ x = xrecover(y)
+ if x & 1 != bit(s,b-1): x = q-x
+ P = [x,y]
+ if not isoncurve(P): raise Exception("decoding point that is not on curve")
+ return P
+
+def checkvalid(s,m,pk):
+ if len(s) != b/4: raise Exception("signature length is wrong")
+ if len(pk) != b/8: raise Exception("public-key length is wrong")
+ R = decodepoint(s[0:b/8])
+ A = decodepoint(pk)
+ S = decodeint(s[b/8:b/4])
+ h = Hint(encodepoint(R) + pk + m)
+ if scalarmult(B,S) != edwards(R,scalarmult(A,h)):
+ raise Exception("signature does not pass verification")
+
diff --git a/src/test/test-child.c b/src/test/test-child.c
index 756782e70b..91ae5a66a5 100644
--- a/src/test/test-child.c
+++ b/src/test/test-child.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Tor Project, Inc. */
+/* Copyright (c) 2011-2014, 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
index 7b59864166..d28fbde80f 100755
--- a/src/test/test-network.sh
+++ b/src/test/test-network.sh
@@ -1,5 +1,7 @@
#! /bin/sh
+ECHO_N="/bin/echo -n"
+
until [ -z $1 ]
do
case $1 in
@@ -15,6 +17,10 @@ do
export NETWORK_FLAVOUR="$2"
shift
;;
+ --delay|--sleep|--bootstrap-time|--time)
+ export BOOTSTRAP_TIME="$2"
+ shift
+ ;;
*)
echo "Sorry, I don't know what to do with '$1'."
exit 2
@@ -39,9 +45,14 @@ PATH="$TOR_DIR/src/or:$TOR_DIR/src/tools:$PATH"
# 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"
+BOOTSTRAP_TIME=${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 .
+ sleep 1; n=$(expr $n - 1); $ECHO_N .
done; echo ""
./chutney verify $CHUTNEY_NETWORK
+VERIFY_EXIT_STATUS=$?
+# work around a bug/feature in make -j2 (or more)
+# where make hangs if any child processes are still alive
+./chutney stop $CHUTNEY_NETWORK
+exit $VERIFY_EXIT_STATUS
diff --git a/src/test/test.c b/src/test/test.c
index 8d45ef0f59..fbe5625300 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
@@ -64,10 +64,8 @@ double fabs(double x);
#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>
@@ -125,6 +123,10 @@ setup_directory(void)
tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d_%s",
(int) getpid(), rnd32);
r = mkdir(temp_dir, 0700);
+ if (!r) {
+ /* undo sticky bit so tests don't get confused. */
+ r = chown(temp_dir, getuid(), getgid());
+ }
#endif
if (r) {
fprintf(stderr, "Can't create directory %s:", temp_dir);
@@ -275,9 +277,9 @@ test_onion_handshake(void *arg)
memset(c_keys, 0, 40);
tt_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
- tt_mem_op(c_keys,==, s_keys, 40);
+ tt_mem_op(c_keys,OP_EQ, s_keys, 40);
memset(s_buf, 0, 40);
- tt_mem_op(c_keys,!=, s_buf, 40);
+ tt_mem_op(c_keys,OP_NE, s_buf, 40);
}
done:
crypto_dh_free(c_dh);
@@ -309,7 +311,7 @@ test_bad_onion_handshake(void *arg)
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, ==,
+ tt_int_op(-1, OP_EQ,
onion_skin_TAP_server_handshake(junk_buf2, pk, NULL,
s_buf, s_keys, 40));
@@ -318,7 +320,7 @@ test_bad_onion_handshake(void *arg)
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, ==,
+ tt_int_op(-1, OP_EQ,
onion_skin_TAP_server_handshake(junk_buf2, pk, NULL,
s_buf, s_keys, 40));
@@ -327,36 +329,36 @@ test_bad_onion_handshake(void *arg)
tt_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
/* Server: Case 3: we just don't have the right key. */
- tt_int_op(-1, ==,
+ tt_int_op(-1, OP_EQ,
onion_skin_TAP_server_handshake(c_buf, pk2, NULL,
s_buf, s_keys, 40));
/* Server: Case 4: The RSA-encrypted portion is corrupt. */
c_buf[64] ^= 33;
- tt_int_op(-1, ==,
+ tt_int_op(-1, OP_EQ,
onion_skin_TAP_server_handshake(c_buf, pk, NULL,
s_buf, s_keys, 40));
c_buf[64] ^= 33;
/* (Let the server procede) */
- tt_int_op(0, ==,
+ tt_int_op(0, OP_EQ,
onion_skin_TAP_server_handshake(c_buf, pk, NULL,
s_buf, s_keys, 40));
/* Client: Case 1: The server sent back junk. */
s_buf[64] ^= 33;
- tt_int_op(-1, ==,
+ tt_int_op(-1, OP_EQ,
onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
s_buf[64] ^= 33;
/* Let the client finish; make sure it can. */
- tt_int_op(0, ==,
+ tt_int_op(0, OP_EQ,
onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
- tt_mem_op(s_keys,==, c_keys, 40);
+ tt_mem_op(s_keys,OP_EQ, c_keys, 40);
/* Client: Case 2: The server sent back a degenerate DH. */
memset(s_buf, 0, sizeof(s_buf));
- tt_int_op(-1, ==,
+ tt_int_op(-1, OP_EQ,
onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
done:
@@ -365,7 +367,6 @@ test_bad_onion_handshake(void *arg)
crypto_pk_free(pk2);
}
-#ifdef CURVE25519_ENABLED
static void
test_ntor_handshake(void *arg)
{
@@ -394,30 +395,29 @@ test_ntor_handshake(void *arg)
/* client handshake 1. */
memset(c_buf, 0, NTOR_ONIONSKIN_LEN);
- tt_int_op(0, ==, onion_skin_ntor_create(node_id, server_pubkey,
+ tt_int_op(0, OP_EQ, onion_skin_ntor_create(node_id, server_pubkey,
&c_state, c_buf));
/* server handshake */
memset(s_buf, 0, NTOR_REPLY_LEN);
memset(s_keys, 0, 40);
- tt_int_op(0, ==, onion_skin_ntor_server_handshake(c_buf, s_keymap, NULL,
+ tt_int_op(0, OP_EQ, onion_skin_ntor_server_handshake(c_buf, s_keymap, NULL,
node_id,
s_buf, s_keys, 400));
/* client handshake 2 */
memset(c_keys, 0, 40);
- tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf,
+ tt_int_op(0, OP_EQ, onion_skin_ntor_client_handshake(c_state, s_buf,
c_keys, 400));
- tt_mem_op(c_keys,==, s_keys, 400);
+ tt_mem_op(c_keys,OP_EQ, s_keys, 400);
memset(s_buf, 0, 40);
- tt_mem_op(c_keys,!=, s_buf, 40);
+ tt_mem_op(c_keys,OP_NE, s_buf, 40);
done:
ntor_handshake_state_free(c_state);
dimap_free(s_keymap, NULL);
}
-#endif
/** Run unit tests for the onion queues. */
static void
@@ -440,24 +440,24 @@ test_onion_queues(void *arg)
create_cell_init(create2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR,
NTOR_ONIONSKIN_LEN, buf2);
- tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
- tt_int_op(0,==, onion_pending_add(circ1, create1));
+ tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ tt_int_op(0,OP_EQ, onion_pending_add(circ1, create1));
create1 = NULL;
- tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
- tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
- tt_int_op(0,==, onion_pending_add(circ2, create2));
+ tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ tt_int_op(0,OP_EQ, onion_pending_add(circ2, create2));
create2 = NULL;
- tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
- tt_ptr_op(circ2,==, onion_next_task(&onionskin));
- tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
- tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
- tt_ptr_op(onionskin, ==, create2_ptr);
+ tt_ptr_op(circ2,OP_EQ, onion_next_task(&onionskin));
+ tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ tt_ptr_op(onionskin, OP_EQ, create2_ptr);
clear_pending_onions();
- tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
- tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
done:
circuit_free(TO_CIRCUIT(circ1));
@@ -648,13 +648,13 @@ test_rend_fns(void *arg)
(void)arg;
tt_assert(BAD_HOSTNAME == parse_extended_hostname(address1));
tt_assert(ONION_HOSTNAME == parse_extended_hostname(address2));
- tt_str_op(address2,==, "aaaaaaaaaaaaaaaa");
+ tt_str_op(address2,OP_EQ, "aaaaaaaaaaaaaaaa");
tt_assert(EXIT_HOSTNAME == parse_extended_hostname(address3));
tt_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4));
tt_assert(ONION_HOSTNAME == parse_extended_hostname(address5));
- tt_str_op(address5,==, "abcdefghijklmnop");
+ tt_str_op(address5,OP_EQ, "abcdefghijklmnop");
tt_assert(ONION_HOSTNAME == parse_extended_hostname(address6));
- tt_str_op(address6,==, "abcdefghijklmnop");
+ tt_str_op(address6,OP_EQ, "abcdefghijklmnop");
tt_assert(BAD_HOSTNAME == parse_extended_hostname(address7));
pk1 = pk_generate(0);
@@ -693,7 +693,7 @@ test_rend_fns(void *arg)
tt_assert(rend_compute_v2_desc_id(computed_desc_id, service_id_base32,
NULL, now, 0) == 0);
tt_mem_op(((rend_encoded_v2_service_descriptor_t *)
- smartlist_get(descs, 0))->desc_id, ==,
+ smartlist_get(descs, 0))->desc_id, OP_EQ,
computed_desc_id, DIGEST_LEN);
tt_assert(rend_parse_v2_service_descriptor(&parsed, parsed_desc_id,
&intro_points_encrypted,
@@ -704,25 +704,25 @@ test_rend_fns(void *arg)
smartlist_get(descs, 0))->desc_str) == 0);
tt_assert(parsed);
tt_mem_op(((rend_encoded_v2_service_descriptor_t *)
- smartlist_get(descs, 0))->desc_id,==, parsed_desc_id, DIGEST_LEN);
+ smartlist_get(descs, 0))->desc_id,OP_EQ, parsed_desc_id, DIGEST_LEN);
tt_int_op(rend_parse_introduction_points(parsed, intro_points_encrypted,
- intro_points_size),==, 3);
+ intro_points_size),OP_EQ, 3);
tt_assert(!crypto_pk_cmp_keys(generated->pk, parsed->pk));
- tt_int_op(parsed->timestamp,==, now);
- tt_int_op(parsed->version,==, 2);
- tt_int_op(parsed->protocols,==, 42);
- tt_int_op(smartlist_len(parsed->intro_nodes),==, 3);
+ tt_int_op(parsed->timestamp,OP_EQ, now);
+ tt_int_op(parsed->version,OP_EQ, 2);
+ tt_int_op(parsed->protocols,OP_EQ, 42);
+ tt_int_op(smartlist_len(parsed->intro_nodes),OP_EQ, 3);
for (i = 0; i < smartlist_len(parsed->intro_nodes); i++) {
rend_intro_point_t *par_intro = smartlist_get(parsed->intro_nodes, i),
*gen_intro = smartlist_get(generated->intro_nodes, i);
extend_info_t *par_info = par_intro->extend_info;
extend_info_t *gen_info = gen_intro->extend_info;
tt_assert(!crypto_pk_cmp_keys(gen_info->onion_key, par_info->onion_key));
- tt_mem_op(gen_info->identity_digest,==, par_info->identity_digest,
+ tt_mem_op(gen_info->identity_digest,OP_EQ, par_info->identity_digest,
DIGEST_LEN);
- tt_str_op(gen_info->nickname,==, par_info->nickname);
+ tt_str_op(gen_info->nickname,OP_EQ, par_info->nickname);
tt_assert(tor_addr_eq(&gen_info->addr, &par_info->addr));
- tt_int_op(gen_info->port,==, par_info->port);
+ tt_int_op(gen_info->port,OP_EQ, par_info->port);
}
rend_service_descriptor_free(parsed);
@@ -766,11 +766,11 @@ test_rend_fns(void *arg)
} while (0)
#define CHECK_COUNTRY(country, val) do { \
/* test ipv4 country lookup */ \
- tt_str_op(country, ==, \
+ tt_str_op(country, OP_EQ, \
geoip_get_country_name(geoip_get_country_by_ipv4(val))); \
/* test ipv6 country lookup */ \
SET_TEST_IPV6(val); \
- tt_str_op(country, ==, \
+ tt_str_op(country, OP_EQ, \
geoip_get_country_name(geoip_get_country_by_ipv6(&in6))); \
} while (0)
@@ -831,23 +831,23 @@ test_geoip(void *arg)
* 'sort' step. These aren't very good IP addresses, but they're perfectly
* fine uint32_t values. */
(void)arg;
- tt_int_op(0,==, geoip_parse_entry("10,50,AB", AF_INET));
- tt_int_op(0,==, geoip_parse_entry("52,90,XY", AF_INET));
- tt_int_op(0,==, geoip_parse_entry("95,100,AB", AF_INET));
- tt_int_op(0,==, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET));
- tt_int_op(0,==, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET));
- tt_int_op(0,==, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("10,50,AB", AF_INET));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("52,90,XY", AF_INET));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("95,100,AB", AF_INET));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET));
/* Populate the IPv6 DB equivalently with fake IPs in the same range */
- tt_int_op(0,==, geoip_parse_entry("::a,::32,AB", AF_INET6));
- tt_int_op(0,==, geoip_parse_entry("::34,::5a,XY", AF_INET6));
- tt_int_op(0,==, geoip_parse_entry("::5f,::64,AB", AF_INET6));
- tt_int_op(0,==, geoip_parse_entry("::69,::8c,ZZ", AF_INET6));
- tt_int_op(0,==, geoip_parse_entry("::96,::be,XY", AF_INET6));
- tt_int_op(0,==, geoip_parse_entry("::c8,::fa,AB", AF_INET6));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("::a,::32,AB", AF_INET6));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("::34,::5a,XY", AF_INET6));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("::5f,::64,AB", AF_INET6));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("::69,::8c,ZZ", AF_INET6));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("::96,::be,XY", AF_INET6));
+ tt_int_op(0,OP_EQ, geoip_parse_entry("::c8,::fa,AB", AF_INET6));
/* We should have 4 countries: ??, ab, xy, zz. */
- tt_int_op(4,==, geoip_get_n_countries());
+ tt_int_op(4,OP_EQ, geoip_get_n_countries());
memset(&in6, 0, sizeof(in6));
CHECK_COUNTRY("??", 3);
@@ -858,9 +858,9 @@ test_geoip(void *arg)
CHECK_COUNTRY("xy", 190);
CHECK_COUNTRY("??", 2000);
- tt_int_op(0,==, geoip_get_country_by_ipv4(3));
+ tt_int_op(0,OP_EQ, geoip_get_country_by_ipv4(3));
SET_TEST_IPV6(3);
- tt_int_op(0,==, geoip_get_country_by_ipv6(&in6));
+ tt_int_op(0,OP_EQ, geoip_get_country_by_ipv6(&in6));
get_options_mutable()->BridgeRelay = 1;
get_options_mutable()->BridgeRecordUsageByCountry = 1;
@@ -885,8 +885,8 @@ test_geoip(void *arg)
geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
tt_assert(s);
tt_assert(v);
- tt_str_op("zz=24,ab=16,xy=8",==, s);
- tt_str_op("v4=16,v6=16",==, v);
+ tt_str_op("zz=24,ab=16,xy=8",OP_EQ, s);
+ tt_str_op("v4=16,v6=16",OP_EQ, v);
tor_free(s);
tor_free(v);
@@ -895,8 +895,8 @@ test_geoip(void *arg)
geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
tt_assert(s);
tt_assert(v);
- tt_str_op("zz=24,xy=8",==, s);
- tt_str_op("v4=16,v6=16",==, v);
+ tt_str_op("zz=24,xy=8",OP_EQ, s);
+ tt_str_op("v4=16,v6=16",OP_EQ, v);
tor_free(s);
tor_free(v);
@@ -910,7 +910,7 @@ test_geoip(void *arg)
geoip_bridge_stats_init(now);
s = geoip_format_bridge_stats(now + 86400);
tt_assert(s);
- tt_str_op(bridge_stats_1,==, s);
+ tt_str_op(bridge_stats_1,OP_EQ, s);
tor_free(s);
/* Stop collecting bridge stats and make sure we don't write a history
@@ -939,7 +939,7 @@ test_geoip(void *arg)
SET_TEST_ADDRESS(100);
geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
- tt_str_op(dirreq_stats_1,==, s);
+ tt_str_op(dirreq_stats_1,OP_EQ, s);
tor_free(s);
/* Stop collecting stats, add another connecting client, and ensure we
@@ -957,20 +957,20 @@ test_geoip(void *arg)
geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
geoip_reset_dirreq_stats(now);
s = geoip_format_dirreq_stats(now + 86400);
- tt_str_op(dirreq_stats_2,==, s);
+ tt_str_op(dirreq_stats_2,OP_EQ, s);
tor_free(s);
/* Note a successful network status response and make sure that it
* appears in the history string. */
geoip_note_ns_response(GEOIP_SUCCESS);
s = geoip_format_dirreq_stats(now + 86400);
- tt_str_op(dirreq_stats_3,==, s);
+ tt_str_op(dirreq_stats_3,OP_EQ, s);
tor_free(s);
/* Start a tunneled directory request. */
geoip_start_dirreq((uint64_t) 1, 1024, DIRREQ_TUNNELED);
s = geoip_format_dirreq_stats(now + 86400);
- tt_str_op(dirreq_stats_4,==, s);
+ tt_str_op(dirreq_stats_4,OP_EQ, s);
tor_free(s);
/* Stop collecting directory request statistics and start gathering
@@ -992,7 +992,7 @@ test_geoip(void *arg)
SET_TEST_ADDRESS(100);
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
- tt_str_op(entry_stats_1,==, s);
+ tt_str_op(entry_stats_1,OP_EQ, s);
tor_free(s);
/* Stop collecting stats, add another connecting client, and ensure we
@@ -1010,7 +1010,7 @@ test_geoip(void *arg)
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
geoip_reset_entry_stats(now);
s = geoip_format_entry_stats(now + 86400);
- tt_str_op(entry_stats_2,==, s);
+ tt_str_op(entry_stats_2,OP_EQ, s);
tor_free(s);
/* Stop collecting entry statistics. */
@@ -1083,7 +1083,7 @@ test_geoip_with_pt(void *arg)
/* Test the transport history string. */
s = geoip_get_transport_history();
tor_assert(s);
- tt_str_op(s,==, "<OR>=8,alpha=16,beta=8,charlie=16,ddr=136,"
+ tt_str_op(s,OP_EQ, "<OR>=8,alpha=16,beta=8,charlie=16,ddr=136,"
"entropy=8,fire=8,google=8");
/* Stop collecting entry statistics. */
@@ -1126,7 +1126,7 @@ test_stats(void *arg)
tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"exit-kibibytes-written 80=1,443=1,other=0\n"
"exit-kibibytes-read 80=10,443=20,other=0\n"
- "exit-streams-opened 80=4,443=4,other=0\n",==, s);
+ "exit-streams-opened 80=4,443=4,other=0\n",OP_EQ, s);
tor_free(s);
/* Add a few bytes on 10 more ports and ensure that only the top 10
@@ -1142,7 +1142,7 @@ test_stats(void *arg)
"exit-kibibytes-read 52=1,53=1,54=1,55=1,56=1,57=1,58=1,"
"59=1,80=10,443=20,other=1\n"
"exit-streams-opened 52=4,53=4,54=4,55=4,56=4,57=4,58=4,"
- "59=4,80=4,443=4,other=4\n",==, s);
+ "59=4,80=4,443=4,other=4\n",OP_EQ, s);
tor_free(s);
/* Stop collecting stats, add some bytes, and ensure we don't generate
@@ -1162,7 +1162,7 @@ test_stats(void *arg)
tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"exit-kibibytes-written other=0\n"
"exit-kibibytes-read other=0\n"
- "exit-streams-opened other=0\n",==, s);
+ "exit-streams-opened other=0\n",OP_EQ, s);
tor_free(s);
/* Continue with testing connection statistics; we shouldn't collect
@@ -1178,7 +1178,7 @@ test_stats(void *arg)
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 10);
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15);
s = rep_hist_format_conn_stats(now + 86400);
- tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,1,0\n",==, s);
+ tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,1,0\n",OP_EQ, s);
tor_free(s);
/* Stop collecting stats, add some bytes, and ensure we don't generate
@@ -1197,7 +1197,7 @@ test_stats(void *arg)
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15);
rep_hist_reset_conn_stats(now);
s = rep_hist_format_conn_stats(now + 86400);
- tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n",==, s);
+ tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n",OP_EQ, s);
tor_free(s);
/* Continue with testing buffer statistics; we shouldn't collect buffer
@@ -1216,7 +1216,7 @@ test_stats(void *arg)
"cell-queued-cells 2.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,"
"0.00,0.00\n"
"cell-time-in-queue 2,0,0,0,0,0,0,0,0,0\n"
- "cell-circuits-per-decile 1\n",==, s);
+ "cell-circuits-per-decile 1\n",OP_EQ, s);
tor_free(s);
/* Add nineteen more circuit statistics to the one that's already in the
@@ -1231,7 +1231,7 @@ test_stats(void *arg)
"cell-queued-cells 2.75,2.75,2.75,2.75,2.75,2.75,2.75,2.75,"
"2.75,2.75\n"
"cell-time-in-queue 3,3,3,3,3,3,3,3,3,3\n"
- "cell-circuits-per-decile 2\n",==, s);
+ "cell-circuits-per-decile 2\n",OP_EQ, s);
tor_free(s);
/* Stop collecting stats, add statistics for one circuit, and ensure we
@@ -1252,7 +1252,7 @@ test_stats(void *arg)
"cell-queued-cells 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,"
"0.00,0.00\n"
"cell-time-in-queue 0,0,0,0,0,0,0,0,0,0\n"
- "cell-circuits-per-decile 0\n",==, s);
+ "cell-circuits-per-decile 0\n",OP_EQ, s);
done:
tor_free(s);
@@ -1267,9 +1267,7 @@ static struct testcase_t test_array[] = {
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(rend_fns),
ENT(geoip),
@@ -1285,6 +1283,7 @@ extern struct testcase_t crypto_tests[];
extern struct testcase_t container_tests[];
extern struct testcase_t util_tests[];
extern struct testcase_t dir_tests[];
+extern struct testcase_t checkdir_tests[];
extern struct testcase_t microdesc_tests[];
extern struct testcase_t pt_tests[];
extern struct testcase_t config_tests[];
@@ -1305,6 +1304,7 @@ 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 accounting_tests[];
extern struct testcase_t policy_tests[];
extern struct testcase_t status_tests[];
extern struct testcase_t routerset_tests[];
@@ -1326,6 +1326,7 @@ static struct testgroup_t testgroups[] = {
{ "cellfmt/", cell_format_tests },
{ "cellqueue/", cell_queue_tests },
{ "dir/", dir_tests },
+ { "checkdir/", checkdir_tests },
{ "dir/md/", microdesc_tests },
{ "pt/", pt_tests },
{ "config/", config_tests },
@@ -1342,6 +1343,7 @@ static struct testgroup_t testgroups[] = {
{ "nodelist/", nodelist_tests },
{ "routerkeys/", routerkeys_tests },
{ "oom/", oom_tests },
+ { "accounting/", accounting_tests },
{ "policy/" , policy_tests },
{ "status/" , status_tests },
{ "routerset/" , routerset_tests },
@@ -1373,7 +1375,7 @@ main(int c, const char **v)
update_approx_time(time(NULL));
options = options_new();
tor_threads_init();
- init_logging();
+ init_logging(1);
configure_backtrace_handler(get_version());
for (i_out = i = 1; i < c; ++i) {
diff --git a/src/test/test.h b/src/test/test.h
index 8eb2dfc016..5518ca3f60 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2003, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_TEST_H
@@ -34,7 +34,7 @@
tt_mem_op(expr1, op, mem_op_hex_tmp, length/2); \
STMT_END
-#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, ==, hex)
+#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, OP_EQ, hex)
#define tt_double_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%f", \
diff --git a/src/test/test_accounting.c b/src/test/test_accounting.c
new file mode 100644
index 0000000000..25908e942c
--- /dev/null
+++ b/src/test/test_accounting.c
@@ -0,0 +1,76 @@
+#include "or.h"
+#include "test.h"
+#define HIBERNATE_PRIVATE
+#include "hibernate.h"
+#include "config.h"
+#define STATEFILE_PRIVATE
+#include "statefile.h"
+
+#define NS_MODULE accounting
+
+#define NS_SUBMODULE limits
+
+/*
+ * Test to make sure accounting triggers hibernation
+ * correctly with both sum or max rules set
+ */
+
+static or_state_t *or_state;
+NS_DECL(or_state_t *, get_or_state, (void));
+static or_state_t *
+NS(get_or_state)(void)
+{
+ return or_state;
+}
+
+static void
+test_accounting_limits(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ time_t fake_time = time(NULL);
+ (void) arg;
+
+ NS_MOCK(get_or_state);
+ or_state = or_state_new();
+
+ options->AccountingMax = 100;
+ options->AccountingRule = ACCT_MAX;
+
+ tor_assert(accounting_is_enabled(options));
+ configure_accounting(fake_time);
+
+ accounting_add_bytes(10, 0, 1);
+ fake_time += 1;
+ consider_hibernation(fake_time);
+ tor_assert(we_are_hibernating() == 0);
+
+ accounting_add_bytes(90, 0, 1);
+ fake_time += 1;
+ consider_hibernation(fake_time);
+ tor_assert(we_are_hibernating() == 1);
+
+ options->AccountingMax = 200;
+ options->AccountingRule = ACCT_SUM;
+
+ accounting_add_bytes(0, 10, 1);
+ fake_time += 1;
+ consider_hibernation(fake_time);
+ tor_assert(we_are_hibernating() == 0);
+
+ accounting_add_bytes(0, 90, 1);
+ fake_time += 1;
+ consider_hibernation(fake_time);
+ tor_assert(we_are_hibernating() == 1);
+ goto done;
+ done:
+ NS_UNMOCK(get_or_state);
+ or_state_free(or_state);
+}
+
+#undef NS_SUBMODULE
+
+struct testcase_t accounting_tests[] = {
+ { "bwlimits", test_accounting_limits, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index 043c2a0d4a..c9c47bdaee 100644
--- a/src/test/test_addr.c
+++ b/src/test/test_addr.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define ADDRESSMAP_PRIVATE
@@ -20,40 +20,40 @@ test_addr_basic(void *arg)
(void)arg;
cp = NULL; u32 = 3; u16 = 3;
tt_assert(!addr_port_lookup(LOG_WARN, "1.2.3.4", &cp, &u32, &u16));
- tt_str_op(cp,==, "1.2.3.4");
- tt_int_op(u32,==, 0x01020304u);
- tt_int_op(u16,==, 0);
+ tt_str_op(cp,OP_EQ, "1.2.3.4");
+ tt_int_op(u32,OP_EQ, 0x01020304u);
+ tt_int_op(u16,OP_EQ, 0);
tor_free(cp);
tt_assert(!addr_port_lookup(LOG_WARN, "4.3.2.1:99", &cp, &u32, &u16));
- tt_str_op(cp,==, "4.3.2.1");
- tt_int_op(u32,==, 0x04030201u);
- tt_int_op(u16,==, 99);
+ tt_str_op(cp,OP_EQ, "4.3.2.1");
+ tt_int_op(u32,OP_EQ, 0x04030201u);
+ tt_int_op(u16,OP_EQ, 99);
tor_free(cp);
tt_assert(!addr_port_lookup(LOG_WARN, "nonexistent.address:4040",
&cp, NULL, &u16));
- tt_str_op(cp,==, "nonexistent.address");
- tt_int_op(u16,==, 4040);
+ tt_str_op(cp,OP_EQ, "nonexistent.address");
+ tt_int_op(u16,OP_EQ, 4040);
tor_free(cp);
tt_assert(!addr_port_lookup(LOG_WARN, "localhost:9999", &cp, &u32, &u16));
- tt_str_op(cp,==, "localhost");
- tt_int_op(u32,==, 0x7f000001u);
- tt_int_op(u16,==, 9999);
+ tt_str_op(cp,OP_EQ, "localhost");
+ tt_int_op(u32,OP_EQ, 0x7f000001u);
+ tt_int_op(u16,OP_EQ, 9999);
tor_free(cp);
u32 = 3;
tt_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16));
- tt_ptr_op(cp,==, NULL);
- tt_int_op(u32,==, 0x7f000001u);
- tt_int_op(u16,==, 0);
+ tt_ptr_op(cp,OP_EQ, NULL);
+ tt_int_op(u32,OP_EQ, 0x7f000001u);
+ tt_int_op(u16,OP_EQ, 0);
tor_free(cp);
tt_assert(addr_port_lookup(LOG_WARN, "localhost:3", &cp, &u32, NULL));
tor_free(cp);
- tt_int_op(0,==, addr_mask_get_bits(0x0u));
- tt_int_op(32,==, addr_mask_get_bits(0xFFFFFFFFu));
- tt_int_op(16,==, addr_mask_get_bits(0xFFFF0000u));
- tt_int_op(31,==, addr_mask_get_bits(0xFFFFFFFEu));
- tt_int_op(1,==, addr_mask_get_bits(0x80000000u));
+ tt_int_op(0,OP_EQ, addr_mask_get_bits(0x0u));
+ tt_int_op(32,OP_EQ, addr_mask_get_bits(0xFFFFFFFFu));
+ tt_int_op(16,OP_EQ, addr_mask_get_bits(0xFFFF0000u));
+ tt_int_op(31,OP_EQ, addr_mask_get_bits(0xFFFFFFFEu));
+ tt_int_op(1,OP_EQ, addr_mask_get_bits(0x80000000u));
/* Test inet_ntop */
{
@@ -62,15 +62,16 @@ test_addr_basic(void *arg)
struct in_addr in;
/* good round trip */
- tt_int_op(tor_inet_pton(AF_INET, ip, &in),==, 1);
- tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)),==, &tmpbuf);
- tt_str_op(tmpbuf,==, ip);
+ tt_int_op(tor_inet_pton(AF_INET, ip, &in), OP_EQ, 1);
+ tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)),
+ OP_EQ, &tmpbuf);
+ tt_str_op(tmpbuf,OP_EQ, ip);
/* just enough buffer length */
- tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1),==, ip);
+ tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1), OP_EQ, ip);
/* too short buffer */
- tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)),==, NULL);
+ tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)),OP_EQ, NULL);
}
done:
@@ -98,30 +99,30 @@ test_addr_basic(void *arg)
/** Helper: Assert that two strings both decode as IPv6 addresses with
* tor_inet_pton(), and both decode to the same address. */
#define test_pton6_same(a,b) STMT_BEGIN \
- tt_int_op(tor_inet_pton(AF_INET6, a, &a1), ==, 1); \
- tt_int_op(tor_inet_pton(AF_INET6, b, &a2), ==, 1); \
- test_op_ip6_(&a1,==,&a2,#a,#b); \
+ tt_int_op(tor_inet_pton(AF_INET6, a, &a1), OP_EQ, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, b, &a2), OP_EQ, 1); \
+ test_op_ip6_(&a1,OP_EQ,&a2,#a,#b); \
STMT_END
/** Helper: Assert that <b>a</b> is recognized as a bad IPv6 address by
* tor_inet_pton(). */
#define test_pton6_bad(a) \
- tt_int_op(0, ==, tor_inet_pton(AF_INET6, a, &a1))
+ tt_int_op(0, OP_EQ, tor_inet_pton(AF_INET6, a, &a1))
/** Helper: assert that <b>a</b>, when parsed by tor_inet_pton() and displayed
* with tor_inet_ntop(), yields <b>b</b>. Also assert that <b>b</b> parses to
* the same value as <b>a</b>. */
#define test_ntop6_reduces(a,b) STMT_BEGIN \
- tt_int_op(tor_inet_pton(AF_INET6, a, &a1), ==, 1); \
- tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), ==, b); \
- tt_int_op(tor_inet_pton(AF_INET6, b, &a2), ==, 1); \
- test_op_ip6_(&a1, ==, &a2, a, b); \
+ tt_int_op(tor_inet_pton(AF_INET6, a, &a1), OP_EQ, 1); \
+ tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), OP_EQ, b); \
+ tt_int_op(tor_inet_pton(AF_INET6, b, &a2), OP_EQ, 1); \
+ test_op_ip6_(&a1, OP_EQ, &a2, a, b); \
STMT_END
/** Helper: assert that <b>a</b> parses by tor_inet_pton() into a address that
* passes tor_addr_is_internal() with <b>for_listening</b>. */
#define test_internal_ip(a,for_listening) STMT_BEGIN \
- tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \
t1.family = AF_INET6; \
if (!tor_addr_is_internal(&t1, for_listening)) \
TT_DIE(("%s was not internal", a)); \
@@ -130,7 +131,7 @@ test_addr_basic(void *arg)
/** Helper: assert that <b>a</b> parses by tor_inet_pton() into a address that
* does not pass tor_addr_is_internal() with <b>for_listening</b>. */
#define test_external_ip(a,for_listening) STMT_BEGIN \
- tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \
t1.family = AF_INET6; \
if (tor_addr_is_internal(&t1, for_listening)) \
TT_DIE(("%s was not internal", a)); \
@@ -140,8 +141,8 @@ test_addr_basic(void *arg)
* tor_inet_pton(), give addresses that compare in the order defined by
* <b>op</b> with tor_addr_compare(). */
#define test_addr_compare(a, op, b) STMT_BEGIN \
- tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \
- tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), ==, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), OP_EQ, 1); \
t1.family = t2.family = AF_INET6; \
r = tor_addr_compare(&t1,&t2,CMP_SEMANTIC); \
if (!(r op 0)) \
@@ -152,8 +153,8 @@ test_addr_basic(void *arg)
* tor_inet_pton(), give addresses that compare in the order defined by
* <b>op</b> with tor_addr_compare_masked() with <b>m</b> masked. */
#define test_addr_compare_masked(a, op, b, m) STMT_BEGIN \
- tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \
- tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), ==, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \
+ tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), OP_EQ, 1); \
t1.family = t2.family = AF_INET6; \
r = tor_addr_compare_masked(&t1,&t2,m,CMP_SEMANTIC); \
if (!(r op 0)) \
@@ -168,15 +169,15 @@ test_addr_basic(void *arg)
#define test_addr_mask_ports_parse(xx, f, ip1, ip2, ip3, ip4, mm, pt1, pt2) \
STMT_BEGIN \
tt_int_op(tor_addr_parse_mask_ports(xx, 0, &t1, &mask, &port1, &port2), \
- ==, f); \
+ OP_EQ, f); \
p1=tor_inet_ntop(AF_INET6, &t1.addr.in6_addr, bug, sizeof(bug)); \
- tt_int_op(htonl(ip1), ==, tor_addr_to_in6_addr32(&t1)[0]); \
- tt_int_op(htonl(ip2), ==, tor_addr_to_in6_addr32(&t1)[1]); \
- tt_int_op(htonl(ip3), ==, tor_addr_to_in6_addr32(&t1)[2]); \
- tt_int_op(htonl(ip4), ==, tor_addr_to_in6_addr32(&t1)[3]); \
- tt_int_op(mask, ==, mm); \
- tt_uint_op(port1, ==, pt1); \
- tt_uint_op(port2, ==, pt2); \
+ tt_int_op(htonl(ip1), OP_EQ, tor_addr_to_in6_addr32(&t1)[0]); \
+ tt_int_op(htonl(ip2), OP_EQ, tor_addr_to_in6_addr32(&t1)[1]); \
+ tt_int_op(htonl(ip3), OP_EQ, tor_addr_to_in6_addr32(&t1)[2]); \
+ tt_int_op(htonl(ip4), OP_EQ, tor_addr_to_in6_addr32(&t1)[3]); \
+ tt_int_op(mask, OP_EQ, mm); \
+ tt_uint_op(port1, OP_EQ, pt1); \
+ tt_uint_op(port2, OP_EQ, pt2); \
STMT_END
/** Run unit tests for IPv6 encoding/decoding/manipulation functions. */
@@ -202,23 +203,23 @@ test_addr_ip6_helpers(void *arg)
const char *ip_ffff = "::ffff:192.168.1.2";
/* good round trip */
- tt_int_op(tor_inet_pton(AF_INET6, ip, &a1),==, 1);
- tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)),==, &buf);
- tt_str_op(buf,==, ip);
+ tt_int_op(tor_inet_pton(AF_INET6, ip, &a1),OP_EQ, 1);
+ tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)),OP_EQ, &buf);
+ tt_str_op(buf,OP_EQ, ip);
/* good round trip - ::ffff:0:0 style */
- tt_int_op(tor_inet_pton(AF_INET6, ip_ffff, &a2),==, 1);
- tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)),==, &buf);
- tt_str_op(buf,==, ip_ffff);
+ tt_int_op(tor_inet_pton(AF_INET6, ip_ffff, &a2),OP_EQ, 1);
+ tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)),OP_EQ, &buf);
+ tt_str_op(buf,OP_EQ, ip_ffff);
/* just long enough buffer (remember \0) */
- tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1),==, ip);
- tt_str_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1),==,
+ tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1),OP_EQ, ip);
+ tt_str_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1),OP_EQ,
ip_ffff);
/* too short buffer (remember \0) */
- tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)),==, NULL);
- tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)),==, NULL);
+ tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)),OP_EQ, NULL);
+ tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)),OP_EQ, NULL);
}
/* ==== Converting to and from sockaddr_t. */
@@ -227,16 +228,16 @@ test_addr_ip6_helpers(void *arg)
sin->sin_port = htons(9090);
sin->sin_addr.s_addr = htonl(0x7f7f0102); /*127.127.1.2*/
tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, &port1);
- tt_int_op(tor_addr_family(&t1),==, AF_INET);
- tt_int_op(tor_addr_to_ipv4h(&t1),==, 0x7f7f0102);
- tt_int_op(port1, ==, 9090);
+ tt_int_op(tor_addr_family(&t1),OP_EQ, AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ, 0x7f7f0102);
+ tt_int_op(port1, OP_EQ, 9090);
memset(&sa_storage, 0, sizeof(sa_storage));
- tt_int_op(sizeof(struct sockaddr_in),==,
+ tt_int_op(sizeof(struct sockaddr_in),OP_EQ,
tor_addr_to_sockaddr(&t1, 1234, (struct sockaddr *)&sa_storage,
sizeof(sa_storage)));
- tt_int_op(1234,==, ntohs(sin->sin_port));
- tt_int_op(0x7f7f0102,==, ntohl(sin->sin_addr.s_addr));
+ tt_int_op(1234,OP_EQ, ntohs(sin->sin_port));
+ tt_int_op(0x7f7f0102,OP_EQ, ntohl(sin->sin_addr.s_addr));
memset(&sa_storage, 0, sizeof(sa_storage));
sin6 = (struct sockaddr_in6 *)&sa_storage;
@@ -244,37 +245,37 @@ test_addr_ip6_helpers(void *arg)
sin6->sin6_port = htons(7070);
sin6->sin6_addr.s6_addr[0] = 128;
tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, &port1);
- tt_int_op(tor_addr_family(&t1),==, AF_INET6);
- tt_int_op(port1, ==, 7070);
+ tt_int_op(tor_addr_family(&t1),OP_EQ, AF_INET6);
+ tt_int_op(port1, OP_EQ, 7070);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
- tt_str_op(p1,==, "8000::");
+ tt_str_op(p1,OP_EQ, "8000::");
memset(&sa_storage, 0, sizeof(sa_storage));
- tt_int_op(sizeof(struct sockaddr_in6),==,
+ tt_int_op(sizeof(struct sockaddr_in6),OP_EQ,
tor_addr_to_sockaddr(&t1, 9999, (struct sockaddr *)&sa_storage,
sizeof(sa_storage)));
- tt_int_op(AF_INET6,==, sin6->sin6_family);
- tt_int_op(9999,==, ntohs(sin6->sin6_port));
- tt_int_op(0x80000000,==, ntohl(S6_ADDR32(sin6->sin6_addr)[0]));
+ tt_int_op(AF_INET6,OP_EQ, sin6->sin6_family);
+ tt_int_op(9999,OP_EQ, ntohs(sin6->sin6_port));
+ tt_int_op(0x80000000,OP_EQ, ntohl(S6_ADDR32(sin6->sin6_addr)[0]));
/* ==== tor_addr_lookup: static cases. (Can't test dns without knowing we
* have a good resolver. */
- tt_int_op(0,==, tor_addr_lookup("127.128.129.130", AF_UNSPEC, &t1));
- tt_int_op(AF_INET,==, tor_addr_family(&t1));
- tt_int_op(tor_addr_to_ipv4h(&t1),==, 0x7f808182);
+ tt_int_op(0,OP_EQ, tor_addr_lookup("127.128.129.130", AF_UNSPEC, &t1));
+ tt_int_op(AF_INET,OP_EQ, tor_addr_family(&t1));
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ, 0x7f808182);
- tt_int_op(0,==, tor_addr_lookup("9000::5", AF_UNSPEC, &t1));
- tt_int_op(AF_INET6,==, tor_addr_family(&t1));
- tt_int_op(0x90,==, tor_addr_to_in6_addr8(&t1)[0]);
+ tt_int_op(0,OP_EQ, tor_addr_lookup("9000::5", AF_UNSPEC, &t1));
+ tt_int_op(AF_INET6,OP_EQ, tor_addr_family(&t1));
+ tt_int_op(0x90,OP_EQ, tor_addr_to_in6_addr8(&t1)[0]);
tt_assert(tor_mem_is_zero((char*)tor_addr_to_in6_addr8(&t1)+1, 14));
- tt_int_op(0x05,==, tor_addr_to_in6_addr8(&t1)[15]);
+ tt_int_op(0x05,OP_EQ, tor_addr_to_in6_addr8(&t1)[15]);
/* === Test pton: valid af_inet6 */
/* Simple, valid parsing. */
r = tor_inet_pton(AF_INET6,
"0102:0304:0506:0708:090A:0B0C:0D0E:0F10", &a1);
- tt_int_op(r, ==, 1);
- for (i=0;i<16;++i) { tt_int_op(i+1,==, (int)a1.s6_addr[i]); }
+ tt_int_op(r, OP_EQ, 1);
+ for (i=0;i<16;++i) { tt_int_op(i+1,OP_EQ, (int)a1.s6_addr[i]); }
/* ipv4 ending. */
test_pton6_same("0102:0304:0506:0708:090A:0B0C:0D0E:0F10",
"0102:0304:0506:0708:090A:0B0C:13.14.15.16");
@@ -314,7 +315,7 @@ test_addr_ip6_helpers(void *arg)
"1000:1:0:7::");
/* Bad af param */
- tt_int_op(tor_inet_pton(AF_UNSPEC, 0, 0),==, -1);
+ tt_int_op(tor_inet_pton(AF_UNSPEC, 0, 0),OP_EQ, -1);
/* === Test pton: invalid in6. */
test_pton6_bad("foobar.");
@@ -410,11 +411,12 @@ test_addr_ip6_helpers(void *arg)
test_external_ip("::ffff:169.255.0.0", 0);
/* tor_addr_compare(tor_addr_t x2) */
- test_addr_compare("ffff::", ==, "ffff::0");
- test_addr_compare("0::3:2:1", <, "0::ffff:0.3.2.1");
- 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. */
+ test_addr_compare("ffff::", OP_EQ, "ffff::0");
+ test_addr_compare("0::3:2:1", OP_LT, "0::ffff:0.3.2.1");
+ test_addr_compare("0::2:2:1", OP_LT, "0::ffff:0.3.2.1");
+ test_addr_compare("0::ffff:0.3.2.1", OP_GT, "0::0:0:0");
+ test_addr_compare("0::ffff:5.2.2.1", OP_LT,
+ "::ffff:6.0.0.0"); /* XXXX wrong. */
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);
tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0);
@@ -423,119 +425,120 @@ test_addr_ip6_helpers(void *arg)
tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) < 0);
/* test compare_masked */
- test_addr_compare_masked("ffff::", ==, "ffff::0", 128);
- test_addr_compare_masked("ffff::", ==, "ffff::0", 64);
- test_addr_compare_masked("0::2:2:1", <, "0::8000:2:1", 81);
- test_addr_compare_masked("0::2:2:1", ==, "0::8000:2:1", 80);
+ test_addr_compare_masked("ffff::", OP_EQ, "ffff::0", 128);
+ test_addr_compare_masked("ffff::", OP_EQ, "ffff::0", 64);
+ test_addr_compare_masked("0::2:2:1", OP_LT, "0::8000:2:1", 81);
+ test_addr_compare_masked("0::2:2:1", OP_EQ, "0::8000:2:1", 80);
/* Test undecorated tor_addr_to_str */
- tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
+ tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
- tt_str_op(p1,==, "123:45:6789::5005:11");
- tt_int_op(AF_INET,==, tor_addr_parse(&t1, "18.0.0.1"));
+ tt_str_op(p1,OP_EQ, "123:45:6789::5005:11");
+ tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "18.0.0.1"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
- tt_str_op(p1,==, "18.0.0.1");
+ tt_str_op(p1,OP_EQ, "18.0.0.1");
/* Test decorated tor_addr_to_str */
- tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
+ tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
- tt_str_op(p1,==, "[123:45:6789::5005:11]");
- tt_int_op(AF_INET,==, tor_addr_parse(&t1, "18.0.0.1"));
+ tt_str_op(p1,OP_EQ, "[123:45:6789::5005:11]");
+ tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "18.0.0.1"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
- tt_str_op(p1,==, "18.0.0.1");
+ tt_str_op(p1,OP_EQ, "18.0.0.1");
/* Test buffer bounds checking of tor_addr_to_str */
- tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "::")); /* 2 + \0 */
- tt_ptr_op(tor_addr_to_str(buf, &t1, 2, 0),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 3, 0),==, "::");
- tt_ptr_op(tor_addr_to_str(buf, &t1, 4, 1),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 5, 1),==, "[::]");
-
- tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */
- tt_ptr_op(tor_addr_to_str(buf, &t1, 10, 0),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 11, 0),==, "2000::1337");
- tt_ptr_op(tor_addr_to_str(buf, &t1, 12, 1),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 13, 1),==, "[2000::1337]");
-
- tt_int_op(AF_INET,==, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */
- tt_ptr_op(tor_addr_to_str(buf, &t1, 7, 0),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 8, 0),==, "1.2.3.4");
-
- tt_int_op(AF_INET,==, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */
- tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 0),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 16, 0),==, "255.255.255.255");
- tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 1),==, NULL); /* too short buf */
- tt_str_op(tor_addr_to_str(buf, &t1, 16, 1),==, "255.255.255.255");
+ tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "::")); /* 2 + \0 */
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 2, 0),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 3, 0),OP_EQ, "::");
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 4, 1),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 5, 1),OP_EQ, "[::]");
+
+ tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 10, 0),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 11, 0),OP_EQ, "2000::1337");
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 12, 1),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 13, 1),OP_EQ, "[2000::1337]");
+
+ tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 7, 0),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 8, 0),OP_EQ, "1.2.3.4");
+
+ tt_int_op(AF_INET, OP_EQ,
+ tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 0),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 16, 0),OP_EQ, "255.255.255.255");
+ tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 1),OP_EQ, NULL); /* too short buf */
+ tt_str_op(tor_addr_to_str(buf, &t1, 16, 1),OP_EQ, "255.255.255.255");
t1.family = AF_UNSPEC;
- tt_ptr_op(tor_addr_to_str(buf, &t1, sizeof(buf), 0),==, NULL);
+ tt_ptr_op(tor_addr_to_str(buf, &t1, sizeof(buf), 0),OP_EQ, NULL);
/* Test tor_addr_parse_PTR_name */
i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 0);
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1);
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
i = tor_addr_parse_PTR_name(&t1, "9999999999999999999999999999.in-addr.arpa",
AF_UNSPEC, 1);
- tt_int_op(-1,==, i);
+ tt_int_op(-1,OP_EQ, i);
i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa",
AF_UNSPEC, 1);
- tt_int_op(1,==, i);
- tt_int_op(tor_addr_family(&t1),==, AF_INET);
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(tor_addr_family(&t1),OP_EQ, AF_INET);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
- tt_str_op(p1,==, "192.168.0.1");
+ tt_str_op(p1,OP_EQ, "192.168.0.1");
i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 0);
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 1);
- tt_int_op(1,==, i);
+ tt_int_op(1,OP_EQ, i);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
- tt_str_op(p1,==, "192.168.0.99");
+ tt_str_op(p1,OP_EQ, "192.168.0.99");
memset(&t1, 0, sizeof(t1));
i = tor_addr_parse_PTR_name(&t1,
"0.1.2.3.4.5.6.7.8.9.a.b.c.d.e.f."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
- tt_int_op(1,==, i);
+ tt_int_op(1,OP_EQ, i);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
- tt_str_op(p1,==, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]");
+ tt_str_op(p1,OP_EQ, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]");
/* Failing cases. */
i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.f.0."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.X.0.0.0.0.9."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_UNSPEC, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1, "32.1.1.in-addr.arpa",
AF_UNSPEC, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1, ".in-addr.arpa",
AF_UNSPEC, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa",
AF_UNSPEC, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa",
AF_INET6, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.0."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA",
AF_INET, 0);
- tt_int_op(i,==, -1);
+ tt_int_op(i,OP_EQ, -1);
/* === Test tor_addr_to_PTR_name */
@@ -547,19 +550,19 @@ test_addr_ip6_helpers(void *arg)
tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL);
/* Check IPv4 PTR - too short buffer */
- tt_int_op(tor_addr_to_PTR_name(rbuf, 1, &t1),==, -1);
+ tt_int_op(tor_addr_to_PTR_name(rbuf, 1, &t1),OP_EQ, -1);
tt_int_op(tor_addr_to_PTR_name(rbuf,
strlen("3.2.1.127.in-addr.arpa") - 1,
- &t1),==, -1);
+ &t1),OP_EQ, -1);
/* Check IPv4 PTR - valid addr */
- tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==,
+ tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),OP_EQ,
strlen("3.2.1.127.in-addr.arpa"));
- tt_str_op(rbuf,==, "3.2.1.127.in-addr.arpa");
+ tt_str_op(rbuf,OP_EQ, "3.2.1.127.in-addr.arpa");
/* Invalid addr family */
t1.family = AF_UNSPEC;
- tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==, -1);
+ tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),OP_EQ, -1);
/* Stage IPv6 addr */
memset(&sa_storage, 0, sizeof(sa_storage));
@@ -576,82 +579,82 @@ test_addr_ip6_helpers(void *arg)
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.ip6.arpa";
/* Check IPv6 PTR - too short buffer */
- tt_int_op(tor_addr_to_PTR_name(rbuf, 0, &t1),==, -1);
- tt_int_op(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1),==, -1);
+ tt_int_op(tor_addr_to_PTR_name(rbuf, 0, &t1),OP_EQ, -1);
+ tt_int_op(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1),OP_EQ, -1);
/* Check IPv6 PTR - valid addr */
- tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==,
+ tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),OP_EQ,
strlen(addr_PTR));
- tt_str_op(rbuf,==, addr_PTR);
+ tt_str_op(rbuf,OP_EQ, 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);
- tt_str_op(p1,==, "::f");
+ tt_str_op(p1,OP_EQ, "::f");
//test_addr_parse("[::fefe:4.1.1.7/120]:999-1000");
//test_addr_parse_check("::fefe:401:107", 120, 999, 1000);
test_addr_mask_ports_parse("[::ffff:4.1.1.7]/120:443", AF_INET6,
0, 0, 0x0000ffff, 0x04010107, 120, 443, 443);
- tt_str_op(p1,==, "::ffff:4.1.1.7");
+ tt_str_op(p1,OP_EQ, "::ffff:4.1.1.7");
test_addr_mask_ports_parse("[abcd:2::44a:0]:2-65000", AF_INET6,
0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000);
- tt_str_op(p1,==, "abcd:2::44a:0");
+ tt_str_op(p1,OP_EQ, "abcd:2::44a:0");
/* Try some long addresses. */
r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111]",
0, &t1, NULL, NULL, NULL);
tt_assert(r == AF_INET6);
r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:11111]",
0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111:1]",
0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -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);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Try some failing cases. */
r=tor_addr_parse_mask_ports("[fefef::]/112", 0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[fefe::/112", 0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[fefe::", 0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[fefe::X]", 0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("efef::/112", 0, &t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]",0,&t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/fred",0,&t1,&mask, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/255.255.0.0",
0,&t1, NULL, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -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);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Test for V4-mapped address with mask < 96. (arguably not valid) */
r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]",0,&t1, &mask, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("1.1.2.2/33",0,&t1, &mask, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Try extended wildcard addresses with out TAPMP_EXTENDED_STAR*/
r=tor_addr_parse_mask_ports("*4",0,&t1, &mask, NULL, NULL);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL);
- tt_int_op(r, ==, -1);
-#if 0
+ tt_int_op(r, OP_EQ, -1);
+ tt_assert(r == -1);
/* Try a mask with a wildcard. */
r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL);
tt_assert(r == -1);
@@ -661,61 +664,60 @@ test_addr_ip6_helpers(void *arg)
r=tor_addr_parse_mask_ports("*6/30",TAPMP_EXTENDED_STAR,
&t1, &mask, NULL, NULL);
tt_assert(r == -1);
-#endif
/* Basic mask tests*/
r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL);
tt_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);
+ tt_int_op(mask,OP_EQ,31);
+ tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0x01010202);
r=tor_addr_parse_mask_ports("3.4.16.032:1-2",0,&t1, &mask, &port1, &port2);
tt_assert(r == AF_INET);
- tt_int_op(mask,==,32);
- tt_int_op(tor_addr_family(&t1),==,AF_INET);
- tt_int_op(tor_addr_to_ipv4h(&t1),==,0x03041020);
+ tt_int_op(mask,OP_EQ,32);
+ tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0x03041020);
tt_assert(port1 == 1);
tt_assert(port2 == 2);
r=tor_addr_parse_mask_ports("1.1.2.3/255.255.128.0",0,&t1, &mask,NULL,NULL);
tt_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);
+ tt_int_op(mask,OP_EQ,17);
+ tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0x01010203);
r=tor_addr_parse_mask_ports("[efef::]/112",0,&t1, &mask, &port1, &port2);
tt_assert(r == AF_INET6);
tt_assert(port1 == 1);
tt_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);
+ tt_int_op(r,OP_EQ,AF_INET); /* Old users of this always get inet */
+ tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0);
+ tt_int_op(mask,OP_EQ,0);
+ tt_int_op(port1,OP_EQ,80);
+ tt_int_op(port2,OP_EQ,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);
+ tt_int_op(r,OP_EQ,AF_UNSPEC);
+ tt_int_op(tor_addr_family(&t1),OP_EQ,AF_UNSPEC);
+ tt_int_op(mask,OP_EQ,0);
+ tt_int_op(port1,OP_EQ,8000);
+ tt_int_op(port2,OP_EQ,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);
+ tt_int_op(r,OP_EQ,AF_INET);
+ tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0);
+ tt_int_op(mask,OP_EQ,0);
+ tt_int_op(port1,OP_EQ,6667);
+ tt_int_op(port2,OP_EQ,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_int_op(r,OP_EQ,AF_INET6);
+ tt_int_op(tor_addr_family(&t1),OP_EQ,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);
+ tt_int_op(mask,OP_EQ,0);
+ tt_int_op(port1,OP_EQ,1);
+ tt_int_op(port2,OP_EQ,65535);
/* make sure inet address lengths >= max */
tt_assert(INET_NTOA_BUF_LEN >= sizeof("255.255.255.255"));
@@ -751,87 +753,87 @@ test_addr_parse(void *arg)
r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.1:1234",
&addr, &port, -1);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
tor_addr_to_str(buf, &addr, sizeof(buf), 0);
- tt_str_op(buf,==, "192.0.2.1");
- tt_int_op(port,==, 1234);
+ tt_str_op(buf,OP_EQ, "192.0.2.1");
+ tt_int_op(port,OP_EQ, 1234);
r= tor_addr_port_parse(LOG_DEBUG,
"[::1]:1234",
&addr, &port, -1);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
tor_addr_to_str(buf, &addr, sizeof(buf), 0);
- tt_str_op(buf,==, "::1");
- tt_int_op(port,==, 1234);
+ tt_str_op(buf,OP_EQ, "::1");
+ tt_int_op(port,OP_EQ, 1234);
/* Domain name. */
r= tor_addr_port_parse(LOG_DEBUG,
"torproject.org:1234",
&addr, &port, -1);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Only IP. */
r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2",
&addr, &port, -1);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2",
&addr, &port, 200);
- tt_int_op(r, ==, 0);
- tt_int_op(port,==,200);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(port,OP_EQ,200);
r= tor_addr_port_parse(LOG_DEBUG,
"[::1]",
&addr, &port, -1);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r= tor_addr_port_parse(LOG_DEBUG,
"[::1]",
&addr, &port, 400);
- tt_int_op(r, ==, 0);
- tt_int_op(port,==,400);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(port,OP_EQ,400);
/* Bad port. */
r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2:66666",
&addr, &port, -1);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2:66666",
&addr, &port, 200);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Only domain name */
r= tor_addr_port_parse(LOG_DEBUG,
"torproject.org",
&addr, &port, -1);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
r= tor_addr_port_parse(LOG_DEBUG,
"torproject.org",
&addr, &port, 200);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Bad IP address */
r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2:1234",
&addr, &port, -1);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -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);
- tt_int_op(r, ==, 0);
- tt_int_op(port,==,1337);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(port,OP_EQ,1337);
r= tor_addr_port_parse(LOG_DEBUG,
"[::1]:1369",
&addr, &port, 200);
- tt_int_op(r, ==, 0);
- tt_int_op(port,==,1369);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(port,OP_EQ,1369);
done:
;
@@ -886,7 +888,7 @@ test_virtaddrmap(void *data)
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,
+ tt_int_op(0, OP_EQ, tor_addr_compare_masked(&a, &cfg[ipv6].addr,
bits, CMP_EXACT));
/* And track which bits have been different between pairs of
@@ -930,7 +932,7 @@ test_addr_dup_ip(void *arg)
(void)arg;
#define CHECK(ip, s) do { \
v = tor_dup_ip(ip); \
- tt_str_op(v,==,(s)); \
+ tt_str_op(v,OP_EQ,(s)); \
tor_free(v); \
} while (0)
@@ -956,7 +958,7 @@ test_addr_sockaddr_to_str(void *arg)
#endif
#define CHECK(sa, s) do { \
v = tor_sockaddr_to_str((const struct sockaddr*) &(sa)); \
- tt_str_op(v,==,(s)); \
+ tt_str_op(v,OP_EQ,(s)); \
tor_free(v); \
} while (0)
(void)arg;
@@ -1013,12 +1015,13 @@ test_addr_is_loopback(void *data)
(void)data;
for (i=0; loopback_items[i].name; ++i) {
- tt_int_op(tor_addr_parse(&addr, loopback_items[i].name), >=, 0);
- tt_int_op(tor_addr_is_loopback(&addr), ==, loopback_items[i].is_loopback);
+ tt_int_op(tor_addr_parse(&addr, loopback_items[i].name), OP_GE, 0);
+ tt_int_op(tor_addr_is_loopback(&addr), OP_EQ,
+ loopback_items[i].is_loopback);
}
tor_addr_make_unspec(&addr);
- tt_int_op(tor_addr_is_loopback(&addr), ==, 0);
+ tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, 0);
done:
;
@@ -1033,18 +1036,18 @@ test_addr_make_null(void *data)
(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);
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), OP_NE, 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");
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), OP_EQ, 0);
+ tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), OP_EQ, "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), ==, "::");
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), OP_EQ, 0);
+ tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), OP_EQ, "::");
done:
tor_free(addr);
tor_free(zeros);
diff --git a/src/test/test_bt_cl.c b/src/test/test_bt_cl.c
index 720ccd4627..c0c334656d 100644
--- a/src/test/test_bt_cl.c
+++ b/src/test/test_bt_cl.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -96,7 +96,7 @@ main(int argc, char **argv)
return 1;
}
- init_logging();
+ init_logging(1);
set_log_severity_config(LOG_WARN, LOG_ERR, &severity);
add_stream_log(&severity, "stdout", STDOUT_FILENO);
tor_log_update_sigsafe_err_fds();
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
index 3ab3d8d8c0..cb29ab0a9e 100644
--- a/src/test/test_buffers.c
+++ b/src/test/test_buffers.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define BUFFERS_PRIVATE
@@ -30,7 +30,7 @@ test_buffers_basic(void *arg)
TT_DIE(("Assertion failed."));
//test_eq(buf_capacity(buf), 4096);
- tt_int_op(buf_datalen(buf),==, 0);
+ tt_int_op(buf_datalen(buf),OP_EQ, 0);
/****
* General pointer frobbing
@@ -40,16 +40,16 @@ test_buffers_basic(void *arg)
}
write_to_buf(str, 256, buf);
write_to_buf(str, 256, buf);
- tt_int_op(buf_datalen(buf),==, 512);
+ tt_int_op(buf_datalen(buf),OP_EQ, 512);
fetch_from_buf(str2, 200, buf);
- tt_mem_op(str,==, str2, 200);
- tt_int_op(buf_datalen(buf),==, 312);
+ tt_mem_op(str,OP_EQ, str2, 200);
+ tt_int_op(buf_datalen(buf),OP_EQ, 312);
memset(str2, 0, sizeof(str2));
fetch_from_buf(str2, 256, buf);
- tt_mem_op(str+200,==, str2, 56);
- tt_mem_op(str,==, str2+56, 200);
- tt_int_op(buf_datalen(buf),==, 56);
+ tt_mem_op(str+200,OP_EQ, str2, 56);
+ tt_mem_op(str,OP_EQ, str2+56, 200);
+ tt_int_op(buf_datalen(buf),OP_EQ, 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. */
@@ -57,16 +57,16 @@ test_buffers_basic(void *arg)
write_to_buf(str, 256, buf);
}
assert_buf_ok(buf);
- tt_int_op(buf_datalen(buf),==, 3896);
+ tt_int_op(buf_datalen(buf),OP_EQ, 3896);
fetch_from_buf(str2, 56, buf);
- tt_int_op(buf_datalen(buf),==, 3840);
- tt_mem_op(str+200,==, str2, 56);
+ tt_int_op(buf_datalen(buf),OP_EQ, 3840);
+ tt_mem_op(str+200,OP_EQ, str2, 56);
for (j=0;j<15;++j) {
memset(str2, 0, sizeof(str2));
fetch_from_buf(str2, 256, buf);
- tt_mem_op(str,==, str2, 256);
+ tt_mem_op(str,OP_EQ, str2, 256);
}
- tt_int_op(buf_datalen(buf),==, 0);
+ tt_int_op(buf_datalen(buf),OP_EQ, 0);
buf_free(buf);
buf = NULL;
@@ -76,7 +76,7 @@ test_buffers_basic(void *arg)
write_to_buf(str+1, 255, buf);
//test_eq(buf_capacity(buf), 256);
fetch_from_buf(str2, 254, buf);
- tt_mem_op(str+1,==, str2, 254);
+ tt_mem_op(str+1,OP_EQ, str2, 254);
//test_eq(buf_capacity(buf), 256);
assert_buf_ok(buf);
write_to_buf(str, 32, buf);
@@ -85,15 +85,15 @@ test_buffers_basic(void *arg)
write_to_buf(str, 256, buf);
assert_buf_ok(buf);
//test_eq(buf_capacity(buf), 512);
- tt_int_op(buf_datalen(buf),==, 33+256);
+ tt_int_op(buf_datalen(buf),OP_EQ, 33+256);
fetch_from_buf(str2, 33, buf);
- tt_int_op(*str2,==, str[255]);
+ tt_int_op(*str2,OP_EQ, str[255]);
- tt_mem_op(str2+1,==, str, 32);
+ tt_mem_op(str2+1,OP_EQ, str, 32);
//test_eq(buf_capacity(buf), 512);
- tt_int_op(buf_datalen(buf),==, 256);
+ tt_int_op(buf_datalen(buf),OP_EQ, 256);
fetch_from_buf(str2, 256, buf);
- tt_mem_op(str,==, str2, 256);
+ tt_mem_op(str,OP_EQ, str2, 256);
/* now try shrinking: case 1. */
buf_free(buf);
@@ -102,10 +102,10 @@ test_buffers_basic(void *arg)
write_to_buf(str,255, buf);
}
//test_eq(buf_capacity(buf), 33668);
- tt_int_op(buf_datalen(buf),==, 17085);
+ tt_int_op(buf_datalen(buf),OP_EQ, 17085);
for (j=0; j < 40; ++j) {
fetch_from_buf(str2, 255,buf);
- tt_mem_op(str2,==, str, 255);
+ tt_mem_op(str2,OP_EQ, str, 255);
}
/* now try shrinking: case 2. */
@@ -116,7 +116,7 @@ test_buffers_basic(void *arg)
}
for (j=0; j < 20; ++j) {
fetch_from_buf(str2, 255,buf);
- tt_mem_op(str2,==, str, 255);
+ tt_mem_op(str2,OP_EQ, str, 255);
}
for (j=0;j<80;++j) {
write_to_buf(str,255, buf);
@@ -124,7 +124,7 @@ test_buffers_basic(void *arg)
//test_eq(buf_capacity(buf),33668);
for (j=0; j < 120; ++j) {
fetch_from_buf(str2, 255,buf);
- tt_mem_op(str2,==, str, 255);
+ tt_mem_op(str2,OP_EQ, str, 255);
}
/* Move from buf to buf. */
@@ -133,27 +133,27 @@ test_buffers_basic(void *arg)
buf2 = buf_new_with_capacity(4096);
for (j=0;j<100;++j)
write_to_buf(str, 255, buf);
- tt_int_op(buf_datalen(buf),==, 25500);
+ tt_int_op(buf_datalen(buf),OP_EQ, 25500);
for (j=0;j<100;++j) {
r = 10;
move_buf_to_buf(buf2, buf, &r);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
}
- tt_int_op(buf_datalen(buf),==, 24500);
- tt_int_op(buf_datalen(buf2),==, 1000);
+ tt_int_op(buf_datalen(buf),OP_EQ, 24500);
+ tt_int_op(buf_datalen(buf2),OP_EQ, 1000);
for (j=0;j<3;++j) {
fetch_from_buf(str2, 255, buf2);
- tt_mem_op(str2,==, str, 255);
+ tt_mem_op(str2,OP_EQ, str, 255);
}
r = 8192; /*big move*/
move_buf_to_buf(buf2, buf, &r);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = 30000; /* incomplete move */
move_buf_to_buf(buf2, buf, &r);
- tt_int_op(r,==, 13692);
+ tt_int_op(r,OP_EQ, 13692);
for (j=0;j<97;++j) {
fetch_from_buf(str2, 255, buf2);
- tt_mem_op(str2,==, str, 255);
+ tt_mem_op(str2,OP_EQ, str, 255);
}
buf_free(buf);
buf_free(buf2);
@@ -163,16 +163,16 @@ test_buffers_basic(void *arg)
cp = "Testing. This is a moderately long Testing string.";
for (j = 0; cp[j]; j++)
write_to_buf(cp+j, 1, buf);
- tt_int_op(0,==, buf_find_string_offset(buf, "Testing", 7));
- tt_int_op(1,==, buf_find_string_offset(buf, "esting", 6));
- tt_int_op(1,==, buf_find_string_offset(buf, "est", 3));
- tt_int_op(39,==, buf_find_string_offset(buf, "ing str", 7));
- tt_int_op(35,==, buf_find_string_offset(buf, "Testing str", 11));
- tt_int_op(32,==, buf_find_string_offset(buf, "ng ", 3));
- tt_int_op(43,==, buf_find_string_offset(buf, "string.", 7));
- tt_int_op(-1,==, buf_find_string_offset(buf, "shrdlu", 6));
- tt_int_op(-1,==, buf_find_string_offset(buf, "Testing thing", 13));
- tt_int_op(-1,==, buf_find_string_offset(buf, "ngx", 3));
+ tt_int_op(0,OP_EQ, buf_find_string_offset(buf, "Testing", 7));
+ tt_int_op(1,OP_EQ, buf_find_string_offset(buf, "esting", 6));
+ tt_int_op(1,OP_EQ, buf_find_string_offset(buf, "est", 3));
+ tt_int_op(39,OP_EQ, buf_find_string_offset(buf, "ing str", 7));
+ tt_int_op(35,OP_EQ, buf_find_string_offset(buf, "Testing str", 11));
+ tt_int_op(32,OP_EQ, buf_find_string_offset(buf, "ng ", 3));
+ tt_int_op(43,OP_EQ, buf_find_string_offset(buf, "string.", 7));
+ tt_int_op(-1,OP_EQ, buf_find_string_offset(buf, "shrdlu", 6));
+ tt_int_op(-1,OP_EQ, buf_find_string_offset(buf, "Testing thing", 13));
+ tt_int_op(-1,OP_EQ, buf_find_string_offset(buf, "ngx", 3));
buf_free(buf);
buf = NULL;
@@ -183,7 +183,7 @@ test_buffers_basic(void *arg)
write_to_buf(cp, 65536, buf);
tor_free(cp);
- tt_int_op(buf_datalen(buf), ==, 65536);
+ tt_int_op(buf_datalen(buf), OP_EQ, 65536);
buf_free(buf);
buf = NULL;
}
@@ -213,19 +213,19 @@ test_buffer_pullup(void *arg)
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_default_chunk_size(buf), OP_EQ, 4096);
- tt_int_op(buf_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 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);
+ tt_ptr_op(cp, OP_EQ, NULL);
+ tt_uint_op(sz, OP_EQ, 0);
/* Let's make sure nothing got allocated */
- tt_int_op(buf_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
/* Case 1: everything puts into the first chunk with some moving. */
@@ -234,22 +234,22 @@ test_buffer_pullup(void *arg)
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);
+ tt_ptr_op(cp, OP_NE, NULL);
+ tt_int_op(sz, OP_LE, 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);
- tt_mem_op(tmp,==, stuff, 3000);
+ tt_int_op(fetch_from_buf(tmp, 3000, buf), OP_EQ, 3000);
+ tt_mem_op(tmp,OP_EQ, 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);
- tt_mem_op(cp,==, stuff+3000, 2048);
- tt_int_op(3000, ==, buf_datalen(buf));
- tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 0);
- tt_mem_op(tmp,==, stuff+3000, 2048);
+ tt_ptr_op(cp, OP_NE, NULL);
+ tt_int_op(sz, OP_GE, 2048);
+ tt_mem_op(cp,OP_EQ, stuff+3000, 2048);
+ tt_int_op(3000, OP_EQ, buf_datalen(buf));
+ tt_int_op(fetch_from_buf(tmp, 3000, buf), OP_EQ, 0);
+ tt_mem_op(tmp,OP_EQ, stuff+3000, 2048);
buf_free(buf);
@@ -259,26 +259,26 @@ test_buffer_pullup(void *arg)
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);
+ tt_int_op(buf_datalen(buf), OP_EQ, 16000);
buf_get_first_chunk_data(buf, &cp, &sz);
- tt_ptr_op(cp, !=, NULL);
- tt_int_op(sz, <=, 4096);
+ tt_ptr_op(cp, OP_NE, NULL);
+ tt_int_op(sz, OP_LE, 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);
- tt_mem_op(cp,==, stuff, 12500);
- tt_int_op(buf_datalen(buf), ==, 16000);
+ tt_ptr_op(cp, OP_NE, NULL);
+ tt_int_op(sz, OP_GE, 12500);
+ tt_mem_op(cp,OP_EQ, stuff, 12500);
+ tt_int_op(buf_datalen(buf), OP_EQ, 16000);
fetch_from_buf(tmp, 12400, buf);
- tt_mem_op(tmp,==, stuff, 12400);
- tt_int_op(buf_datalen(buf), ==, 3600);
+ tt_mem_op(tmp,OP_EQ, stuff, 12400);
+ tt_int_op(buf_datalen(buf), OP_EQ, 3600);
fetch_from_buf(tmp, 3500, buf);
- tt_mem_op(tmp,==, stuff+12400, 3500);
+ tt_mem_op(tmp,OP_EQ, stuff+12400, 3500);
fetch_from_buf(tmp, 100, buf);
- tt_mem_op(tmp,==, stuff+15900, 10);
+ tt_mem_op(tmp,OP_EQ, stuff+15900, 10);
buf_free(buf);
@@ -290,16 +290,16 @@ test_buffer_pullup(void *arg)
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);
- tt_mem_op(cp,==, stuff+100, 7900);
+ tt_ptr_op(cp, OP_NE, NULL);
+ tt_int_op(sz, OP_EQ, 7900);
+ tt_mem_op(cp,OP_EQ, stuff+100, 7900);
buf_free(buf);
buf = NULL;
buf_shrink_freelists(1);
- tt_int_op(buf_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
done:
buf_free(buf);
buf_shrink_freelists(1);
@@ -321,31 +321,31 @@ test_buffer_copy(void *arg)
tt_assert(buf);
/* Copy an empty buffer. */
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf));
tt_assert(buf2);
- tt_int_op(0, ==, generic_buffer_len(buf2));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(len, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, OP_EQ, generic_buffer_len(buf2));
generic_buffer_get(buf2, b, len);
- tt_mem_op(b, ==, s, len);
+ tt_mem_op(b, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, OP_EQ, generic_buffer_len(buf2));
generic_buffer_get(buf2, b, len);
- tt_mem_op(b, ==, s, len);
+ tt_mem_op(b, OP_EQ, s, len);
/* Clear buf for next test */
generic_buffer_get(buf, b, len);
- tt_int_op(generic_buffer_len(buf),==,0);
+ tt_int_op(generic_buffer_len(buf),OP_EQ,0);
/* Okay, now let's try a bigger buffer. */
s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit "
@@ -357,12 +357,12 @@ test_buffer_copy(void *arg)
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));
+ tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(generic_buffer_len(buf2), OP_EQ, 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);
- tt_mem_op(b+1, ==, s, len);
+ tt_int_op((unsigned char)b[0],OP_EQ,i);
+ tt_mem_op(b+1, OP_EQ, s, len);
}
done:
@@ -382,62 +382,62 @@ test_buffer_ext_or_cmd(void *arg)
(void) arg;
/* Empty -- should give "not there. */
- tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
- tt_ptr_op(NULL, ==, cmd);
+ tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_EQ, cmd);
+ tt_int_op(3, OP_EQ, 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));
+ tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_NE, cmd);
+ tt_int_op(0x20, OP_EQ, cmd->cmd);
+ tt_int_op(0, OP_EQ, cmd->len);
+ tt_int_op(0, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_EQ, 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);
- tt_mem_op("abcdef", ==, cmd->body, 6);
- tt_int_op(0, ==, generic_buffer_len(buf));
+ tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_NE, cmd);
+ tt_int_op(0x1021, OP_EQ, cmd->cmd);
+ tt_int_op(6, OP_EQ, cmd->len);
+ tt_mem_op("abcdef", OP_EQ, cmd->body, 6);
+ tt_int_op(0, OP_EQ, 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);
- tt_mem_op("loremipsum", ==, cmd->body, 10);
- tt_int_op(4, ==, generic_buffer_len(buf));
+ tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_NE, cmd);
+ tt_int_op(0xffff, OP_EQ, cmd->cmd);
+ tt_int_op(10, OP_EQ, cmd->len);
+ tt_mem_op("loremipsum", OP_EQ, cmd->body, 10);
+ tt_int_op(4, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, 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);
- tt_mem_op(tmp, ==, cmd->body, 65535);
- tt_int_op(0, ==, generic_buffer_len(buf));
+ tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, OP_NE, cmd);
+ tt_int_op(0x1000, OP_EQ, cmd->cmd);
+ tt_int_op(0xffff, OP_EQ, cmd->len);
+ tt_mem_op(tmp, OP_EQ, cmd->body, 65535);
+ tt_int_op(0, OP_EQ, generic_buffer_len(buf));
ext_or_cmd_free(cmd);
cmd = NULL;
@@ -458,65 +458,66 @@ test_buffer_allocation_tracking(void *arg)
(void)arg;
crypto_rand(junk, 16384);
- tt_int_op(buf_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 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);
+ tt_int_op(buf_allocation(buf1), OP_EQ, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 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);
+ tt_int_op(buf_allocation(buf1), OP_EQ, 16384);
fetch_from_buf(junk, 100, buf1);
- tt_int_op(buf_allocation(buf1), ==, 16384); /* still 4 4k chunks */
+ tt_int_op(buf_allocation(buf1), OP_EQ, 16384); /* still 4 4k chunks */
- tt_int_op(buf_get_total_allocation(), ==, 16384);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 16384);
fetch_from_buf(junk, 4096, buf1); /* drop a 1k chunk... */
- tt_int_op(buf_allocation(buf1), ==, 3*4096); /* now 3 4k chunks */
+ tt_int_op(buf_allocation(buf1), OP_EQ, 3*4096); /* now 3 4k chunks */
#ifdef ENABLE_BUF_FREELISTS
- tt_int_op(buf_get_total_allocation(), ==, 16384); /* that chunk went onto
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 16384); /* that chunk went onto
the freelist. */
#else
- tt_int_op(buf_get_total_allocation(), ==, 12288); /* that chunk was really
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 12288); /* that chunk was really
freed. */
#endif
write_to_buf(junk, 4000, buf2);
- tt_int_op(buf_allocation(buf2), ==, 4096); /* another 4k chunk. */
+ tt_int_op(buf_allocation(buf2), OP_EQ, 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);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 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. */
+ tt_int_op(buf_allocation(buf2), OP_EQ, 8192); /* another 4k chunk. */
+ tt_int_op(buf_get_total_allocation(),
+ OP_EQ, 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);
+ tt_int_op(buf_allocation(buf2), OP_GE, 4008000);
+ tt_int_op(buf_get_total_allocation(), OP_GE, 4008000);
buf_free(buf2);
buf2 = NULL;
- tt_int_op(buf_get_total_allocation(), <, 4008000);
+ tt_int_op(buf_get_total_allocation(), OP_LT, 4008000);
buf_shrink_freelists(1);
- tt_int_op(buf_get_total_allocation(), ==, buf_allocation(buf1));
+ tt_int_op(buf_get_total_allocation(), OP_EQ, buf_allocation(buf1));
buf_free(buf1);
buf1 = NULL;
buf_shrink_freelists(1);
- tt_int_op(buf_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
done:
buf_free(buf1);
@@ -545,37 +546,38 @@ test_buffer_time_tracking(void *arg)
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));
+ tt_int_op(0, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(1000, OP_EQ, 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));
+ tt_int_op(1234, OP_EQ,
+ 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));
+ tt_int_op(4207, OP_EQ, buf_datalen(buf));
/* The oldest bytes are still in the front. */
- tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000));
+ tt_int_op(2000, OP_EQ, 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));
+ tt_int_op(2000, OP_EQ, 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));
+ tt_int_op(107, OP_EQ, buf_datalen(buf));
+ tt_int_op(2000, OP_EQ, 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 */
@@ -584,13 +586,13 @@ test_buffer_time_tracking(void *arg)
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(4307, OP_EQ, buf_datalen(buf));
- tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123));
+ tt_int_op(2000, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+5617));
+ tt_int_op(383, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+6000));
done:
buf_free(buf);
@@ -613,31 +615,31 @@ test_buffers_zlib_impl(int finalize_with_nil)
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);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg, 128, 0), OP_EQ, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+128, 128, 0), OP_EQ, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+256, 256, 0), OP_EQ, 0);
done = !finalize_with_nil;
- tt_int_op(write_to_buf_zlib(buf, zlib_state, "all done", 9, done), ==, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "all done", 9, done), OP_EQ, 0);
if (finalize_with_nil) {
- tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), OP_EQ, 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(fetch_from_buf(contents, in_len, buf), OP_EQ, 0);
- tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len,
+ tt_int_op(0, OP_EQ, 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);
+ tt_int_op(out_len, OP_GE, 128);
+ tt_mem_op(msg, OP_EQ, expanded, 128);
+ tt_int_op(out_len, OP_GE, 512);
+ tt_mem_op(msg, OP_EQ, expanded, 512);
+ tt_int_op(out_len, OP_EQ, 512+9);
+ tt_mem_op("all done", OP_EQ, expanded+512, 9);
done:
buf_free(buf);
@@ -680,28 +682,28 @@ test_buffers_zlib_fin_at_chunk_end(void *arg)
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);
+ tt_uint_op(buf->head->memlen, OP_LT, sz);
headerjunk = buf->head->memlen - 7;
write_to_buf(msg, headerjunk-1, buf);
- tt_uint_op(buf->head->datalen, ==, headerjunk);
- tt_uint_op(buf_datalen(buf), ==, headerjunk);
+ tt_uint_op(buf->head->datalen, OP_EQ, headerjunk);
+ tt_uint_op(buf_datalen(buf), OP_EQ, 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);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), OP_EQ, 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(fetch_from_buf(contents, in_len, buf), OP_EQ, 0);
- tt_uint_op(in_len, >, headerjunk);
+ tt_uint_op(in_len, OP_GT, headerjunk);
- tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len,
+ tt_int_op(0, OP_EQ, tor_gzip_uncompress(&expanded, &out_len,
contents + headerjunk, in_len - headerjunk,
ZLIB_METHOD, 1,
LOG_WARN));
- tt_int_op(out_len, ==, 0);
+ tt_int_op(out_len, OP_EQ, 0);
tt_assert(expanded);
done:
diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c
index 995e519163..e1f6bd71f7 100644
--- a/src/test/test_cell_formats.c
+++ b/src/test/test_cell_formats.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -30,16 +30,16 @@ test_cfmt_relay_header(void *arg)
uint8_t hdr_out[RELAY_HEADER_SIZE];
(void)arg;
- tt_int_op(sizeof(hdr_1), ==, RELAY_HEADER_SIZE);
+ tt_int_op(sizeof(hdr_1), OP_EQ, 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);
- tt_mem_op(rh.integrity, ==, "ABCD", 4);
- tt_int_op(rh.length, ==, 0x103);
+ tt_int_op(rh.command, OP_EQ, 3);
+ tt_int_op(rh.recognized, OP_EQ, 0);
+ tt_int_op(rh.stream_id, OP_EQ, 0x2122);
+ tt_mem_op(rh.integrity, OP_EQ, "ABCD", 4);
+ tt_int_op(rh.length, OP_EQ, 0x103);
relay_header_pack(hdr_out, &rh);
- tt_mem_op(hdr_out, ==, hdr_1, RELAY_HEADER_SIZE);
+ tt_mem_op(hdr_out, OP_EQ, hdr_1, RELAY_HEADER_SIZE);
done:
;
@@ -74,32 +74,32 @@ test_cfmt_begin_cells(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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_ptr_op(NULL, OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(0, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(1, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_ptr_op(NULL, OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(0, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(1, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("a.b", OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(9, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, bcell.is_begindir);
tor_free(bcell.address);
/* A significantly loner begin cell */
@@ -108,35 +108,35 @@ test_cfmt_begin_cells(void *arg)
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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("here-is-a-nice-long.hostname.com", OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(65535, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("18.9.22.169", OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(80, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("[2620::6b0:b:1a1a:0:26e5:480e]", OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(80, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, bcell.is_begindir);
tor_free(bcell.address);
/* a begin cell with extra junk but not enough for flags. */
@@ -145,12 +145,12 @@ test_cfmt_begin_cells(void *arg)
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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("another.example.com", OP_EQ, bcell.address);
+ tt_int_op(0, OP_EQ, bcell.flags);
+ tt_int_op(80, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, bcell.is_begindir);
tor_free(bcell.address);
/* a begin cell with flags. */
@@ -159,12 +159,12 @@ test_cfmt_begin_cells(void *arg)
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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("another.example.com", OP_EQ, bcell.address);
+ tt_int_op(0x1020304, OP_EQ, bcell.flags);
+ tt_int_op(443, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, bcell.is_begindir);
tor_free(bcell.address);
/* a begin cell with flags and even more cruft after that. */
@@ -173,12 +173,12 @@ test_cfmt_begin_cells(void *arg)
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);
+ tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("a-further.example.com", OP_EQ, bcell.address);
+ tt_int_op(0xeeaa00ff, OP_EQ, bcell.flags);
+ tt_int_op(22, OP_EQ, bcell.port);
+ tt_int_op(5, OP_EQ, bcell.stream_id);
+ tt_int_op(0, OP_EQ, bcell.is_begindir);
tor_free(bcell.address);
/* bad begin cell: impossible length. */
@@ -189,42 +189,42 @@ test_cfmt_begin_cells(void *arg)
{
relay_header_t rh;
relay_header_unpack(&rh, cell.payload);
- tt_int_op(rh.length, ==, 510);
+ tt_int_op(rh.length, OP_EQ, 510);
}
- tt_int_op(-2, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_int_op(-2, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason));
done:
tor_free(bcell.address);
@@ -244,47 +244,47 @@ test_cfmt_connected_cells(void *arg)
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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_UNSPEC);
+ tt_int_op(ttl, OP_EQ, -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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "32.48.64.80");
+ tt_int_op(ttl, OP_EQ, -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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "17.18.19.20");
+ tt_int_op(ttl, OP_EQ, -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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "2.3.4.5");
+ tt_int_op(ttl, OP_EQ, 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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "2.3.4.5");
+ tt_int_op(ttl, OP_EQ, -1);
/* IPv6 (ttl is mandatory) */
make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
@@ -294,10 +294,10 @@ test_cfmt_connected_cells(void *arg)
"\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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET6);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "2607:f8b0:400c:c02::68");
+ tt_int_op(ttl, OP_EQ, 600);
/* IPv6 (ttl too big) */
make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
@@ -307,17 +307,17 @@ test_cfmt_connected_cells(void *arg)
"\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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET6);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "2607:f8b0:400c:c02::68");
+ tt_int_op(ttl, OP_EQ, -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);
+ tt_int_op(r, OP_EQ, -1);
/* Bogus family: 7. */
make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
@@ -327,7 +327,7 @@ test_cfmt_connected_cells(void *arg)
"\x90\x00\x02\x58", 25);
relay_header_unpack(&rh, cell.payload);
r = connected_cell_parse(&rh, &cell, &addr, &ttl);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Truncated IPv6. */
make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
@@ -337,7 +337,7 @@ test_cfmt_connected_cells(void *arg)
"\x00\x00\x02", 24);
relay_header_unpack(&rh, cell.payload);
r = connected_cell_parse(&rh, &cell, &addr, &ttl);
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
/* Now make sure we can generate connected cells correctly. */
/* Try an IPv4 address */
@@ -346,16 +346,16 @@ test_cfmt_connected_cells(void *arg)
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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "30.40.50.60");
+ tt_int_op(ttl, OP_EQ, 128);
/* Try an IPv6 address */
memset(&rh, 0, sizeof(rh));
@@ -363,7 +363,7 @@ test_cfmt_connected_cells(void *arg)
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);
+ tt_int_op(rh.length, OP_EQ, 25);
test_memeq_hex(cell.payload + RELAY_HEADER_SIZE,
"00000000" "06"
"2620000006b0000b1a1a000026e5480e" "00000e10");
@@ -371,10 +371,10 @@ test_cfmt_connected_cells(void *arg)
/* 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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET6);
+ tt_str_op(fmt_addr(&addr), OP_EQ, "2620:0:6b0:b:1a1a:0:26e5:480e");
+ tt_int_op(ttl, OP_EQ, 3600);
done:
tor_free(mem_op_hex_tmp);
@@ -398,14 +398,14 @@ test_cfmt_create_cells(void *arg)
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);
- tt_mem_op(cc.onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
- tt_int_op(0, ==, create_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE, OP_EQ, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_TAP, OP_EQ, cc.handshake_type);
+ tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.onionskin,OP_EQ, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
+ tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create_fast cell. */
memset(&cell, 0, sizeof(cell));
@@ -413,14 +413,14 @@ test_cfmt_create_cells(void *arg)
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);
- tt_mem_op(cc.onionskin,==, b, CREATE_FAST_LEN + 10);
- tt_int_op(0, ==, create_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE_FAST, OP_EQ, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_FAST, OP_EQ, cc.handshake_type);
+ tt_int_op(CREATE_FAST_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.onionskin,OP_EQ, b, CREATE_FAST_LEN + 10);
+ tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create2 cell with a TAP payload */
memset(&cell, 0, sizeof(cell));
@@ -429,14 +429,14 @@ test_cfmt_create_cells(void *arg)
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);
- tt_mem_op(cc.onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
- tt_int_op(0, ==, create_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE2, OP_EQ, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_TAP, OP_EQ, cc.handshake_type);
+ tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.onionskin,OP_EQ, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
+ tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create2 cell with an ntor payload */
memset(&cell, 0, sizeof(cell));
@@ -445,18 +445,14 @@ test_cfmt_create_cells(void *arg)
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);
- tt_mem_op(cc.onionskin,==, b, NTOR_ONIONSKIN_LEN + 10);
- tt_int_op(0, ==, create_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
-#else
- tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
-#endif
+ tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE2, OP_EQ, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, OP_EQ, cc.handshake_type);
+ tt_int_op(NTOR_ONIONSKIN_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN + 10);
+ tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create cell with an ntor payload, in legacy format. */
memset(&cell, 0, sizeof(cell));
@@ -465,42 +461,38 @@ test_cfmt_create_cells(void *arg)
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);
- tt_mem_op(cc.onionskin,==, b, NTOR_ONIONSKIN_LEN + 10);
- tt_int_op(0, ==, create_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
-#else
- tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
-#endif
+ tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE, OP_EQ, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, OP_EQ, cc.handshake_type);
+ tt_int_op(NTOR_ONIONSKIN_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN + 10);
+ tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* == 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, create_cell_format(&cell2, &cc));
/* == Try formatting a create2 cell we don't understand. XXXX */
@@ -524,13 +516,13 @@ test_cfmt_created_cells(void *arg)
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);
- tt_mem_op(cc.reply,==, b, TAP_ONIONSKIN_REPLY_LEN + 10);
- tt_int_op(0, ==, created_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED, OP_EQ, cc.cell_type);
+ tt_int_op(TAP_ONIONSKIN_REPLY_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.reply,OP_EQ, b, TAP_ONIONSKIN_REPLY_LEN + 10);
+ tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A good CREATED_FAST cell */
memset(&cell, 0, sizeof(cell));
@@ -538,13 +530,13 @@ test_cfmt_created_cells(void *arg)
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);
- tt_mem_op(cc.reply,==, b, CREATED_FAST_LEN + 10);
- tt_int_op(0, ==, created_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED_FAST, OP_EQ, cc.cell_type);
+ tt_int_op(CREATED_FAST_LEN, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.reply,OP_EQ, b, CREATED_FAST_LEN + 10);
+ tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A good CREATED2 cell with short reply */
memset(&cell, 0, sizeof(cell));
@@ -553,13 +545,13 @@ test_cfmt_created_cells(void *arg)
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);
- tt_mem_op(cc.reply,==, b, 80);
- tt_int_op(0, ==, created_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED2, OP_EQ, cc.cell_type);
+ tt_int_op(64, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.reply,OP_EQ, b, 80);
+ tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* A good CREATED2 cell with maximal reply */
memset(&cell, 0, sizeof(cell));
@@ -568,13 +560,13 @@ test_cfmt_created_cells(void *arg)
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);
- tt_mem_op(cc.reply,==, b, 496);
- tt_int_op(0, ==, created_cell_format(&cell2, &cc));
- tt_int_op(cell.command, ==, cell2.command);
- tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED2, OP_EQ, cc.cell_type);
+ tt_int_op(496, OP_EQ, cc.handshake_len);
+ tt_mem_op(cc.reply,OP_EQ, b, 496);
+ tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, OP_EQ, cell2.command);
+ tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE);
/* Bogus CREATED2 cell: too long! */
memset(&cell, 0, sizeof(cell));
@@ -582,11 +574,11 @@ test_cfmt_created_cells(void *arg)
crypto_rand((char*)b, 496);
cell.command = CELL_CREATED2;
memcpy(cell.payload, "\x01\xF1", 2);
- tt_int_op(-1, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(-1, OP_EQ, created_cell_parse(&cc, &cell));
/* Unformattable CREATED2 cell: too long! */
cc.handshake_len = 497;
- tt_int_op(-1, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(-1, OP_EQ, created_cell_format(&cell2, &cc));
done:
;
@@ -614,21 +606,21 @@ test_cfmt_extend_cells(void *arg)
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,
+ tt_int_op(0, OP_EQ, 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));
- tt_mem_op(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);
- tt_mem_op(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);
- tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE);
+ tt_int_op(RELAY_COMMAND_EXTEND, OP_EQ, ec.cell_type);
+ tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(258, OP_EQ, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, OP_EQ, tor_addr_family(&ec.orport_ipv6.addr));
+ tt_mem_op(ec.node_id,OP_EQ, "electroencephalogram", 20);
+ tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE);
+ tt_int_op(cc->handshake_type, OP_EQ, ONION_HANDSHAKE_TYPE_TAP);
+ tt_int_op(cc->handshake_len, OP_EQ, TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_mem_op(cc->onionskin,OP_EQ, b, TAP_ONIONSKIN_CHALLENGE_LEN+20);
+ tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND);
+ tt_int_op(p2_len, OP_EQ, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_mem_op(p2,OP_EQ, p, RELAY_PAYLOAD_SIZE);
/* Let's do an ntor stuffed in a legacy EXTEND cell */
memset(p, 0, sizeof(p));
@@ -638,22 +630,22 @@ test_cfmt_extend_cells(void *arg)
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,
+ tt_int_op(0, OP_EQ, 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));
- tt_mem_op(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);
- tt_mem_op(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);
- tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE);
- tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
+ tt_int_op(RELAY_COMMAND_EXTEND, OP_EQ, ec.cell_type);
+ tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(258, OP_EQ, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, OP_EQ, tor_addr_family(&ec.orport_ipv6.addr));
+ tt_mem_op(ec.node_id,OP_EQ, "electroencephalogram", 20);
+ tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, OP_EQ, ONION_HANDSHAKE_TYPE_NTOR);
+ tt_int_op(cc->handshake_len, OP_EQ, NTOR_ONIONSKIN_LEN);
+ tt_mem_op(cc->onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN+20);
+ tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND);
+ tt_int_op(p2_len, OP_EQ, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_mem_op(p2,OP_EQ, p, RELAY_PAYLOAD_SIZE);
+ tt_int_op(0, OP_EQ, create_cell_format_relayed(&cell, cc));
/* Now let's do a minimal ntor EXTEND2 cell. */
memset(&ec, 0xff, sizeof(ec));
@@ -667,21 +659,21 @@ test_cfmt_extend_cells(void *arg)
/* 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,
+ tt_int_op(0, OP_EQ, 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));
- tt_mem_op(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);
- tt_mem_op(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);
- tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE);
+ tt_int_op(RELAY_COMMAND_EXTEND2, OP_EQ, ec.cell_type);
+ tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(61681, OP_EQ, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, OP_EQ, tor_addr_family(&ec.orport_ipv6.addr));
+ tt_mem_op(ec.node_id,OP_EQ, "anarchoindividualist", 20);
+ tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, OP_EQ, ONION_HANDSHAKE_TYPE_NTOR);
+ tt_int_op(cc->handshake_len, OP_EQ, NTOR_ONIONSKIN_LEN);
+ tt_mem_op(cc->onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN+20);
+ tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND2);
+ tt_int_op(p2_len, OP_EQ, 35+NTOR_ONIONSKIN_LEN);
+ tt_mem_op(p2,OP_EQ, p, RELAY_PAYLOAD_SIZE);
/* Now let's do a fanciful EXTEND2 cell. */
memset(&ec, 0xff, sizeof(ec));
@@ -700,21 +692,21 @@ test_cfmt_extend_cells(void *arg)
/* 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);
- tt_mem_op(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);
- tt_mem_op(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);
+ tt_int_op(0, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, 89+99));
+ tt_int_op(RELAY_COMMAND_EXTEND2, OP_EQ, ec.cell_type);
+ tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(61681, OP_EQ, ec.orport_ipv4.port);
+ tt_str_op("2002::f0:c51e", OP_EQ, fmt_addr(&ec.orport_ipv6.addr));
+ tt_int_op(4370, OP_EQ, ec.orport_ipv6.port);
+ tt_mem_op(ec.node_id,OP_EQ, "anthropomorphization", 20);
+ tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, OP_EQ, 0x105);
+ tt_int_op(cc->handshake_len, OP_EQ, 99);
+ tt_mem_op(cc->onionskin,OP_EQ, b, 99+20);
+ tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, OP_EQ, 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);
+ tt_int_op(p2_len, OP_EQ, 89+99-34-20);
test_memeq_hex(p2,
/* Two items: one that same darn IP address. */
"02000612F40001F0F1"
@@ -722,8 +714,8 @@ test_cfmt_extend_cells(void *arg)
"0214616e7468726f706f6d6f727068697a6174696f6e"
/* Now the handshake prologue */
"01050063");
- tt_mem_op(p2+1+8+22+4,==, b, 99+20);
- tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
+ tt_mem_op(p2+1+8+22+4,OP_EQ, b, 99+20);
+ tt_int_op(0, OP_EQ, create_cell_format_relayed(&cell, cc));
/* == Now try parsing some junk */
@@ -732,7 +724,7 @@ test_cfmt_extend_cells(void *arg)
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,
+ tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
p, sizeof(p)));
/* Try two identities. */
@@ -741,14 +733,14 @@ test_cfmt_extend_cells(void *arg)
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,
+ tt_int_op(-1, OP_EQ, 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,
+ tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
p, sizeof(p)));
/* Try a bad IPv4 address (too long, too short)*/
@@ -756,13 +748,13 @@ test_cfmt_extend_cells(void *arg)
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,
+ tt_int_op(-1, OP_EQ, 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,
+ tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
p, sizeof(p)));
/* IPv6 address (too long, too short, no IPv4)*/
@@ -771,28 +763,28 @@ test_cfmt_extend_cells(void *arg)
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,
+ tt_int_op(-1, OP_EQ, 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,
+ tt_int_op(-1, OP_EQ, 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,
+ tt_int_op(-1, OP_EQ, 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,
+ tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
p, sizeof(p)));
/* Fuzz, because why not. */
@@ -831,16 +823,16 @@ test_cfmt_extended_cells(void *arg)
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,
+ tt_int_op(0, OP_EQ, 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);
- tt_mem_op(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);
- tt_mem_op(p2,==, p, sizeof(p2));
+ tt_int_op(RELAY_COMMAND_EXTENDED, OP_EQ, ec.cell_type);
+ tt_int_op(cc->cell_type, OP_EQ, CELL_CREATED);
+ tt_int_op(cc->handshake_len, OP_EQ, TAP_ONIONSKIN_REPLY_LEN);
+ tt_mem_op(cc->reply,OP_EQ, b, TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, OP_EQ, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(RELAY_COMMAND_EXTENDED, OP_EQ, p2_cmd);
+ tt_int_op(TAP_ONIONSKIN_REPLY_LEN, OP_EQ, p2_len);
+ tt_mem_op(p2,OP_EQ, p, sizeof(p2));
/* Try an EXTENDED2 cell */
memset(&ec, 0xff, sizeof(ec));
@@ -849,25 +841,26 @@ test_cfmt_extended_cells(void *arg)
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);
- tt_mem_op(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);
- tt_mem_op(p2,==, p, sizeof(p2));
+ tt_int_op(0, OP_EQ,
+ extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42));
+ tt_int_op(RELAY_COMMAND_EXTENDED2, OP_EQ, ec.cell_type);
+ tt_int_op(cc->cell_type, OP_EQ, CELL_CREATED2);
+ tt_int_op(cc->handshake_len, OP_EQ, 42);
+ tt_mem_op(cc->reply,OP_EQ, b, 42+10);
+ tt_int_op(0, OP_EQ, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(RELAY_COMMAND_EXTENDED2, OP_EQ, p2_cmd);
+ tt_int_op(2+42, OP_EQ, p2_len);
+ tt_mem_op(p2,OP_EQ, p, sizeof(p2));
/* Try an almost-too-long EXTENDED2 cell */
memcpy(p, "\x01\xf0", 2);
- tt_int_op(0, ==,
+ tt_int_op(0, OP_EQ,
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, ==,
+ tt_int_op(-1, OP_EQ,
extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p)));
done:
@@ -911,22 +904,22 @@ test_cfmt_resolved_cells(void *arg)
/* 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.0.2.10");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 256);
CLEAR_ADDRS();
/* Cell with one ipv6 addr */
@@ -934,30 +927,30 @@ test_cfmt_resolved_cells(void *arg)
"\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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9090::f0f0:abcd");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 0x2000001);
CLEAR_ADDRS();
/* Cell with one hostname */
SET_CELL("\x00\x11"
"motherbrain.zebes"
"\x00\00\x00\x00");
- tt_int_op(rh.length, ==, 23);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_str_op(a->hostname, OP_EQ, "motherbrain.zebes");
+ tt_int_op(a->ttl, OP_EQ, 0);
CLEAR_ADDRS();
#define LONG_NAME \
@@ -966,51 +959,51 @@ test_cfmt_resolved_cells(void *arg)
"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);
+ tt_int_op(strlen(LONG_NAME), OP_EQ, 255);
SET_CELL("\x00\xff"
LONG_NAME
"\x00\01\x00\x00");
- tt_int_op(rh.length, ==, 261);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_str_op(a->hostname, OP_EQ, LONG_NAME);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, RESOLVED_TYPE_ERROR_TRANSIENT);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, RESOLVED_TYPE_ERROR);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 0);
CLEAR_ADDRS();
/* Cell with one of each */
@@ -1035,21 +1028,21 @@ test_cfmt_resolved_cells(void *arg)
"\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);
+ tt_int_op(errcode, OP_EQ, 0); /* no error reported; we got answers */
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9090::f0f0:abcd");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.0.2.10");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_str_op(a->hostname, OP_EQ, "motherbrain.zebes");
+ tt_int_op(a->ttl, OP_EQ, 0);
CLEAR_ADDRS();
/* Cell with several of similar type */
@@ -1067,29 +1060,29 @@ test_cfmt_resolved_cells(void *arg)
"\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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.0.2.10");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "8.8.8.8");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.176.2.176");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9000::cafe:f00d");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 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);
+ tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9001::fa:cade");
+ tt_ptr_op(a->hostname, OP_EQ, NULL);
+ tt_int_op(a->ttl, OP_EQ, 3);
CLEAR_ADDRS();
/* Full cell */
@@ -1099,22 +1092,22 @@ test_cfmt_resolved_cells(void *arg)
"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);
+ tt_int_op(strlen(LONG_NAME2), OP_EQ, 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);
+ tt_int_op(rh.length, OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 2);
a = smartlist_get(addrs, 0);
- tt_str_op(a->hostname, ==, LONG_NAME);
+ tt_str_op(a->hostname, OP_EQ, LONG_NAME);
a = smartlist_get(addrs, 1);
- tt_str_op(a->hostname, ==, LONG_NAME2);
+ tt_str_op(a->hostname, OP_EQ, LONG_NAME2);
CLEAR_ADDRS();
/* BAD CELLS */
@@ -1122,49 +1115,49 @@ test_cfmt_resolved_cells(void *arg)
/* 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(errcode, OP_EQ, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 0);
/* Item length extends beyond rh.length */
CLEAR_CELL();
@@ -1173,18 +1166,18 @@ test_cfmt_resolved_cells(void *arg)
"\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);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 0);
rh.length -= 5;
r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
- tt_int_op(r, ==, -1);
- tt_int_op(smartlist_len(addrs), ==, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 0);
SET_CELL("\xee\x10"
"\x20\x02\x90\x01\x00\x00\x00\x00"
@@ -1192,19 +1185,19 @@ test_cfmt_resolved_cells(void *arg)
"\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);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 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);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 0);
SET_CELL("\xee");
r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
- tt_int_op(r, ==, -1);
- tt_int_op(smartlist_len(addrs), ==, 0);
+ tt_int_op(r, OP_EQ, -1);
+ tt_int_op(smartlist_len(addrs), OP_EQ, 0);
done:
CLEAR_ADDRS();
@@ -1232,19 +1225,19 @@ test_cfmt_is_destroy(void *arg)
cell_pack(&packed, &cell, 0);
chan->wide_circ_ids = 0;
tt_assert(! packed_cell_is_destroy(chan, &packed, &circid));
- tt_int_op(circid, ==, 0);
+ tt_int_op(circid, OP_EQ, 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);
+ tt_int_op(circid, OP_EQ, 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);
+ tt_int_op(circid, OP_EQ, 3003);
circid = 0;
cell_pack(&packed, &cell, 1);
diff --git a/src/test/test_cell_queue.c b/src/test/test_cell_queue.c
index 3226f7b973..e2fc95ccd6 100644
--- a/src/test/test_cell_queue.c
+++ b/src/test/test_cell_queue.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define CIRCUITLIST_PRIVATE
@@ -21,7 +21,7 @@ test_cq_manip(void *arg)
#endif /* ENABLE_MEMPOOLS */
cell_queue_init(&cq);
- tt_int_op(cq.n, ==, 0);
+ tt_int_op(cq.n, OP_EQ, 0);
pc1 = packed_cell_new();
pc2 = packed_cell_new();
@@ -29,26 +29,26 @@ test_cq_manip(void *arg)
pc4 = packed_cell_new();
tt_assert(pc1 && pc2 && pc3 && pc4);
- tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+ tt_ptr_op(NULL, OP_EQ, 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);
+ tt_int_op(cq.n, OP_EQ, 1);
+ tt_ptr_op(pc1, OP_EQ, cell_queue_pop(&cq));
+ tt_int_op(cq.n, OP_EQ, 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));
+ tt_int_op(cq.n, OP_EQ, 4);
+ tt_ptr_op(pc4, OP_EQ, cell_queue_pop(&cq));
+ tt_ptr_op(pc3, OP_EQ, cell_queue_pop(&cq));
+ tt_ptr_op(pc2, OP_EQ, cell_queue_pop(&cq));
+ tt_ptr_op(pc1, OP_EQ, cell_queue_pop(&cq));
+ tt_int_op(cq.n, OP_EQ, 0);
+ tt_ptr_op(NULL, OP_EQ, 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.) */
@@ -64,32 +64,32 @@ test_cq_manip(void *arg)
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);
+ tt_int_op(cq.n, OP_EQ, 2);
pc_tmp = cell_queue_pop(&cq);
- tt_int_op(cq.n, ==, 1);
- tt_ptr_op(pc_tmp, !=, NULL);
- tt_mem_op(pc_tmp->body, ==, "\x12\x34\x56\x78\x0a", 5);
- tt_mem_op(pc_tmp->body+5, ==, cell.payload, sizeof(cell.payload));
+ tt_int_op(cq.n, OP_EQ, 1);
+ tt_ptr_op(pc_tmp, OP_NE, NULL);
+ tt_mem_op(pc_tmp->body, OP_EQ, "\x12\x34\x56\x78\x0a", 5);
+ tt_mem_op(pc_tmp->body+5, OP_EQ, 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);
- tt_mem_op(pc_tmp->body, ==, "\x20\x13\x0a", 3);
- tt_mem_op(pc_tmp->body+3, ==, cell.payload, sizeof(cell.payload));
+ tt_int_op(cq.n, OP_EQ, 0);
+ tt_ptr_op(pc_tmp, OP_NE, NULL);
+ tt_mem_op(pc_tmp->body, OP_EQ, "\x20\x13\x0a", 3);
+ tt_mem_op(pc_tmp->body+3, OP_EQ, cell.payload, sizeof(cell.payload));
packed_cell_free(pc_tmp);
pc_tmp = NULL;
- tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+ tt_ptr_op(NULL, OP_EQ, 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);
+ tt_int_op(cq.n, OP_EQ, 2);
cell_queue_clear(&cq);
pc2 = pc1 = NULL; /* prevent double-free */
- tt_int_op(cq.n, ==, 0);
+ tt_int_op(cq.n, OP_EQ, 0);
done:
packed_cell_free(pc1);
@@ -129,17 +129,17 @@ test_circuit_n_cells(void *arg)
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);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), OP_EQ, 0);
cell_queue_append(&or_c->p_chan_cells, pc1);
- tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 1);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), OP_EQ, 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(or_c)), OP_EQ, 3);
- tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 0);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), OP_EQ, 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);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), OP_EQ, 2);
done:
circuit_free(TO_CIRCUIT(or_c));
diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c
new file mode 100644
index 0000000000..6c520656e0
--- /dev/null
+++ b/src/test/test_checkdir.c
@@ -0,0 +1,140 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "or.h"
+#include <dirent.h>
+#include "config.h"
+#include "test.h"
+#include "util.h"
+
+#ifdef _WIN32
+#define mkdir(a,b) mkdir(a)
+#define tt_int_op_nowin(a,op,b) do { (void)(a); (void)(b); } while (0)
+#else
+#define tt_int_op_nowin(a,op,b) tt_int_op((a),op,(b))
+#endif
+
+/** Run unit tests for private dir permission enforcement logic. */
+static void
+test_checkdir_perms(void *testdata)
+{
+ (void)testdata;
+ or_options_t *options = get_options_mutable();
+ const char *subdir = "test_checkdir";
+ char *testdir = NULL;
+ cpd_check_t cpd_chkopts;
+ cpd_check_t unix_create_opts;
+ cpd_check_t unix_verify_optsmask;
+ struct stat st;
+
+ /* setup data directory before tests. */
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup(get_fname(subdir));
+ tt_int_op(mkdir(options->DataDirectory, 0750), OP_EQ, 0);
+
+ /* test: create new dir, no flags. */
+ testdir = get_datadir_fname("checkdir_new_none");
+ cpd_chkopts = CPD_CREATE;
+ unix_verify_optsmask = 0077;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: create new dir, CPD_GROUP_OK option set. */
+ testdir = get_datadir_fname("checkdir_new_groupok");
+ cpd_chkopts = CPD_CREATE|CPD_GROUP_OK;
+ unix_verify_optsmask = 0077;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: should get an error on existing dir with
+ wrong perms */
+ testdir = get_datadir_fname("checkdir_new_groupok_err");
+ tt_int_op(0, OP_EQ, mkdir(testdir, 027));
+ cpd_chkopts = CPD_CHECK_MODE_ONLY|CPD_CREATE|CPD_GROUP_OK;
+ tt_int_op_nowin(-1, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tor_free(testdir);
+
+ /* test: create new dir, CPD_GROUP_READ option set. */
+ testdir = get_datadir_fname("checkdir_new_groupread");
+ cpd_chkopts = CPD_CREATE|CPD_GROUP_READ;
+ unix_verify_optsmask = 0027;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: check existing dir created with defaults,
+ and verify with CPD_CREATE only. */
+ testdir = get_datadir_fname("checkdir_exists_none");
+ cpd_chkopts = CPD_CREATE;
+ unix_create_opts = 0700;
+ (void)unix_create_opts;
+ unix_verify_optsmask = 0077;
+ tt_int_op(0, OP_EQ, mkdir(testdir, unix_create_opts));
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: check existing dir created with defaults,
+ and verify with CPD_GROUP_OK option set. */
+ testdir = get_datadir_fname("checkdir_exists_groupok");
+ cpd_chkopts = CPD_CREATE;
+ unix_verify_optsmask = 0077;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ cpd_chkopts = CPD_GROUP_OK;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: check existing dir created with defaults,
+ and verify with CPD_GROUP_READ option set. */
+ testdir = get_datadir_fname("checkdir_exists_groupread");
+ cpd_chkopts = CPD_CREATE;
+ unix_verify_optsmask = 0027;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ cpd_chkopts = CPD_GROUP_READ;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: check existing dir created with CPD_GROUP_READ,
+ and verify with CPD_GROUP_OK option set. */
+ testdir = get_datadir_fname("checkdir_existsread_groupok");
+ cpd_chkopts = CPD_CREATE|CPD_GROUP_READ;
+ unix_verify_optsmask = 0027;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ cpd_chkopts = CPD_GROUP_OK;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+ tor_free(testdir);
+
+ /* test: check existing dir created with CPD_GROUP_READ,
+ and verify with CPD_GROUP_READ option set. */
+ testdir = get_datadir_fname("checkdir_existsread_groupread");
+ cpd_chkopts = CPD_CREATE|CPD_GROUP_READ;
+ unix_verify_optsmask = 0027;
+ tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL));
+ tt_int_op(0, OP_EQ, stat(testdir, &st));
+ tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask));
+
+ done:
+ tor_free(testdir);
+}
+
+#define CHECKDIR(name,flags) \
+ { #name, test_checkdir_##name, (flags), NULL, NULL }
+
+struct testcase_t checkdir_tests[] = {
+ CHECKDIR(perms, 0),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_circuitlist.c b/src/test/test_circuitlist.c
index e752eaf62a..181aec20a9 100644
--- a/src/test/test_circuitlist.c
+++ b/src/test/test_circuitlist.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define TOR_CHANNEL_INTERNAL_
@@ -50,17 +50,17 @@ circuitmux_detach_mock(circuitmux_t *cmux, circuit_t *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_)); \
+ tt_int_op(cam.ncalls, OP_EQ, 1); \
+ tt_ptr_op(cam.cmux, OP_EQ, (mux_)); \
+ tt_ptr_op(cam.circ, OP_EQ, (circ_)); \
+ tt_int_op(cam.dir, OP_EQ, (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_)); \
+ tt_int_op(cdm.ncalls, OP_EQ, 1); \
+ tt_ptr_op(cdm.cmux, OP_EQ, (mux_)); \
+ tt_ptr_op(cdm.circ, OP_EQ, (circ_)); \
memset(&cdm, 0, sizeof(cdm)); \
} while (0)
@@ -90,14 +90,14 @@ test_clist_maps(void *arg)
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);
+ tt_int_op(or_c1->p_circ_id, OP_EQ, 100);
+ tt_ptr_op(or_c1->p_chan, OP_EQ, 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);
+ tt_int_op(or_c2->p_circ_id, OP_EQ, 100);
+ tt_ptr_op(or_c2->p_chan, OP_EQ, ch1);
circuit_set_n_circid_chan(TO_CIRCUIT(or_c1), 200, ch1);
GOT_CMUX_ATTACH(ch1->cmux, or_c1, CELL_DIRECTION_OUT);
@@ -105,11 +105,11 @@ test_clist_maps(void *arg)
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));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch1), OP_EQ, TO_CIRCUIT(or_c1));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, TO_CIRCUIT(or_c2));
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), OP_EQ, 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_ptr_op(circuit_get_by_circid_channel(100, ch2), OP_EQ, TO_CIRCUIT(or_c1));
tt_assert(circuit_id_in_use_on_channel(100, ch2));
tt_assert(! circuit_id_in_use_on_channel(101, ch2));
@@ -117,9 +117,9 @@ test_clist_maps(void *arg)
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_ptr_op(circuit_get_by_circid_channel(100, ch2), OP_EQ, 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));
+ tt_ptr_op(circuit_get_by_circid_channel(500, ch3), OP_EQ, TO_CIRCUIT(or_c1));
/* Now let's see about destroy handling. */
tt_assert(! circuit_id_in_use_on_channel(205, ch2));
@@ -132,26 +132,26 @@ test_clist_maps(void *arg)
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));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, TO_CIRCUIT(or_c2));
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), OP_EQ, 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);
+ tt_int_op(cdm.ncalls, OP_EQ, 0);
circuit_free(TO_CIRCUIT(or_c2));
or_c2 = NULL; /* prevent free */
- tt_int_op(cdm.ncalls, ==, 2);
+ tt_int_op(cdm.ncalls, OP_EQ, 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);
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, NULL);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), OP_EQ, 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);
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, NULL);
channel_note_destroy_not_pending(ch1, 100);
- tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), OP_EQ, NULL);
tt_assert(! circuit_id_in_use_on_channel(200, ch2));
tt_assert(! circuit_id_in_use_on_channel(100, ch1));
@@ -190,73 +190,73 @@ test_rend_token_maps(void *arg)
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], ==, '.');
+ tt_int_op(tok1[REND_TOKEN_LEN-1], OP_EQ, 'y');
+ tt_int_op(tok2[REND_TOKEN_LEN-1], OP_EQ, ' ');
+ tt_int_op(tok3[REND_TOKEN_LEN-1], OP_EQ, '.');
/* No maps; nothing there. */
- tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
- tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok3));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok3));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok2));
+ tt_ptr_op(NULL, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, OP_EQ, 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));
+ tt_ptr_op(c1, OP_EQ, circuit_get_rendezvous(tok1));
+ tt_ptr_op(c2, OP_EQ, 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));
+ tt_ptr_op(c2, OP_EQ, circuit_get_intro_point(tok2));
+ tt_ptr_op(c3, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok2));
/* c3 -- are you still there? */
- tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2));
+ tt_ptr_op(c3, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok2));
+ tt_ptr_op(c3, OP_EQ, 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(c4, OP_EQ, circuit_get_intro_point(tok3));
- tt_ptr_op(c3->rendinfo, ==, NULL);
- tt_ptr_op(c4->rendinfo, !=, NULL);
- tt_mem_op(c4->rendinfo, ==, tok3, REND_TOKEN_LEN);
+ tt_ptr_op(c3->rendinfo, OP_EQ, NULL);
+ tt_ptr_op(c4->rendinfo, OP_NE, NULL);
+ tt_mem_op(c4->rendinfo, OP_EQ, 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));
+ tt_ptr_op(c4->rendinfo, OP_EQ, NULL);
+ tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok3));
done:
if (c1)
@@ -283,32 +283,32 @@ test_pick_circid(void *arg)
chan2->wide_circ_ids = 1;
chan1->circ_id_type = CIRC_ID_TYPE_NEITHER;
- tt_int_op(0, ==, get_unique_circ_id_by_chan(chan1));
+ tt_int_op(0, OP_EQ, 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));
+ tt_uint_op(0, OP_LT, circid);
+ tt_uint_op(circid, OP_LT, (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));
+ tt_uint_op((1<<15), OP_LT, circid);
+ tt_uint_op(circid, OP_LT, (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));
+ tt_uint_op(0, OP_LT, circid);
+ tt_uint_op(circid, OP_LT, (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);
+ tt_uint_op((1u<<31), OP_LT, circid);
}
/* Now make sure that we can behave well when we are full up on circuits */
@@ -319,20 +319,20 @@ test_pick_circid(void *arg)
for (i = 0; i < (1<<15); ++i) {
circid = get_unique_circ_id_by_chan(chan1);
if (circid == 0) {
- tt_int_op(i, >, (1<<14));
+ tt_int_op(i, OP_GT, (1<<14));
break;
}
- tt_uint_op(circid, <, (1<<15));
+ tt_uint_op(circid, OP_LT, (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));
+ tt_int_op(i, OP_LT, (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));
+ tt_uint_op(circid, OP_GT, 0);
+ tt_uint_op(circid, OP_LT, (1<<15));
channel_mark_circid_unusable(chan2, circid);
}
diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c
index c1c8f77641..e88d18f061 100644
--- a/src/test/test_circuitmux.c
+++ b/src/test/test_circuitmux.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define TOR_CHANNEL_INTERNAL_
@@ -58,21 +58,21 @@ test_cmux_destroy_cell_queue(void *arg)
circuitmux_append_destroy_cell(ch, cmux, 190, 6);
circuitmux_append_destroy_cell(ch, cmux, 30, 1);
- tt_int_op(circuitmux_num_cells(cmux), ==, 3);
+ tt_int_op(circuitmux_num_cells(cmux), OP_EQ, 3);
circ = circuitmux_get_first_active_circuit(cmux, &cq);
tt_assert(!circ);
tt_assert(cq);
- tt_int_op(cq->n, ==, 3);
+ tt_int_op(cq->n, OP_EQ, 3);
pc = cell_queue_pop(cq);
tt_assert(pc);
- tt_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9);
+ tt_mem_op(pc->body, OP_EQ, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9);
packed_cell_free(pc);
pc = NULL;
- tt_int_op(circuitmux_num_cells(cmux), ==, 2);
+ tt_int_op(circuitmux_num_cells(cmux), OP_EQ, 2);
done:
circuitmux_free(cmux);
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 6a91453e8c..dcb4e92c56 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -14,6 +14,8 @@
#include "test.h"
#include "util.h"
#include "address.h"
+#include "entrynodes.h"
+#include "transports.h"
static void
test_config_addressmap(void *arg)
@@ -63,22 +65,22 @@ test_config_addressmap(void *arg)
/* MapAddress .google.com .torserver.exit */
strlcpy(address, "reader.google.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "reader.torserver.exit");
+ tt_str_op(address,OP_EQ, "reader.torserver.exit");
/* MapAddress *.yahoo.com *.google.com.torserver.exit */
strlcpy(address, "reader.yahoo.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "reader.google.com.torserver.exit");
+ tt_str_op(address,OP_EQ, "reader.google.com.torserver.exit");
/*MapAddress *.cnn.com www.cnn.com */
strlcpy(address, "cnn.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "www.cnn.com");
+ tt_str_op(address,OP_EQ, "www.cnn.com");
/* MapAddress .cn.com www.cnn.com */
strlcpy(address, "www.cn.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "www.cnn.com");
+ tt_str_op(address,OP_EQ, "www.cnn.com");
/* MapAddress ex.com www.cnn.com - no match */
strlcpy(address, "www.ex.com", sizeof(address));
@@ -91,19 +93,19 @@ test_config_addressmap(void *arg)
/* Where mapping for FQDN match on FQDN */
strlcpy(address, "www.google.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "3.3.3.3");
+ tt_str_op(address,OP_EQ, "3.3.3.3");
strlcpy(address, "www.torproject.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "1.1.1.1");
+ tt_str_op(address,OP_EQ, "1.1.1.1");
strlcpy(address, "other.torproject.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "this.torproject.org.otherserver.exit");
+ tt_str_op(address,OP_EQ, "this.torproject.org.otherserver.exit");
strlcpy(address, "test.torproject.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "2.2.2.2");
+ tt_str_op(address,OP_EQ, "2.2.2.2");
/* Test a chain of address mappings and the order in which they were added:
"MapAddress www.example.org 4.4.4.4"
@@ -112,12 +114,12 @@ test_config_addressmap(void *arg)
*/
strlcpy(address, "www.example.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "5.5.5.5");
+ tt_str_op(address,OP_EQ, "5.5.5.5");
/* Test infinite address mapping results in no change */
strlcpy(address, "www.infiniteloop.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "www.infiniteloop.org");
+ tt_str_op(address,OP_EQ, "www.infiniteloop.org");
/* Test we don't find false positives */
strlcpy(address, "www.example.com", sizeof(address));
@@ -135,23 +137,23 @@ test_config_addressmap(void *arg)
strlcpy(address, "www.abc.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "www.abc.torserver.exit");
+ tt_str_op(address,OP_EQ, "www.abc.torserver.exit");
strlcpy(address, "www.def.com", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "www.def.torserver.exit");
+ tt_str_op(address,OP_EQ, "www.def.torserver.exit");
strlcpy(address, "www.torproject.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "1.1.1.1");
+ tt_str_op(address,OP_EQ, "1.1.1.1");
strlcpy(address, "test.torproject.org", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "1.1.1.1");
+ tt_str_op(address,OP_EQ, "1.1.1.1");
strlcpy(address, "torproject.net", sizeof(address));
tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
- tt_str_op(address,==, "2.2.2.2");
+ tt_str_op(address,OP_EQ, "2.2.2.2");
/* We don't support '*' as a mapping directive */
config_free_lines(get_options_mutable()->AddressMap);
@@ -211,9 +213,9 @@ test_config_check_or_create_data_subdir(void *arg)
subpath = get_datadir_fname(subdir);
#if defined (_WIN32)
- tt_int_op(mkdir(options->DataDirectory), ==, 0);
+ tt_int_op(mkdir(options->DataDirectory), OP_EQ, 0);
#else
- tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0);
+ tt_int_op(mkdir(options->DataDirectory, 0700), OP_EQ, 0);
#endif
r = stat(subpath, &st);
@@ -285,9 +287,9 @@ test_config_write_to_data_subdir(void *arg)
filepath = get_datadir_fname2(subdir, fname);
#if defined (_WIN32)
- tt_int_op(mkdir(options->DataDirectory), ==, 0);
+ tt_int_op(mkdir(options->DataDirectory), OP_EQ, 0);
#else
- tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0);
+ tt_int_op(mkdir(options->DataDirectory, 0700), OP_EQ, 0);
#endif
// Write attempt shoudl fail, if subdirectory doesn't exist.
@@ -298,13 +300,13 @@ test_config_write_to_data_subdir(void *arg)
// equal to the original string.
tt_assert(!write_to_data_subdir(subdir, fname, str, NULL));
cp = read_file_to_str(filepath, 0, NULL);
- tt_str_op(cp,==, str);
+ tt_str_op(cp,OP_EQ, str);
tor_free(cp);
// A second write operation should overwrite the old content.
tt_assert(!write_to_data_subdir(subdir, fname, str, NULL));
cp = read_file_to_str(filepath, 0, NULL);
- tt_str_op(cp,==, str);
+ tt_str_op(cp,OP_EQ, str);
tor_free(cp);
done:
@@ -329,7 +331,7 @@ good_bridge_line_test(const char *string, const char *test_addrport,
/* test addrport */
tmp = tor_strdup(fmt_addrport(&bridge_line->addr, bridge_line->port));
- tt_str_op(test_addrport,==, tmp);
+ tt_str_op(test_addrport,OP_EQ, tmp);
tor_free(tmp);
/* If we were asked to validate a digest, but we did not get a
@@ -347,7 +349,7 @@ good_bridge_line_test(const char *string, const char *test_addrport,
if (test_digest) {
tmp = tor_strdup(hex_str(bridge_line->digest, DIGEST_LEN));
tor_strlower(tmp);
- tt_str_op(test_digest,==, tmp);
+ tt_str_op(test_digest,OP_EQ, tmp);
tor_free(tmp);
}
@@ -358,7 +360,7 @@ good_bridge_line_test(const char *string, const char *test_addrport,
if (!test_transport && bridge_line->transport_name)
tt_assert(0);
if (test_transport)
- tt_str_op(test_transport,==, bridge_line->transport_name);
+ tt_str_op(test_transport,OP_EQ, bridge_line->transport_name);
/* Validate the SOCKS argument smartlist. */
if (test_socks_args && !bridge_line->socks_args)
@@ -552,6 +554,267 @@ test_config_parse_transport_options_line(void *arg)
}
}
+/* Mocks needed for the transport plugin line test */
+
+static void pt_kickstart_proxy_mock(const smartlist_t *transport_list,
+ char **proxy_argv, int is_server);
+static int transport_add_from_config_mock(const tor_addr_t *addr,
+ uint16_t port, const char *name,
+ int socks_ver);
+static int transport_is_needed_mock(const char *transport_name);
+
+static int pt_kickstart_proxy_mock_call_count = 0;
+static int transport_add_from_config_mock_call_count = 0;
+static int transport_is_needed_mock_call_count = 0;
+static int transport_is_needed_mock_return = 0;
+
+static void
+pt_kickstart_proxy_mock(const smartlist_t *transport_list,
+ char **proxy_argv, int is_server)
+{
+ (void) transport_list;
+ (void) proxy_argv;
+ (void) is_server;
+ /* XXXX check that args are as expected. */
+
+ ++pt_kickstart_proxy_mock_call_count;
+}
+
+static int
+transport_add_from_config_mock(const tor_addr_t *addr,
+ uint16_t port, const char *name,
+ int socks_ver)
+{
+ (void) addr;
+ (void) port;
+ (void) name;
+ (void) socks_ver;
+ /* XXXX check that args are as expected. */
+
+ ++transport_add_from_config_mock_call_count;
+
+ return 0;
+}
+
+static int
+transport_is_needed_mock(const char *transport_name)
+{
+ (void) transport_name;
+ /* XXXX check that arg is as expected. */
+
+ ++transport_is_needed_mock_call_count;
+
+ return transport_is_needed_mock_return;
+}
+
+/**
+ * Test parsing for the ClientTransportPlugin and ServerTransportPlugin config
+ * options.
+ */
+
+static void
+test_config_parse_transport_plugin_line(void *arg)
+{
+ (void)arg;
+
+ or_options_t *options = get_options_mutable();
+ int r, tmp;
+ int old_pt_kickstart_proxy_mock_call_count;
+ int old_transport_add_from_config_mock_call_count;
+ int old_transport_is_needed_mock_call_count;
+
+ /* Bad transport lines - too short */
+ r = parse_transport_line(options, "bad", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options, "bad", 1, 1);
+ tt_assert(r < 0);
+ r = parse_transport_line(options, "bad bad", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options, "bad bad", 1, 1);
+ tt_assert(r < 0);
+
+ /* Test transport list parsing */
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 1, 0);
+ tt_assert(r == 0);
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 1, 1);
+ tt_assert(r == 0);
+ r = parse_transport_line(options,
+ "transport_1,transport_2 exec /usr/bin/fake-transport", 1, 0);
+ tt_assert(r == 0);
+ r = parse_transport_line(options,
+ "transport_1,transport_2 exec /usr/bin/fake-transport", 1, 1);
+ tt_assert(r == 0);
+ /* Bad transport identifiers */
+ r = parse_transport_line(options,
+ "transport_* exec /usr/bin/fake-transport", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options,
+ "transport_* exec /usr/bin/fake-transport", 1, 1);
+ tt_assert(r < 0);
+
+ /* Check SOCKS cases for client transport */
+ r = parse_transport_line(options,
+ "transport_1 socks4 1.2.3.4:567", 1, 0);
+ tt_assert(r == 0);
+ r = parse_transport_line(options,
+ "transport_1 socks5 1.2.3.4:567", 1, 0);
+ tt_assert(r == 0);
+ /* Proxy case for server transport */
+ r = parse_transport_line(options,
+ "transport_1 proxy 1.2.3.4:567", 1, 1);
+ tt_assert(r == 0);
+ /* Multiple-transport error exit */
+ r = parse_transport_line(options,
+ "transport_1,transport_2 socks5 1.2.3.4:567", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options,
+ "transport_1,transport_2 proxy 1.2.3.4:567", 1, 1);
+ /* No port error exit */
+ r = parse_transport_line(options,
+ "transport_1 socks5 1.2.3.4", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options,
+ "transport_1 proxy 1.2.3.4", 1, 1);
+ tt_assert(r < 0);
+ /* Unparsable address error exit */
+ r = parse_transport_line(options,
+ "transport_1 socks5 1.2.3:6x7", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options,
+ "transport_1 proxy 1.2.3:6x7", 1, 1);
+ tt_assert(r < 0);
+
+ /* "Strange {Client|Server}TransportPlugin field" error exit */
+ r = parse_transport_line(options,
+ "transport_1 foo bar", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options,
+ "transport_1 foo bar", 1, 1);
+ tt_assert(r < 0);
+
+ /* No sandbox mode error exit */
+ tmp = options->Sandbox;
+ options->Sandbox = 1;
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 1, 0);
+ tt_assert(r < 0);
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 1, 1);
+ tt_assert(r < 0);
+ options->Sandbox = tmp;
+
+ /*
+ * These final test cases cover code paths that only activate without
+ * validate_only, so they need mocks in place.
+ */
+ MOCK(pt_kickstart_proxy, pt_kickstart_proxy_mock);
+ old_pt_kickstart_proxy_mock_call_count =
+ pt_kickstart_proxy_mock_call_count;
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 0, 1);
+ tt_assert(r == 0);
+ tt_assert(pt_kickstart_proxy_mock_call_count ==
+ old_pt_kickstart_proxy_mock_call_count + 1);
+ UNMOCK(pt_kickstart_proxy);
+
+ /* This one hits a log line in the !validate_only case only */
+ r = parse_transport_line(options,
+ "transport_1 proxy 1.2.3.4:567", 0, 1);
+ tt_assert(r == 0);
+
+ /* Check mocked client transport cases */
+ MOCK(pt_kickstart_proxy, pt_kickstart_proxy_mock);
+ MOCK(transport_add_from_config, transport_add_from_config_mock);
+ MOCK(transport_is_needed, transport_is_needed_mock);
+
+ /* Unnecessary transport case */
+ transport_is_needed_mock_return = 0;
+ old_pt_kickstart_proxy_mock_call_count =
+ pt_kickstart_proxy_mock_call_count;
+ old_transport_add_from_config_mock_call_count =
+ transport_add_from_config_mock_call_count;
+ old_transport_is_needed_mock_call_count =
+ transport_is_needed_mock_call_count;
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 0, 0);
+ /* Should have succeeded */
+ tt_assert(r == 0);
+ /* transport_is_needed() should have been called */
+ tt_assert(transport_is_needed_mock_call_count ==
+ old_transport_is_needed_mock_call_count + 1);
+ /*
+ * pt_kickstart_proxy() and transport_add_from_config() should
+ * not have been called.
+ */
+ tt_assert(pt_kickstart_proxy_mock_call_count ==
+ old_pt_kickstart_proxy_mock_call_count);
+ tt_assert(transport_add_from_config_mock_call_count ==
+ old_transport_add_from_config_mock_call_count);
+
+ /* Necessary transport case */
+ transport_is_needed_mock_return = 1;
+ old_pt_kickstart_proxy_mock_call_count =
+ pt_kickstart_proxy_mock_call_count;
+ old_transport_add_from_config_mock_call_count =
+ transport_add_from_config_mock_call_count;
+ old_transport_is_needed_mock_call_count =
+ transport_is_needed_mock_call_count;
+ r = parse_transport_line(options,
+ "transport_1 exec /usr/bin/fake-transport", 0, 0);
+ /* Should have succeeded */
+ tt_assert(r == 0);
+ /*
+ * transport_is_needed() and pt_kickstart_proxy() should have been
+ * called.
+ */
+ tt_assert(pt_kickstart_proxy_mock_call_count ==
+ old_pt_kickstart_proxy_mock_call_count + 1);
+ tt_assert(transport_is_needed_mock_call_count ==
+ old_transport_is_needed_mock_call_count + 1);
+ /* transport_add_from_config() should not have been called. */
+ tt_assert(transport_add_from_config_mock_call_count ==
+ old_transport_add_from_config_mock_call_count);
+
+ /* proxy case */
+ transport_is_needed_mock_return = 1;
+ old_pt_kickstart_proxy_mock_call_count =
+ pt_kickstart_proxy_mock_call_count;
+ old_transport_add_from_config_mock_call_count =
+ transport_add_from_config_mock_call_count;
+ old_transport_is_needed_mock_call_count =
+ transport_is_needed_mock_call_count;
+ r = parse_transport_line(options,
+ "transport_1 socks5 1.2.3.4:567", 0, 0);
+ /* Should have succeeded */
+ tt_assert(r == 0);
+ /*
+ * transport_is_needed() and transport_add_from_config() should have
+ * been called.
+ */
+ tt_assert(transport_add_from_config_mock_call_count ==
+ old_transport_add_from_config_mock_call_count + 1);
+ tt_assert(transport_is_needed_mock_call_count ==
+ old_transport_is_needed_mock_call_count + 1);
+ /* pt_kickstart_proxy() should not have been called. */
+ tt_assert(pt_kickstart_proxy_mock_call_count ==
+ old_pt_kickstart_proxy_mock_call_count);
+
+ /* Done with mocked client transport cases */
+ UNMOCK(transport_is_needed);
+ UNMOCK(transport_add_from_config);
+ UNMOCK(pt_kickstart_proxy);
+
+ done:
+ /* Make sure we undo all mocks */
+ UNMOCK(pt_kickstart_proxy);
+ UNMOCK(transport_add_from_config);
+ UNMOCK(transport_is_needed);
+
+ return;
+}
+
// Tests if an options with MyFamily fingerprints missing '$' normalises
// them correctly and also ensure it also works with multiple fingerprints
static void
@@ -576,7 +839,8 @@ test_config_fix_my_family(void *arg)
TT_FAIL(("options_validate failed: %s", err));
}
- tt_str_op(options->MyFamily,==, "$1111111111111111111111111111111111111111, "
+ tt_str_op(options->MyFamily,OP_EQ,
+ "$1111111111111111111111111111111111111111, "
"$1111111111111111111111111111111111111112, "
"$1111111111111111111111111111111111111113");
@@ -596,6 +860,7 @@ struct testcase_t config_tests[] = {
CONFIG_TEST(addressmap, 0),
CONFIG_TEST(parse_bridge_line, 0),
CONFIG_TEST(parse_transport_options_line, 0),
+ CONFIG_TEST(parse_transport_plugin_line, TT_FORK),
CONFIG_TEST(check_or_create_data_subdir, TT_FORK),
CONFIG_TEST(write_to_data_subdir, TT_FORK),
CONFIG_TEST(fix_my_family, 0),
diff --git a/src/test/test_containers.c b/src/test/test_containers.c
index 24211dd580..1eb8c15fd5 100644
--- a/src/test/test_containers.c
+++ b/src/test/test_containers.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -62,18 +62,18 @@ test_container_smartlist_basic(void *arg)
smartlist_insert(sl, 1, v22);
smartlist_insert(sl, 0, v0);
smartlist_insert(sl, 5, v555);
- tt_ptr_op(v0,==, smartlist_get(sl,0));
- tt_ptr_op(v1,==, smartlist_get(sl,1));
- tt_ptr_op(v22,==, smartlist_get(sl,2));
- tt_ptr_op(v3,==, smartlist_get(sl,3));
- tt_ptr_op(v4,==, smartlist_get(sl,4));
- tt_ptr_op(v555,==, smartlist_get(sl,5));
+ tt_ptr_op(v0,OP_EQ, smartlist_get(sl,0));
+ tt_ptr_op(v1,OP_EQ, smartlist_get(sl,1));
+ tt_ptr_op(v22,OP_EQ, smartlist_get(sl,2));
+ tt_ptr_op(v3,OP_EQ, smartlist_get(sl,3));
+ tt_ptr_op(v4,OP_EQ, smartlist_get(sl,4));
+ tt_ptr_op(v555,OP_EQ, smartlist_get(sl,5));
/* Try deleting in the middle. */
smartlist_del(sl, 1);
- tt_ptr_op(v555,==, smartlist_get(sl, 1));
+ tt_ptr_op(v555,OP_EQ, smartlist_get(sl, 1));
/* Try deleting at the end. */
smartlist_del(sl, 4);
- tt_int_op(4,==, smartlist_len(sl));
+ tt_int_op(4,OP_EQ, smartlist_len(sl));
/* test isin. */
tt_assert(smartlist_contains(sl, v3));
@@ -101,119 +101,119 @@ test_container_smartlist_strings(void *arg)
/* Test split and join */
(void)arg;
- tt_int_op(0,==, smartlist_len(sl));
+ tt_int_op(0,OP_EQ, smartlist_len(sl));
smartlist_split_string(sl, "abc", ":", 0, 0);
- tt_int_op(1,==, smartlist_len(sl));
- tt_str_op("abc",==, smartlist_get(sl, 0));
+ tt_int_op(1,OP_EQ, smartlist_len(sl));
+ tt_str_op("abc",OP_EQ, smartlist_get(sl, 0));
smartlist_split_string(sl, "a::bc::", "::", 0, 0);
- tt_int_op(4,==, smartlist_len(sl));
- tt_str_op("a",==, smartlist_get(sl, 1));
- tt_str_op("bc",==, smartlist_get(sl, 2));
- tt_str_op("",==, smartlist_get(sl, 3));
+ tt_int_op(4,OP_EQ, smartlist_len(sl));
+ tt_str_op("a",OP_EQ, smartlist_get(sl, 1));
+ tt_str_op("bc",OP_EQ, smartlist_get(sl, 2));
+ tt_str_op("",OP_EQ, smartlist_get(sl, 3));
cp_alloc = smartlist_join_strings(sl, "", 0, NULL);
- tt_str_op(cp_alloc,==, "abcabc");
+ tt_str_op(cp_alloc,OP_EQ, "abcabc");
tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "!", 0, NULL);
- tt_str_op(cp_alloc,==, "abc!a!bc!");
+ tt_str_op(cp_alloc,OP_EQ, "abc!a!bc!");
tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL);
- tt_str_op(cp_alloc,==, "abcXYaXYbcXY");
+ tt_str_op(cp_alloc,OP_EQ, "abcXYaXYbcXY");
tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL);
- tt_str_op(cp_alloc,==, "abcXYaXYbcXYXY");
+ tt_str_op(cp_alloc,OP_EQ, "abcXYaXYbcXYXY");
tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "", 1, NULL);
- tt_str_op(cp_alloc,==, "abcabc");
+ tt_str_op(cp_alloc,OP_EQ, "abcabc");
tor_free(cp_alloc);
smartlist_split_string(sl, "/def/ /ghijk", "/", 0, 0);
- tt_int_op(8,==, smartlist_len(sl));
- tt_str_op("",==, smartlist_get(sl, 4));
- tt_str_op("def",==, smartlist_get(sl, 5));
- tt_str_op(" ",==, smartlist_get(sl, 6));
- tt_str_op("ghijk",==, smartlist_get(sl, 7));
+ tt_int_op(8,OP_EQ, smartlist_len(sl));
+ tt_str_op("",OP_EQ, smartlist_get(sl, 4));
+ tt_str_op("def",OP_EQ, smartlist_get(sl, 5));
+ tt_str_op(" ",OP_EQ, smartlist_get(sl, 6));
+ tt_str_op("ghijk",OP_EQ, smartlist_get(sl, 7));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
smartlist_split_string(sl, "a,bbd,cdef", ",", SPLIT_SKIP_SPACE, 0);
- tt_int_op(3,==, smartlist_len(sl));
- tt_str_op("a",==, smartlist_get(sl,0));
- tt_str_op("bbd",==, smartlist_get(sl,1));
- tt_str_op("cdef",==, smartlist_get(sl,2));
+ tt_int_op(3,OP_EQ, smartlist_len(sl));
+ tt_str_op("a",OP_EQ, smartlist_get(sl,0));
+ tt_str_op("bbd",OP_EQ, smartlist_get(sl,1));
+ tt_str_op("cdef",OP_EQ, smartlist_get(sl,2));
smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>",
SPLIT_SKIP_SPACE, 0);
- tt_int_op(8,==, smartlist_len(sl));
- tt_str_op("z",==, smartlist_get(sl,3));
- tt_str_op("zhasd",==, smartlist_get(sl,4));
- tt_str_op("",==, smartlist_get(sl,5));
- tt_str_op("bnud",==, smartlist_get(sl,6));
- tt_str_op("",==, smartlist_get(sl,7));
+ tt_int_op(8,OP_EQ, smartlist_len(sl));
+ tt_str_op("z",OP_EQ, smartlist_get(sl,3));
+ tt_str_op("zhasd",OP_EQ, smartlist_get(sl,4));
+ tt_str_op("",OP_EQ, smartlist_get(sl,5));
+ tt_str_op("bnud",OP_EQ, smartlist_get(sl,6));
+ tt_str_op("",OP_EQ, smartlist_get(sl,7));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
smartlist_split_string(sl, " ab\tc \td ef ", NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- tt_int_op(4,==, smartlist_len(sl));
- tt_str_op("ab",==, smartlist_get(sl,0));
- tt_str_op("c",==, smartlist_get(sl,1));
- tt_str_op("d",==, smartlist_get(sl,2));
- tt_str_op("ef",==, smartlist_get(sl,3));
+ tt_int_op(4,OP_EQ, smartlist_len(sl));
+ tt_str_op("ab",OP_EQ, smartlist_get(sl,0));
+ tt_str_op("c",OP_EQ, smartlist_get(sl,1));
+ tt_str_op("d",OP_EQ, smartlist_get(sl,2));
+ tt_str_op("ef",OP_EQ, smartlist_get(sl,3));
smartlist_split_string(sl, "ghi\tj", NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- tt_int_op(6,==, smartlist_len(sl));
- tt_str_op("ghi",==, smartlist_get(sl,4));
- tt_str_op("j",==, smartlist_get(sl,5));
+ tt_int_op(6,OP_EQ, smartlist_len(sl));
+ tt_str_op("ghi",OP_EQ, smartlist_get(sl,4));
+ tt_str_op("j",OP_EQ, smartlist_get(sl,5));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL);
- tt_str_op(cp_alloc,==, "");
+ tt_str_op(cp_alloc,OP_EQ, "");
tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL);
- tt_str_op(cp_alloc,==, "XY");
+ tt_str_op(cp_alloc,OP_EQ, "XY");
tor_free(cp_alloc);
smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- tt_int_op(3,==, smartlist_len(sl));
- tt_str_op("z",==, smartlist_get(sl, 0));
- tt_str_op("zhasd",==, smartlist_get(sl, 1));
- tt_str_op("bnud",==, smartlist_get(sl, 2));
+ tt_int_op(3,OP_EQ, smartlist_len(sl));
+ tt_str_op("z",OP_EQ, smartlist_get(sl, 0));
+ tt_str_op("zhasd",OP_EQ, smartlist_get(sl, 1));
+ tt_str_op("bnud",OP_EQ, smartlist_get(sl, 2));
smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 2);
- tt_int_op(5,==, smartlist_len(sl));
- tt_str_op("z",==, smartlist_get(sl, 3));
- tt_str_op("zhasd <> <> bnud<>",==, smartlist_get(sl, 4));
+ tt_int_op(5,OP_EQ, smartlist_len(sl));
+ tt_str_op("z",OP_EQ, smartlist_get(sl, 3));
+ tt_str_op("zhasd <> <> bnud<>",OP_EQ, smartlist_get(sl, 4));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
smartlist_split_string(sl, "abcd\n", "\n",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- tt_int_op(1,==, smartlist_len(sl));
- tt_str_op("abcd",==, smartlist_get(sl, 0));
+ tt_int_op(1,OP_EQ, smartlist_len(sl));
+ tt_str_op("abcd",OP_EQ, smartlist_get(sl, 0));
smartlist_split_string(sl, "efgh", "\n",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- tt_int_op(2,==, smartlist_len(sl));
- tt_str_op("efgh",==, smartlist_get(sl, 1));
+ tt_int_op(2,OP_EQ, smartlist_len(sl));
+ tt_str_op("efgh",OP_EQ, smartlist_get(sl, 1));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* Test swapping, shuffling, and sorting. */
smartlist_split_string(sl, "the,onion,router,by,arma,and,nickm", ",", 0, 0);
- tt_int_op(7,==, smartlist_len(sl));
+ tt_int_op(7,OP_EQ, smartlist_len(sl));
smartlist_sort(sl, compare_strs_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
- tt_str_op(cp_alloc,==, "and,arma,by,nickm,onion,router,the");
+ tt_str_op(cp_alloc,OP_EQ, "and,arma,by,nickm,onion,router,the");
tor_free(cp_alloc);
smartlist_swap(sl, 1, 5);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
- tt_str_op(cp_alloc,==, "and,router,by,nickm,onion,arma,the");
+ tt_str_op(cp_alloc,OP_EQ, "and,router,by,nickm,onion,arma,the");
tor_free(cp_alloc);
smartlist_shuffle(sl);
- tt_int_op(7,==, smartlist_len(sl));
+ tt_int_op(7,OP_EQ, smartlist_len(sl));
tt_assert(smartlist_contains_string(sl, "and"));
tt_assert(smartlist_contains_string(sl, "router"));
tt_assert(smartlist_contains_string(sl, "by"));
@@ -224,69 +224,72 @@ test_container_smartlist_strings(void *arg)
/* Test bsearch. */
smartlist_sort(sl, compare_strs_);
- tt_str_op("nickm",==, smartlist_bsearch(sl, "zNicKM",
+ tt_str_op("nickm",OP_EQ, smartlist_bsearch(sl, "zNicKM",
cmp_without_first_));
- tt_str_op("and",==,
+ tt_str_op("and",OP_EQ,
smartlist_bsearch(sl, " AND", cmp_without_first_));
- tt_ptr_op(NULL,==, smartlist_bsearch(sl, " ANz", cmp_without_first_));
+ tt_ptr_op(NULL,OP_EQ, smartlist_bsearch(sl, " ANz", cmp_without_first_));
/* Test bsearch_idx */
{
int f;
smartlist_t *tmp = NULL;
- tt_int_op(0,==,smartlist_bsearch_idx(sl," aaa",cmp_without_first_,&f));
- tt_int_op(f,==, 0);
- tt_int_op(0,==, smartlist_bsearch_idx(sl," and",cmp_without_first_,&f));
- tt_int_op(f,==, 1);
- tt_int_op(1,==, smartlist_bsearch_idx(sl," arm",cmp_without_first_,&f));
- tt_int_op(f,==, 0);
- tt_int_op(1,==, smartlist_bsearch_idx(sl," arma",cmp_without_first_,&f));
- tt_int_op(f,==, 1);
- tt_int_op(2,==, smartlist_bsearch_idx(sl," armb",cmp_without_first_,&f));
- tt_int_op(f,==, 0);
- tt_int_op(7,==, smartlist_bsearch_idx(sl," zzzz",cmp_without_first_,&f));
- tt_int_op(f,==, 0);
+ tt_int_op(0,OP_EQ,smartlist_bsearch_idx(sl," aaa",cmp_without_first_,&f));
+ tt_int_op(f,OP_EQ, 0);
+ tt_int_op(0,OP_EQ, smartlist_bsearch_idx(sl," and",cmp_without_first_,&f));
+ tt_int_op(f,OP_EQ, 1);
+ tt_int_op(1,OP_EQ, smartlist_bsearch_idx(sl," arm",cmp_without_first_,&f));
+ tt_int_op(f,OP_EQ, 0);
+ tt_int_op(1,OP_EQ,
+ smartlist_bsearch_idx(sl," arma",cmp_without_first_,&f));
+ tt_int_op(f,OP_EQ, 1);
+ tt_int_op(2,OP_EQ,
+ smartlist_bsearch_idx(sl," armb",cmp_without_first_,&f));
+ tt_int_op(f,OP_EQ, 0);
+ tt_int_op(7,OP_EQ,
+ smartlist_bsearch_idx(sl," zzzz",cmp_without_first_,&f));
+ tt_int_op(f,OP_EQ, 0);
/* Test trivial cases for list of length 0 or 1 */
tmp = smartlist_new();
- tt_int_op(0,==, smartlist_bsearch_idx(tmp, "foo",
+ tt_int_op(0,OP_EQ, smartlist_bsearch_idx(tmp, "foo",
compare_strs_for_bsearch_, &f));
- tt_int_op(f,==, 0);
+ tt_int_op(f,OP_EQ, 0);
smartlist_insert(tmp, 0, (void *)("bar"));
- tt_int_op(1,==, smartlist_bsearch_idx(tmp, "foo",
+ tt_int_op(1,OP_EQ, smartlist_bsearch_idx(tmp, "foo",
compare_strs_for_bsearch_, &f));
- tt_int_op(f,==, 0);
- tt_int_op(0,==, smartlist_bsearch_idx(tmp, "aaa",
+ tt_int_op(f,OP_EQ, 0);
+ tt_int_op(0,OP_EQ, smartlist_bsearch_idx(tmp, "aaa",
compare_strs_for_bsearch_, &f));
- tt_int_op(f,==, 0);
- tt_int_op(0,==, smartlist_bsearch_idx(tmp, "bar",
+ tt_int_op(f,OP_EQ, 0);
+ tt_int_op(0,OP_EQ, smartlist_bsearch_idx(tmp, "bar",
compare_strs_for_bsearch_, &f));
- tt_int_op(f,==, 1);
+ tt_int_op(f,OP_EQ, 1);
/* ... and one for length 2 */
smartlist_insert(tmp, 1, (void *)("foo"));
- tt_int_op(1,==, smartlist_bsearch_idx(tmp, "foo",
+ tt_int_op(1,OP_EQ, smartlist_bsearch_idx(tmp, "foo",
compare_strs_for_bsearch_, &f));
- tt_int_op(f,==, 1);
- tt_int_op(2,==, smartlist_bsearch_idx(tmp, "goo",
+ tt_int_op(f,OP_EQ, 1);
+ tt_int_op(2,OP_EQ, smartlist_bsearch_idx(tmp, "goo",
compare_strs_for_bsearch_, &f));
- tt_int_op(f,==, 0);
+ tt_int_op(f,OP_EQ, 0);
smartlist_free(tmp);
}
/* Test reverse() and pop_last() */
smartlist_reverse(sl);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
- tt_str_op(cp_alloc,==, "the,router,onion,nickm,by,arma,and");
+ tt_str_op(cp_alloc,OP_EQ, "the,router,onion,nickm,by,arma,and");
tor_free(cp_alloc);
cp_alloc = smartlist_pop_last(sl);
- tt_str_op(cp_alloc,==, "and");
+ tt_str_op(cp_alloc,OP_EQ, "and");
tor_free(cp_alloc);
- tt_int_op(smartlist_len(sl),==, 6);
+ tt_int_op(smartlist_len(sl),OP_EQ, 6);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
cp_alloc = smartlist_pop_last(sl);
- tt_ptr_op(cp_alloc,==, NULL);
+ tt_ptr_op(cp_alloc,OP_EQ, NULL);
/* Test uniq() */
smartlist_split_string(sl,
@@ -295,7 +298,7 @@ test_container_smartlist_strings(void *arg)
smartlist_sort(sl, compare_strs_);
smartlist_uniq(sl, compare_strs_, tor_free_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
- tt_str_op(cp_alloc,==, "50,a,canal,man,noon,panama,plan,radar");
+ tt_str_op(cp_alloc,OP_EQ, "50,a,canal,man,noon,panama,plan,radar");
tor_free(cp_alloc);
/* Test contains_string, contains_string_case and contains_int_as_string */
@@ -331,17 +334,17 @@ test_container_smartlist_strings(void *arg)
"Some say the Earth will end in ice and some in fire",
" ", 0, 0);
cp = smartlist_get(sl, 4);
- tt_str_op(cp,==, "will");
+ tt_str_op(cp,OP_EQ, "will");
smartlist_add(sl, cp);
smartlist_remove(sl, cp);
tor_free(cp);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
- tt_str_op(cp_alloc,==, "Some,say,the,Earth,fire,end,in,ice,and,some,in");
+ tt_str_op(cp_alloc,OP_EQ, "Some,say,the,Earth,fire,end,in,ice,and,some,in");
tor_free(cp_alloc);
smartlist_string_remove(sl, "in");
cp_alloc = smartlist_join_strings2(sl, "+XX", 1, 0, &sz);
- tt_str_op(cp_alloc,==, "Some+say+the+Earth+fire+end+some+ice+and");
- tt_int_op((int)sz,==, 40);
+ tt_str_op(cp_alloc,OP_EQ, "Some+say+the+Earth+fire+end+some+ice+and");
+ tt_int_op((int)sz,OP_EQ, 40);
done:
@@ -369,7 +372,7 @@ test_container_smartlist_overlap(void *arg)
/* add_all */
smartlist_add_all(ints, odds);
smartlist_add_all(ints, evens);
- tt_int_op(smartlist_len(ints),==, 10);
+ tt_int_op(smartlist_len(ints),OP_EQ, 10);
smartlist_add(primes, (void*)2);
smartlist_add(primes, (void*)3);
@@ -385,7 +388,7 @@ test_container_smartlist_overlap(void *arg)
/* intersect */
smartlist_add_all(sl, odds);
smartlist_intersect(sl, primes);
- tt_int_op(smartlist_len(sl),==, 3);
+ tt_int_op(smartlist_len(sl),OP_EQ, 3);
tt_assert(smartlist_contains(sl, (void*)3));
tt_assert(smartlist_contains(sl, (void*)5));
tt_assert(smartlist_contains(sl, (void*)7));
@@ -393,7 +396,7 @@ test_container_smartlist_overlap(void *arg)
/* subtract */
smartlist_add_all(sl, primes);
smartlist_subtract(sl, odds);
- tt_int_op(smartlist_len(sl),==, 1);
+ tt_int_op(smartlist_len(sl),OP_EQ, 1);
tt_assert(smartlist_contains(sl, (void*)2));
done:
@@ -415,23 +418,23 @@ test_container_smartlist_digests(void *arg)
smartlist_add(sl, tor_memdup("AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
- tt_int_op(0,==, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA"));
+ tt_int_op(0,OP_EQ, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA"));
tt_assert(smartlist_contains_digest(sl, "AAAAAAAAAAAAAAAAAAAA"));
tt_assert(smartlist_contains_digest(sl, "\00090AAB2AAAAaasdAAAAA"));
- tt_int_op(0,==, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA"));
+ tt_int_op(0,OP_EQ, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA"));
/* sort digests */
smartlist_sort_digests(sl);
- tt_mem_op(smartlist_get(sl, 0),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
- tt_mem_op(smartlist_get(sl, 1),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
- tt_mem_op(smartlist_get(sl, 2),==, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN);
- tt_int_op(3,==, smartlist_len(sl));
+ tt_mem_op(smartlist_get(sl, 0),OP_EQ, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
+ tt_mem_op(smartlist_get(sl, 1),OP_EQ, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
+ tt_mem_op(smartlist_get(sl, 2),OP_EQ, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN);
+ tt_int_op(3,OP_EQ, smartlist_len(sl));
/* uniq_digests */
smartlist_uniq_digests(sl);
- tt_int_op(2,==, smartlist_len(sl));
- tt_mem_op(smartlist_get(sl, 0),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
- tt_mem_op(smartlist_get(sl, 1),==, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN);
+ tt_int_op(2,OP_EQ, smartlist_len(sl));
+ tt_mem_op(smartlist_get(sl, 0),OP_EQ, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
+ tt_mem_op(smartlist_get(sl, 1),OP_EQ, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN);
done:
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
@@ -463,7 +466,7 @@ test_container_smartlist_join(void *arg)
sl2, char *, cp2,
strcmp(cp1,cp2),
smartlist_add(sl3, cp2)) {
- tt_str_op(cp1,==, cp2);
+ tt_str_op(cp1,OP_EQ, cp2);
smartlist_add(sl4, cp1);
} SMARTLIST_FOREACH_JOIN_END(cp1, cp2);
@@ -474,10 +477,11 @@ test_container_smartlist_join(void *arg)
tt_assert(smartlist_contains(sl, cp) &&
smartlist_contains_string(sl2, cp)));
joined = smartlist_join_strings(sl3, ",", 0, NULL);
- tt_str_op(joined,==, "Anemias,Anemias,Crossbowmen,Work");
+ tt_str_op(joined,OP_EQ, "Anemias,Anemias,Crossbowmen,Work");
tor_free(joined);
joined = smartlist_join_strings(sl4, ",", 0, NULL);
- tt_str_op(joined,==, "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance,"
+ tt_str_op(joined,OP_EQ,
+ "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance,"
"Knish,Know,Manners,Manners,Maraschinos,Wombats,Wombats");
tor_free(joined);
@@ -612,7 +616,7 @@ test_container_digestset(void *arg)
if (digestset_contains(set, d))
++false_positives;
}
- tt_int_op(50, >, false_positives); /* Should be far lower. */
+ tt_int_op(50, OP_GT, false_positives); /* Should be far lower. */
done:
if (set)
@@ -675,31 +679,31 @@ test_container_pqueue(void *arg)
OK();
- tt_int_op(smartlist_len(sl),==, 11);
- tt_ptr_op(smartlist_get(sl, 0),==, &apples);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &apples);
- tt_int_op(smartlist_len(sl),==, 10);
+ tt_int_op(smartlist_len(sl),OP_EQ, 11);
+ tt_ptr_op(smartlist_get(sl, 0),OP_EQ, &apples);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &apples);
+ tt_int_op(smartlist_len(sl),OP_EQ, 10);
OK();
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &cows);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &daschunds);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &cows);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &daschunds);
smartlist_pqueue_add(sl, cmp, offset, &chinchillas);
OK();
smartlist_pqueue_add(sl, cmp, offset, &fireflies);
OK();
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &chinchillas);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &eggplants);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fireflies);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &chinchillas);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &eggplants);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &fireflies);
OK();
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fish);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &frogs);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &lobsters);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &roquefort);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &fish);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &frogs);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &lobsters);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &roquefort);
OK();
- tt_int_op(smartlist_len(sl),==, 3);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &squid);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &weissbier);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &zebras);
- tt_int_op(smartlist_len(sl),==, 0);
+ tt_int_op(smartlist_len(sl),OP_EQ, 3);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &squid);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &weissbier);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &zebras);
+ tt_int_op(smartlist_len(sl),OP_EQ, 0);
OK();
/* Now test remove. */
@@ -709,21 +713,21 @@ test_container_pqueue(void *arg)
smartlist_pqueue_add(sl, cmp, offset, &apples);
smartlist_pqueue_add(sl, cmp, offset, &squid);
smartlist_pqueue_add(sl, cmp, offset, &zebras);
- tt_int_op(smartlist_len(sl),==, 6);
+ tt_int_op(smartlist_len(sl),OP_EQ, 6);
OK();
smartlist_pqueue_remove(sl, cmp, offset, &zebras);
- tt_int_op(smartlist_len(sl),==, 5);
+ tt_int_op(smartlist_len(sl),OP_EQ, 5);
OK();
smartlist_pqueue_remove(sl, cmp, offset, &cows);
- tt_int_op(smartlist_len(sl),==, 4);
+ tt_int_op(smartlist_len(sl),OP_EQ, 4);
OK();
smartlist_pqueue_remove(sl, cmp, offset, &apples);
- tt_int_op(smartlist_len(sl),==, 3);
+ tt_int_op(smartlist_len(sl),OP_EQ, 3);
OK();
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fish);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &frogs);
- tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &squid);
- tt_int_op(smartlist_len(sl),==, 0);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &fish);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &frogs);
+ tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &squid);
+ tt_int_op(smartlist_len(sl),OP_EQ, 0);
OK();
#undef OK
@@ -755,30 +759,30 @@ test_container_strmap(void *arg)
(void)arg;
map = strmap_new();
tt_assert(map);
- tt_int_op(strmap_size(map),==, 0);
+ tt_int_op(strmap_size(map),OP_EQ, 0);
tt_assert(strmap_isempty(map));
v = strmap_set(map, "K1", v99);
- tt_ptr_op(v,==, NULL);
+ tt_ptr_op(v,OP_EQ, NULL);
tt_assert(!strmap_isempty(map));
v = strmap_set(map, "K2", v101);
- tt_ptr_op(v,==, NULL);
+ tt_ptr_op(v,OP_EQ, NULL);
v = strmap_set(map, "K1", v100);
- tt_ptr_op(v,==, v99);
- tt_ptr_op(strmap_get(map,"K1"),==, v100);
- tt_ptr_op(strmap_get(map,"K2"),==, v101);
- tt_ptr_op(strmap_get(map,"K-not-there"),==, NULL);
+ tt_ptr_op(v,OP_EQ, v99);
+ tt_ptr_op(strmap_get(map,"K1"),OP_EQ, v100);
+ tt_ptr_op(strmap_get(map,"K2"),OP_EQ, v101);
+ tt_ptr_op(strmap_get(map,"K-not-there"),OP_EQ, NULL);
strmap_assert_ok(map);
v = strmap_remove(map,"K2");
strmap_assert_ok(map);
- tt_ptr_op(v,==, v101);
- tt_ptr_op(strmap_get(map,"K2"),==, NULL);
- tt_ptr_op(strmap_remove(map,"K2"),==, NULL);
+ tt_ptr_op(v,OP_EQ, v101);
+ tt_ptr_op(strmap_get(map,"K2"),OP_EQ, NULL);
+ tt_ptr_op(strmap_remove(map,"K2"),OP_EQ, NULL);
strmap_set(map, "K2", v101);
strmap_set(map, "K3", v102);
strmap_set(map, "K4", v103);
- tt_int_op(strmap_size(map),==, 4);
+ tt_int_op(strmap_size(map),OP_EQ, 4);
strmap_assert_ok(map);
strmap_set(map, "K5", v104);
strmap_set(map, "K6", v105);
@@ -790,7 +794,7 @@ test_container_strmap(void *arg)
while (!strmap_iter_done(iter)) {
strmap_iter_get(iter,&k,&v);
smartlist_add(found_keys, tor_strdup(k));
- tt_ptr_op(v,==, strmap_get(map, k));
+ tt_ptr_op(v,OP_EQ, strmap_get(map, k));
if (!strcmp(k, "K2")) {
iter = strmap_iter_next_rmv(map,iter);
@@ -800,12 +804,12 @@ test_container_strmap(void *arg)
}
/* Make sure we removed K2, but not the others. */
- tt_ptr_op(strmap_get(map, "K2"),==, NULL);
- tt_ptr_op(strmap_get(map, "K5"),==, v104);
+ tt_ptr_op(strmap_get(map, "K2"),OP_EQ, NULL);
+ tt_ptr_op(strmap_get(map, "K5"),OP_EQ, v104);
/* Make sure we visited everyone once */
smartlist_sort_strings(found_keys);
visited = smartlist_join_strings(found_keys, ":", 0, NULL);
- tt_str_op(visited,==, "K1:K2:K3:K4:K5:K6");
+ tt_str_op(visited,OP_EQ, "K1:K2:K3:K4:K5:K6");
strmap_assert_ok(map);
/* Clean up after ourselves. */
@@ -815,13 +819,13 @@ test_container_strmap(void *arg)
/* Now try some lc functions. */
map = strmap_new();
strmap_set_lc(map,"Ab.C", v1);
- tt_ptr_op(strmap_get(map,"ab.c"),==, v1);
+ tt_ptr_op(strmap_get(map,"ab.c"),OP_EQ, v1);
strmap_assert_ok(map);
- tt_ptr_op(strmap_get_lc(map,"AB.C"),==, v1);
- tt_ptr_op(strmap_get(map,"AB.C"),==, NULL);
- tt_ptr_op(strmap_remove_lc(map,"aB.C"),==, v1);
+ tt_ptr_op(strmap_get_lc(map,"AB.C"),OP_EQ, v1);
+ tt_ptr_op(strmap_get(map,"AB.C"),OP_EQ, NULL);
+ tt_ptr_op(strmap_remove_lc(map,"aB.C"),OP_EQ, v1);
strmap_assert_ok(map);
- tt_ptr_op(strmap_get_lc(map,"AB.C"),==, NULL);
+ tt_ptr_op(strmap_get_lc(map,"AB.C"),OP_EQ, NULL);
done:
if (map)
@@ -853,41 +857,42 @@ test_container_order_functions(void *arg)
(void)arg;
lst[n++] = 12;
- tt_int_op(12,==, median()); /* 12 */
+ tt_int_op(12,OP_EQ, median()); /* 12 */
lst[n++] = 77;
//smartlist_shuffle(sl);
- tt_int_op(12,==, median()); /* 12, 77 */
+ tt_int_op(12,OP_EQ, median()); /* 12, 77 */
lst[n++] = 77;
//smartlist_shuffle(sl);
- tt_int_op(77,==, median()); /* 12, 77, 77 */
+ tt_int_op(77,OP_EQ, median()); /* 12, 77, 77 */
lst[n++] = 24;
- tt_int_op(24,==, median()); /* 12,24,77,77 */
+ tt_int_op(24,OP_EQ, median()); /* 12,24,77,77 */
lst[n++] = 60;
lst[n++] = 12;
lst[n++] = 25;
//smartlist_shuffle(sl);
- tt_int_op(25,==, median()); /* 12,12,24,25,60,77,77 */
+ tt_int_op(25,OP_EQ, median()); /* 12,12,24,25,60,77,77 */
#undef median
#define third_quartile() third_quartile_uint32(lst2, n)
n = 0;
lst2[n++] = 1;
- tt_int_op(1,==, third_quartile()); /* ~1~ */
+ tt_int_op(1,OP_EQ, third_quartile()); /* ~1~ */
lst2[n++] = 2;
- tt_int_op(2,==, third_quartile()); /* 1, ~2~ */
+ tt_int_op(2,OP_EQ, third_quartile()); /* 1, ~2~ */
lst2[n++] = 3;
lst2[n++] = 4;
lst2[n++] = 5;
- tt_int_op(4,==, third_quartile()); /* 1, 2, 3, ~4~, 5 */
+ tt_int_op(4,OP_EQ, third_quartile()); /* 1, 2, 3, ~4~, 5 */
lst2[n++] = 6;
lst2[n++] = 7;
lst2[n++] = 8;
lst2[n++] = 9;
- tt_int_op(7,==, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */
+ tt_int_op(7,OP_EQ, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */
lst2[n++] = 10;
lst2[n++] = 11;
- tt_int_op(9,==, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */
+ /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */
+ tt_int_op(9,OP_EQ, third_quartile());
#undef third_quartile
@@ -911,26 +916,26 @@ test_container_di_map(void *arg)
(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));
+ tt_ptr_op(NULL, OP_EQ, dimap_search(map, key1, NULL));
+ tt_ptr_op(NULL, OP_EQ, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, OP_EQ, dimap_search(map, key2, v3));
+ tt_ptr_op(v1, OP_EQ, 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));
+ tt_ptr_op(v1, OP_EQ, dimap_search(map, key1, NULL));
+ tt_ptr_op(v2, OP_EQ, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, OP_EQ, dimap_search(map, key3, NULL));
+ tt_ptr_op(NULL, OP_EQ, dimap_search(map, key4, NULL));
+ tt_ptr_op(v1, OP_EQ, dimap_search(map, key4, v1));
done:
tor_free(v1);
@@ -959,7 +964,7 @@ test_container_fp_pair_map(void *arg)
(void)arg;
map = fp_pair_map_new();
tt_assert(map);
- tt_int_op(fp_pair_map_size(map),==, 0);
+ tt_int_op(fp_pair_map_size(map),OP_EQ, 0);
tt_assert(fp_pair_map_isempty(map));
memset(fp1.first, 0x11, DIGEST_LEN);
@@ -976,27 +981,27 @@ test_container_fp_pair_map(void *arg)
memset(fp6.second, 0x62, DIGEST_LEN);
v = fp_pair_map_set(map, &fp1, v99);
- tt_ptr_op(v, ==, NULL);
+ tt_ptr_op(v, OP_EQ, NULL);
tt_assert(!fp_pair_map_isempty(map));
v = fp_pair_map_set(map, &fp2, v101);
- tt_ptr_op(v, ==, NULL);
+ tt_ptr_op(v, OP_EQ, NULL);
v = fp_pair_map_set(map, &fp1, v100);
- tt_ptr_op(v, ==, v99);
- tt_ptr_op(fp_pair_map_get(map, &fp1),==, v100);
- tt_ptr_op(fp_pair_map_get(map, &fp2),==, v101);
- tt_ptr_op(fp_pair_map_get(map, &fp3),==, NULL);
+ tt_ptr_op(v, OP_EQ, v99);
+ tt_ptr_op(fp_pair_map_get(map, &fp1),OP_EQ, v100);
+ tt_ptr_op(fp_pair_map_get(map, &fp2),OP_EQ, v101);
+ tt_ptr_op(fp_pair_map_get(map, &fp3),OP_EQ, NULL);
fp_pair_map_assert_ok(map);
v = fp_pair_map_remove(map, &fp2);
fp_pair_map_assert_ok(map);
- tt_ptr_op(v,==, v101);
- tt_ptr_op(fp_pair_map_get(map, &fp2),==, NULL);
- tt_ptr_op(fp_pair_map_remove(map, &fp2),==, NULL);
+ tt_ptr_op(v,OP_EQ, v101);
+ tt_ptr_op(fp_pair_map_get(map, &fp2),OP_EQ, NULL);
+ tt_ptr_op(fp_pair_map_remove(map, &fp2),OP_EQ, NULL);
fp_pair_map_set(map, &fp2, v101);
fp_pair_map_set(map, &fp3, v102);
fp_pair_map_set(map, &fp4, v103);
- tt_int_op(fp_pair_map_size(map),==, 4);
+ tt_int_op(fp_pair_map_size(map),OP_EQ, 4);
fp_pair_map_assert_ok(map);
fp_pair_map_set(map, &fp5, v104);
fp_pair_map_set(map, &fp6, v105);
@@ -1006,7 +1011,7 @@ test_container_fp_pair_map(void *arg)
iter = fp_pair_map_iter_init(map);
while (!fp_pair_map_iter_done(iter)) {
fp_pair_map_iter_get(iter, &k, &v);
- tt_ptr_op(v,==, fp_pair_map_get(map, &k));
+ tt_ptr_op(v,OP_EQ, fp_pair_map_get(map, &k));
if (tor_memeq(&fp2, &k, sizeof(fp2))) {
iter = fp_pair_map_iter_next_rmv(map, iter);
@@ -1016,8 +1021,8 @@ test_container_fp_pair_map(void *arg)
}
/* Make sure we removed fp2, but not the others. */
- tt_ptr_op(fp_pair_map_get(map, &fp2),==, NULL);
- tt_ptr_op(fp_pair_map_get(map, &fp5),==, v104);
+ tt_ptr_op(fp_pair_map_get(map, &fp2),OP_EQ, NULL);
+ tt_ptr_op(fp_pair_map_get(map, &fp5),OP_EQ, v104);
fp_pair_map_assert_ok(map);
/* Clean up after ourselves. */
diff --git a/src/test/test_controller_events.c b/src/test/test_controller_events.c
index b45e97a417..dd9d590ec7 100644
--- a/src/test/test_controller_events.c
+++ b/src/test/test_controller_events.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define CONNECTION_PRIVATE
@@ -22,7 +22,7 @@ help_test_bucket_note_empty(uint32_t expected_msec_since_midnight,
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);
+ tt_int_op(expected_msec_since_midnight, OP_EQ, timestamp_var);
done:
;
@@ -57,20 +57,20 @@ test_cntev_bucket_millis_empty(void *arg)
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));
+ tt_int_op(0, OP_EQ, bucket_millis_empty(0, 42120, 0, 100, &tvnow));
+ tt_int_op(0, OP_EQ, bucket_millis_empty(-10, 42120, -10, 100, &tvnow));
/* Bucket was not empty. */
- tt_int_op(0, ==, bucket_millis_empty(10, 42120, 20, 100, &tvnow));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(80, OP_EQ, bucket_millis_empty(-20, 42120, -10, 100, &tvnow));
+ tt_int_op(80, OP_EQ, bucket_millis_empty(-10, 42120, 0, 100, &tvnow));
+ tt_int_op(80, OP_EQ, 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));
+ tt_int_op(100, OP_EQ, bucket_millis_empty(0, 42020, 1, 100, &tvnow));
/* 1970-01-02 00:00:00:050000 */
tvnow.tv_sec = 86400;
@@ -78,7 +78,7 @@ test_cntev_bucket_millis_empty(void *arg)
/* 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));
+ tt_int_op(80, OP_EQ, bucket_millis_empty(0, 86400000 - 30, 1, 100, &tvnow));
done:
;
@@ -118,26 +118,26 @@ test_cntev_sum_up_cell_stats(void *arg)
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]);
+ tt_u64_op(1, OP_EQ, 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]);
+ tt_u64_op(1, OP_EQ, 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]);
+ tt_u64_op(20, OP_EQ, cell_stats->total_time_appward[CELL_RELAY]);
+ tt_u64_op(1, OP_EQ, 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]);
+ tt_u64_op(30, OP_EQ, cell_stats->total_time_exitward[CELL_RELAY]);
+ tt_u64_op(1, OP_EQ, cell_stats->removed_cells_exitward[CELL_RELAY]);
done:
tor_free(cell_stats);
@@ -164,7 +164,7 @@ test_cntev_append_cell_stats(void *arg)
append_cell_stats_by_command(event_parts, key,
include_if_non_zero,
number_to_include);
- tt_int_op(0, ==, smartlist_len(event_parts));
+ tt_int_op(0, OP_EQ, smartlist_len(event_parts));
/* There's a RELAY cell to include, but the corresponding field in
* include_if_non_zero is still zero. */
@@ -172,7 +172,7 @@ test_cntev_append_cell_stats(void *arg)
append_cell_stats_by_command(event_parts, key,
include_if_non_zero,
number_to_include);
- tt_int_op(0, ==, smartlist_len(event_parts));
+ tt_int_op(0, OP_EQ, smartlist_len(event_parts));
/* Now include single RELAY cell. */
include_if_non_zero[CELL_RELAY] = 2;
@@ -180,7 +180,7 @@ test_cntev_append_cell_stats(void *arg)
include_if_non_zero,
number_to_include);
cp = smartlist_pop_last(event_parts);
- tt_str_op("Z=relay:1", ==, cp);
+ tt_str_op("Z=relay:1", OP_EQ, cp);
tor_free(cp);
/* Add four CREATE cells. */
@@ -190,7 +190,7 @@ test_cntev_append_cell_stats(void *arg)
include_if_non_zero,
number_to_include);
cp = smartlist_pop_last(event_parts);
- tt_str_op("Z=create:4,relay:1", ==, cp);
+ tt_str_op("Z=create:4,relay:1", OP_EQ, cp);
done:
tor_free(cp);
@@ -220,14 +220,14 @@ test_cntev_format_cell_stats(void *arg)
/* 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);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1", OP_EQ, 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);
+ OP_EQ, event_string);
tor_free(event_string);
/* Origin circuit also had 5 CREATE2 cells added to its exitward
@@ -235,7 +235,7 @@ test_cntev_format_cell_stats(void *arg)
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);
+ "create2:5", OP_EQ, event_string);
tor_free(event_string);
/* Origin circuit also had 7 RELAY cells removed from its exitward queue
@@ -245,7 +245,7 @@ test_cntev_format_cell_stats(void *arg)
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);
+ OP_EQ, event_string);
tor_free(event_string);
p_chan = tor_malloc_zero(sizeof(channel_tls_t));
@@ -265,14 +265,14 @@ test_cntev_format_cell_stats(void *arg)
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);
+ OP_EQ, 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);
+ "OutboundQueue=9 OutboundConn=1", OP_EQ, event_string);
tor_free(event_string);
/* OR circuit had 7 RELAY cells removed from its appward queue which
@@ -282,7 +282,7 @@ test_cntev_format_cell_stats(void *arg)
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);
+ "OutboundQueue=9 OutboundConn=1", OP_EQ, event_string);
done:
tor_free(cell_stats);
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 86b77a6622..5352b9fdb4 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -1,18 +1,21 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#define CRYPTO_CURVE25519_PRIVATE
+#define CRYPTO_S2K_PRIVATE
#include "or.h"
#include "test.h"
#include "aes.h"
#include "util.h"
#include "siphash.h"
-#ifdef CURVE25519_ENABLED
#include "crypto_curve25519.h"
-#endif
+#include "crypto_ed25519.h"
+#include "ed25519_vectors.inc"
+#include "crypto_s2k.h"
+#include "crypto_pwbox.h"
extern const char AUTHORITY_SIGNKEY_3[];
extern const char AUTHORITY_SIGNKEY_A_DIGEST[];
@@ -31,24 +34,24 @@ test_crypto_dh(void *arg)
ssize_t s1len, s2len;
(void)arg;
- tt_int_op(crypto_dh_get_bytes(dh1),==, DH_BYTES);
- tt_int_op(crypto_dh_get_bytes(dh2),==, DH_BYTES);
+ tt_int_op(crypto_dh_get_bytes(dh1),OP_EQ, DH_BYTES);
+ tt_int_op(crypto_dh_get_bytes(dh2),OP_EQ, DH_BYTES);
memset(p1, 0, DH_BYTES);
memset(p2, 0, DH_BYTES);
- tt_mem_op(p1,==, p2, DH_BYTES);
+ tt_mem_op(p1,OP_EQ, p2, DH_BYTES);
tt_assert(! crypto_dh_get_public(dh1, p1, DH_BYTES));
- tt_mem_op(p1,!=, p2, DH_BYTES);
+ tt_mem_op(p1,OP_NE, p2, DH_BYTES);
tt_assert(! crypto_dh_get_public(dh2, p2, DH_BYTES));
- tt_mem_op(p1,!=, p2, DH_BYTES);
+ tt_mem_op(p1,OP_NE, p2, DH_BYTES);
memset(s1, 0, DH_BYTES);
memset(s2, 0xFF, DH_BYTES);
s1len = crypto_dh_compute_secret(LOG_WARN, dh1, p2, DH_BYTES, s1, 50);
s2len = crypto_dh_compute_secret(LOG_WARN, dh2, p1, DH_BYTES, s2, 50);
tt_assert(s1len > 0);
- tt_int_op(s1len,==, s2len);
- tt_mem_op(s1,==, s2, s1len);
+ tt_int_op(s1len,OP_EQ, s2len);
+ tt_mem_op(s1,OP_EQ, s2, s1len);
{
/* XXXX Now fabricate some bad values and make sure they get caught,
@@ -75,7 +78,7 @@ test_crypto_rng(void *arg)
tt_assert(! crypto_seed_rng(0));
crypto_rand(data1, 100);
crypto_rand(data2, 100);
- tt_mem_op(data1,!=, data2,100);
+ tt_mem_op(data1,OP_NE, data2,100);
allok = 1;
for (i = 0; i < 100; ++i) {
uint64_t big;
@@ -130,15 +133,15 @@ test_crypto_aes(void *arg)
memset(data2, 0, 1024);
memset(data3, 0, 1024);
env1 = crypto_cipher_new(NULL);
- tt_ptr_op(env1, !=, NULL);
+ tt_ptr_op(env1, OP_NE, NULL);
env2 = crypto_cipher_new(crypto_cipher_get_key(env1));
- tt_ptr_op(env2, !=, NULL);
+ tt_ptr_op(env2, OP_NE, NULL);
/* Try encrypting 512 chars. */
crypto_cipher_encrypt(env1, data2, data1, 512);
crypto_cipher_decrypt(env2, data3, data2, 512);
- tt_mem_op(data1,==, data3, 512);
- tt_mem_op(data1,!=, data2, 512);
+ tt_mem_op(data1,OP_EQ, data3, 512);
+ tt_mem_op(data1,OP_NE, data2, 512);
/* Now encrypt 1 at a time, and get 1 at a time. */
for (j = 512; j < 560; ++j) {
@@ -147,7 +150,7 @@ test_crypto_aes(void *arg)
for (j = 512; j < 560; ++j) {
crypto_cipher_decrypt(env2, data3+j, data2+j, 1);
}
- tt_mem_op(data1,==, data3, 560);
+ tt_mem_op(data1,OP_EQ, data3, 560);
/* Now encrypt 3 at a time, and get 5 at a time. */
for (j = 560; j < 1024-5; j += 3) {
crypto_cipher_encrypt(env1, data2+j, data1+j, 3);
@@ -155,7 +158,7 @@ test_crypto_aes(void *arg)
for (j = 560; j < 1024-5; j += 5) {
crypto_cipher_decrypt(env2, data3+j, data2+j, 5);
}
- tt_mem_op(data1,==, data3, 1024-5);
+ tt_mem_op(data1,OP_EQ, data3, 1024-5);
/* Now make sure that when we encrypt with different chunk sizes, we get
the same results. */
crypto_cipher_free(env2);
@@ -163,7 +166,7 @@ test_crypto_aes(void *arg)
memset(data3, 0, 1024);
env2 = crypto_cipher_new(crypto_cipher_get_key(env1));
- tt_ptr_op(env2, !=, NULL);
+ tt_ptr_op(env2, OP_NE, NULL);
for (j = 0; j < 1024-16; j += 17) {
crypto_cipher_encrypt(env2, data3+j, data1+j, 17);
}
@@ -172,7 +175,7 @@ test_crypto_aes(void *arg)
printf("%d: %d\t%d\n", j, (int) data2[j], (int) data3[j]);
}
}
- tt_mem_op(data2,==, data3, 1024-16);
+ tt_mem_op(data2,OP_EQ, data3, 1024-16);
crypto_cipher_free(env1);
env1 = NULL;
crypto_cipher_free(env2);
@@ -268,25 +271,25 @@ test_crypto_sha(void *arg)
(void)arg;
i = crypto_digest(data, "abc", 3);
test_memeq_hex(data, "A9993E364706816ABA3E25717850C26C9CD0D89D");
- tt_int_op(i, ==, 0);
+ tt_int_op(i, OP_EQ, 0);
/* Test SHA-256 with a test vector from the specification. */
i = crypto_digest256(data, "abc", 3, DIGEST_SHA256);
test_memeq_hex(data, "BA7816BF8F01CFEA414140DE5DAE2223B00361A3"
"96177A9CB410FF61F20015AD");
- tt_int_op(i, ==, 0);
+ tt_int_op(i, OP_EQ, 0);
/* Test HMAC-SHA256 with test cases from wikipedia and RFC 4231 */
/* Case empty (wikipedia) */
crypto_hmac_sha256(digest, "", 0, "", 0);
- tt_str_op(hex_str(digest, 32),==,
+ tt_str_op(hex_str(digest, 32),OP_EQ,
"B613679A0814D9EC772F95D778C35FC5FF1697C493715653C6C712144292C5AD");
/* Case quick-brown (wikipedia) */
crypto_hmac_sha256(digest, "key", 3,
"The quick brown fox jumps over the lazy dog", 43);
- tt_str_op(hex_str(digest, 32),==,
+ tt_str_op(hex_str(digest, 32),OP_EQ,
"F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8");
/* "Test Case 1" from RFC 4231 */
@@ -354,15 +357,15 @@ test_crypto_sha(void *arg)
crypto_digest_add_bytes(d2, "ghijkl", 6);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest(d_out2, "abcdefghijkl", 12);
- tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
+ tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN);
crypto_digest_assign(d2, d1);
crypto_digest_add_bytes(d2, "mno", 3);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest(d_out2, "abcdefmno", 9);
- tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
+ tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN);
crypto_digest_get_digest(d1, d_out1, sizeof(d_out1));
crypto_digest(d_out2, "abcdef", 6);
- tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
+ tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN);
crypto_digest_free(d1);
crypto_digest_free(d2);
@@ -375,15 +378,15 @@ test_crypto_sha(void *arg)
crypto_digest_add_bytes(d2, "ghijkl", 6);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest256(d_out2, "abcdefghijkl", 12, DIGEST_SHA256);
- tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
+ tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN);
crypto_digest_assign(d2, d1);
crypto_digest_add_bytes(d2, "mno", 3);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest256(d_out2, "abcdefmno", 9, DIGEST_SHA256);
- tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
+ tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN);
crypto_digest_get_digest(d1, d_out1, sizeof(d_out1));
crypto_digest256(d_out2, "abcdef", 6, DIGEST_SHA256);
- tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
+ tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN);
done:
if (d1)
@@ -410,42 +413,42 @@ test_crypto_pk(void *arg)
tt_assert(pk1 && pk2);
tt_assert(! crypto_pk_write_public_key_to_string(pk1, &encoded, &size));
tt_assert(! crypto_pk_read_public_key_from_string(pk2, encoded, size));
- tt_int_op(0,==, crypto_pk_cmp_keys(pk1, pk2));
+ tt_int_op(0,OP_EQ, 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);
+ tt_int_op(crypto_pk_cmp_keys(NULL, pk1), OP_LT, 0);
+ tt_int_op(crypto_pk_cmp_keys(NULL, NULL), OP_EQ, 0);
+ tt_int_op(crypto_pk_cmp_keys(pk1, NULL), OP_GT, 0);
- tt_int_op(128,==, crypto_pk_keysize(pk1));
- tt_int_op(1024,==, crypto_pk_num_bits(pk1));
- tt_int_op(128,==, crypto_pk_keysize(pk2));
- tt_int_op(1024,==, crypto_pk_num_bits(pk2));
+ tt_int_op(128,OP_EQ, crypto_pk_keysize(pk1));
+ tt_int_op(1024,OP_EQ, crypto_pk_num_bits(pk1));
+ tt_int_op(128,OP_EQ, crypto_pk_keysize(pk2));
+ tt_int_op(1024,OP_EQ, crypto_pk_num_bits(pk2));
- tt_int_op(128,==, crypto_pk_public_encrypt(pk2, data1, sizeof(data1),
+ tt_int_op(128,OP_EQ, crypto_pk_public_encrypt(pk2, data1, sizeof(data1),
"Hello whirled.", 15,
PK_PKCS1_OAEP_PADDING));
- tt_int_op(128,==, crypto_pk_public_encrypt(pk1, data2, sizeof(data1),
+ tt_int_op(128,OP_EQ, crypto_pk_public_encrypt(pk1, data2, sizeof(data1),
"Hello whirled.", 15,
PK_PKCS1_OAEP_PADDING));
/* oaep padding should make encryption not match */
- tt_mem_op(data1,!=, data2, 128);
- tt_int_op(15,==,
+ tt_mem_op(data1,OP_NE, data2, 128);
+ tt_int_op(15,OP_EQ,
crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data1, 128,
PK_PKCS1_OAEP_PADDING,1));
- tt_str_op(data3,==, "Hello whirled.");
+ tt_str_op(data3,OP_EQ, "Hello whirled.");
memset(data3, 0, 1024);
- tt_int_op(15,==,
+ tt_int_op(15,OP_EQ,
crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128,
PK_PKCS1_OAEP_PADDING,1));
- tt_str_op(data3,==, "Hello whirled.");
+ tt_str_op(data3,OP_EQ, "Hello whirled.");
/* Can't decrypt with public key. */
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data2, 128,
PK_PKCS1_OAEP_PADDING,1));
/* Try again with bad padding */
memcpy(data2+1, "XYZZY", 5); /* This has fails ~ once-in-2^40 */
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128,
PK_PKCS1_OAEP_PADDING,1));
@@ -461,25 +464,25 @@ test_crypto_pk(void *arg)
get_fname("xyzzy")) < 0);
tt_assert(! crypto_pk_read_private_key_from_filename(pk2,
get_fname("pkey1")));
- tt_int_op(15,==,
+ tt_int_op(15,OP_EQ,
crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data1, 128,
PK_PKCS1_OAEP_PADDING,1));
/* Now try signing. */
strlcpy(data1, "Ossifrage", 1024);
- tt_int_op(128,==,
+ tt_int_op(128,OP_EQ,
crypto_pk_private_sign(pk1, data2, sizeof(data2), data1, 10));
- tt_int_op(10,==,
+ tt_int_op(10,OP_EQ,
crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128));
- tt_str_op(data3,==, "Ossifrage");
+ tt_str_op(data3,OP_EQ, "Ossifrage");
/* Try signing digests. */
- tt_int_op(128,==, crypto_pk_private_sign_digest(pk1, data2, sizeof(data2),
+ tt_int_op(128,OP_EQ, crypto_pk_private_sign_digest(pk1, data2, sizeof(data2),
data1, 10));
- tt_int_op(20,==,
+ tt_int_op(20,OP_EQ,
crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128));
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
crypto_pk_public_checksig_digest(pk1, data1, 10, data2, 128));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
crypto_pk_public_checksig_digest(pk1, data1, 11, data2, 128));
/*XXXX test failed signing*/
@@ -488,7 +491,7 @@ test_crypto_pk(void *arg)
crypto_pk_free(pk2);
pk2 = NULL;
i = crypto_pk_asn1_encode(pk1, data1, 1024);
- tt_int_op(i, >, 0);
+ tt_int_op(i, OP_GT, 0);
pk2 = crypto_pk_asn1_decode(data1, i);
tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0);
@@ -499,18 +502,18 @@ test_crypto_pk(void *arg)
memset(data3,0,1024);
len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2),
data1,i,PK_PKCS1_OAEP_PADDING,0);
- tt_int_op(len, >=, 0);
+ tt_int_op(len, OP_GE, 0);
len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3),
data2,len,PK_PKCS1_OAEP_PADDING,1);
- tt_int_op(len,==, i);
- tt_mem_op(data1,==, data3,i);
+ tt_int_op(len,OP_EQ, i);
+ tt_mem_op(data1,OP_EQ, data3,i);
}
/* Try copy_full */
crypto_pk_free(pk2);
pk2 = crypto_pk_copy_full(pk1);
tt_assert(pk2 != NULL);
- tt_ptr_op(pk1, !=, pk2);
+ tt_ptr_op(pk1, OP_NE, pk2);
tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0);
done:
@@ -537,33 +540,33 @@ test_crypto_pk_fingerprints(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);
+ tt_int_op(n, OP_GT, 0);
+ tt_int_op(n, OP_GT, 128);
+ tt_int_op(n, OP_LT, 256);
/* Is digest as expected? */
crypto_digest(d, encoded, n);
- tt_int_op(0, ==, crypto_pk_get_digest(pk, d2));
- tt_mem_op(d,==, d2, DIGEST_LEN);
+ tt_int_op(0, OP_EQ, crypto_pk_get_digest(pk, d2));
+ tt_mem_op(d,OP_EQ, 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);
+ tt_int_op(0, OP_EQ, crypto_pk_get_fingerprint(pk, fingerprint, 0));
+ tt_int_op(strlen(fingerprint), OP_EQ, DIGEST_LEN * 2);
test_memeq_hex(d, fingerprint);
/* Are spaces right? */
- tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 1));
+ tt_int_op(0, OP_EQ, crypto_pk_get_fingerprint(pk, fingerprint, 1));
for (i = 4; i < strlen(fingerprint); i += 5) {
- tt_int_op(fingerprint[i], ==, ' ');
+ tt_int_op(fingerprint[i], OP_EQ, ' ');
}
tor_strstrip(fingerprint, " ");
- tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ tt_int_op(strlen(fingerprint), OP_EQ, 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);
+ tt_int_op(0, OP_EQ, crypto_pk_get_hashed_fingerprint(pk, fingerprint));
+ tt_int_op(strlen(fingerprint), OP_EQ, DIGEST_LEN * 2);
test_memeq_hex(d2, fingerprint);
done:
@@ -588,14 +591,14 @@ test_crypto_digests(void *arg)
r = crypto_pk_get_digest(k, digest);
tt_assert(r == 0);
- tt_mem_op(hex_str(digest, DIGEST_LEN),==,
+ tt_mem_op(hex_str(digest, DIGEST_LEN),OP_EQ,
AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
r = crypto_pk_get_all_digests(k, &pkey_digests);
- tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),==,
+ tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),OP_EQ,
AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
- tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),==,
+ tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),OP_EQ,
AUTHORITY_SIGNKEY_A_DIGEST256, HEX_DIGEST256_LEN);
done:
crypto_pk_free(k);
@@ -619,31 +622,31 @@ test_crypto_formats(void *arg)
memset(data1, 6, 1024);
for (idx = 0; idx < 10; ++idx) {
i = base64_encode(data2, 1024, data1, idx);
- tt_int_op(i, >=, 0);
+ tt_int_op(i, OP_GE, 0);
j = base64_decode(data3, 1024, data2, i);
- tt_int_op(j,==, idx);
- tt_mem_op(data3,==, data1, idx);
+ tt_int_op(j,OP_EQ, idx);
+ tt_mem_op(data3,OP_EQ, data1, idx);
}
strlcpy(data1, "Test string that contains 35 chars.", 1024);
strlcat(data1, " 2nd string that contains 35 chars.", 1024);
i = base64_encode(data2, 1024, data1, 71);
- tt_int_op(i, >=, 0);
+ tt_int_op(i, OP_GE, 0);
j = base64_decode(data3, 1024, data2, i);
- tt_int_op(j,==, 71);
- tt_str_op(data3,==, data1);
- tt_int_op(data2[i], ==, '\0');
+ tt_int_op(j,OP_EQ, 71);
+ tt_str_op(data3,OP_EQ, data1);
+ tt_int_op(data2[i], OP_EQ, '\0');
crypto_rand(data1, DIGEST_LEN);
memset(data2, 100, 1024);
digest_to_base64(data2, data1);
- tt_int_op(BASE64_DIGEST_LEN,==, strlen(data2));
- tt_int_op(100,==, data2[BASE64_DIGEST_LEN+2]);
+ tt_int_op(BASE64_DIGEST_LEN,OP_EQ, strlen(data2));
+ tt_int_op(100,OP_EQ, data2[BASE64_DIGEST_LEN+2]);
memset(data3, 99, 1024);
- tt_int_op(digest_from_base64(data3, data2),==, 0);
- tt_mem_op(data1,==, data3, DIGEST_LEN);
- tt_int_op(99,==, data3[DIGEST_LEN+1]);
+ tt_int_op(digest_from_base64(data3, data2),OP_EQ, 0);
+ tt_mem_op(data1,OP_EQ, data3, DIGEST_LEN);
+ tt_int_op(99,OP_EQ, data3[DIGEST_LEN+1]);
tt_assert(digest_from_base64(data3, "###") < 0);
@@ -651,12 +654,12 @@ test_crypto_formats(void *arg)
crypto_rand(data2, DIGEST256_LEN);
memset(data2, 100, 1024);
digest256_to_base64(data2, data1);
- tt_int_op(BASE64_DIGEST256_LEN,==, strlen(data2));
- tt_int_op(100,==, data2[BASE64_DIGEST256_LEN+2]);
+ tt_int_op(BASE64_DIGEST256_LEN,OP_EQ, strlen(data2));
+ tt_int_op(100,OP_EQ, data2[BASE64_DIGEST256_LEN+2]);
memset(data3, 99, 1024);
- tt_int_op(digest256_from_base64(data3, data2),==, 0);
- tt_mem_op(data1,==, data3, DIGEST256_LEN);
- tt_int_op(99,==, data3[DIGEST256_LEN+1]);
+ tt_int_op(digest256_from_base64(data3, data2),OP_EQ, 0);
+ tt_mem_op(data1,OP_EQ, data3, DIGEST256_LEN);
+ tt_int_op(99,OP_EQ, data3[DIGEST256_LEN+1]);
/* Base32 tests */
strlcpy(data1, "5chrs", 1024);
@@ -665,27 +668,27 @@ test_crypto_formats(void *arg)
* By 5s: [00110 10101 10001 10110 10000 11100 10011 10011]
*/
base32_encode(data2, 9, data1, 5);
- tt_str_op(data2,==, "gvrwq4tt");
+ tt_str_op(data2,OP_EQ, "gvrwq4tt");
strlcpy(data1, "\xFF\xF5\x6D\x44\xAE\x0D\x5C\xC9\x62\xC4", 1024);
base32_encode(data2, 30, data1, 10);
- tt_str_op(data2,==, "772w2rfobvomsywe");
+ tt_str_op(data2,OP_EQ, "772w2rfobvomsywe");
/* Base16 tests */
strlcpy(data1, "6chrs\xff", 1024);
base16_encode(data2, 13, data1, 6);
- tt_str_op(data2,==, "3663687273FF");
+ tt_str_op(data2,OP_EQ, "3663687273FF");
strlcpy(data1, "f0d678affc000100", 1024);
i = base16_decode(data2, 8, data1, 16);
- tt_int_op(i,==, 0);
- tt_mem_op(data2,==, "\xf0\xd6\x78\xaf\xfc\x00\x01\x00",8);
+ tt_int_op(i,OP_EQ, 0);
+ tt_mem_op(data2,OP_EQ, "\xf0\xd6\x78\xaf\xfc\x00\x01\x00",8);
/* now try some failing base16 decodes */
- tt_int_op(-1,==, base16_decode(data2, 8, data1, 15)); /* odd input len */
- tt_int_op(-1,==, base16_decode(data2, 7, data1, 16)); /* dest too short */
+ tt_int_op(-1,OP_EQ, base16_decode(data2, 8, data1, 15)); /* odd input len */
+ tt_int_op(-1,OP_EQ, base16_decode(data2, 7, data1, 16)); /* dest too short */
strlcpy(data1, "f0dz!8affc000100", 1024);
- tt_int_op(-1,==, base16_decode(data2, 8, data1, 16));
+ tt_int_op(-1,OP_EQ, base16_decode(data2, 8, data1, 16));
tor_free(data1);
tor_free(data2);
@@ -694,10 +697,11 @@ test_crypto_formats(void *arg)
/* Add spaces to fingerprint */
{
data1 = tor_strdup("ABCD1234ABCD56780000ABCD1234ABCD56780000");
- tt_int_op(strlen(data1),==, 40);
+ tt_int_op(strlen(data1),OP_EQ, 40);
data2 = tor_malloc(FINGERPRINT_LEN+1);
crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1);
- tt_str_op(data2,==, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000");
+ tt_str_op(data2, OP_EQ,
+ "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000");
tor_free(data1);
tor_free(data2);
}
@@ -710,7 +714,7 @@ test_crypto_formats(void *arg)
/** Run unit tests for our secret-to-key passphrase hashing functionality. */
static void
-test_crypto_s2k(void *arg)
+test_crypto_s2k_rfc2440(void *arg)
{
char buf[29];
char buf2[29];
@@ -723,25 +727,364 @@ test_crypto_s2k(void *arg)
buf3 = tor_malloc(65536);
memset(buf3, 0, 65536);
- secret_to_key(buf+9, 20, "", 0, buf);
+ secret_to_key_rfc2440(buf+9, 20, "", 0, buf);
crypto_digest(buf2+9, buf3, 1024);
- tt_mem_op(buf,==, buf2, 29);
+ tt_mem_op(buf,OP_EQ, buf2, 29);
memcpy(buf,"vrbacrda",8);
memcpy(buf2,"vrbacrda",8);
buf[8] = 96;
buf2[8] = 96;
- secret_to_key(buf+9, 20, "12345678", 8, buf);
+ secret_to_key_rfc2440(buf+9, 20, "12345678", 8, buf);
for (i = 0; i < 65536; i += 16) {
memcpy(buf3+i, "vrbacrda12345678", 16);
}
crypto_digest(buf2+9, buf3, 65536);
- tt_mem_op(buf,==, buf2, 29);
+ tt_mem_op(buf,OP_EQ, buf2, 29);
done:
tor_free(buf3);
}
+static void
+run_s2k_tests(const unsigned flags, const unsigned type,
+ int speclen, const int keylen, int legacy)
+{
+ uint8_t buf[S2K_MAXLEN], buf2[S2K_MAXLEN], buf3[S2K_MAXLEN];
+ int r;
+ size_t sz;
+ const char pw1[] = "You can't come in here unless you say swordfish!";
+ const char pw2[] = "Now, I give you one more guess.";
+
+ r = secret_to_key_new(buf, sizeof(buf), &sz,
+ pw1, strlen(pw1), flags);
+ tt_int_op(r, OP_EQ, S2K_OKAY);
+ tt_int_op(buf[0], OP_EQ, type);
+
+ tt_int_op(sz, OP_EQ, keylen + speclen);
+
+ if (legacy) {
+ memmove(buf, buf+1, sz-1);
+ --sz;
+ --speclen;
+ }
+
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_check(buf, sz, pw1, strlen(pw1)));
+
+ tt_int_op(S2K_BAD_SECRET, OP_EQ,
+ secret_to_key_check(buf, sz, pw2, strlen(pw2)));
+
+ /* Move key to buf2, and clear it. */
+ memset(buf3, 0, sizeof(buf3));
+ memcpy(buf2, buf+speclen, keylen);
+ memset(buf+speclen, 0, sz - speclen);
+
+ /* Derivekey should produce the same results. */
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_derivekey(buf3, keylen, buf, speclen, pw1, strlen(pw1)));
+
+ tt_mem_op(buf2, OP_EQ, buf3, keylen);
+
+ /* Derivekey with a longer output should fill the output. */
+ memset(buf2, 0, sizeof(buf2));
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2), buf, speclen,
+ pw1, strlen(pw1)));
+
+ tt_mem_op(buf2, OP_NE, buf3, sizeof(buf2));
+
+ memset(buf3, 0, sizeof(buf3));
+ tt_int_op(S2K_OKAY, OP_EQ,
+ secret_to_key_derivekey(buf3, sizeof(buf3), buf, speclen,
+ pw1, strlen(pw1)));
+ tt_mem_op(buf2, OP_EQ, buf3, sizeof(buf3));
+ tt_assert(!tor_mem_is_zero((char*)buf2+keylen, sizeof(buf2)-keylen));
+
+ done:
+ ;
+}
+
+static void
+test_crypto_s2k_general(void *arg)
+{
+ const char *which = arg;
+
+ if (!strcmp(which, "scrypt")) {
+ run_s2k_tests(0, 2, 19, 32, 0);
+ } else if (!strcmp(which, "scrypt-low")) {
+ run_s2k_tests(S2K_FLAG_LOW_MEM, 2, 19, 32, 0);
+ } else if (!strcmp(which, "pbkdf2")) {
+ run_s2k_tests(S2K_FLAG_USE_PBKDF2, 1, 18, 20, 0);
+ } else if (!strcmp(which, "rfc2440")) {
+ run_s2k_tests(S2K_FLAG_NO_SCRYPT, 0, 10, 20, 0);
+ } else if (!strcmp(which, "rfc2440-legacy")) {
+ run_s2k_tests(S2K_FLAG_NO_SCRYPT, 0, 10, 20, 1);
+ } else {
+ tt_fail();
+ }
+}
+
+static void
+test_crypto_s2k_errors(void *arg)
+{
+ uint8_t buf[S2K_MAXLEN], buf2[S2K_MAXLEN];
+ size_t sz;
+
+ (void)arg;
+
+ /* Bogus specifiers: simple */
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_derivekey(buf, sizeof(buf),
+ (const uint8_t*)"", 0, "ABC", 3));
+ tt_int_op(S2K_BAD_ALGORITHM, OP_EQ,
+ secret_to_key_derivekey(buf, sizeof(buf),
+ (const uint8_t*)"\x10", 1, "ABC", 3));
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_derivekey(buf, sizeof(buf),
+ (const uint8_t*)"\x01\x02", 2, "ABC", 3));
+
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_check((const uint8_t*)"", 0, "ABC", 3));
+ tt_int_op(S2K_BAD_ALGORITHM, OP_EQ,
+ secret_to_key_check((const uint8_t*)"\x10", 1, "ABC", 3));
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_check((const uint8_t*)"\x01\x02", 2, "ABC", 3));
+
+ /* too long gets "BAD_LEN" too */
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 2;
+ tt_int_op(S2K_BAD_LEN, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2),
+ buf, sizeof(buf), "ABC", 3));
+
+ /* Truncated output */
+#ifdef HAVE_LIBSCRYPT_H
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz,
+ "ABC", 3, 0));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz,
+ "ABC", 3, S2K_FLAG_LOW_MEM));
+#endif
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 37, &sz,
+ "ABC", 3, S2K_FLAG_USE_PBKDF2));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 29, &sz,
+ "ABC", 3, S2K_FLAG_NO_SCRYPT));
+
+#ifdef HAVE_LIBSCRYPT_H
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18, 0));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18,
+ S2K_FLAG_LOW_MEM));
+#endif
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 17,
+ S2K_FLAG_USE_PBKDF2));
+ tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 9,
+ S2K_FLAG_NO_SCRYPT));
+
+ /* Now try using type-specific bogus specifiers. */
+
+ /* It's a bad pbkdf2 buffer if it has an iteration count that would overflow
+ * int32_t. */
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 1; /* pbkdf2 */
+ buf[17] = 100; /* 1<<100 is much bigger than INT32_MAX */
+ tt_int_op(S2K_BAD_PARAMS, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2),
+ buf, 18, "ABC", 3));
+
+#ifdef HAVE_LIBSCRYPT_H
+ /* It's a bad scrypt buffer if N would overflow uint64 */
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 2; /* scrypt */
+ buf[17] = 100; /* 1<<100 is much bigger than UINT64_MAX */
+ tt_int_op(S2K_BAD_PARAMS, OP_EQ,
+ secret_to_key_derivekey(buf2, sizeof(buf2),
+ buf, 19, "ABC", 3));
+#endif
+
+ done:
+ ;
+}
+
+static void
+test_crypto_scrypt_vectors(void *arg)
+{
+ char *mem_op_hex_tmp = NULL;
+ uint8_t spec[64], out[64];
+
+ (void)arg;
+#ifndef HAVE_LIBSCRYPT_H
+ if (1)
+ tt_skip();
+#endif
+
+ /* Test vectors from
+ http://tools.ietf.org/html/draft-josefsson-scrypt-kdf-00 section 11.
+
+ Note that the names of 'r' and 'N' are switched in that section. Or
+ possibly in libscrypt.
+ */
+
+ base16_decode((char*)spec, sizeof(spec),
+ "0400", 4);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 2, "", 0, 2));
+ test_memeq_hex(out,
+ "77d6576238657b203b19ca42c18a0497"
+ "f16b4844e3074ae8dfdffa3fede21442"
+ "fcd0069ded0948f8326a753a0fc81f17"
+ "e8d3e0fb2e0d3628cf35e20c38d18906");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "4e61436c" "0A34", 12);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 6, "password", 8, 2));
+ test_memeq_hex(out,
+ "fdbabe1c9d3472007856e7190d01e9fe"
+ "7c6ad7cbc8237830e77376634b373162"
+ "2eaf30d92e22a3886ff109279d9830da"
+ "c727afb94a83ee6d8360cbdfa2cc0640");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "536f6469756d43686c6f72696465" "0e30", 32);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 16,
+ "pleaseletmein", 13, 2));
+ test_memeq_hex(out,
+ "7023bdcb3afd7348461c06cd81fd38eb"
+ "fda8fbba904f8e3ea9b543f6545da1f2"
+ "d5432955613f0fcf62d49705242a9af9"
+ "e61e85dc0d651e40dfcf017b45575887");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "536f6469756d43686c6f72696465" "1430", 32);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(64, OP_EQ,
+ secret_to_key_compute_key(out, 64, spec, 16,
+ "pleaseletmein", 13, 2));
+ test_memeq_hex(out,
+ "2101cb9b6a511aaeaddbbe09cf70f881"
+ "ec568d574a2ffd4dabe5ee9820adaa47"
+ "8e56fd8f4ba5d09ffa1c6d927c40f4c3"
+ "37304049e8a952fbcbf45c6fa77a41a4");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_pbkdf2_vectors(void *arg)
+{
+ char *mem_op_hex_tmp = NULL;
+ uint8_t spec[64], out[64];
+ (void)arg;
+
+ /* Test vectors from RFC6070, section 2 */
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "00" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "0c60c80f961f0e71f3a9b524af6012062fe037a6");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "01" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "0C" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "4b007901b765489abead49d926f721d065a429c1");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c74" "18" , 10);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(20, OP_EQ,
+ secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1));
+ test_memeq_hex(out, "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "73616c7453414c5473616c7453414c5473616c745"
+ "3414c5473616c7453414c5473616c74" "0C" , 74);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(25, OP_EQ,
+ secret_to_key_compute_key(out, 25, spec, 37,
+ "passwordPASSWORDpassword", 24, 1));
+ test_memeq_hex(out, "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038");
+
+ base16_decode((char*)spec, sizeof(spec),
+ "7361006c74" "0c" , 12);
+ memset(out, 0x00, sizeof(out));
+ tt_int_op(16, OP_EQ,
+ secret_to_key_compute_key(out, 16, spec, 6, "pass\0word", 9, 1));
+ test_memeq_hex(out, "56fa6aa75548099dcc37d7f03425e0c3");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_pwbox(void *arg)
+{
+ uint8_t *boxed=NULL, *decoded=NULL;
+ size_t len, dlen;
+ unsigned i;
+ const char msg[] = "This bunny reminds you that you still have a "
+ "salamander in your sylladex. She is holding the bunny Dave got you. "
+ "It’s sort of uncanny how similar they are, aside from the knitted "
+ "enhancements. Seriously, what are the odds?? So weird.";
+ const char pw[] = "I'm a night owl and a wise bird too";
+
+ const unsigned flags[] = { 0,
+ S2K_FLAG_NO_SCRYPT,
+ S2K_FLAG_LOW_MEM,
+ S2K_FLAG_NO_SCRYPT|S2K_FLAG_LOW_MEM,
+ S2K_FLAG_USE_PBKDF2 };
+ (void)arg;
+
+ for (i = 0; i < ARRAY_LENGTH(flags); ++i) {
+ tt_int_op(0, OP_EQ, crypto_pwbox(&boxed, &len,
+ (const uint8_t*)msg, strlen(msg),
+ pw, strlen(pw), flags[i]));
+ tt_assert(boxed);
+ tt_assert(len > 128+32);
+
+ tt_int_op(0, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len,
+ pw, strlen(pw)));
+
+ tt_assert(decoded);
+ tt_uint_op(dlen, OP_EQ, strlen(msg));
+ tt_mem_op(decoded, OP_EQ, msg, dlen);
+
+ tor_free(decoded);
+
+ tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen,
+ boxed, len,
+ pw, strlen(pw)-1));
+ boxed[len-1] ^= 1;
+ tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen,
+ boxed, len,
+ pw, strlen(pw)));
+ boxed[0] = 255;
+ tt_int_op(UNPWBOX_CORRUPTED, OP_EQ, crypto_unpwbox(&decoded, &dlen,
+ boxed, len,
+ pw, strlen(pw)));
+
+ tor_free(boxed);
+ }
+
+ done:
+ tor_free(boxed);
+ tor_free(decoded);
+}
+
/** Test AES-CTR encryption and decryption with IV. */
static void
test_crypto_aes_iv(void *arg)
@@ -772,79 +1115,79 @@ test_crypto_aes_iv(void *arg)
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 4095,
plain, 4095);
- tt_int_op(encrypted_size,==, 16 + 4095);
+ tt_int_op(encrypted_size,OP_EQ, 16 + 4095);
tt_assert(encrypted_size > 0); /* This is obviously true, since 4111 is
* greater than 0, but its truth is not
* obvious to all analysis tools. */
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 4095);
+ tt_int_op(decrypted_size,OP_EQ, 4095);
tt_assert(decrypted_size > 0);
- tt_mem_op(plain,==, decrypted1, 4095);
+ tt_mem_op(plain,OP_EQ, decrypted1, 4095);
/* Encrypt a second time (with a new random initialization vector). */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted2, 16 + 4095,
plain, 4095);
- tt_int_op(encrypted_size,==, 16 + 4095);
+ tt_int_op(encrypted_size,OP_EQ, 16 + 4095);
tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted2, 4095,
encrypted2, encrypted_size);
- tt_int_op(decrypted_size,==, 4095);
+ tt_int_op(decrypted_size,OP_EQ, 4095);
tt_assert(decrypted_size > 0);
- tt_mem_op(plain,==, decrypted2, 4095);
- tt_mem_op(encrypted1,!=, encrypted2, encrypted_size);
+ tt_mem_op(plain,OP_EQ, decrypted2, 4095);
+ tt_mem_op(encrypted1,OP_NE, encrypted2, encrypted_size);
/* Decrypt with the wrong key. */
decrypted_size = crypto_cipher_decrypt_with_iv(key2, decrypted2, 4095,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 4095);
- tt_mem_op(plain,!=, decrypted2, decrypted_size);
+ tt_int_op(decrypted_size,OP_EQ, 4095);
+ tt_mem_op(plain,OP_NE, decrypted2, decrypted_size);
/* Alter the initialization vector. */
encrypted1[0] += 42;
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 4095);
- tt_mem_op(plain,!=, decrypted2, 4095);
+ tt_int_op(decrypted_size,OP_EQ, 4095);
+ tt_mem_op(plain,OP_NE, decrypted2, 4095);
/* Special length case: 1. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 1,
plain_1, 1);
- tt_int_op(encrypted_size,==, 16 + 1);
+ tt_int_op(encrypted_size,OP_EQ, 16 + 1);
tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 1,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 1);
+ tt_int_op(decrypted_size,OP_EQ, 1);
tt_assert(decrypted_size > 0);
- tt_mem_op(plain_1,==, decrypted1, 1);
+ tt_mem_op(plain_1,OP_EQ, decrypted1, 1);
/* Special length case: 15. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 15,
plain_15, 15);
- tt_int_op(encrypted_size,==, 16 + 15);
+ tt_int_op(encrypted_size,OP_EQ, 16 + 15);
tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 15,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 15);
+ tt_int_op(decrypted_size,OP_EQ, 15);
tt_assert(decrypted_size > 0);
- tt_mem_op(plain_15,==, decrypted1, 15);
+ tt_mem_op(plain_15,OP_EQ, decrypted1, 15);
/* Special length case: 16. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 16,
plain_16, 16);
- tt_int_op(encrypted_size,==, 16 + 16);
+ tt_int_op(encrypted_size,OP_EQ, 16 + 16);
tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 16,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 16);
+ tt_int_op(decrypted_size,OP_EQ, 16);
tt_assert(decrypted_size > 0);
- tt_mem_op(plain_16,==, decrypted1, 16);
+ tt_mem_op(plain_16,OP_EQ, decrypted1, 16);
/* Special length case: 17. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 17,
plain_17, 17);
- tt_int_op(encrypted_size,==, 16 + 17);
+ tt_int_op(encrypted_size,OP_EQ, 16 + 17);
tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 17,
encrypted1, encrypted_size);
- tt_int_op(decrypted_size,==, 17);
+ tt_int_op(decrypted_size,OP_EQ, 17);
tt_assert(decrypted_size > 0);
- tt_mem_op(plain_17,==, decrypted1, 17);
+ tt_mem_op(plain_17,OP_EQ, decrypted1, 17);
done:
/* Free memory. */
@@ -866,26 +1209,26 @@ test_crypto_base32_decode(void *arg)
/* Encode and decode a random string. */
base32_encode(encoded, 96 + 1, plain, 60);
res = base32_decode(decoded, 60, encoded, 96);
- tt_int_op(res,==, 0);
- tt_mem_op(plain,==, decoded, 60);
+ tt_int_op(res,OP_EQ, 0);
+ tt_mem_op(plain,OP_EQ, decoded, 60);
/* Encode, uppercase, and decode a random string. */
base32_encode(encoded, 96 + 1, plain, 60);
tor_strupper(encoded);
res = base32_decode(decoded, 60, encoded, 96);
- tt_int_op(res,==, 0);
- tt_mem_op(plain,==, decoded, 60);
+ tt_int_op(res,OP_EQ, 0);
+ tt_mem_op(plain,OP_EQ, decoded, 60);
/* Change encoded string and decode. */
if (encoded[0] == 'A' || encoded[0] == 'a')
encoded[0] = 'B';
else
encoded[0] = 'A';
res = base32_decode(decoded, 60, encoded, 96);
- tt_int_op(res,==, 0);
- tt_mem_op(plain,!=, decoded, 60);
+ tt_int_op(res,OP_EQ, 0);
+ tt_mem_op(plain,OP_NE, decoded, 60);
/* Bad encodings. */
encoded[0] = '!';
res = base32_decode(decoded, 60, encoded, 96);
- tt_int_op(0, >, res);
+ tt_int_op(0, OP_GT, res);
done:
;
@@ -908,7 +1251,7 @@ test_crypto_kdf_TAP(void *arg)
* your own. */
memset(key_material, 0, sizeof(key_material));
EXPAND("");
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
test_memeq_hex(key_material,
"5ba93c9db0cff93f52b521d7420e43f6eda2784fbf8b4530d8"
"d246dd74ac53a13471bba17941dff7c4ea21bb365bbeeaf5f2"
@@ -916,7 +1259,7 @@ test_crypto_kdf_TAP(void *arg)
"f07b01e13da42c6cf1de3abfdea9b95f34687cbbe92b9a7383");
EXPAND("Tor");
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
test_memeq_hex(key_material,
"776c6214fc647aaa5f683c737ee66ec44f03d0372e1cce6922"
"7950f236ddf1e329a7ce7c227903303f525a8c6662426e8034"
@@ -924,7 +1267,7 @@ test_crypto_kdf_TAP(void *arg)
"3f45dfda1a80bdc8b80de01b23e3e0ffae099b3e4ccf28dc28");
EXPAND("AN ALARMING ITEM TO FIND ON A MONTHLY AUTO-DEBIT NOTICE");
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
test_memeq_hex(key_material,
"a340b5d126086c3ab29c2af4179196dbf95e1c72431419d331"
"4844bf8f6afb6098db952b95581fb6c33625709d6f4400b8e7"
@@ -960,7 +1303,7 @@ test_crypto_hkdf_sha256(void *arg)
/* Test vectors generated with ntor_ref.py */
memset(key_material, 0, sizeof(key_material));
EXPAND("");
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
test_memeq_hex(key_material,
"d3490ed48b12a48f9547861583573fe3f19aafe3f81dc7fc75"
"eeed96d741b3290f941576c1f9f0b2d463d1ec7ab2c6bf71cd"
@@ -968,7 +1311,7 @@ test_crypto_hkdf_sha256(void *arg)
"dcf6abe0d20c77cf363e8ffe358927817a3d3e73712cee28d8");
EXPAND("Tor");
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
test_memeq_hex(key_material,
"5521492a85139a8d9107a2d5c0d9c91610d0f95989975ebee6"
"c02a4f8d622a6cfdf9b7c7edd3832e2760ded1eac309b76f8d"
@@ -976,7 +1319,7 @@ test_crypto_hkdf_sha256(void *arg)
"961be9fdb9f93197ea8e5977180801926d3321fa21513e59ac");
EXPAND("AN ALARMING ITEM TO FIND ON YOUR CREDIT-RATING STATEMENT");
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
test_memeq_hex(key_material,
"a2aa9b50da7e481d30463adb8f233ff06e9571a0ca6ab6df0f"
"b206fa34e5bc78d063fc291501beec53b36e5a0e434561200c"
@@ -988,7 +1331,6 @@ test_crypto_hkdf_sha256(void *arg)
#undef EXPAND
}
-#ifdef CURVE25519_ENABLED
static void
test_crypto_curve25519_impl(void *arg)
{
@@ -1040,7 +1382,7 @@ test_crypto_curve25519_impl(void *arg)
e2k[31] |= (byte & 0x80);
}
curve25519_impl(e1e2k,e1,e2k);
- tt_mem_op(e1e2k,==, e2e1k, 32);
+ tt_mem_op(e1e2k,OP_EQ, e2e1k, 32);
if (loop == loop_max-1) {
break;
}
@@ -1076,7 +1418,7 @@ test_crypto_curve25519_wrappers(void *arg)
tt_assert(curve25519_public_key_is_ok(&pubkey2));
curve25519_handshake(output1, &seckey1, &pubkey2);
curve25519_handshake(output2, &seckey2, &pubkey1);
- tt_mem_op(output1,==, output2, sizeof(output1));
+ tt_mem_op(output1,OP_EQ, output2, sizeof(output1));
done:
;
@@ -1093,26 +1435,26 @@ test_crypto_curve25519_encode(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, OP_EQ, curve25519_public_to_base64(buf, &key1));
+ tt_int_op(CURVE25519_BASE64_PADDED_LEN, OP_EQ, strlen(buf));
- tt_int_op(0, ==, curve25519_public_from_base64(&key2, buf));
- tt_mem_op(key1.public_key,==, key2.public_key, CURVE25519_PUBKEY_LEN);
+ tt_int_op(0, OP_EQ, curve25519_public_from_base64(&key2, buf));
+ tt_mem_op(key1.public_key,OP_EQ, 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));
- tt_mem_op(key1.public_key,==, key3.public_key, CURVE25519_PUBKEY_LEN);
+ tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, OP_EQ, strlen(buf));
+ tt_int_op(0, OP_EQ, curve25519_public_from_base64(&key3, buf));
+ tt_mem_op(key1.public_key,OP_EQ, key3.public_key, CURVE25519_PUBKEY_LEN);
/* Now try bogus parses. */
strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=", sizeof(buf));
- tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+ tt_int_op(-1, OP_EQ, curve25519_public_from_base64(&key3, buf));
strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", sizeof(buf));
- tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+ tt_int_op(-1, OP_EQ, curve25519_public_from_base64(&key3, buf));
strlcpy(buf, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", sizeof(buf));
- tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+ tt_int_op(-1, OP_EQ, curve25519_public_from_base64(&key3, buf));
done:
;
@@ -1131,45 +1473,49 @@ test_crypto_curve25519_persist(void *arg)
(void)arg;
- tt_int_op(0,==,curve25519_keypair_generate(&keypair, 0));
+ tt_int_op(0,OP_EQ,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");
+ tt_int_op(0,OP_EQ,
+ curve25519_keypair_write_to_file(&keypair, fname, "testing"));
+ tt_int_op(0,OP_EQ,curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+ tt_str_op(tag,OP_EQ,"testing");
tor_free(tag);
- tt_mem_op(keypair.pubkey.public_key,==,
+ tt_mem_op(keypair.pubkey.public_key,OP_EQ,
keypair2.pubkey.public_key,
CURVE25519_PUBKEY_LEN);
- tt_mem_op(keypair.seckey.secret_key,==,
+ tt_mem_op(keypair.seckey.secret_key,OP_EQ,
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, ==,
+ tt_u64_op((uint64_t)st.st_size, OP_EQ,
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;
- tt_mem_op(keypair.seckey.secret_key,==,
+ tt_mem_op(keypair.seckey.secret_key,OP_EQ,
cp,
CURVE25519_SECKEY_LEN);
cp += CURVE25519_SECKEY_LEN;
- tt_mem_op(keypair.pubkey.public_key,==,
+ tt_mem_op(keypair.pubkey.public_key,OP_EQ,
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));
+ tt_int_op(-1, OP_EQ,
+ 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));
+ tt_int_op(0, OP_EQ,
+ write_bytes_to_file(fname, content, (size_t)st.st_size, 1));
+ tt_int_op(-1, OP_EQ,
+ curve25519_keypair_read_from_file(&keypair2, &tag, fname));
done:
tor_free(fname);
@@ -1177,7 +1523,361 @@ test_crypto_curve25519_persist(void *arg)
tor_free(tag);
}
-#endif
+static void
+test_crypto_ed25519_simple(void *arg)
+{
+ ed25519_keypair_t kp1, kp2;
+ ed25519_public_key_t pub1, pub2;
+ ed25519_secret_key_t sec1, sec2;
+ ed25519_signature_t sig1, sig2;
+ const uint8_t msg[] =
+ "GNU will be able to run Unix programs, "
+ "but will not be identical to Unix.";
+ const uint8_t msg2[] =
+ "Microsoft Windows extends the features of the DOS operating system, "
+ "yet is compatible with most existing applications that run under DOS.";
+ size_t msg_len = strlen((const char*)msg);
+ size_t msg2_len = strlen((const char*)msg2);
+
+ (void)arg;
+
+ tt_int_op(0, OP_EQ, ed25519_secret_key_generate(&sec1, 0));
+ tt_int_op(0, OP_EQ, ed25519_secret_key_generate(&sec2, 1));
+
+ tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pub1, &sec1));
+ tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pub2, &sec1));
+
+ tt_mem_op(pub1.pubkey, OP_EQ, pub2.pubkey, sizeof(pub1.pubkey));
+
+ memcpy(&kp1.pubkey, &pub1, sizeof(pub1));
+ memcpy(&kp1.seckey, &sec1, sizeof(sec1));
+ tt_int_op(0, OP_EQ, ed25519_sign(&sig1, msg, msg_len, &kp1));
+ tt_int_op(0, OP_EQ, ed25519_sign(&sig2, msg, msg_len, &kp1));
+
+ /* Ed25519 signatures are deterministic */
+ tt_mem_op(sig1.sig, OP_EQ, sig2.sig, sizeof(sig1.sig));
+
+ /* Basic signature is valid. */
+ tt_int_op(0, OP_EQ, ed25519_checksig(&sig1, msg, msg_len, &pub1));
+
+ /* Altered signature doesn't work. */
+ sig1.sig[0] ^= 3;
+ tt_int_op(-1, OP_EQ, ed25519_checksig(&sig1, msg, msg_len, &pub1));
+
+ /* Wrong public key doesn't work. */
+ tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pub2, &sec2));
+ tt_int_op(-1, OP_EQ, ed25519_checksig(&sig2, msg, msg_len, &pub2));
+
+ /* Wrong message doesn't work. */
+ tt_int_op(0, OP_EQ, ed25519_checksig(&sig2, msg, msg_len, &pub1));
+ tt_int_op(-1, OP_EQ, ed25519_checksig(&sig2, msg, msg_len-1, &pub1));
+ tt_int_op(-1, OP_EQ, ed25519_checksig(&sig2, msg2, msg2_len, &pub1));
+
+ /* Batch signature checking works with some bad. */
+ tt_int_op(0, OP_EQ, ed25519_keypair_generate(&kp2, 0));
+ tt_int_op(0, OP_EQ, ed25519_sign(&sig1, msg, msg_len, &kp2));
+ {
+ ed25519_checkable_t ch[] = {
+ { &pub1, sig2, msg, msg_len }, /*ok*/
+ { &pub1, sig2, msg, msg_len-1 }, /*bad*/
+ { &kp2.pubkey, sig2, msg2, msg2_len }, /*bad*/
+ { &kp2.pubkey, sig1, msg, msg_len }, /*ok*/
+ };
+ int okay[4];
+ tt_int_op(-2, OP_EQ, ed25519_checksig_batch(okay, ch, 4));
+ tt_int_op(okay[0], OP_EQ, 1);
+ tt_int_op(okay[1], OP_EQ, 0);
+ tt_int_op(okay[2], OP_EQ, 0);
+ tt_int_op(okay[3], OP_EQ, 1);
+ tt_int_op(-2, OP_EQ, ed25519_checksig_batch(NULL, ch, 4));
+ }
+
+ /* Batch signature checking works with all good. */
+ {
+ ed25519_checkable_t ch[] = {
+ { &pub1, sig2, msg, msg_len }, /*ok*/
+ { &kp2.pubkey, sig1, msg, msg_len }, /*ok*/
+ };
+ int okay[2];
+ tt_int_op(0, OP_EQ, ed25519_checksig_batch(okay, ch, 2));
+ tt_int_op(okay[0], OP_EQ, 1);
+ tt_int_op(okay[1], OP_EQ, 1);
+ tt_int_op(0, OP_EQ, ed25519_checksig_batch(NULL, ch, 2));
+ }
+
+ done:
+ ;
+}
+
+static void
+test_crypto_ed25519_test_vectors(void *arg)
+{
+ char *mem_op_hex_tmp=NULL;
+ int i;
+ struct {
+ const char *sk;
+ const char *pk;
+ const char *sig;
+ const char *msg;
+ } items[] = {
+ /* These test vectors were generated with the "ref" implementation of
+ * ed25519 from SUPERCOP-20130419 */
+ { "4c6574277320686f706520746865726520617265206e6f206275677320696e20",
+ "f3e0e493b30f56e501aeb868fc912fe0c8b76621efca47a78f6d75875193dd87",
+ "b5d7fd6fd3adf643647ce1fe87a2931dedd1a4e38e6c662bedd35cdd80bfac51"
+ "1b2c7d1ee6bd929ac213014e1a8dc5373854c7b25dbe15ec96bf6c94196fae06",
+ "506c6561736520657863757365206d7920667269656e642e2048652069736e2774"
+ "204e554c2d7465726d696e617465642e"
+ },
+
+ { "74686520696d706c656d656e746174696f6e20776869636820617265206e6f74",
+ "407f0025a1e1351a4cb68e92f5c0ebaf66e7aaf93a4006a4d1a66e3ede1cfeac",
+ "02884fde1c3c5944d0ecf2d133726fc820c303aae695adceabf3a1e01e95bf28"
+ "da88c0966f5265e9c6f8edc77b3b96b5c91baec3ca993ccd21a3f64203600601",
+ "506c6561736520657863757365206d7920667269656e642e2048652069736e2774"
+ "204e554c2d7465726d696e617465642e"
+ },
+ { "6578706f73656420627920456e676c697368207465787420617320696e707574",
+ "61681cb5fbd69f9bc5a462a21a7ab319011237b940bc781cdc47fcbe327e7706",
+ "6a127d0414de7510125d4bc214994ffb9b8857a46330832d05d1355e882344ad"
+ "f4137e3ca1f13eb9cc75c887ef2309b98c57528b4acd9f6376c6898889603209",
+ "506c6561736520657863757365206d7920667269656e642e2048652069736e2774"
+ "204e554c2d7465726d696e617465642e"
+ },
+
+ /* These come from "sign.input" in ed25519's page */
+ { "5b5a619f8ce1c66d7ce26e5a2ae7b0c04febcd346d286c929e19d0d5973bfef9",
+ "6fe83693d011d111131c4f3fbaaa40a9d3d76b30012ff73bb0e39ec27ab18257",
+ "0f9ad9793033a2fa06614b277d37381e6d94f65ac2a5a94558d09ed6ce922258"
+ "c1a567952e863ac94297aec3c0d0c8ddf71084e504860bb6ba27449b55adc40e",
+ "5a8d9d0a22357e6655f9c785"
+ },
+ { "940c89fe40a81dafbdb2416d14ae469119869744410c3303bfaa0241dac57800",
+ "a2eb8c0501e30bae0cf842d2bde8dec7386f6b7fc3981b8c57c9792bb94cf2dd",
+ "d8bb64aad8c9955a115a793addd24f7f2b077648714f49c4694ec995b330d09d"
+ "640df310f447fd7b6cb5c14f9fe9f490bcf8cfadbfd2169c8ac20d3b8af49a0c",
+ "b87d3813e03f58cf19fd0b6395"
+ },
+ { "9acad959d216212d789a119252ebfe0c96512a23c73bd9f3b202292d6916a738",
+ "cf3af898467a5b7a52d33d53bc037e2642a8da996903fc252217e9c033e2f291",
+ "6ee3fe81e23c60eb2312b2006b3b25e6838e02106623f844c44edb8dafd66ab0"
+ "671087fd195df5b8f58a1d6e52af42908053d55c7321010092748795ef94cf06",
+ "55c7fa434f5ed8cdec2b7aeac173",
+ },
+ { "d5aeee41eeb0e9d1bf8337f939587ebe296161e6bf5209f591ec939e1440c300",
+ "fd2a565723163e29f53c9de3d5e8fbe36a7ab66e1439ec4eae9c0a604af291a5",
+ "f68d04847e5b249737899c014d31c805c5007a62c0a10d50bb1538c5f3550395"
+ "1fbc1e08682f2cc0c92efe8f4985dec61dcbd54d4b94a22547d24451271c8b00",
+ "0a688e79be24f866286d4646b5d81c"
+ },
+
+ { NULL, NULL, NULL, NULL}
+ };
+
+ (void)arg;
+
+ for (i = 0; items[i].pk; ++i) {
+ ed25519_keypair_t kp;
+ ed25519_signature_t sig;
+ uint8_t sk_seed[32];
+ uint8_t *msg;
+ size_t msg_len;
+ base16_decode((char*)sk_seed, sizeof(sk_seed),
+ items[i].sk, 64);
+ ed25519_secret_key_from_seed(&kp.seckey, sk_seed);
+ tt_int_op(0, OP_EQ, ed25519_public_key_generate(&kp.pubkey, &kp.seckey));
+ test_memeq_hex(kp.pubkey.pubkey, items[i].pk);
+
+ msg_len = strlen(items[i].msg) / 2;
+ msg = tor_malloc(msg_len);
+ base16_decode((char*)msg, msg_len, items[i].msg, strlen(items[i].msg));
+
+ tt_int_op(0, OP_EQ, ed25519_sign(&sig, msg, msg_len, &kp));
+ test_memeq_hex(sig.sig, items[i].sig);
+
+ tor_free(msg);
+ }
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_ed25519_encode(void *arg)
+{
+ char buf[ED25519_BASE64_LEN+1];
+ ed25519_keypair_t kp;
+ ed25519_public_key_t pk;
+ char *mem_op_hex_tmp = NULL;
+ (void) arg;
+
+ /* Test roundtrip. */
+ tt_int_op(0, OP_EQ, ed25519_keypair_generate(&kp, 0));
+ tt_int_op(0, OP_EQ, ed25519_public_to_base64(buf, &kp.pubkey));
+ tt_int_op(ED25519_BASE64_LEN, OP_EQ, strlen(buf));
+ tt_int_op(0, OP_EQ, ed25519_public_from_base64(&pk, buf));
+ tt_mem_op(kp.pubkey.pubkey, OP_EQ, pk.pubkey, ED25519_PUBKEY_LEN);
+
+ /* Test known value. */
+ tt_int_op(0, OP_EQ, ed25519_public_from_base64(&pk,
+ "lVIuIctLjbGZGU5wKMNXxXlSE3cW4kaqkqm04u6pxvM"));
+ test_memeq_hex(pk.pubkey,
+ "95522e21cb4b8db199194e7028c357c57952137716e246aa92a9b4e2eea9c6f3");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_ed25519_convert(void *arg)
+{
+ const uint8_t msg[] =
+ "The eyes are not here / There are no eyes here.";
+ const int N = 30;
+ int i;
+ (void)arg;
+
+ for (i = 0; i < N; ++i) {
+ curve25519_keypair_t curve25519_keypair;
+ ed25519_keypair_t ed25519_keypair;
+ ed25519_public_key_t ed25519_pubkey;
+
+ int bit=0;
+ ed25519_signature_t sig;
+
+ tt_int_op(0,OP_EQ,curve25519_keypair_generate(&curve25519_keypair, i&1));
+ tt_int_op(0,OP_EQ,ed25519_keypair_from_curve25519_keypair(
+ &ed25519_keypair, &bit, &curve25519_keypair));
+ tt_int_op(0,OP_EQ,ed25519_public_key_from_curve25519_public_key(
+ &ed25519_pubkey, &curve25519_keypair.pubkey, bit));
+ tt_mem_op(ed25519_pubkey.pubkey, OP_EQ, ed25519_keypair.pubkey.pubkey, 32);
+
+ tt_int_op(0,OP_EQ,ed25519_sign(&sig, msg, sizeof(msg), &ed25519_keypair));
+ tt_int_op(0,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg),
+ &ed25519_pubkey));
+
+ tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg)-1,
+ &ed25519_pubkey));
+ sig.sig[0] ^= 15;
+ tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg),
+ &ed25519_pubkey));
+ }
+
+ done:
+ ;
+}
+
+static void
+test_crypto_ed25519_blinding(void *arg)
+{
+ const uint8_t msg[] =
+ "Eyes I dare not meet in dreams / In death's dream kingdom";
+
+ const int N = 30;
+ int i;
+ (void)arg;
+
+ for (i = 0; i < N; ++i) {
+ uint8_t blinding[32];
+ ed25519_keypair_t ed25519_keypair;
+ ed25519_keypair_t ed25519_keypair_blinded;
+ ed25519_public_key_t ed25519_pubkey_blinded;
+
+ ed25519_signature_t sig;
+
+ crypto_rand((char*) blinding, sizeof(blinding));
+
+ tt_int_op(0,OP_EQ,ed25519_keypair_generate(&ed25519_keypair, 0));
+ tt_int_op(0,OP_EQ,ed25519_keypair_blind(&ed25519_keypair_blinded,
+ &ed25519_keypair, blinding));
+
+ tt_int_op(0,OP_EQ,ed25519_public_blind(&ed25519_pubkey_blinded,
+ &ed25519_keypair.pubkey, blinding));
+
+ tt_mem_op(ed25519_pubkey_blinded.pubkey, OP_EQ,
+ ed25519_keypair_blinded.pubkey.pubkey, 32);
+
+ tt_int_op(0,OP_EQ,ed25519_sign(&sig, msg, sizeof(msg),
+ &ed25519_keypair_blinded));
+
+ tt_int_op(0,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg),
+ &ed25519_pubkey_blinded));
+
+ tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg)-1,
+ &ed25519_pubkey_blinded));
+ sig.sig[0] ^= 15;
+ tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg),
+ &ed25519_pubkey_blinded));
+ }
+
+ done:
+ ;
+}
+
+static void
+test_crypto_ed25519_testvectors(void *arg)
+{
+ unsigned i;
+ char *mem_op_hex_tmp = NULL;
+ (void)arg;
+
+ for (i = 0; i < ARRAY_LENGTH(ED25519_SECRET_KEYS); ++i) {
+ uint8_t sk[32];
+ ed25519_secret_key_t esk;
+ ed25519_public_key_t pk, blind_pk, pkfromcurve;
+ ed25519_keypair_t keypair, blind_keypair;
+ curve25519_keypair_t curvekp;
+ uint8_t blinding_param[32];
+ ed25519_signature_t sig;
+ int sign;
+
+#define DECODE(p,s) base16_decode((char*)(p),sizeof(p),(s),strlen(s))
+#define EQ(a,h) test_memeq_hex((const char*)(a), (h))
+
+ tt_int_op(0, OP_EQ, DECODE(sk, ED25519_SECRET_KEYS[i]));
+ tt_int_op(0, OP_EQ, DECODE(blinding_param, ED25519_BLINDING_PARAMS[i]));
+
+ tt_int_op(0, OP_EQ, ed25519_secret_key_from_seed(&esk, sk));
+ EQ(esk.seckey, ED25519_EXPANDED_SECRET_KEYS[i]);
+
+ tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pk, &esk));
+ EQ(pk.pubkey, ED25519_PUBLIC_KEYS[i]);
+
+ memcpy(&curvekp.seckey.secret_key, esk.seckey, 32);
+ curve25519_public_key_generate(&curvekp.pubkey, &curvekp.seckey);
+
+ tt_int_op(0, OP_EQ,
+ ed25519_keypair_from_curve25519_keypair(&keypair, &sign, &curvekp));
+ tt_int_op(0, OP_EQ, ed25519_public_key_from_curve25519_public_key(
+ &pkfromcurve, &curvekp.pubkey, sign));
+ tt_mem_op(keypair.pubkey.pubkey, OP_EQ, pkfromcurve.pubkey, 32);
+ EQ(curvekp.pubkey.public_key, ED25519_CURVE25519_PUBLIC_KEYS[i]);
+
+ /* Self-signing */
+ memcpy(&keypair.seckey, &esk, sizeof(esk));
+ memcpy(&keypair.pubkey, &pk, sizeof(pk));
+
+ tt_int_op(0, OP_EQ, ed25519_sign(&sig, pk.pubkey, 32, &keypair));
+
+ EQ(sig.sig, ED25519_SELF_SIGNATURES[i]);
+
+ /* Blinding */
+ tt_int_op(0, OP_EQ,
+ ed25519_keypair_blind(&blind_keypair, &keypair, blinding_param));
+ tt_int_op(0, OP_EQ,
+ ed25519_public_blind(&blind_pk, &pk, blinding_param));
+
+ EQ(blind_keypair.seckey.seckey, ED25519_BLINDED_SECRET_KEYS[i]);
+ EQ(blind_pk.pubkey, ED25519_BLINDED_PUBLIC_KEYS[i]);
+
+ tt_mem_op(blind_pk.pubkey, OP_EQ, blind_keypair.pubkey.pubkey, 32);
+
+#undef DECODE
+#undef EQ
+ }
+ done:
+ tor_free(mem_op_hex_tmp);
+}
static void
test_crypto_siphash(void *arg)
@@ -1267,7 +1967,7 @@ test_crypto_siphash(void *arg)
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]);
+ tt_int_op( (r >> (j*8)) & 0xff, OP_EQ, VECTORS[i][j]);
}
}
@@ -1304,19 +2004,39 @@ struct testcase_t crypto_tests[] = {
{ "pk_fingerprints", test_crypto_pk_fingerprints, TT_FORK, NULL, NULL },
CRYPTO_LEGACY(digests),
CRYPTO_LEGACY(dh),
- CRYPTO_LEGACY(s2k),
+ CRYPTO_LEGACY(s2k_rfc2440),
+#ifdef HAVE_LIBSCRYPT_H
+ { "s2k_scrypt", test_crypto_s2k_general, 0, &pass_data,
+ (void*)"scrypt" },
+ { "s2k_scrypt_low", test_crypto_s2k_general, 0, &pass_data,
+ (void*)"scrypt-low" },
+#endif
+ { "s2k_pbkdf2", test_crypto_s2k_general, 0, &pass_data,
+ (void*)"pbkdf2" },
+ { "s2k_rfc2440_general", test_crypto_s2k_general, 0, &pass_data,
+ (void*)"rfc2440" },
+ { "s2k_rfc2440_legacy", test_crypto_s2k_general, 0, &pass_data,
+ (void*)"rfc2440-legacy" },
+ { "s2k_errors", test_crypto_s2k_errors, 0, NULL, NULL },
+ { "scrypt_vectors", test_crypto_scrypt_vectors, 0, NULL, NULL },
+ { "pbkdf2_vectors", test_crypto_pbkdf2_vectors, 0, NULL, NULL },
+ { "pwbox", test_crypto_pwbox, 0, NULL, NULL },
{ "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
+ { "ed25519_simple", test_crypto_ed25519_simple, 0, NULL, NULL },
+ { "ed25519_test_vectors", test_crypto_ed25519_test_vectors, 0, NULL, NULL },
+ { "ed25519_encode", test_crypto_ed25519_encode, 0, NULL, NULL },
+ { "ed25519_convert", test_crypto_ed25519_convert, 0, NULL, NULL },
+ { "ed25519_blinding", test_crypto_ed25519_blinding, 0, NULL, NULL },
+ { "ed25519_testvectors", test_crypto_ed25519_testvectors, 0, NULL, NULL },
{ "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 0c51c98f1e..0e6f79f33c 100644
--- a/src/test/test_data.c
+++ b/src/test/test_data.c
@@ -1,6 +1,6 @@
/* Copyright 2001-2004 Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Our unit test expect that the AUTHORITY_CERT_* public keys will sort
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 3042ec281f..e5328fed56 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -180,20 +180,20 @@ test_dir_formats(void *arg)
buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same
* twice */
- tt_str_op(buf,==, buf2);
+ tt_str_op(buf,OP_EQ, buf2);
tor_free(buf);
buf = router_dump_router_to_string(r1, pk2);
tt_assert(buf);
cp = buf;
- rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
+ rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL,NULL);
tt_assert(rp1);
- tt_int_op(rp1->addr,==, r1->addr);
- tt_int_op(rp1->or_port,==, r1->or_port);
+ tt_int_op(rp1->addr,OP_EQ, r1->addr);
+ tt_int_op(rp1->or_port,OP_EQ, r1->or_port);
//test_eq(rp1->dir_port, r1->dir_port);
- tt_int_op(rp1->bandwidthrate,==, r1->bandwidthrate);
- tt_int_op(rp1->bandwidthburst,==, r1->bandwidthburst);
- tt_int_op(rp1->bandwidthcapacity,==, r1->bandwidthcapacity);
+ tt_int_op(rp1->bandwidthrate,OP_EQ, r1->bandwidthrate);
+ tt_int_op(rp1->bandwidthburst,OP_EQ, r1->bandwidthburst);
+ tt_int_op(rp1->bandwidthcapacity,OP_EQ, r1->bandwidthcapacity);
tt_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0);
tt_assert(crypto_pk_cmp_keys(rp1->identity_pkey, pk2) == 0);
//tt_assert(rp1->exit_policy == NULL);
@@ -216,52 +216,48 @@ test_dir_formats(void *arg)
strlcat(buf2, "signing-key\n", sizeof(buf2));
strlcat(buf2, pk1_str, sizeof(buf2));
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 */
- tt_str_op(buf,==, buf2);
+ tt_str_op(buf,OP_EQ, buf2);
tor_free(buf);
buf = router_dump_router_to_string(r2, pk1);
cp = buf;
- rp2 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
+ rp2 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL,NULL);
tt_assert(rp2);
- tt_int_op(rp2->addr,==, r2->addr);
- tt_int_op(rp2->or_port,==, r2->or_port);
- tt_int_op(rp2->dir_port,==, r2->dir_port);
- tt_int_op(rp2->bandwidthrate,==, r2->bandwidthrate);
- tt_int_op(rp2->bandwidthburst,==, r2->bandwidthburst);
- tt_int_op(rp2->bandwidthcapacity,==, r2->bandwidthcapacity);
-#ifdef CURVE25519_ENABLED
- tt_mem_op(rp2->onion_curve25519_pkey->public_key,==,
+ tt_int_op(rp2->addr,OP_EQ, r2->addr);
+ tt_int_op(rp2->or_port,OP_EQ, r2->or_port);
+ tt_int_op(rp2->dir_port,OP_EQ, r2->dir_port);
+ tt_int_op(rp2->bandwidthrate,OP_EQ, r2->bandwidthrate);
+ tt_int_op(rp2->bandwidthburst,OP_EQ, r2->bandwidthburst);
+ tt_int_op(rp2->bandwidthcapacity,OP_EQ, r2->bandwidthcapacity);
+ tt_mem_op(rp2->onion_curve25519_pkey->public_key,OP_EQ,
r2->onion_curve25519_pkey->public_key,
CURVE25519_PUBKEY_LEN);
-#endif
tt_assert(crypto_pk_cmp_keys(rp2->onion_pkey, pk2) == 0);
tt_assert(crypto_pk_cmp_keys(rp2->identity_pkey, pk1) == 0);
- tt_int_op(smartlist_len(rp2->exit_policy),==, 2);
+ tt_int_op(smartlist_len(rp2->exit_policy),OP_EQ, 2);
p = smartlist_get(rp2->exit_policy, 0);
- tt_int_op(p->policy_type,==, ADDR_POLICY_ACCEPT);
+ tt_int_op(p->policy_type,OP_EQ, ADDR_POLICY_ACCEPT);
tt_assert(tor_addr_is_null(&p->addr));
- tt_int_op(p->maskbits,==, 0);
- tt_int_op(p->prt_min,==, 80);
- tt_int_op(p->prt_max,==, 80);
+ tt_int_op(p->maskbits,OP_EQ, 0);
+ tt_int_op(p->prt_min,OP_EQ, 80);
+ tt_int_op(p->prt_max,OP_EQ, 80);
p = smartlist_get(rp2->exit_policy, 1);
- tt_int_op(p->policy_type,==, ADDR_POLICY_REJECT);
+ tt_int_op(p->policy_type,OP_EQ, ADDR_POLICY_REJECT);
tt_assert(tor_addr_eq(&p->addr, &ex2->addr));
- tt_int_op(p->maskbits,==, 8);
- tt_int_op(p->prt_min,==, 24);
- tt_int_op(p->prt_max,==, 24);
+ tt_int_op(p->maskbits,OP_EQ, 8);
+ tt_int_op(p->prt_min,OP_EQ, 24);
+ tt_int_op(p->prt_max,OP_EQ, 24);
#if 0
/* Okay, now for the directories. */
@@ -294,6 +290,506 @@ test_dir_formats(void *arg)
tor_free(dir2); /* And more !*/
}
+#include "failing_routerdescs.inc"
+
+static void
+test_dir_routerparse_bad(void *arg)
+{
+ (void) arg;
+
+ int again;
+ routerinfo_t *ri = NULL;
+
+#define CHECK_OK(s) \
+ do { \
+ routerinfo_free(ri); \
+ ri = router_parse_entry_from_string((s), NULL, 0, 0, NULL, NULL); \
+ tt_assert(ri); \
+ } while (0)
+#define CHECK_FAIL(s, againval) \
+ do { \
+ routerinfo_free(ri); \
+ again = 999; \
+ ri = router_parse_entry_from_string((s), NULL, 0, 0, NULL, &again); \
+ tt_assert(ri == NULL); \
+ tt_int_op(again, OP_EQ, (againval)); \
+ } while (0)
+
+ CHECK_OK(EX_RI_MINIMAL);
+ CHECK_OK(EX_RI_MAXIMAL);
+
+ /* good annotations prepended */
+ routerinfo_free(ri);
+ ri = router_parse_entry_from_string(EX_RI_MINIMAL, NULL, 0, 0,
+ "@purpose bridge\n", NULL);
+ tt_assert(ri != NULL);
+ tt_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE);
+ routerinfo_free(ri);
+
+ /* bad annotations prepended. */
+ ri = router_parse_entry_from_string(EX_RI_MINIMAL,
+ NULL, 0, 0, "@purpose\n", NULL);
+ tt_assert(ri == NULL);
+
+ /* bad annotations on router. */
+ ri = router_parse_entry_from_string("@purpose\nrouter x\n", NULL, 0, 1,
+ NULL, NULL);
+ tt_assert(ri == NULL);
+
+ /* unwanted annotations on router. */
+ ri = router_parse_entry_from_string("@purpose foo\nrouter x\n", NULL, 0, 0,
+ NULL, NULL);
+ tt_assert(ri == NULL);
+
+ /* No signature. */
+ ri = router_parse_entry_from_string("router x\n", NULL, 0, 0,
+ NULL, NULL);
+ tt_assert(ri == NULL);
+
+ /* Not a router */
+ routerinfo_free(ri);
+ ri = router_parse_entry_from_string("hello\n", NULL, 0, 0, NULL, NULL);
+ tt_assert(ri == NULL);
+
+ CHECK_FAIL(EX_RI_BAD_SIG1, 1);
+ CHECK_FAIL(EX_RI_BAD_SIG2, 1);
+ CHECK_FAIL(EX_RI_BAD_TOKENS, 0);
+ CHECK_FAIL(EX_RI_BAD_PUBLISHED, 0);
+ CHECK_FAIL(EX_RI_NEG_BANDWIDTH, 0);
+ CHECK_FAIL(EX_RI_BAD_BANDWIDTH, 0);
+ CHECK_FAIL(EX_RI_BAD_BANDWIDTH2, 0);
+ CHECK_FAIL(EX_RI_BAD_ONIONKEY1, 0);
+ CHECK_FAIL(EX_RI_BAD_ONIONKEY2, 0);
+ CHECK_FAIL(EX_RI_BAD_PORTS, 0);
+ CHECK_FAIL(EX_RI_BAD_IP, 0);
+ CHECK_FAIL(EX_RI_BAD_DIRPORT, 0);
+ CHECK_FAIL(EX_RI_BAD_NAME2, 0);
+ CHECK_FAIL(EX_RI_BAD_UPTIME, 0);
+
+ CHECK_FAIL(EX_RI_BAD_BANDWIDTH3, 0);
+ CHECK_FAIL(EX_RI_BAD_NTOR_KEY, 0);
+ CHECK_FAIL(EX_RI_BAD_FINGERPRINT, 0);
+ CHECK_FAIL(EX_RI_MISMATCHED_FINGERPRINT, 0);
+ CHECK_FAIL(EX_RI_BAD_HAS_ACCEPT6, 0);
+ CHECK_FAIL(EX_RI_BAD_NO_EXIT_POLICY, 0);
+ CHECK_FAIL(EX_RI_BAD_IPV6_EXIT_POLICY, 0);
+ CHECK_FAIL(EX_RI_BAD_FAMILY, 0);
+ CHECK_FAIL(EX_RI_ZERO_ORPORT, 0);
+
+ /* This is allowed; we just ignore it. */
+ CHECK_OK(EX_RI_BAD_EI_DIGEST);
+
+#undef CHECK_FAIL
+#undef CHECK_OK
+ done:
+ routerinfo_free(ri);
+}
+
+#include "example_extrainfo.inc"
+
+static void
+test_dir_extrainfo_parsing(void *arg)
+{
+ (void) arg;
+
+#define CHECK_OK(s) \
+ do { \
+ extrainfo_free(ei); \
+ ei = extrainfo_parse_entry_from_string((s), NULL, 0, map, NULL); \
+ tt_assert(ei); \
+ } while (0)
+#define CHECK_FAIL(s, againval) \
+ do { \
+ extrainfo_free(ei); \
+ again = 999; \
+ ei = extrainfo_parse_entry_from_string((s), NULL, 0, map, &again); \
+ tt_assert(ei == NULL); \
+ tt_int_op(again, OP_EQ, (againval)); \
+ } while (0)
+#define ADD(name) \
+ do { \
+ ri = tor_malloc_zero(sizeof(routerinfo_t)); \
+ crypto_pk_t *pk = ri->identity_pkey = crypto_pk_new(); \
+ tt_assert(! crypto_pk_read_public_key_from_string(pk, \
+ name##_KEY, strlen(name##_KEY))); \
+ tt_int_op(0,OP_EQ,base16_decode(d, 20, name##_FP, strlen(name##_FP))); \
+ digestmap_set((digestmap_t*)map, d, ri); \
+ ri = NULL; \
+ } while (0)
+
+ routerinfo_t *ri = NULL;
+ char d[20];
+ struct digest_ri_map_t *map = NULL;
+ extrainfo_t *ei = NULL;
+ int again;
+
+ CHECK_OK(EX_EI_MINIMAL);
+ tt_assert(ei->pending_sig);
+ CHECK_OK(EX_EI_MAXIMAL);
+ tt_assert(ei->pending_sig);
+
+ map = (struct digest_ri_map_t *)digestmap_new();
+ ADD(EX_EI_MINIMAL);
+ ADD(EX_EI_MAXIMAL);
+ ADD(EX_EI_BAD_FP);
+ ADD(EX_EI_BAD_NICKNAME);
+ ADD(EX_EI_BAD_TOKENS);
+ ADD(EX_EI_BAD_START);
+ ADD(EX_EI_BAD_PUBLISHED);
+
+ CHECK_OK(EX_EI_MINIMAL);
+ tt_assert(!ei->pending_sig);
+ CHECK_OK(EX_EI_MAXIMAL);
+ tt_assert(!ei->pending_sig);
+
+ CHECK_FAIL(EX_EI_BAD_SIG1,1);
+ CHECK_FAIL(EX_EI_BAD_SIG2,1);
+ CHECK_FAIL(EX_EI_BAD_SIG3,1);
+ CHECK_FAIL(EX_EI_BAD_FP,0);
+ CHECK_FAIL(EX_EI_BAD_NICKNAME,0);
+ CHECK_FAIL(EX_EI_BAD_TOKENS,0);
+ CHECK_FAIL(EX_EI_BAD_START,0);
+ CHECK_FAIL(EX_EI_BAD_PUBLISHED,0);
+
+#undef CHECK_OK
+#undef CHECK_FAIL
+
+ done:
+ routerinfo_free(ri);
+ /* XXXX elements should get freed too */
+ digestmap_free((digestmap_t*)map, NULL);
+}
+
+static void
+test_dir_parse_router_list(void *arg)
+{
+ (void) arg;
+ smartlist_t *invalid = smartlist_new();
+ smartlist_t *dest = smartlist_new();
+ smartlist_t *chunks = smartlist_new();
+ int dest_has_ri = 1;
+ char *list = NULL;
+ const char *cp;
+ digestmap_t *map = NULL;
+ char *mem_op_hex_tmp = NULL;
+ routerinfo_t *ri = NULL;
+ char d[DIGEST_LEN];
+
+ smartlist_add(chunks, tor_strdup(EX_RI_MINIMAL)); // ri 0
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_PORTS)); // bad ri 0
+ smartlist_add(chunks, tor_strdup(EX_EI_MAXIMAL)); // ei 0
+ smartlist_add(chunks, tor_strdup(EX_EI_BAD_SIG2)); // bad ei --
+ smartlist_add(chunks, tor_strdup(EX_EI_BAD_NICKNAME));// bad ei 0
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_SIG1)); // bad ri --
+ smartlist_add(chunks, tor_strdup(EX_EI_BAD_PUBLISHED)); // bad ei 1
+ smartlist_add(chunks, tor_strdup(EX_RI_MAXIMAL)); // ri 1
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_FAMILY)); // bad ri 1
+ smartlist_add(chunks, tor_strdup(EX_EI_MINIMAL)); // ei 1
+
+ list = smartlist_join_strings(chunks, "", 0, NULL);
+
+ /* First, parse the routers. */
+ cp = list;
+ tt_int_op(0,OP_EQ,
+ router_parse_list_from_string(&cp, NULL, dest, SAVED_NOWHERE,
+ 0, 0, NULL, invalid));
+ tt_int_op(2, OP_EQ, smartlist_len(dest));
+ tt_ptr_op(cp, OP_EQ, list + strlen(list));
+
+ routerinfo_t *r = smartlist_get(dest, 0);
+ tt_mem_op(r->cache_info.signed_descriptor_body, OP_EQ,
+ EX_RI_MINIMAL, strlen(EX_RI_MINIMAL));
+ r = smartlist_get(dest, 1);
+ tt_mem_op(r->cache_info.signed_descriptor_body, OP_EQ,
+ EX_RI_MAXIMAL, strlen(EX_RI_MAXIMAL));
+
+ tt_int_op(2, OP_EQ, smartlist_len(invalid));
+ test_memeq_hex(smartlist_get(invalid, 0),
+ "ab9eeaa95e7d45740185b4e519c76ead756277a9");
+ test_memeq_hex(smartlist_get(invalid, 1),
+ "9a651ee03b64325959e8f1b46f2b689b30750b4c");
+
+ /* Now tidy up */
+ SMARTLIST_FOREACH(dest, routerinfo_t *, ri, routerinfo_free(ri));
+ SMARTLIST_FOREACH(invalid, uint8_t *, d, tor_free(d));
+ smartlist_clear(dest);
+ smartlist_clear(invalid);
+
+ /* And check extrainfos. */
+ dest_has_ri = 0;
+ map = (digestmap_t*)router_get_routerlist()->identity_map;
+ ADD(EX_EI_MINIMAL);
+ ADD(EX_EI_MAXIMAL);
+ ADD(EX_EI_BAD_NICKNAME);
+ ADD(EX_EI_BAD_PUBLISHED);
+ cp = list;
+ tt_int_op(0,OP_EQ,
+ router_parse_list_from_string(&cp, NULL, dest, SAVED_NOWHERE,
+ 1, 0, NULL, invalid));
+ tt_int_op(2, OP_EQ, smartlist_len(dest));
+ extrainfo_t *e = smartlist_get(dest, 0);
+ tt_mem_op(e->cache_info.signed_descriptor_body, OP_EQ,
+ EX_EI_MAXIMAL, strlen(EX_EI_MAXIMAL));
+ e = smartlist_get(dest, 1);
+ tt_mem_op(e->cache_info.signed_descriptor_body, OP_EQ,
+ EX_EI_MINIMAL, strlen(EX_EI_MINIMAL));
+
+ tt_int_op(2, OP_EQ, smartlist_len(invalid));
+ test_memeq_hex(smartlist_get(invalid, 0),
+ "d5df4aa62ee9ffc9543d41150c9864908e0390af");
+ test_memeq_hex(smartlist_get(invalid, 1),
+ "f61efd2a7f4531f3687a9043e0de90a862ec64ba");
+
+ done:
+ tor_free(list);
+ if (dest_has_ri)
+ SMARTLIST_FOREACH(dest, routerinfo_t *, rt, routerinfo_free(rt));
+ else
+ SMARTLIST_FOREACH(dest, extrainfo_t *, ei, extrainfo_free(ei));
+ smartlist_free(dest);
+ SMARTLIST_FOREACH(invalid, uint8_t *, d, tor_free(d));
+ smartlist_free(invalid);
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ routerinfo_free(ri);
+ /* XXXX this leaks: */
+ if (map) {
+ digestmap_free((digestmap_t*)map, NULL);
+ router_get_routerlist()->identity_map =
+ (struct digest_ri_map_t*)digestmap_new();
+ }
+ tor_free(mem_op_hex_tmp);
+
+#undef ADD
+}
+
+static download_status_t dls_minimal;
+static download_status_t dls_maximal;
+static download_status_t dls_bad_fingerprint;
+static download_status_t dls_bad_sig2;
+static download_status_t dls_bad_ports;
+static download_status_t dls_bad_tokens;
+
+static int mock_router_get_dl_status_unrecognized = 0;
+static int mock_router_get_dl_status_calls = 0;
+
+static download_status_t *
+mock_router_get_dl_status(const char *d)
+{
+ ++mock_router_get_dl_status_calls;
+ char hex[HEX_DIGEST_LEN+1];
+ base16_encode(hex, sizeof(hex), d, DIGEST_LEN);
+ if (!strcmp(hex, "3E31D19A69EB719C00B02EC60D13356E3F7A3452")) {
+ return &dls_minimal;
+ } else if (!strcmp(hex, "581D8A368A0FA854ECDBFAB841D88B3F1B004038")) {
+ return &dls_maximal;
+ } else if (!strcmp(hex, "2578AE227C6116CDE29B3F0E95709B9872DEE5F1")) {
+ return &dls_bad_fingerprint;
+ } else if (!strcmp(hex, "16D387D3A58F7DB3CF46638F8D0B90C45C7D769C")) {
+ return &dls_bad_sig2;
+ } else if (!strcmp(hex, "AB9EEAA95E7D45740185B4E519C76EAD756277A9")) {
+ return &dls_bad_ports;
+ } else if (!strcmp(hex, "A0CC2CEFAD59DBF19F468BFEE60E0868C804B422")) {
+ return &dls_bad_tokens;
+ } else {
+ ++mock_router_get_dl_status_unrecognized;
+ return NULL;
+ }
+}
+
+static void
+test_dir_load_routers(void *arg)
+{
+ (void) arg;
+ smartlist_t *chunks = smartlist_new();
+ smartlist_t *wanted = smartlist_new();
+ char buf[DIGEST_LEN];
+ char *mem_op_hex_tmp = NULL;
+
+#define ADD(str) \
+ do { \
+ tt_int_op(0,OP_EQ,router_get_router_hash(str, strlen(str), buf)); \
+ smartlist_add(wanted, tor_strdup(hex_str(buf, DIGEST_LEN))); \
+ } while (0)
+
+ MOCK(router_get_dl_status_by_descriptor_digest, mock_router_get_dl_status);
+
+ update_approx_time(1412510400);
+
+ smartlist_add(chunks, tor_strdup(EX_RI_MINIMAL));
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_FINGERPRINT));
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_SIG2));
+ smartlist_add(chunks, tor_strdup(EX_RI_MAXIMAL));
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_PORTS));
+ smartlist_add(chunks, tor_strdup(EX_RI_BAD_TOKENS));
+
+ /* not ADDing MINIMIAL */
+ ADD(EX_RI_MAXIMAL);
+ ADD(EX_RI_BAD_FINGERPRINT);
+ ADD(EX_RI_BAD_SIG2);
+ /* Not ADDing BAD_PORTS */
+ ADD(EX_RI_BAD_TOKENS);
+
+ char *list = smartlist_join_strings(chunks, "", 0, NULL);
+ tt_int_op(1, OP_EQ,
+ router_load_routers_from_string(list, NULL, SAVED_IN_JOURNAL,
+ wanted, 1, NULL));
+
+ /* The "maximal" router was added. */
+ /* "minimal" was not. */
+ tt_int_op(smartlist_len(router_get_routerlist()->routers),OP_EQ,1);
+ routerinfo_t *r = smartlist_get(router_get_routerlist()->routers, 0);
+ test_memeq_hex(r->cache_info.signed_descriptor_digest,
+ "581D8A368A0FA854ECDBFAB841D88B3F1B004038");
+ tt_int_op(dls_minimal.n_download_failures, OP_EQ, 0);
+ tt_int_op(dls_maximal.n_download_failures, OP_EQ, 0);
+
+ /* "Bad fingerprint" and "Bad tokens" should have gotten marked
+ * non-retriable. */
+ tt_want_int_op(mock_router_get_dl_status_calls, OP_EQ, 2);
+ tt_want_int_op(mock_router_get_dl_status_unrecognized, OP_EQ, 0);
+ tt_int_op(dls_bad_fingerprint.n_download_failures, OP_EQ, 255);
+ tt_int_op(dls_bad_tokens.n_download_failures, OP_EQ, 255);
+
+ /* bad_sig2 and bad ports" are retriable -- one since only the signature
+ * was bad, and one because we didn't ask for it. */
+ tt_int_op(dls_bad_sig2.n_download_failures, OP_EQ, 0);
+ tt_int_op(dls_bad_ports.n_download_failures, OP_EQ, 0);
+
+ /* Wanted still contains "BAD_SIG2" */
+ tt_int_op(smartlist_len(wanted), OP_EQ, 1);
+ tt_str_op(smartlist_get(wanted, 0), OP_EQ,
+ "E0A3753CEFD54128EAB239F294954121DB23D2EF");
+
+#undef ADD
+
+ done:
+ tor_free(mem_op_hex_tmp);
+ UNMOCK(router_get_dl_status_by_descriptor_digest);
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ SMARTLIST_FOREACH(wanted, char *, cp, tor_free(cp));
+ smartlist_free(wanted);
+}
+
+static int mock_get_by_ei_dd_calls = 0;
+static int mock_get_by_ei_dd_unrecognized = 0;
+
+static signed_descriptor_t sd_ei_minimal;
+static signed_descriptor_t sd_ei_bad_nickname;
+static signed_descriptor_t sd_ei_maximal;
+static signed_descriptor_t sd_ei_bad_tokens;
+static signed_descriptor_t sd_ei_bad_sig2;
+
+static signed_descriptor_t *
+mock_get_by_ei_desc_digest(const char *d)
+{
+
+ ++mock_get_by_ei_dd_calls;
+ char hex[HEX_DIGEST_LEN+1];
+ base16_encode(hex, sizeof(hex), d, DIGEST_LEN);
+
+ if (!strcmp(hex, "11E0EDF526950739F7769810FCACAB8C882FAEEE")) {
+ return &sd_ei_minimal;
+ } else if (!strcmp(hex, "47803B02A0E70E9E8BDA226CB1D74DE354D67DFF")) {
+ return &sd_ei_maximal;
+ } else if (!strcmp(hex, "D5DF4AA62EE9FFC9543D41150C9864908E0390AF")) {
+ return &sd_ei_bad_nickname;
+ } else if (!strcmp(hex, "16D387D3A58F7DB3CF46638F8D0B90C45C7D769C")) {
+ return &sd_ei_bad_sig2;
+ } else if (!strcmp(hex, "9D90F8C42955BBC57D54FB05E54A3F083AF42E8B")) {
+ return &sd_ei_bad_tokens;
+ } else {
+ ++mock_get_by_ei_dd_unrecognized;
+ return NULL;
+ }
+}
+
+static smartlist_t *mock_ei_insert_list = NULL;
+static was_router_added_t
+mock_ei_insert(routerlist_t *rl, extrainfo_t *ei)
+{
+ (void) rl;
+ smartlist_add(mock_ei_insert_list, ei);
+ return ROUTER_ADDED_SUCCESSFULLY;
+}
+
+static void
+test_dir_load_extrainfo(void *arg)
+{
+ (void) arg;
+ smartlist_t *chunks = smartlist_new();
+ smartlist_t *wanted = smartlist_new();
+ char buf[DIGEST_LEN];
+ char *mem_op_hex_tmp = NULL;
+
+#define ADD(str) \
+ do { \
+ tt_int_op(0,OP_EQ,router_get_extrainfo_hash(str, strlen(str), buf)); \
+ smartlist_add(wanted, tor_strdup(hex_str(buf, DIGEST_LEN))); \
+ } while (0)
+
+ mock_ei_insert_list = smartlist_new();
+ MOCK(router_get_by_extrainfo_digest, mock_get_by_ei_desc_digest);
+ MOCK(extrainfo_insert, mock_ei_insert);
+
+ smartlist_add(chunks, tor_strdup(EX_EI_MINIMAL));
+ smartlist_add(chunks, tor_strdup(EX_EI_BAD_NICKNAME));
+ smartlist_add(chunks, tor_strdup(EX_EI_MAXIMAL));
+ smartlist_add(chunks, tor_strdup(EX_EI_BAD_PUBLISHED));
+ smartlist_add(chunks, tor_strdup(EX_EI_BAD_TOKENS));
+
+ /* not ADDing MINIMIAL */
+ ADD(EX_EI_MAXIMAL);
+ ADD(EX_EI_BAD_NICKNAME);
+ /* Not ADDing BAD_PUBLISHED */
+ ADD(EX_EI_BAD_TOKENS);
+ ADD(EX_EI_BAD_SIG2);
+
+ char *list = smartlist_join_strings(chunks, "", 0, NULL);
+ router_load_extrainfo_from_string(list, NULL, SAVED_IN_JOURNAL, wanted, 1);
+
+ /* The "maximal" router was added. */
+ /* "minimal" was also added, even though we didn't ask for it, since
+ * that's what we do with extrainfos. */
+ tt_int_op(smartlist_len(mock_ei_insert_list),OP_EQ,2);
+
+ extrainfo_t *e = smartlist_get(mock_ei_insert_list, 0);
+ test_memeq_hex(e->cache_info.signed_descriptor_digest,
+ "11E0EDF526950739F7769810FCACAB8C882FAEEE");
+
+ e = smartlist_get(mock_ei_insert_list, 1);
+ test_memeq_hex(e->cache_info.signed_descriptor_digest,
+ "47803B02A0E70E9E8BDA226CB1D74DE354D67DFF");
+ tt_int_op(dls_minimal.n_download_failures, OP_EQ, 0);
+ tt_int_op(dls_maximal.n_download_failures, OP_EQ, 0);
+
+ /* "Bad nickname" and "Bad tokens" should have gotten marked
+ * non-retriable. */
+ tt_want_int_op(mock_get_by_ei_dd_calls, OP_EQ, 2);
+ tt_want_int_op(mock_get_by_ei_dd_unrecognized, OP_EQ, 0);
+ tt_int_op(sd_ei_bad_nickname.ei_dl_status.n_download_failures, OP_EQ, 255);
+ tt_int_op(sd_ei_bad_tokens.ei_dl_status.n_download_failures, OP_EQ, 255);
+
+ /* bad_ports is retriable -- because we didn't ask for it. */
+ tt_int_op(dls_bad_ports.n_download_failures, OP_EQ, 0);
+
+ /* Wanted still contains "BAD_SIG2" */
+ tt_int_op(smartlist_len(wanted), OP_EQ, 1);
+ tt_str_op(smartlist_get(wanted, 0), OP_EQ,
+ "16D387D3A58F7DB3CF46638F8D0B90C45C7D769C");
+
+#undef ADD
+
+ done:
+ tor_free(mem_op_hex_tmp);
+ UNMOCK(router_get_by_extrainfo_digest);
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ SMARTLIST_FOREACH(wanted, char *, cp, tor_free(cp));
+ smartlist_free(wanted);
+}
+
static void
test_dir_versions(void *arg)
{
@@ -301,50 +797,50 @@ test_dir_versions(void *arg)
/* Try out version parsing functionality */
(void)arg;
- tt_int_op(0,==, tor_version_parse("0.3.4pre2-cvs", &ver1));
- tt_int_op(0,==, ver1.major);
- tt_int_op(3,==, ver1.minor);
- tt_int_op(4,==, ver1.micro);
- tt_int_op(VER_PRE,==, ver1.status);
- tt_int_op(2,==, ver1.patchlevel);
- tt_int_op(0,==, tor_version_parse("0.3.4rc1", &ver1));
- tt_int_op(0,==, ver1.major);
- tt_int_op(3,==, ver1.minor);
- tt_int_op(4,==, ver1.micro);
- tt_int_op(VER_RC,==, ver1.status);
- tt_int_op(1,==, ver1.patchlevel);
- tt_int_op(0,==, tor_version_parse("1.3.4", &ver1));
- tt_int_op(1,==, ver1.major);
- tt_int_op(3,==, ver1.minor);
- tt_int_op(4,==, ver1.micro);
- tt_int_op(VER_RELEASE,==, ver1.status);
- tt_int_op(0,==, ver1.patchlevel);
- tt_int_op(0,==, tor_version_parse("1.3.4.999", &ver1));
- tt_int_op(1,==, ver1.major);
- tt_int_op(3,==, ver1.minor);
- tt_int_op(4,==, ver1.micro);
- tt_int_op(VER_RELEASE,==, ver1.status);
- tt_int_op(999,==, ver1.patchlevel);
- tt_int_op(0,==, tor_version_parse("0.1.2.4-alpha", &ver1));
- tt_int_op(0,==, ver1.major);
- tt_int_op(1,==, ver1.minor);
- tt_int_op(2,==, ver1.micro);
- tt_int_op(4,==, ver1.patchlevel);
- tt_int_op(VER_RELEASE,==, ver1.status);
- tt_str_op("alpha",==, ver1.status_tag);
- tt_int_op(0,==, tor_version_parse("0.1.2.4", &ver1));
- tt_int_op(0,==, ver1.major);
- tt_int_op(1,==, ver1.minor);
- tt_int_op(2,==, ver1.micro);
- tt_int_op(4,==, ver1.patchlevel);
- tt_int_op(VER_RELEASE,==, ver1.status);
- tt_str_op("",==, ver1.status_tag);
+ tt_int_op(0,OP_EQ, tor_version_parse("0.3.4pre2-cvs", &ver1));
+ tt_int_op(0,OP_EQ, ver1.major);
+ tt_int_op(3,OP_EQ, ver1.minor);
+ tt_int_op(4,OP_EQ, ver1.micro);
+ tt_int_op(VER_PRE,OP_EQ, ver1.status);
+ tt_int_op(2,OP_EQ, ver1.patchlevel);
+ tt_int_op(0,OP_EQ, tor_version_parse("0.3.4rc1", &ver1));
+ tt_int_op(0,OP_EQ, ver1.major);
+ tt_int_op(3,OP_EQ, ver1.minor);
+ tt_int_op(4,OP_EQ, ver1.micro);
+ tt_int_op(VER_RC,OP_EQ, ver1.status);
+ tt_int_op(1,OP_EQ, ver1.patchlevel);
+ tt_int_op(0,OP_EQ, tor_version_parse("1.3.4", &ver1));
+ tt_int_op(1,OP_EQ, ver1.major);
+ tt_int_op(3,OP_EQ, ver1.minor);
+ tt_int_op(4,OP_EQ, ver1.micro);
+ tt_int_op(VER_RELEASE,OP_EQ, ver1.status);
+ tt_int_op(0,OP_EQ, ver1.patchlevel);
+ tt_int_op(0,OP_EQ, tor_version_parse("1.3.4.999", &ver1));
+ tt_int_op(1,OP_EQ, ver1.major);
+ tt_int_op(3,OP_EQ, ver1.minor);
+ tt_int_op(4,OP_EQ, ver1.micro);
+ tt_int_op(VER_RELEASE,OP_EQ, ver1.status);
+ tt_int_op(999,OP_EQ, ver1.patchlevel);
+ tt_int_op(0,OP_EQ, tor_version_parse("0.1.2.4-alpha", &ver1));
+ tt_int_op(0,OP_EQ, ver1.major);
+ tt_int_op(1,OP_EQ, ver1.minor);
+ tt_int_op(2,OP_EQ, ver1.micro);
+ tt_int_op(4,OP_EQ, ver1.patchlevel);
+ tt_int_op(VER_RELEASE,OP_EQ, ver1.status);
+ tt_str_op("alpha",OP_EQ, ver1.status_tag);
+ tt_int_op(0,OP_EQ, tor_version_parse("0.1.2.4", &ver1));
+ tt_int_op(0,OP_EQ, ver1.major);
+ tt_int_op(1,OP_EQ, ver1.minor);
+ tt_int_op(2,OP_EQ, ver1.micro);
+ tt_int_op(4,OP_EQ, ver1.patchlevel);
+ tt_int_op(VER_RELEASE,OP_EQ, ver1.status);
+ tt_str_op("",OP_EQ, ver1.status_tag);
#define tt_versionstatus_op(vs1, op, vs2) \
tt_assert_test_type(vs1,vs2,#vs1" "#op" "#vs2,version_status_t, \
(val1_ op val2_),"%d",TT_EXIT_TEST_FUNCTION)
#define test_v_i_o(val, ver, lst) \
- tt_versionstatus_op(val, ==, tor_version_is_obsolete(ver, lst))
+ tt_versionstatus_op(val, OP_EQ, tor_version_is_obsolete(ver, lst))
/* make sure tor_version_is_obsolete() works */
test_v_i_o(VS_OLD, "0.0.1", "Tor 0.0.2");
@@ -371,42 +867,43 @@ test_dir_versions(void *arg)
/* On list, not newer than any on same series. */
test_v_i_o(VS_UNRECOMMENDED,
"0.1.0.1", "Tor 0.1.0.2,Tor 0.0.9.5,Tor 0.1.1.0");
- tt_int_op(0,==, tor_version_as_new_as("Tor 0.0.5", "0.0.9pre1-cvs"));
- tt_int_op(1,==, tor_version_as_new_as(
+ tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.0.5", "0.0.9pre1-cvs"));
+ tt_int_op(1,OP_EQ, tor_version_as_new_as(
"Tor 0.0.8 on Darwin 64-121-192-100.c3-0."
"sfpo-ubr1.sfrn-sfpo.ca.cable.rcn.com Power Macintosh",
"0.0.8rc2"));
- tt_int_op(0,==, tor_version_as_new_as(
+ tt_int_op(0,OP_EQ, tor_version_as_new_as(
"Tor 0.0.8 on Darwin 64-121-192-100.c3-0."
"sfpo-ubr1.sfrn-sfpo.ca.cable.rcn.com Power Macintosh", "0.0.8.2"));
/* Now try svn revisions. */
- tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)",
+ tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)",
"Tor 0.2.1.0-dev (r99)"));
- tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r100) on Banana Jr",
+ tt_int_op(1,OP_EQ, tor_version_as_new_as(
+ "Tor 0.2.1.0-dev (r100) on Banana Jr",
"Tor 0.2.1.0-dev (r99) on Hal 9000"));
- tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)",
+ tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)",
"Tor 0.2.1.0-dev on Colossus"));
- tt_int_op(0,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r99)",
+ tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r99)",
"Tor 0.2.1.0-dev (r100)"));
- tt_int_op(0,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r99) on MCP",
+ tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r99) on MCP",
"Tor 0.2.1.0-dev (r100) on AM"));
- tt_int_op(0,==, tor_version_as_new_as("Tor 0.2.1.0-dev",
+ tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev",
"Tor 0.2.1.0-dev (r99)"));
- tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.1",
+ tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.1",
"Tor 0.2.1.0-dev (r99)"));
/* Now try git revisions */
- tt_int_op(0,==, tor_version_parse("0.5.6.7 (git-ff00ff)", &ver1));
- tt_int_op(0,==, ver1.major);
- tt_int_op(5,==, ver1.minor);
- tt_int_op(6,==, ver1.micro);
- tt_int_op(7,==, ver1.patchlevel);
- tt_int_op(3,==, ver1.git_tag_len);
- tt_mem_op(ver1.git_tag,==, "\xff\x00\xff", 3);
- tt_int_op(-1,==, tor_version_parse("0.5.6.7 (git-ff00xx)", &ver1));
- tt_int_op(-1,==, tor_version_parse("0.5.6.7 (git-ff00fff)", &ver1));
- tt_int_op(0,==, tor_version_parse("0.5.6.7 (git ff00fff)", &ver1));
+ tt_int_op(0,OP_EQ, tor_version_parse("0.5.6.7 (git-ff00ff)", &ver1));
+ tt_int_op(0,OP_EQ, ver1.major);
+ tt_int_op(5,OP_EQ, ver1.minor);
+ tt_int_op(6,OP_EQ, ver1.micro);
+ tt_int_op(7,OP_EQ, ver1.patchlevel);
+ tt_int_op(3,OP_EQ, ver1.git_tag_len);
+ tt_mem_op(ver1.git_tag,OP_EQ, "\xff\x00\xff", 3);
+ tt_int_op(-1,OP_EQ, tor_version_parse("0.5.6.7 (git-ff00xx)", &ver1));
+ tt_int_op(-1,OP_EQ, tor_version_parse("0.5.6.7 (git-ff00fff)", &ver1));
+ tt_int_op(0,OP_EQ, tor_version_parse("0.5.6.7 (git ff00fff)", &ver1));
done:
;
}
@@ -428,13 +925,14 @@ test_dir_fp_pairs(void *arg)
"48657861646563696d616c2069736e277420736f-"
"676f6f6420666f7220686964696e6720796f7572.z", sl);
- tt_int_op(smartlist_len(sl),==, 2);
+ tt_int_op(smartlist_len(sl),OP_EQ, 2);
pair = smartlist_get(sl, 0);
- tt_mem_op(pair->first,==, "Hexadecimal isn't so", DIGEST_LEN);
- tt_mem_op(pair->second,==, "good for hiding your", DIGEST_LEN);
+ tt_mem_op(pair->first,OP_EQ, "Hexadecimal isn't so", DIGEST_LEN);
+ tt_mem_op(pair->second,OP_EQ, "good for hiding your", DIGEST_LEN);
pair = smartlist_get(sl, 1);
- tt_mem_op(pair->first,==, "secret data.\0\0\0\0\0\xff\xff\xff", DIGEST_LEN);
- tt_mem_op(pair->second,==, "Use AES-256 instead.", DIGEST_LEN);
+ tt_mem_op(pair->first,OP_EQ, "secret data.\0\0\0\0\0\xff\xff\xff",
+ DIGEST_LEN);
+ tt_mem_op(pair->second,OP_EQ, "Use AES-256 instead.", DIGEST_LEN);
done:
SMARTLIST_FOREACH(sl, fp_pair_t *, pair, tor_free(pair));
@@ -465,56 +963,56 @@ test_dir_split_fps(void *testdata)
/* no flags set */
dir_split_resource_into_fingerprints("A+C+B", sl, NULL, 0);
- tt_int_op(smartlist_len(sl), ==, 3);
- tt_str_op(smartlist_get(sl, 0), ==, "A");
- tt_str_op(smartlist_get(sl, 1), ==, "C");
- tt_str_op(smartlist_get(sl, 2), ==, "B");
+ tt_int_op(smartlist_len(sl), OP_EQ, 3);
+ tt_str_op(smartlist_get(sl, 0), OP_EQ, "A");
+ tt_str_op(smartlist_get(sl, 1), OP_EQ, "C");
+ tt_str_op(smartlist_get(sl, 2), OP_EQ, "B");
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* uniq strings. */
dir_split_resource_into_fingerprints("A+C+B+A+B+B", sl, NULL, DSR_SORT_UNIQ);
- tt_int_op(smartlist_len(sl), ==, 3);
- tt_str_op(smartlist_get(sl, 0), ==, "A");
- tt_str_op(smartlist_get(sl, 1), ==, "B");
- tt_str_op(smartlist_get(sl, 2), ==, "C");
+ tt_int_op(smartlist_len(sl), OP_EQ, 3);
+ tt_str_op(smartlist_get(sl, 0), OP_EQ, "A");
+ tt_str_op(smartlist_get(sl, 1), OP_EQ, "B");
+ tt_str_op(smartlist_get(sl, 2), OP_EQ, "C");
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* Decode hex. */
dir_split_resource_into_fingerprints(HEX1"+"HEX2, sl, NULL, DSR_HEX);
- tt_int_op(smartlist_len(sl), ==, 2);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX1);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2);
+ tt_int_op(smartlist_len(sl), OP_EQ, 2);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX1);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* decode hex and drop weirdness. */
dir_split_resource_into_fingerprints(HEX1"+bogus+"HEX2"+"HEX256_1,
sl, NULL, DSR_HEX);
- tt_int_op(smartlist_len(sl), ==, 2);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX1);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2);
+ tt_int_op(smartlist_len(sl), OP_EQ, 2);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX1);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* Decode long hex */
dir_split_resource_into_fingerprints(HEX256_1"+"HEX256_2"+"HEX2"+"HEX256_3,
sl, NULL, DSR_HEX|DSR_DIGEST256);
- tt_int_op(smartlist_len(sl), ==, 3);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_1);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX256_2);
- test_mem_op_hex(smartlist_get(sl, 2), ==, HEX256_3);
+ tt_int_op(smartlist_len(sl), OP_EQ, 3);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_1);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX256_2);
+ test_mem_op_hex(smartlist_get(sl, 2), OP_EQ, HEX256_3);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* Decode hex and sort. */
dir_split_resource_into_fingerprints(HEX1"+"HEX2"+"HEX3"+"HEX2,
sl, NULL, DSR_HEX|DSR_SORT_UNIQ);
- tt_int_op(smartlist_len(sl), ==, 3);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX3);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2);
- test_mem_op_hex(smartlist_get(sl, 2), ==, HEX1);
+ tt_int_op(smartlist_len(sl), OP_EQ, 3);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX3);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2);
+ test_mem_op_hex(smartlist_get(sl, 2), OP_EQ, HEX1);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
@@ -523,34 +1021,34 @@ test_dir_split_fps(void *testdata)
"+"HEX256_1,
sl, NULL,
DSR_HEX|DSR_DIGEST256|DSR_SORT_UNIQ);
- tt_int_op(smartlist_len(sl), ==, 3);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_3);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX256_2);
- test_mem_op_hex(smartlist_get(sl, 2), ==, HEX256_1);
+ tt_int_op(smartlist_len(sl), OP_EQ, 3);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_3);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX256_2);
+ test_mem_op_hex(smartlist_get(sl, 2), OP_EQ, HEX256_1);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* Decode base64 */
dir_split_resource_into_fingerprints(B64_1"-"B64_2, sl, NULL, DSR_BASE64);
- tt_int_op(smartlist_len(sl), ==, 2);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX1);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2);
+ tt_int_op(smartlist_len(sl), OP_EQ, 2);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX1);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
/* Decode long base64 */
dir_split_resource_into_fingerprints(B64_256_1"-"B64_256_2,
sl, NULL, DSR_BASE64|DSR_DIGEST256);
- tt_int_op(smartlist_len(sl), ==, 2);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_1);
- test_mem_op_hex(smartlist_get(sl, 1), ==, HEX256_2);
+ tt_int_op(smartlist_len(sl), OP_EQ, 2);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_1);
+ test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX256_2);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
dir_split_resource_into_fingerprints(B64_256_1,
sl, NULL, DSR_BASE64|DSR_DIGEST256);
- tt_int_op(smartlist_len(sl), ==, 1);
- test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_1);
+ tt_int_op(smartlist_len(sl), OP_EQ, 1);
+ test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_1);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
@@ -644,7 +1142,7 @@ test_dir_measured_bw_kb_cache(void *arg)
/* First, clear the cache and assert that it's empty */
(void)arg;
dirserv_clear_measured_bw_cache();
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 0);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 0);
/*
* Set up test mbwls; none of the dirserv_cache_*() functions care about
* the node_hex field.
@@ -657,49 +1155,49 @@ test_dir_measured_bw_kb_cache(void *arg)
mbwl[2].bw_kb = 80;
/* Try caching something */
dirserv_cache_measured_bw(&(mbwl[0]), curr);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 1);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 1);
/* Okay, let's see if we can retrieve it */
tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, &as_of));
- tt_int_op(bw,==, 20);
- tt_int_op(as_of,==, MBWC_INIT_TIME);
+ tt_int_op(bw,OP_EQ, 20);
+ tt_int_op(as_of,OP_EQ, MBWC_INIT_TIME);
/* Try retrieving it without some outputs */
tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL, NULL));
tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, NULL));
- tt_int_op(bw,==, 20);
+ tt_int_op(bw,OP_EQ, 20);
tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL,&as_of));
- tt_int_op(as_of,==, MBWC_INIT_TIME);
+ tt_int_op(as_of,OP_EQ, MBWC_INIT_TIME);
/* Now expire it */
curr += MAX_MEASUREMENT_AGE + 1;
dirserv_expire_measured_bw_cache(curr);
/* Check that the cache is empty */
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 0);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 0);
/* Check that we can't retrieve it */
tt_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);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 1);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 1);
curr += MAX_MEASUREMENT_AGE / 4;
dirserv_cache_measured_bw(&(mbwl[1]), curr);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 2);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 2);
curr += MAX_MEASUREMENT_AGE / 4;
dirserv_cache_measured_bw(&(mbwl[2]), curr);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 3);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 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);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 3);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 3);
/* Push the oldest one off the cliff */
curr += MAX_MEASUREMENT_AGE / 4;
dirserv_expire_measured_bw_cache(curr);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 2);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 2);
/* And another... */
curr += MAX_MEASUREMENT_AGE / 4;
dirserv_expire_measured_bw_cache(curr);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 1);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 1);
/* This should empty it out again */
curr += MAX_MEASUREMENT_AGE / 4;
dirserv_expire_measured_bw_cache(curr);
- tt_int_op(dirserv_get_measured_bw_cache_size(),==, 0);
+ tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 0);
done:
return;
@@ -732,11 +1230,11 @@ test_dir_param_voting(void *arg)
"abcd=20 c=60 cw=500 x-yz=-9 zzzzz=101", NULL, 0, 0);
smartlist_split_string(vote4.net_params,
"ab=900 abcd=200 c=1 cw=51 x-yz=100", NULL, 0, 0);
- tt_int_op(100,==, networkstatus_get_param(&vote4, "x-yz", 50, 0, 300));
- tt_int_op(222,==, networkstatus_get_param(&vote4, "foobar", 222, 0, 300));
- tt_int_op(80,==, networkstatus_get_param(&vote4, "ab", 12, 0, 80));
- tt_int_op(-8,==, networkstatus_get_param(&vote4, "ab", -12, -100, -8));
- tt_int_op(0,==, networkstatus_get_param(&vote4, "foobar", 0, -100, 8));
+ tt_int_op(100,OP_EQ, networkstatus_get_param(&vote4, "x-yz", 50, 0, 300));
+ tt_int_op(222,OP_EQ, networkstatus_get_param(&vote4, "foobar", 222, 0, 300));
+ tt_int_op(80,OP_EQ, networkstatus_get_param(&vote4, "ab", 12, 0, 80));
+ tt_int_op(-8,OP_EQ, networkstatus_get_param(&vote4, "ab", -12, -100, -8));
+ tt_int_op(0,OP_EQ, networkstatus_get_param(&vote4, "foobar", 0, -100, 8));
smartlist_add(votes, &vote1);
@@ -744,59 +1242,59 @@ test_dir_param_voting(void *arg)
* networks without many dirauths. */
res = dirvote_compute_params(votes, 12, 2);
- tt_str_op(res,==, "");
+ tt_str_op(res,OP_EQ, "");
tor_free(res);
res = dirvote_compute_params(votes, 12, 1);
- tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-99");
+ tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-99");
tor_free(res);
smartlist_add(votes, &vote2);
res = dirvote_compute_params(votes, 12, 2);
- tt_str_op(res,==, "ab=27 cw=5 x-yz=-99");
+ tt_str_op(res,OP_EQ, "ab=27 cw=5 x-yz=-99");
tor_free(res);
res = dirvote_compute_params(votes, 12, 3);
- tt_str_op(res,==, "ab=27 cw=5 x-yz=-99");
+ tt_str_op(res,OP_EQ, "ab=27 cw=5 x-yz=-99");
tor_free(res);
res = dirvote_compute_params(votes, 12, 6);
- tt_str_op(res,==, "");
+ tt_str_op(res,OP_EQ, "");
tor_free(res);
smartlist_add(votes, &vote3);
res = dirvote_compute_params(votes, 12, 3);
- tt_str_op(res,==, "ab=27 abcd=20 cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "ab=27 abcd=20 cw=50 x-yz=-9");
tor_free(res);
res = dirvote_compute_params(votes, 12, 5);
- tt_str_op(res,==, "cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "cw=50 x-yz=-9");
tor_free(res);
res = dirvote_compute_params(votes, 12, 9);
- tt_str_op(res,==, "cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "cw=50 x-yz=-9");
tor_free(res);
smartlist_add(votes, &vote4);
res = dirvote_compute_params(votes, 12, 4);
- tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9");
tor_free(res);
res = dirvote_compute_params(votes, 12, 5);
- tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9");
tor_free(res);
/* Test that the special-cased "at least three dirauths voted for
* this param" logic works as expected. */
res = dirvote_compute_params(votes, 12, 6);
- tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9");
tor_free(res);
res = dirvote_compute_params(votes, 12, 10);
- tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9");
+ tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9");
tor_free(res);
done:
@@ -828,14 +1326,14 @@ static void
test_same_voter(networkstatus_voter_info_t *v1,
networkstatus_voter_info_t *v2)
{
- tt_str_op(v1->nickname,==, v2->nickname);
- tt_mem_op(v1->identity_digest,==, v2->identity_digest, DIGEST_LEN);
- tt_str_op(v1->address,==, v2->address);
- tt_int_op(v1->addr,==, v2->addr);
- tt_int_op(v1->dir_port,==, v2->dir_port);
- tt_int_op(v1->or_port,==, v2->or_port);
- tt_str_op(v1->contact,==, v2->contact);
- tt_mem_op(v1->vote_digest,==, v2->vote_digest, DIGEST_LEN);
+ tt_str_op(v1->nickname,OP_EQ, v2->nickname);
+ tt_mem_op(v1->identity_digest,OP_EQ, v2->identity_digest, DIGEST_LEN);
+ tt_str_op(v1->address,OP_EQ, v2->address);
+ tt_int_op(v1->addr,OP_EQ, v2->addr);
+ tt_int_op(v1->dir_port,OP_EQ, v2->dir_port);
+ tt_int_op(v1->or_port,OP_EQ, v2->or_port);
+ tt_str_op(v1->contact,OP_EQ, v2->contact);
+ tt_mem_op(v1->vote_digest,OP_EQ, v2->vote_digest, DIGEST_LEN);
done:
;
}
@@ -1045,48 +1543,48 @@ test_vrs_for_v3ns(vote_routerstatus_t *vrs, int voter, time_t now)
DIGEST_LEN) &&
(voter == 1)) {
/* Check the first routerstatus. */
- tt_str_op(vrs->version,==, "0.1.2.14");
- tt_int_op(rs->published_on,==, now-1500);
- tt_str_op(rs->nickname,==, "router2");
- tt_mem_op(rs->identity_digest,==,
+ tt_str_op(vrs->version,OP_EQ, "0.1.2.14");
+ tt_int_op(rs->published_on,OP_EQ, now-1500);
+ tt_str_op(rs->nickname,OP_EQ, "router2");
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
"\x3\x3\x3\x3",
DIGEST_LEN);
- tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
- tt_int_op(rs->addr,==, 0x99008801);
- tt_int_op(rs->or_port,==, 443);
- tt_int_op(rs->dir_port,==, 8000);
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ tt_int_op(rs->addr,OP_EQ, 0x99008801);
+ tt_int_op(rs->or_port,OP_EQ, 443);
+ tt_int_op(rs->dir_port,OP_EQ, 8000);
/* no flags except "running" (16) and "v2dir" (64) */
- tt_u64_op(vrs->flags, ==, U64_LITERAL(80));
+ tt_u64_op(vrs->flags, OP_EQ, 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)) {
- tt_mem_op(rs->identity_digest,==,
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\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. */
- tt_str_op(vrs->version,==, "0.2.0.5");
- tt_int_op(rs->published_on,==, now-1000);
- tt_str_op(rs->nickname,==, "router1");
+ tt_str_op(vrs->version,OP_EQ, "0.2.0.5");
+ tt_int_op(rs->published_on,OP_EQ, now-1000);
+ tt_str_op(rs->nickname,OP_EQ, "router1");
}
- tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- tt_int_op(rs->addr,==, 0x99009901);
- tt_int_op(rs->or_port,==, 443);
- tt_int_op(rs->dir_port,==, 0);
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ tt_int_op(rs->addr,OP_EQ, 0x99009901);
+ tt_int_op(rs->or_port,OP_EQ, 443);
+ tt_int_op(rs->dir_port,OP_EQ, 0);
tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
- tt_int_op(rs->ipv6_orport,==, 4711);
+ tt_int_op(rs->ipv6_orport,OP_EQ, 4711);
if (voter == 1) {
/* all except "authority" (1) and "v2dir" (64) */
- tt_u64_op(vrs->flags, ==, U64_LITERAL(190));
+ tt_u64_op(vrs->flags, OP_EQ, U64_LITERAL(190));
} else {
/* 1023 - authority(1) - madeofcheese(16) - madeoftin(32) - v2dir(256) */
- tt_u64_op(vrs->flags, ==, U64_LITERAL(718));
+ tt_u64_op(vrs->flags, OP_EQ, U64_LITERAL(718));
}
} else if (tor_memeq(rs->identity_digest,
"\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
@@ -1118,7 +1616,7 @@ test_consensus_for_v3ns(networkstatus_t *con, time_t now)
tt_assert(con);
tt_assert(!con->cert);
- tt_int_op(2,==, smartlist_len(con->routerstatus_list));
+ tt_int_op(2,OP_EQ, smartlist_len(con->routerstatus_list));
/* There should be two listed routers: one with identity 3, one with
* identity 5. */
@@ -1143,10 +1641,10 @@ test_routerstatus_for_v3ns(routerstatus_t *rs, time_t now)
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
"\x3\x3",
DIGEST_LEN)) {
- tt_mem_op(rs->identity_digest,==,
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
DIGEST_LEN);
- tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
tt_assert(!rs->is_authority);
tt_assert(!rs->is_exit);
tt_assert(!rs->is_fast);
@@ -1162,18 +1660,18 @@ test_routerstatus_for_v3ns(routerstatus_t *rs, time_t now)
"\x5\x5\x5\x5",
DIGEST_LEN)) {
/* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
- tt_mem_op(rs->identity_digest,==,
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
DIGEST_LEN);
- tt_str_op(rs->nickname,==, "router1");
- tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- tt_int_op(rs->published_on,==, now-1000);
- tt_int_op(rs->addr,==, 0x99009901);
- tt_int_op(rs->or_port,==, 443);
- tt_int_op(rs->dir_port,==, 0);
+ tt_str_op(rs->nickname,OP_EQ, "router1");
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ tt_int_op(rs->published_on,OP_EQ, now-1000);
+ tt_int_op(rs->addr,OP_EQ, 0x99009901);
+ tt_int_op(rs->or_port,OP_EQ, 443);
+ tt_int_op(rs->dir_port,OP_EQ, 0);
tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
- tt_int_op(rs->ipv6_orport,==, 4711);
+ tt_int_op(rs->ipv6_orport,OP_EQ, 4711);
tt_assert(!rs->is_authority);
tt_assert(rs->is_exit);
tt_assert(rs->is_fast);
@@ -1313,29 +1811,29 @@ test_a_networkstatus(
tt_assert(v1);
/* Make sure the parsed thing was right. */
- tt_int_op(v1->type,==, NS_TYPE_VOTE);
- tt_int_op(v1->published,==, vote->published);
- tt_int_op(v1->valid_after,==, vote->valid_after);
- tt_int_op(v1->fresh_until,==, vote->fresh_until);
- tt_int_op(v1->valid_until,==, vote->valid_until);
- tt_int_op(v1->vote_seconds,==, vote->vote_seconds);
- tt_int_op(v1->dist_seconds,==, vote->dist_seconds);
- tt_str_op(v1->client_versions,==, vote->client_versions);
- tt_str_op(v1->server_versions,==, vote->server_versions);
+ tt_int_op(v1->type,OP_EQ, NS_TYPE_VOTE);
+ tt_int_op(v1->published,OP_EQ, vote->published);
+ tt_int_op(v1->valid_after,OP_EQ, vote->valid_after);
+ tt_int_op(v1->fresh_until,OP_EQ, vote->fresh_until);
+ tt_int_op(v1->valid_until,OP_EQ, vote->valid_until);
+ tt_int_op(v1->vote_seconds,OP_EQ, vote->vote_seconds);
+ tt_int_op(v1->dist_seconds,OP_EQ, vote->dist_seconds);
+ tt_str_op(v1->client_versions,OP_EQ, vote->client_versions);
+ tt_str_op(v1->server_versions,OP_EQ, vote->server_versions);
tt_assert(v1->voters && smartlist_len(v1->voters));
voter = smartlist_get(v1->voters, 0);
- tt_str_op(voter->nickname,==, "Voter1");
- tt_str_op(voter->address,==, "1.2.3.4");
- tt_int_op(voter->addr,==, 0x01020304);
- tt_int_op(voter->dir_port,==, 80);
- tt_int_op(voter->or_port,==, 9000);
- tt_str_op(voter->contact,==, "voter@example.com");
+ tt_str_op(voter->nickname,OP_EQ, "Voter1");
+ tt_str_op(voter->address,OP_EQ, "1.2.3.4");
+ tt_int_op(voter->addr,OP_EQ, 0x01020304);
+ tt_int_op(voter->dir_port,OP_EQ, 80);
+ tt_int_op(voter->or_port,OP_EQ, 9000);
+ tt_str_op(voter->contact,OP_EQ, "voter@example.com");
tt_assert(v1->cert);
tt_assert(!crypto_pk_cmp_keys(sign_skey_1, v1->cert->signing_key));
cp = smartlist_join_strings(v1->known_flags, ":", 0, NULL);
- tt_str_op(cp,==, "Authority:Exit:Fast:Guard:Running:Stable:V2Dir:Valid");
+ tt_str_op(cp,OP_EQ, "Authority:Exit:Fast:Guard:Running:Stable:V2Dir:Valid");
tor_free(cp);
- tt_int_op(smartlist_len(v1->routerstatus_list),==, n_vrs);
+ tt_int_op(smartlist_len(v1->routerstatus_list),OP_EQ, n_vrs);
if (vote_tweaks) params_tweaked += vote_tweaks(v1, 1, now);
@@ -1380,7 +1878,7 @@ test_a_networkstatus(
/* Check that flags come out right.*/
cp = smartlist_join_strings(v2->known_flags, ":", 0, NULL);
- tt_str_op(cp,==, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
+ tt_str_op(cp,OP_EQ, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
"Running:Stable:V2Dir:Valid");
tor_free(cp);
@@ -1449,30 +1947,30 @@ test_a_networkstatus(
con_md = networkstatus_parse_vote_from_string(consensus_text_md, NULL,
NS_TYPE_CONSENSUS);
tt_assert(con_md);
- tt_int_op(con_md->flavor,==, FLAV_MICRODESC);
+ tt_int_op(con_md->flavor,OP_EQ, FLAV_MICRODESC);
/* Check consensus contents. */
tt_assert(con->type == NS_TYPE_CONSENSUS);
- tt_int_op(con->published,==, 0); /* this field only appears in votes. */
- tt_int_op(con->valid_after,==, now+1000);
- tt_int_op(con->fresh_until,==, now+2003); /* median */
- tt_int_op(con->valid_until,==, now+3000);
- tt_int_op(con->vote_seconds,==, 100);
- tt_int_op(con->dist_seconds,==, 250); /* median */
- tt_str_op(con->client_versions,==, "0.1.2.14");
- tt_str_op(con->server_versions,==, "0.1.2.15,0.1.2.16");
+ tt_int_op(con->published,OP_EQ, 0); /* this field only appears in votes. */
+ tt_int_op(con->valid_after,OP_EQ, now+1000);
+ tt_int_op(con->fresh_until,OP_EQ, now+2003); /* median */
+ tt_int_op(con->valid_until,OP_EQ, now+3000);
+ tt_int_op(con->vote_seconds,OP_EQ, 100);
+ tt_int_op(con->dist_seconds,OP_EQ, 250); /* median */
+ tt_str_op(con->client_versions,OP_EQ, "0.1.2.14");
+ tt_str_op(con->server_versions,OP_EQ, "0.1.2.15,0.1.2.16");
cp = smartlist_join_strings(v2->known_flags, ":", 0, NULL);
- tt_str_op(cp,==, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
+ tt_str_op(cp,OP_EQ, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
"Running:Stable:V2Dir:Valid");
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);
- tt_str_op(cp,==, "circuitwindow=80:foo=660");
+ tt_str_op(cp,OP_EQ, "circuitwindow=80:foo=660");
tor_free(cp);
}
- tt_int_op(4,==, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/
+ tt_int_op(4,OP_EQ, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/
/* The voter id digests should be in this order. */
tt_assert(memcmp(cert2->cache_info.identity_digest,
cert1->cache_info.identity_digest,DIGEST_LEN)<0);
@@ -1498,10 +1996,10 @@ test_a_networkstatus(
/* 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. */
voter = smartlist_get(con->voters, 1);
- tt_int_op(smartlist_len(voter->sigs),==, 0);
+ tt_int_op(smartlist_len(voter->sigs),OP_EQ, 0);
voter = smartlist_get(con->voters, 3);
- tt_int_op(smartlist_len(voter->sigs),==, 1);
+ tt_int_op(smartlist_len(voter->sigs),OP_EQ, 1);
sig = smartlist_get(voter->sigs, 0);
tt_assert(sig->signature);
tt_assert(!sig->good_signature);
@@ -1551,11 +2049,11 @@ test_a_networkstatus(
tt_assert(con_md3);
/* All three should have the same digest. */
- tt_mem_op(&con->digests,==, &con2->digests, sizeof(digests_t));
- tt_mem_op(&con->digests,==, &con3->digests, sizeof(digests_t));
+ tt_mem_op(&con->digests,OP_EQ, &con2->digests, sizeof(digests_t));
+ tt_mem_op(&con->digests,OP_EQ, &con3->digests, sizeof(digests_t));
- tt_mem_op(&con_md->digests,==, &con_md2->digests, sizeof(digests_t));
- tt_mem_op(&con_md->digests,==, &con_md3->digests, sizeof(digests_t));
+ tt_mem_op(&con_md->digests,OP_EQ, &con_md2->digests, sizeof(digests_t));
+ tt_mem_op(&con_md->digests,OP_EQ, &con_md3->digests, sizeof(digests_t));
/* Extract a detached signature from con3. */
detached_text1 = get_detached_sigs(con3, con_md3);
@@ -1565,44 +2063,44 @@ test_a_networkstatus(
tt_assert(dsig1);
/* Are parsed values as expected? */
- tt_int_op(dsig1->valid_after,==, con3->valid_after);
- tt_int_op(dsig1->fresh_until,==, con3->fresh_until);
- tt_int_op(dsig1->valid_until,==, con3->valid_until);
+ tt_int_op(dsig1->valid_after,OP_EQ, con3->valid_after);
+ tt_int_op(dsig1->fresh_until,OP_EQ, con3->fresh_until);
+ tt_int_op(dsig1->valid_until,OP_EQ, con3->valid_until);
{
digests_t *dsig_digests = strmap_get(dsig1->digests, "ns");
tt_assert(dsig_digests);
- tt_mem_op(dsig_digests->d[DIGEST_SHA1],==, con3->digests.d[DIGEST_SHA1],
- DIGEST_LEN);
+ tt_mem_op(dsig_digests->d[DIGEST_SHA1], OP_EQ,
+ con3->digests.d[DIGEST_SHA1], DIGEST_LEN);
dsig_digests = strmap_get(dsig1->digests, "microdesc");
tt_assert(dsig_digests);
- tt_mem_op(dsig_digests->d[DIGEST_SHA256],==,
+ tt_mem_op(dsig_digests->d[DIGEST_SHA256],OP_EQ,
con_md3->digests.d[DIGEST_SHA256],
DIGEST256_LEN);
}
{
smartlist_t *dsig_signatures = strmap_get(dsig1->signatures, "ns");
tt_assert(dsig_signatures);
- tt_int_op(1,==, smartlist_len(dsig_signatures));
+ tt_int_op(1,OP_EQ, smartlist_len(dsig_signatures));
sig = smartlist_get(dsig_signatures, 0);
- tt_mem_op(sig->identity_digest,==, cert1->cache_info.identity_digest,
+ tt_mem_op(sig->identity_digest,OP_EQ, cert1->cache_info.identity_digest,
DIGEST_LEN);
- tt_int_op(sig->alg,==, DIGEST_SHA1);
+ tt_int_op(sig->alg,OP_EQ, DIGEST_SHA1);
dsig_signatures = strmap_get(dsig1->signatures, "microdesc");
tt_assert(dsig_signatures);
- tt_int_op(1,==, smartlist_len(dsig_signatures));
+ tt_int_op(1,OP_EQ, smartlist_len(dsig_signatures));
sig = smartlist_get(dsig_signatures, 0);
- tt_mem_op(sig->identity_digest,==, cert1->cache_info.identity_digest,
+ tt_mem_op(sig->identity_digest,OP_EQ, cert1->cache_info.identity_digest,
DIGEST_LEN);
- tt_int_op(sig->alg,==, DIGEST_SHA256);
+ tt_int_op(sig->alg,OP_EQ, DIGEST_SHA256);
}
/* Try adding it to con2. */
detached_text2 = get_detached_sigs(con2,con_md2);
- tt_int_op(1,==, networkstatus_add_detached_signatures(con2, dsig1, "test",
- LOG_INFO, &msg));
+ tt_int_op(1,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1,
+ "test", LOG_INFO, &msg));
tor_free(detached_text2);
- tt_int_op(1,==,
+ tt_int_op(1,OP_EQ,
networkstatus_add_detached_signatures(con_md2, dsig1, "test",
LOG_INFO, &msg));
tor_free(detached_text2);
@@ -1618,19 +2116,19 @@ test_a_networkstatus(
printf("%s\n", hd);
});
*/
- tt_int_op(2,==,
+ tt_int_op(2,OP_EQ,
smartlist_len((smartlist_t*)strmap_get(dsig2->signatures, "ns")));
- tt_int_op(2,==,
+ tt_int_op(2,OP_EQ,
smartlist_len((smartlist_t*)strmap_get(dsig2->signatures,
"microdesc")));
/* Try adding to con2 twice; verify that nothing changes. */
- tt_int_op(0,==, networkstatus_add_detached_signatures(con2, dsig1, "test",
- LOG_INFO, &msg));
+ tt_int_op(0,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1,
+ "test", LOG_INFO, &msg));
/* Add to con. */
- tt_int_op(2,==, networkstatus_add_detached_signatures(con, dsig2, "test",
- LOG_INFO, &msg));
+ tt_int_op(2,OP_EQ, networkstatus_add_detached_signatures(con, dsig2,
+ "test", LOG_INFO, &msg));
/* Check signatures */
voter = smartlist_get(con->voters, 1);
sig = smartlist_get(voter->sigs, 0);
@@ -1733,7 +2231,7 @@ test_dir_scale_bw(void *testdata)
scale_array_elements_to_u64(vals, 8, &total);
- tt_int_op((int)total, ==, 48);
+ tt_int_op((int)total, OP_EQ, 48);
total = 0;
for (i=0; i<8; ++i) {
total += vals[i].u64;
@@ -1744,7 +2242,7 @@ test_dir_scale_bw(void *testdata)
for (i=0; i<8; ++i) {
/* vals[2].u64 is the scaled value of 1.0 */
double ratio = ((double)vals[i].u64) / vals[2].u64;
- tt_double_op(fabs(ratio - v[i]), <, .00001);
+ tt_double_op(fabs(ratio - v[i]), OP_LT, .00001);
}
/* test handling of no entries */
@@ -1795,11 +2293,11 @@ test_dir_random_weighted(void *testdata)
inp[i].u64 = vals[i];
total += vals[i];
}
- tt_u64_op(total, ==, 45);
+ tt_u64_op(total, OP_EQ, 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);
+ tt_int_op(choice, OP_GE, 0);
+ tt_int_op(choice, OP_LT, 10);
histogram[choice]++;
}
@@ -1812,7 +2310,7 @@ test_dir_random_weighted(void *testdata)
if (expected)
frac_diff = (histogram[i] - expected) / ((double)expected);
else
- tt_int_op(histogram[i], ==, 0);
+ tt_int_op(histogram[i], OP_EQ, 0);
sq = frac_diff * frac_diff;
if (sq > max_sq_error)
@@ -1820,12 +2318,12 @@ test_dir_random_weighted(void *testdata)
}
/* 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);
+ tt_double_op(max_sq_error, OP_LT, .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);
+ tt_int_op(choice, OP_EQ, 0);
}
/* Now try an array of zeros. We should choose randomly. */
@@ -1834,8 +2332,8 @@ test_dir_random_weighted(void *testdata)
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);
+ tt_int_op(choice, OP_GE, 0);
+ tt_int_op(choice, OP_LT, 5);
histogram[choice]++;
}
/* Now see if we chose things about frequently enough. */
@@ -1851,7 +2349,7 @@ test_dir_random_weighted(void *testdata)
}
/* 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);
+ tt_double_op(max_sq_error, OP_LT, .05);
done:
;
}
@@ -2050,21 +2548,21 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now)
* Check the first routerstatus - measured bandwidth below the clip
* cutoff.
*/
- tt_str_op(vrs->version,==, "0.1.2.14");
- tt_int_op(rs->published_on,==, now-1500);
- tt_str_op(rs->nickname,==, "router2");
- tt_mem_op(rs->identity_digest,==,
+ tt_str_op(vrs->version,OP_EQ, "0.1.2.14");
+ tt_int_op(rs->published_on,OP_EQ, now-1500);
+ tt_str_op(rs->nickname,OP_EQ, "router2");
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
DIGEST_LEN);
- tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
- tt_int_op(rs->addr,==, 0x99008801);
- tt_int_op(rs->or_port,==, 443);
- tt_int_op(rs->dir_port,==, 8000);
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ tt_int_op(rs->addr,OP_EQ, 0x99008801);
+ tt_int_op(rs->or_port,OP_EQ, 443);
+ tt_int_op(rs->dir_port,OP_EQ, 8000);
tt_assert(rs->has_bandwidth);
tt_assert(vrs->has_measured_bw);
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2);
- tt_int_op(vrs->measured_bw_kb,==, max_unmeasured_bw_kb / 2);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2);
+ tt_int_op(vrs->measured_bw_kb,OP_EQ, 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",
@@ -2074,24 +2572,24 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now)
* Check the second routerstatus - measured bandwidth above the clip
* cutoff.
*/
- tt_str_op(vrs->version,==, "0.2.0.5");
- tt_int_op(rs->published_on,==, now-1000);
- tt_str_op(rs->nickname,==, "router1");
- tt_mem_op(rs->identity_digest,==,
+ tt_str_op(vrs->version,OP_EQ, "0.2.0.5");
+ tt_int_op(rs->published_on,OP_EQ, now-1000);
+ tt_str_op(rs->nickname,OP_EQ, "router1");
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
"\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
DIGEST_LEN);
- tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- tt_int_op(rs->addr,==, 0x99009901);
- tt_int_op(rs->or_port,==, 443);
- tt_int_op(rs->dir_port,==, 0);
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ tt_int_op(rs->addr,OP_EQ, 0x99009901);
+ tt_int_op(rs->or_port,OP_EQ, 443);
+ tt_int_op(rs->dir_port,OP_EQ, 0);
tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
- tt_int_op(rs->ipv6_orport,==, 4711);
+ tt_int_op(rs->ipv6_orport,OP_EQ, 4711);
tt_assert(rs->has_bandwidth);
tt_assert(vrs->has_measured_bw);
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb * 2);
- tt_int_op(vrs->measured_bw_kb,==, max_unmeasured_bw_kb * 2);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb * 2);
+ tt_int_op(vrs->measured_bw_kb,OP_EQ, 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",
@@ -2103,8 +2601,8 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now)
*/
tt_assert(rs->has_bandwidth);
tt_assert(!(vrs->has_measured_bw));
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb * 2);
- tt_int_op(vrs->measured_bw_kb,==, 0);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb * 2);
+ tt_int_op(vrs->measured_bw_kb,OP_EQ, 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",
@@ -2115,8 +2613,8 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now)
*/
tt_assert(rs->has_bandwidth);
tt_assert(!(vrs->has_measured_bw));
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2);
- tt_int_op(vrs->measured_bw_kb,==, 0);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2);
+ tt_int_op(vrs->measured_bw_kb,OP_EQ, 0);
} else {
tt_assert(0);
}
@@ -2137,7 +2635,7 @@ test_consensus_for_umbw(networkstatus_t *con, time_t now)
tt_assert(!con->cert);
// tt_assert(con->consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW_KB);
tt_assert(con->consensus_method >= 16);
- tt_int_op(4,==, smartlist_len(con->routerstatus_list));
+ tt_int_op(4,OP_EQ, smartlist_len(con->routerstatus_list));
/* There should be four listed routers; all voters saw the same in this */
done:
@@ -2161,11 +2659,11 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
DIGEST_LEN)) {
- tt_mem_op(rs->identity_digest,==,
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
DIGEST_LEN);
- tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
tt_assert(!rs->is_authority);
tt_assert(!rs->is_exit);
tt_assert(!rs->is_fast);
@@ -2177,26 +2675,26 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
tt_assert(!rs->is_named);
/* This one should have measured bandwidth below the clip cutoff */
tt_assert(rs->has_bandwidth);
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2);
tt_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'. */
- tt_mem_op(rs->identity_digest,==,
+ tt_mem_op(rs->identity_digest,OP_EQ,
"\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
"\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
DIGEST_LEN);
- tt_str_op(rs->nickname,==, "router1");
- tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- tt_int_op(rs->published_on,==, now-1000);
- tt_int_op(rs->addr,==, 0x99009901);
- tt_int_op(rs->or_port,==, 443);
- tt_int_op(rs->dir_port,==, 0);
+ tt_str_op(rs->nickname,OP_EQ, "router1");
+ tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ tt_int_op(rs->published_on,OP_EQ, now-1000);
+ tt_int_op(rs->addr,OP_EQ, 0x99009901);
+ tt_int_op(rs->or_port,OP_EQ, 443);
+ tt_int_op(rs->dir_port,OP_EQ, 0);
tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
- tt_int_op(rs->ipv6_orport,==, 4711);
+ tt_int_op(rs->ipv6_orport,OP_EQ, 4711);
tt_assert(!rs->is_authority);
tt_assert(rs->is_exit);
tt_assert(rs->is_fast);
@@ -2207,7 +2705,7 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
tt_assert(!rs->is_named);
/* This one should have measured bandwidth above the clip cutoff */
tt_assert(rs->has_bandwidth);
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb * 2);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb * 2);
tt_assert(!(rs->bw_is_unmeasured));
} else if (tor_memeq(rs->identity_digest,
"\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
@@ -2218,7 +2716,7 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
* and so should be clipped
*/
tt_assert(rs->has_bandwidth);
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb);
tt_assert(rs->bw_is_unmeasured);
} else if (tor_memeq(rs->identity_digest,
"\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34"
@@ -2229,7 +2727,7 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
* and so should not be clipped
*/
tt_assert(rs->has_bandwidth);
- tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2);
+ tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2);
tt_assert(rs->bw_is_unmeasured);
} else {
/* Weren't expecting this... */
@@ -2305,7 +2803,7 @@ test_dir_fmt_control_ns(void *arg)
s = networkstatus_getinfo_helper_single(&rs);
tt_assert(s);
- tt_str_op(s, ==,
+ tt_str_op(s, OP_EQ,
"r TetsuoMilk U3RhdGVseSwgcGx1bXAgQnVjayA "
"TXVsbGlnYW4gY2FtZSB1cCBmcm8 2013-04-02 17:53:18 "
"32.48.64.80 9001 9002\n"
@@ -2328,16 +2826,17 @@ test_dir_http_handling(void *args)
"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);
- tt_str_op(url,==, "/tor/a/b/c.txt");
+ &url),OP_EQ, 0);
+ tt_str_op(url,OP_EQ, "/tor/a/b/c.txt");
tor_free(url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.0\r\n", &url),==, 0);
- tt_str_op(url,==, "/tor/a/b/c.txt");
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.0\r\n", &url),OP_EQ, 0);
+ tt_str_op(url,OP_EQ, "/tor/a/b/c.txt");
tor_free(url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url),==, 0);
- tt_str_op(url,==, "/tor/a/b/c.txt");
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url),
+ OP_EQ, 0);
+ tt_str_op(url,OP_EQ, "/tor/a/b/c.txt");
tor_free(url);
/* Should prepend '/tor/' to url if required */
@@ -2345,8 +2844,8 @@ test_dir_http_handling(void *args)
"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);
- tt_str_op(url,==, "/tor/a/b/c.txt");
+ &url),OP_EQ, 0);
+ tt_str_op(url,OP_EQ, "/tor/a/b/c.txt");
tor_free(url);
/* Bad headers -- no HTTP/1.x*/
@@ -2354,7 +2853,7 @@ test_dir_http_handling(void *args)
"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);
+ &url),OP_EQ, -1);
tt_assert(!url);
/* Bad headers */
@@ -2362,22 +2861,23 @@ test_dir_http_handling(void *args)
"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);
+ &url),OP_EQ, -1);
tt_assert(!url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt", &url),==, -1);
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt", &url),OP_EQ, -1);
tt_assert(!url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url),==, -1);
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url),OP_EQ, -1);
tt_assert(!url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url),==, -1);
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url),
+ OP_EQ, -1);
tt_assert(!url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url),==, -1);
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url),OP_EQ, -1);
tt_assert(!url);
- tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.\r", &url),==, -1);
+ tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.\r", &url),OP_EQ, -1);
tt_assert(!url);
done:
@@ -2393,6 +2893,11 @@ test_dir_http_handling(void *args)
struct testcase_t dir_tests[] = {
DIR_LEGACY(nicknames),
DIR_LEGACY(formats),
+ DIR(routerparse_bad, 0),
+ DIR(extrainfo_parsing, 0),
+ DIR(parse_router_list, TT_FORK),
+ DIR(load_routers, TT_FORK),
+ DIR(load_extrainfo, TT_FORK),
DIR_LEGACY(versions),
DIR_LEGACY(fp_pairs),
DIR(split_fps, 0),
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index bddc0f11e0..5bf2985d2f 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -71,15 +71,16 @@ setup_fake_routerlist(void)
retval = router_load_routers_from_string(TEST_DESCRIPTORS,
NULL, SAVED_IN_JOURNAL,
NULL, 0, NULL);
- tt_int_op(retval, ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(retval, OP_EQ, NUMBER_OF_DESCRIPTORS);
/* Sanity checking of routerlist and nodelist. */
our_routerlist = router_get_routerlist();
- tt_int_op(smartlist_len(our_routerlist->routers), ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(our_routerlist->routers), OP_EQ,
+ NUMBER_OF_DESCRIPTORS);
routerlist_assert_ok(our_routerlist);
our_nodelist = nodelist_get_list();
- tt_int_op(smartlist_len(our_nodelist), ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS);
/* Mark all routers as non-guards but up and running! */
SMARTLIST_FOREACH_BEGIN(our_nodelist, node_t *, node) {
@@ -163,7 +164,7 @@ test_choose_random_entry_one_possible_guard(void *arg)
/* Pick an entry. Make sure we pick the node we marked as guard. */
chosen_entry = choose_random_entry(NULL);
- tt_ptr_op(chosen_entry, ==, the_guard);
+ tt_ptr_op(chosen_entry, OP_EQ, the_guard);
done:
;
@@ -189,14 +190,14 @@ populate_live_entry_guards_test_helper(int num_needed)
/* Set NumEntryGuards to the provided number. */
options->NumEntryGuards = num_needed;
- tt_int_op(num_needed, ==, decide_num_guards(options, 0));
+ tt_int_op(num_needed, OP_EQ, decide_num_guards(options, 0));
/* The global entry guards smartlist should be empty now. */
- tt_int_op(smartlist_len(all_entry_guards), ==, 0);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0);
/* Walk the nodelist and add all nodes as entry guards. */
our_nodelist = nodelist_get_list();
- tt_int_op(smartlist_len(our_nodelist), ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS);
SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) {
const node_t *node_tmp;
@@ -205,20 +206,20 @@ populate_live_entry_guards_test_helper(int num_needed)
} SMARTLIST_FOREACH_END(node);
/* Make sure the nodes were added as entry guards. */
- tt_int_op(smartlist_len(all_entry_guards), ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, NUMBER_OF_DESCRIPTORS);
/* Ensure that all the possible entry guards are enough to satisfy us. */
- tt_int_op(smartlist_len(all_entry_guards), >=, num_needed);
+ tt_int_op(smartlist_len(all_entry_guards), OP_GE, num_needed);
/* Walk the entry guard list for some sanity checking */
SMARTLIST_FOREACH_BEGIN(all_entry_guards, const entry_guard_t *, entry) {
/* Since we called add_an_entry_guard() with 'for_discovery' being
False, all guards should have made_contact enabled. */
- tt_int_op(entry->made_contact, ==, 1);
+ tt_int_op(entry->made_contact, OP_EQ, 1);
/* Since we don't have a routerstatus, all of the entry guards are
not directory servers. */
- tt_int_op(entry->is_dir_cache, ==, 0);
+ tt_int_op(entry->is_dir_cache, OP_EQ, 0);
} SMARTLIST_FOREACH_END(entry);
/* First, try to get some fast guards. This should fail. */
@@ -228,8 +229,8 @@ populate_live_entry_guards_test_helper(int num_needed)
NO_DIRINFO, /* Don't care about DIRINFO*/
0, 0,
1); /* We want fast guard! */
- tt_int_op(retval, ==, 0);
- tt_int_op(smartlist_len(live_entry_guards), ==, 0);
+ tt_int_op(retval, OP_EQ, 0);
+ tt_int_op(smartlist_len(live_entry_guards), OP_EQ, 0);
/* Now try to get some stable guards. This should fail too. */
retval = populate_live_entry_guards(live_entry_guards,
@@ -239,8 +240,8 @@ populate_live_entry_guards_test_helper(int num_needed)
0,
1, /* We want stable guard! */
0);
- tt_int_op(retval, ==, 0);
- tt_int_op(smartlist_len(live_entry_guards), ==, 0);
+ tt_int_op(retval, OP_EQ, 0);
+ tt_int_op(smartlist_len(live_entry_guards), OP_EQ, 0);
/* Now try to get any guard we can find. This should succeed. */
retval = populate_live_entry_guards(live_entry_guards,
@@ -253,8 +254,8 @@ populate_live_entry_guards_test_helper(int num_needed)
should have added 'num_needed' of them to live_entry_guards.
'retval' should be 1 since we now have enough live entry guards
to pick one. */
- tt_int_op(retval, ==, 1);
- tt_int_op(smartlist_len(live_entry_guards), ==, num_needed);
+ tt_int_op(retval, OP_EQ, 1);
+ tt_int_op(smartlist_len(live_entry_guards), OP_EQ, num_needed);
done:
smartlist_free(live_entry_guards);
@@ -361,7 +362,7 @@ test_entry_guards_parse_state_simple(void *arg)
(void) arg;
/* The global entry guards smartlist should be empty now. */
- tt_int_op(smartlist_len(all_entry_guards), ==, 0);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0);
{ /* Prepare the state entry */
@@ -387,34 +388,34 @@ test_entry_guards_parse_state_simple(void *arg)
/* Parse state */
retval = entry_guards_parse_state(state, 1, &msg);
- tt_int_op(retval, >=, 0);
+ tt_int_op(retval, OP_GE, 0);
/* Test that the guard was registered.
We need to re-get the entry guard list since its pointer was
overwritten in entry_guards_parse_state(). */
all_entry_guards = get_entry_guards();
- tt_int_op(smartlist_len(all_entry_guards), ==, 1);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 1);
{ /* Test the entry guard structure */
char hex_digest[1024];
char str_time[1024];
const entry_guard_t *e = smartlist_get(all_entry_guards, 0);
- tt_str_op(e->nickname, ==, nickname); /* Verify nickname */
+ tt_str_op(e->nickname, OP_EQ, nickname); /* Verify nickname */
base16_encode(hex_digest, sizeof(hex_digest),
e->identity, DIGEST_LEN);
- tt_str_op(hex_digest, ==, fpr); /* Verify fingerprint */
+ tt_str_op(hex_digest, OP_EQ, fpr); /* Verify fingerprint */
tt_assert(e->is_dir_cache); /* Verify dirness */
- tt_str_op(e->chosen_by_version, ==, tor_version); /* Verify tor version */
+ tt_str_op(e->chosen_by_version, OP_EQ, tor_version); /* Verify version */
tt_assert(e->made_contact); /* All saved guards have been contacted */
tt_assert(e->bad_since); /* Verify bad_since timestamp */
format_iso_time(str_time, e->bad_since);
- tt_str_op(str_time, ==, unlisted_since);
+ tt_str_op(str_time, OP_EQ, unlisted_since);
/* The rest should be unset */
tt_assert(!e->unreachable_since);
@@ -456,7 +457,7 @@ test_entry_guards_parse_state_pathbias(void *arg)
(void) arg;
/* The global entry guards smartlist should be empty now. */
- tt_int_op(smartlist_len(all_entry_guards), ==, 0);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0);
{ /* Prepare the state entry */
@@ -492,11 +493,11 @@ test_entry_guards_parse_state_pathbias(void *arg)
/* Parse state */
retval = entry_guards_parse_state(state, 1, &msg);
- tt_int_op(retval, >=, 0);
+ tt_int_op(retval, OP_GE, 0);
/* Test that the guard was registered */
all_entry_guards = get_entry_guards();
- tt_int_op(smartlist_len(all_entry_guards), ==, 1);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 1);
{ /* Test the path bias of this guard */
const entry_guard_t *e = smartlist_get(all_entry_guards, 0);
@@ -505,12 +506,13 @@ test_entry_guards_parse_state_pathbias(void *arg)
tt_assert(!e->can_retry);
/* XXX tt_double_op doesn't support equality. Cast to int for now. */
- tt_int_op((int)e->circ_attempts, ==, (int)circ_attempts);
- tt_int_op((int)e->circ_successes, ==, (int)circ_successes);
- tt_int_op((int)e->successful_circuits_closed, ==, (int)successful_closed);
- tt_int_op((int)e->timeouts, ==, (int)timeouts);
- tt_int_op((int)e->collapsed_circuits, ==, (int)collapsed);
- tt_int_op((int)e->unusable_circuits, ==, (int)unusable);
+ tt_int_op((int)e->circ_attempts, OP_EQ, (int)circ_attempts);
+ tt_int_op((int)e->circ_successes, OP_EQ, (int)circ_successes);
+ tt_int_op((int)e->successful_circuits_closed, OP_EQ,
+ (int)successful_closed);
+ tt_int_op((int)e->timeouts, OP_EQ, (int)timeouts);
+ tt_int_op((int)e->collapsed_circuits, OP_EQ, (int)collapsed);
+ tt_int_op((int)e->unusable_circuits, OP_EQ, (int)unusable);
}
done:
@@ -537,17 +539,17 @@ test_entry_guards_set_from_config(void *arg)
retval = routerset_parse(options->EntryNodes,
entrynodes_str,
"test_entrynodes");
- tt_int_op(retval, >=, 0);
+ tt_int_op(retval, OP_GE, 0);
/* Read nodes from EntryNodes */
entry_guards_set_from_config(options);
/* Test that only one guard was added. */
- tt_int_op(smartlist_len(all_entry_guards), ==, 1);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 1);
/* Make sure it was the guard we specified. */
chosen_entry = choose_random_entry(NULL);
- tt_str_op(chosen_entry->ri->nickname, ==, entrynodes_str);
+ tt_str_op(chosen_entry->ri->nickname, OP_EQ, entrynodes_str);
done:
routerset_free(options->EntryNodes);
@@ -569,59 +571,59 @@ test_entry_is_time_to_retry(void *arg)
test_guard->unreachable_since = now - 1;
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->unreachable_since = now - (6*60*60 - 1);
test_guard->last_attempted = now - (60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->last_attempted = now - (60*60 - 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,0);
+ tt_int_op(retval,OP_EQ,0);
test_guard->unreachable_since = now - (6*60*60 + 1);
test_guard->last_attempted = now - (4*60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->unreachable_since = now - (3*24*60*60 - 1);
test_guard->last_attempted = now - (4*60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->unreachable_since = now - (3*24*60*60 + 1);
test_guard->last_attempted = now - (18*60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->unreachable_since = now - (7*24*60*60 - 1);
test_guard->last_attempted = now - (18*60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->last_attempted = now - (18*60*60 - 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,0);
+ tt_int_op(retval,OP_EQ,0);
test_guard->unreachable_since = now - (7*24*60*60 + 1);
test_guard->last_attempted = now - (36*60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
test_guard->unreachable_since = now - (7*24*60*60 + 1);
test_guard->last_attempted = now - (36*60*60 + 1);
retval = entry_is_time_to_retry(test_guard,now);
- tt_int_op(retval,==,1);
+ tt_int_op(retval,OP_EQ,1);
done:
tor_free(test_guard);
@@ -641,23 +643,23 @@ test_entry_is_live(void *arg)
(void) arg;
/* The global entry guards smartlist should be empty now. */
- tt_int_op(smartlist_len(all_entry_guards), ==, 0);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0);
/* Walk the nodelist and add all nodes as entry guards. */
our_nodelist = nodelist_get_list();
- tt_int_op(smartlist_len(our_nodelist), ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS);
SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) {
const node_t *node_tmp;
node_tmp = add_an_entry_guard(node, 0, 1, 0, 0);
tt_assert(node_tmp);
- tt_int_op(node->is_stable, ==, 0);
- tt_int_op(node->is_fast, ==, 0);
+ tt_int_op(node->is_stable, OP_EQ, 0);
+ tt_int_op(node->is_fast, OP_EQ, 0);
} SMARTLIST_FOREACH_END(node);
/* Make sure the nodes were added as entry guards. */
- tt_int_op(smartlist_len(all_entry_guards), ==, NUMBER_OF_DESCRIPTORS);
+ tt_int_op(smartlist_len(all_entry_guards), OP_EQ, NUMBER_OF_DESCRIPTORS);
/* Now get a random test entry that we will use for this unit test. */
which_node = 3; /* (chosen by fair dice roll) */
@@ -681,12 +683,12 @@ test_entry_is_live(void *arg)
/* Don't impose any restrictions on the node. Should succeed. */
test_node = entry_is_live(test_entry, 0, &msg);
tt_assert(test_node);
- tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity));
+ tt_ptr_op(test_node, OP_EQ, node_get_by_id(test_entry->identity));
/* Require descriptor for this node. It has one so it should succeed. */
test_node = entry_is_live(test_entry, ENTRY_NEED_DESCRIPTOR, &msg);
tt_assert(test_node);
- tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity));
+ tt_ptr_op(test_node, OP_EQ, node_get_by_id(test_entry->identity));
done:
; /* XXX */
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
index 35e7fe5ad9..d99961dd4a 100644
--- a/src/test/test_extorport.c
+++ b/src/test/test_extorport.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define CONNECTION_PRIVATE
@@ -24,35 +24,37 @@ test_ext_or_id_map(void *arg)
(void)arg;
/* pre-initialization */
- tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+ tt_ptr_op(NULL, OP_EQ,
+ 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->ext_or_conn_id, OP_NE, NULL);
+ tt_ptr_op(c2->ext_or_conn_id, OP_NE, NULL);
+ tt_ptr_op(c3->ext_or_conn_id, OP_EQ, 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"));
+ tt_ptr_op(c1, OP_EQ, connection_or_get_by_ext_or_id(c1->ext_or_conn_id));
+ tt_ptr_op(c2, OP_EQ, connection_or_get_by_ext_or_id(c2->ext_or_conn_id));
+ tt_ptr_op(NULL, OP_EQ,
+ 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);
- tt_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ tt_mem_op(idp, OP_NE, 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));
+ tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(c2, OP_EQ, 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));
+ tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id(idp2));
done:
if (c1)
@@ -112,33 +114,33 @@ test_ext_or_write_command(void *arg)
/* Length too long */
tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 100, "X", 100000),
- <, 0);
+ OP_LT, 0);
/* Empty command */
tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99, NULL, 0),
- ==, 0);
+ OP_EQ, 0);
cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
- tt_int_op(sz, ==, 4);
- tt_mem_op(cp, ==, "\x00\x99\x00\x00", 4);
+ tt_int_op(sz, OP_EQ, 4);
+ tt_mem_op(cp, OP_EQ, "\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);
+ "Wai\0Hello", 9), OP_EQ, 0);
cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
- tt_int_op(sz, ==, 13);
- tt_mem_op(cp, ==, "\x00\x99\x00\x09Wai\x00Hello", 13);
+ tt_int_op(sz, OP_EQ, 13);
+ tt_mem_op(cp, OP_EQ, "\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);
+ buf, 65535), OP_EQ, 0);
cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
- tt_int_op(sz, ==, 65539);
- tt_mem_op(cp, ==, "\xf0\x0d\xff\xff", 4);
- tt_mem_op(cp+4, ==, buf, 65535);
+ tt_int_op(sz, OP_EQ, 65539);
+ tt_mem_op(cp, OP_EQ, "\xf0\x0d\xff\xff", 4);
+ tt_mem_op(cp+4, OP_EQ, buf, 65535);
tor_free(cp);
done:
@@ -175,7 +177,7 @@ test_ext_or_init_auth(void *arg)
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");
+ tt_str_op(cp, OP_EQ, "foo"PATH_SEPARATOR"extended_orport_auth_cookie");
tor_free(cp);
/* Shouldn't be initialized already, or our tests will be a bit
@@ -187,30 +189,30 @@ test_ext_or_init_auth(void *arg)
fn = get_fname("ext_cookie_file");
options->ExtORPortCookieAuthFile = tor_strdup(fn);
cp = get_ext_or_auth_cookie_file_name();
- tt_str_op(cp, ==, fn);
+ tt_str_op(cp, OP_EQ, 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);
+ tt_int_op(-1, OP_EQ, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, OP_EQ, 1);
cp = read_file_to_str(fn, RFTS_BIN, &st);
- tt_ptr_op(cp, !=, NULL);
- tt_u64_op((uint64_t)st.st_size, ==, 64);
- tt_mem_op(cp,==, "! Extended ORPort Auth Cookie !\x0a", 32);
- tt_mem_op(cp+32,==, ext_or_auth_cookie, 32);
+ tt_ptr_op(cp, OP_NE, NULL);
+ tt_u64_op((uint64_t)st.st_size, OP_EQ, 64);
+ tt_mem_op(cp,OP_EQ, "! Extended ORPort Auth Cookie !\x0a", 32);
+ tt_mem_op(cp+32,OP_EQ, ext_or_auth_cookie, 32);
memcpy(cookie0, ext_or_auth_cookie, 32);
tt_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));
- tt_mem_op(cookie0,==, ext_or_auth_cookie, 32);
+ tt_int_op(0, OP_EQ, init_ext_or_cookie_authentication(1));
+ tt_mem_op(cookie0,OP_EQ, ext_or_auth_cookie, 32);
done:
tor_free(cp);
@@ -237,8 +239,8 @@ test_ext_or_cookie_auth(void *arg)
(void)arg;
- tt_int_op(strlen(client_hash_input), ==, 46+32+32);
- tt_int_op(strlen(server_hash_input), ==, 46+32+32);
+ tt_int_op(strlen(client_hash_input), OP_EQ, 46+32+32);
+ tt_int_op(strlen(server_hash_input), OP_EQ, 46+32+32);
ext_or_auth_cookie = tor_malloc_zero(32);
memcpy(ext_or_auth_cookie, "s beside you? When I count, ther", 32);
@@ -258,20 +260,20 @@ test_ext_or_cookie_auth(void *arg)
*/
/* Wrong length */
- tt_int_op(-1, ==,
+ tt_int_op(-1, OP_EQ,
handle_client_auth_nonce(client_nonce, 33, &client_hash, &reply,
&reply_len));
- tt_int_op(-1, ==,
+ tt_int_op(-1, OP_EQ,
handle_client_auth_nonce(client_nonce, 31, &client_hash, &reply,
&reply_len));
/* Now let's try this for real! */
- tt_int_op(0, ==,
+ tt_int_op(0, OP_EQ,
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);
+ tt_int_op(reply_len, OP_EQ, 64);
+ tt_ptr_op(reply, OP_NE, NULL);
+ tt_ptr_op(client_hash, OP_NE, 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);
@@ -280,15 +282,15 @@ test_ext_or_cookie_auth(void *arg)
46+32+32);
crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
46+32+32);
- tt_mem_op(hmac1,==, reply, 32);
- tt_mem_op(hmac2,==, client_hash, 32);
+ tt_mem_op(hmac1,OP_EQ, reply, 32);
+ tt_mem_op(hmac2,OP_EQ, client_hash, 32);
/* Now do it again and make sure that the results are *different* */
- tt_int_op(0, ==,
+ tt_int_op(0, OP_EQ,
handle_client_auth_nonce(client_nonce, 32, &client_hash2, &reply2,
&reply_len));
- tt_mem_op(reply2,!=, reply, reply_len);
- tt_mem_op(client_hash2,!=, client_hash, 32);
+ tt_mem_op(reply2,OP_NE, reply, reply_len);
+ tt_mem_op(client_hash2,OP_NE, 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);
@@ -297,8 +299,8 @@ test_ext_or_cookie_auth(void *arg)
46+32+32);
crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
46+32+32);
- tt_mem_op(hmac1,==, reply2, 32);
- tt_mem_op(hmac2,==, client_hash2, 32);
+ tt_mem_op(hmac1,OP_EQ, reply2, 32);
+ tt_mem_op(hmac2,OP_EQ, client_hash2, 32);
done:
tor_free(reply);
@@ -334,12 +336,12 @@ test_ext_or_cookie_auth_testvec(void *arg)
MOCK(crypto_rand, crypto_rand_return_tse_str);
- tt_int_op(0, ==,
+ tt_int_op(0, OP_EQ,
handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply,
&reply_len));
- tt_ptr_op(reply, !=, NULL );
- tt_uint_op(reply_len, ==, 64);
- tt_mem_op(reply+32,==, "te road There is always another ", 32);
+ tt_ptr_op(reply, OP_NE, NULL );
+ tt_uint_op(reply_len, OP_EQ, 64);
+ tt_mem_op(reply+32,OP_EQ, "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 ");
@@ -402,11 +404,11 @@ handshake_start(or_connection_t *conn, int receiving)
} while (0)
#define CONTAINS(s,n) \
do { \
- tt_int_op((n), <=, sizeof(b)); \
- tt_int_op(buf_datalen(TO_CONN(conn)->outbuf), ==, (n)); \
+ tt_int_op((n), OP_LE, sizeof(b)); \
+ tt_int_op(buf_datalen(TO_CONN(conn)->outbuf), OP_EQ, (n)); \
if ((n)) { \
fetch_from_buf(b, (n), TO_CONN(conn)->outbuf); \
- tt_mem_op(b, ==, (s), (n)); \
+ tt_mem_op(b, OP_EQ, (s), (n)); \
} \
} while (0)
@@ -416,14 +418,15 @@ do_ext_or_handshake(or_connection_t *conn)
{
char b[256];
- tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn));
UNMOCK(crypto_rand);
- tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH);
+ tt_int_op(TO_CONN(conn)->state, OP_EQ,
+ 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);
@@ -431,10 +434,10 @@ do_ext_or_handshake(or_connection_t *conn)
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));
+ tt_int_op(0, OP_EQ, 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);
+ tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_OPEN);
done: ;
}
@@ -456,14 +459,14 @@ test_ext_or_handshake(void *arg)
init_connection_lists();
conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
- tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn));
CONTAINS("", 0);
tt_assert(TO_CONN(conn)->marked_for_close);
close_closeable_connections();
@@ -471,23 +474,23 @@ test_ext_or_handshake(void *arg)
/* Okay, try again. */
conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
- tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn));
CONTAINS("", 0);
- tt_int_op(TO_CONN(conn)->state, ==,
+ tt_int_op(TO_CONN(conn)->state, OP_EQ,
EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE);
/* Pump it again. Nothing should happen. */
- tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_int_op(0, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, 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"
@@ -496,7 +499,7 @@ test_ext_or_handshake(void *arg)
/* 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));
+ tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn));
CONTAINS("\x00", 1);
tt_assert(TO_CONN(conn)->marked_for_close);
/* XXXX Hold-open-until-flushed. */
@@ -515,32 +518,32 @@ test_ext_or_handshake(void *arg)
/* 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));
+ tt_int_op(0, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn));
+ tt_int_op(TO_CONN(conn)->port, OP_EQ, 5678);
+ tt_int_op(tor_addr_to_ipv4h(&TO_CONN(conn)->addr), OP_EQ, 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);
+ tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn));
+ tt_ptr_op(NULL, OP_NE, conn->ext_or_transport);
+ tt_str_op("rfc1149", OP_EQ, conn->ext_or_transport);
+ tt_int_op(is_reading,OP_EQ,1);
+ tt_int_op(TO_CONN(conn)->state, OP_EQ, 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);
+ tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn));
+ tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_FLUSHING);
+ tt_int_op(is_reading,OP_EQ,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);
+ tt_int_op(handshake_start_called,OP_EQ,0);
+ tt_int_op(0, OP_EQ, connection_ext_or_finished_flushing(conn));
+ tt_int_op(is_reading,OP_EQ,1);
+ tt_int_op(handshake_start_called,OP_EQ,1);
+ tt_int_op(TO_CONN(conn)->type, OP_EQ, CONN_TYPE_OR);
+ tt_int_op(TO_CONN(conn)->state, OP_EQ, 0);
close_closeable_connections();
conn = NULL;
@@ -551,7 +554,7 @@ test_ext_or_handshake(void *arg)
/* 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));
+ tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn));
CONTAINS("", 0);
tt_assert(TO_CONN(conn)->marked_for_close);
close_closeable_connections();
@@ -564,7 +567,7 @@ test_ext_or_handshake(void *arg)
/* 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));
+ tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn));
CONTAINS("", 0);
tt_assert(TO_CONN(conn)->marked_for_close);
close_closeable_connections();
@@ -578,7 +581,7 @@ test_ext_or_handshake(void *arg)
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));
+ tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn));
CONTAINS("", 0);
tt_assert(TO_CONN(conn)->marked_for_close);
close_closeable_connections();
diff --git a/src/test/test_hs.c b/src/test/test_hs.c
index 0ee46c2a58..a5cd841a55 100644
--- a/src/test/test_hs.c
+++ b/src/test/test_hs.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -85,7 +85,7 @@ test_hs_desc_event(void *arg)
expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\
STR_HSDIR_EXIST_LONGNAME" "STR_HS_ID"\r\n";
tt_assert(received_msg);
- tt_str_op(received_msg,==, expected_msg);
+ tt_str_op(received_msg,OP_EQ, expected_msg);
tor_free(received_msg);
/* test received event */
@@ -94,25 +94,27 @@ test_hs_desc_event(void *arg)
expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\
STR_HSDIR_EXIST_LONGNAME"\r\n";
tt_assert(received_msg);
- tt_str_op(received_msg,==, expected_msg);
+ tt_str_op(received_msg,OP_EQ, 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);
+ control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID,
+ "QUERY_REJECTED");
expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\
- STR_HSDIR_NONE_EXIST_LONGNAME"\r\n";
+ STR_HSDIR_NONE_EXIST_LONGNAME" REASON=QUERY_REJECTED\r\n";
tt_assert(received_msg);
- tt_str_op(received_msg,==, expected_msg);
+ tt_str_op(received_msg,OP_EQ, 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);
+ control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID,
+ "QUERY_REJECTED");
expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\
- STR_HSDIR_EXIST_LONGNAME"\r\n";
+ STR_HSDIR_EXIST_LONGNAME" REASON=QUERY_REJECTED\r\n";
tt_assert(received_msg);
- tt_str_op(received_msg,==, expected_msg);
+ tt_str_op(received_msg,OP_EQ, expected_msg);
tor_free(received_msg);
done:
diff --git a/src/test/test_introduce.c b/src/test/test_introduce.c
index 17ee01d9b8..fe8ffbfa4b 100644
--- a/src/test/test_introduce.c
+++ b/src/test/test_introduce.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -310,7 +310,7 @@ do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase)
parsed_req = rend_service_begin_parse_intro(cell, cell_len, 2, &err_msg);
tt_assert(parsed_req);
tt_assert(!err_msg);
- tt_mem_op(parsed_req->pk,==, digest, DIGEST_LEN);
+ tt_mem_op(parsed_req->pk,OP_EQ, digest, DIGEST_LEN);
tt_assert(parsed_req->ciphertext);
tt_assert(parsed_req->ciphertext_len > 0);
diff --git a/src/test/test_logging.c b/src/test/test_logging.c
index 9f57000bea..17f1ed566c 100644
--- a/src/test/test_logging.c
+++ b/src/test/test_logging.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -19,11 +19,11 @@ test_get_sigsafe_err_fds(void *arg)
int n;
log_severity_list_t include_bug, no_bug, no_bug2;
(void) arg;
- init_logging();
+ init_logging(1);
n = tor_log_get_sigsafe_err_fds(&fds);
- tt_int_op(n, ==, 1);
- tt_int_op(fds[0], ==, STDERR_FILENO);
+ tt_int_op(n, OP_EQ, 1);
+ tt_int_op(fds[0], OP_EQ, STDERR_FILENO);
set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug);
set_log_severity_config(LOG_WARN, LOG_ERR, &no_bug);
@@ -40,26 +40,26 @@ test_get_sigsafe_err_fds(void *arg)
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);
+ tt_int_op(n, OP_EQ, 2);
+ tt_int_op(fds[0], OP_EQ, STDERR_FILENO);
+ tt_int_op(fds[1], OP_EQ, 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);
+ tt_int_op(n, OP_EQ, 2);
+ tt_int_op(fds[0], OP_EQ, 3);
+ tt_int_op(fds[1], OP_EQ, 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);
+ tt_int_op(n, OP_EQ, 3);
+ tt_int_op(fds[0], OP_EQ, STDERR_FILENO);
+ tt_int_op(fds[1], OP_EQ, STDOUT_FILENO);
+ tt_int_op(fds[2], OP_EQ, 3);
/* Don't overflow the array. */
{
@@ -70,7 +70,7 @@ test_get_sigsafe_err_fds(void *arg)
}
tor_log_update_sigsafe_err_fds();
n = tor_log_get_sigsafe_err_fds(&fds);
- tt_int_op(n, ==, 8);
+ tt_int_op(n, OP_EQ, 8);
done:
;
@@ -87,7 +87,7 @@ test_sigsafe_err(void *arg)
set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug);
- init_logging();
+ init_logging(1);
mark_logs_temp();
add_file_log(&include_bug, fn, 0);
tor_log_update_sigsafe_err_fds();
@@ -109,7 +109,7 @@ test_sigsafe_err(void *arg)
tt_assert(content != NULL);
tor_split_lines(lines, content, (int)strlen(content));
- tt_int_op(smartlist_len(lines), >=, 5);
+ tt_int_op(smartlist_len(lines), OP_GE, 5);
if (strstr(smartlist_get(lines, 0), "opening new log file"))
smartlist_del_keeporder(lines, 0);
@@ -119,7 +119,7 @@ test_sigsafe_err(void *arg)
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), ==,
+ tt_str_op(smartlist_get(lines, 4), OP_EQ,
"Testing any attempt to manually log from a signal.");
done:
diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c
index 23e636fbf1..4a7c29b747 100644
--- a/src/test/test_microdesc.c
+++ b/src/test/test_microdesc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2013, The Tor Project, Inc. */
+/* Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -7,11 +7,16 @@
#include "config.h"
#include "dirvote.h"
#include "microdesc.h"
+#include "networkstatus.h"
#include "routerlist.h"
#include "routerparse.h"
#include "test.h"
+#include <openssl/rsa.h>
+#include <openssl/bn.h>
+#include <openssl/pem.h>
+
#ifdef _WIN32
/* For mkdir() */
#include <direct.h>
@@ -70,9 +75,9 @@ test_md_cache(void *data)
tor_free(options->DataDirectory);
options->DataDirectory = tor_strdup(get_fname("md_datadir_test"));
#ifdef _WIN32
- tt_int_op(0, ==, mkdir(options->DataDirectory));
+ tt_int_op(0, OP_EQ, mkdir(options->DataDirectory));
#else
- tt_int_op(0, ==, mkdir(options->DataDirectory, 0700));
+ tt_int_op(0, OP_EQ, mkdir(options->DataDirectory, 0700));
#endif
tt_assert(!strcmpstart(test_md3_noannotation, "onion-key"));
@@ -86,7 +91,7 @@ test_md_cache(void *data)
added = microdescs_add_to_cache(mc, test_md1, NULL, SAVED_NOWHERE, 0,
time1, NULL);
- tt_int_op(1, ==, smartlist_len(added));
+ tt_int_op(1, OP_EQ, smartlist_len(added));
md1 = smartlist_get(added, 0);
smartlist_free(added);
added = NULL;
@@ -95,7 +100,7 @@ test_md_cache(void *data)
added = microdescs_add_to_cache(mc, test_md2, NULL, SAVED_NOWHERE, 0,
time2, wanted);
/* Should fail, since we didn't list test_md2's digest in wanted */
- tt_int_op(0, ==, smartlist_len(added));
+ tt_int_op(0, OP_EQ, smartlist_len(added));
smartlist_free(added);
added = NULL;
@@ -104,75 +109,75 @@ test_md_cache(void *data)
added = microdescs_add_to_cache(mc, test_md2, NULL, SAVED_NOWHERE, 0,
time2, wanted);
/* Now it can work. md2 should have been added */
- tt_int_op(1, ==, smartlist_len(added));
+ tt_int_op(1, OP_EQ, smartlist_len(added));
md2 = smartlist_get(added, 0);
/* And it should have gotten removed from 'wanted' */
- tt_int_op(smartlist_len(wanted), ==, 1);
- tt_mem_op(smartlist_get(wanted, 0), ==, d3, DIGEST256_LEN);
+ tt_int_op(smartlist_len(wanted), OP_EQ, 1);
+ tt_mem_op(smartlist_get(wanted, 0), OP_EQ, d3, DIGEST256_LEN);
smartlist_free(added);
added = NULL;
added = microdescs_add_to_cache(mc, test_md3, NULL,
SAVED_NOWHERE, 0, -1, NULL);
/* Must fail, since SAVED_NOWHERE precludes annotations */
- tt_int_op(0, ==, smartlist_len(added));
+ tt_int_op(0, OP_EQ, smartlist_len(added));
smartlist_free(added);
added = NULL;
added = microdescs_add_to_cache(mc, test_md3_noannotation, NULL,
SAVED_NOWHERE, 0, time3, NULL);
/* Now it can work */
- tt_int_op(1, ==, smartlist_len(added));
+ tt_int_op(1, OP_EQ, smartlist_len(added));
md3 = smartlist_get(added, 0);
smartlist_free(added);
added = NULL;
/* Okay. We added 1...3. Let's poke them to see how they look, and make
* sure they're really in the journal. */
- 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(md3, ==, microdesc_cache_lookup_by_digest256(mc, d3));
-
- tt_int_op(md1->last_listed, ==, time1);
- tt_int_op(md2->last_listed, ==, time2);
- tt_int_op(md3->last_listed, ==, time3);
-
- tt_int_op(md1->saved_location, ==, SAVED_IN_JOURNAL);
- tt_int_op(md2->saved_location, ==, SAVED_IN_JOURNAL);
- tt_int_op(md3->saved_location, ==, SAVED_IN_JOURNAL);
-
- tt_int_op(md1->bodylen, ==, strlen(test_md1));
- tt_int_op(md2->bodylen, ==, strlen(test_md2));
- tt_int_op(md3->bodylen, ==, strlen(test_md3_noannotation));
- tt_mem_op(md1->body, ==, test_md1, strlen(test_md1));
- tt_mem_op(md2->body, ==, test_md2, strlen(test_md2));
- tt_mem_op(md3->body, ==, test_md3_noannotation,
+ tt_ptr_op(md1, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d1));
+ tt_ptr_op(md2, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d2));
+ tt_ptr_op(md3, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d3));
+
+ tt_int_op(md1->last_listed, OP_EQ, time1);
+ tt_int_op(md2->last_listed, OP_EQ, time2);
+ tt_int_op(md3->last_listed, OP_EQ, time3);
+
+ tt_int_op(md1->saved_location, OP_EQ, SAVED_IN_JOURNAL);
+ tt_int_op(md2->saved_location, OP_EQ, SAVED_IN_JOURNAL);
+ tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_JOURNAL);
+
+ tt_int_op(md1->bodylen, OP_EQ, strlen(test_md1));
+ tt_int_op(md2->bodylen, OP_EQ, strlen(test_md2));
+ tt_int_op(md3->bodylen, OP_EQ, strlen(test_md3_noannotation));
+ tt_mem_op(md1->body, OP_EQ, test_md1, strlen(test_md1));
+ tt_mem_op(md2->body, OP_EQ, test_md2, strlen(test_md2));
+ tt_mem_op(md3->body, OP_EQ, test_md3_noannotation,
strlen(test_md3_noannotation));
tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs.new",
options->DataDirectory);
s = read_file_to_str(fn, RFTS_BIN, NULL);
tt_assert(s);
- tt_mem_op(md1->body, ==, s + md1->off, md1->bodylen);
- tt_mem_op(md2->body, ==, s + md2->off, md2->bodylen);
- tt_mem_op(md3->body, ==, s + md3->off, md3->bodylen);
+ tt_mem_op(md1->body, OP_EQ, s + md1->off, md1->bodylen);
+ tt_mem_op(md2->body, OP_EQ, s + md2->off, md2->bodylen);
+ tt_mem_op(md3->body, OP_EQ, s + md3->off, md3->bodylen);
- tt_ptr_op(md1->family, ==, NULL);
- tt_ptr_op(md3->family, !=, NULL);
- tt_int_op(smartlist_len(md3->family), ==, 3);
- tt_str_op(smartlist_get(md3->family, 0), ==, "nodeX");
+ tt_ptr_op(md1->family, OP_EQ, NULL);
+ tt_ptr_op(md3->family, OP_NE, NULL);
+ tt_int_op(smartlist_len(md3->family), OP_EQ, 3);
+ tt_str_op(smartlist_get(md3->family, 0), OP_EQ, "nodeX");
/* Now rebuild the cache! */
- tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0);
+ tt_int_op(microdesc_cache_rebuild(mc, 1), OP_EQ, 0);
- 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_CACHE);
+ tt_int_op(md1->saved_location, OP_EQ, SAVED_IN_CACHE);
+ tt_int_op(md2->saved_location, OP_EQ, SAVED_IN_CACHE);
+ tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_CACHE);
/* The journal should be empty now */
tor_free(s);
s = read_file_to_str(fn, RFTS_BIN, NULL);
- tt_str_op(s, ==, "");
+ tt_str_op(s, OP_EQ, "");
tor_free(s);
tor_free(fn);
@@ -180,9 +185,9 @@ test_md_cache(void *data)
tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs",
options->DataDirectory);
s = read_file_to_str(fn, RFTS_BIN, NULL);
- tt_mem_op(md1->body, ==, s + md1->off, strlen(test_md1));
- tt_mem_op(md2->body, ==, s + md2->off, strlen(test_md2));
- tt_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation));
+ tt_mem_op(md1->body, OP_EQ, s + md1->off, strlen(test_md1));
+ tt_mem_op(md2->body, OP_EQ, s + md2->off, strlen(test_md2));
+ tt_mem_op(md3->body, OP_EQ, s + md3->off, strlen(test_md3_noannotation));
/* Okay, now we are going to forget about the cache entirely, and reload it
* from the disk. */
@@ -194,41 +199,41 @@ test_md_cache(void *data)
tt_assert(md1);
tt_assert(md2);
tt_assert(md3);
- tt_mem_op(md1->body, ==, s + md1->off, strlen(test_md1));
- tt_mem_op(md2->body, ==, s + md2->off, strlen(test_md2));
- tt_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation));
+ tt_mem_op(md1->body, OP_EQ, s + md1->off, strlen(test_md1));
+ tt_mem_op(md2->body, OP_EQ, s + md2->off, strlen(test_md2));
+ tt_mem_op(md3->body, OP_EQ, s + md3->off, strlen(test_md3_noannotation));
- tt_int_op(md1->last_listed, ==, time1);
- tt_int_op(md2->last_listed, ==, time2);
- tt_int_op(md3->last_listed, ==, time3);
+ tt_int_op(md1->last_listed, OP_EQ, time1);
+ tt_int_op(md2->last_listed, OP_EQ, time2);
+ tt_int_op(md3->last_listed, OP_EQ, time3);
/* Okay, now we are going to clear out everything older than a week old.
* In practice, that means md3 */
microdesc_cache_clean(mc, time(NULL)-7*24*60*60, 1/*force*/);
- 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));
+ tt_ptr_op(md1, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d1));
+ tt_ptr_op(md2, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d2));
+ tt_ptr_op(NULL, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d3));
md3 = NULL; /* it's history now! */
/* rebuild again, make sure it stays gone. */
- 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));
+ tt_int_op(microdesc_cache_rebuild(mc, 1), OP_EQ, 0);
+ tt_ptr_op(md1, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d1));
+ tt_ptr_op(md2, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d2));
+ tt_ptr_op(NULL, OP_EQ, 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));
+ tt_int_op(1, OP_EQ, 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(md1->saved_location, OP_EQ, SAVED_IN_CACHE);
+ tt_int_op(md2->saved_location, OP_EQ, SAVED_IN_CACHE);
+ tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_JOURNAL);
- tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0);
- tt_int_op(md3->saved_location, ==, SAVED_IN_CACHE);
+ tt_int_op(microdesc_cache_rebuild(mc, 1), OP_EQ, 0);
+ tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_CACHE);
done:
if (options)
@@ -268,9 +273,9 @@ test_md_cache_broken(void *data)
options->DataDirectory = tor_strdup(get_fname("md_datadir_test2"));
#ifdef _WIN32
- tt_int_op(0, ==, mkdir(options->DataDirectory));
+ tt_int_op(0, OP_EQ, mkdir(options->DataDirectory));
#else
- tt_int_op(0, ==, mkdir(options->DataDirectory, 0700));
+ tt_int_op(0, OP_EQ, mkdir(options->DataDirectory, 0700));
#endif
tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs",
@@ -367,10 +372,10 @@ test_md_generate(void *arg)
microdesc_t *md = NULL;
(void)arg;
- ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL);
+ ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL, NULL);
tt_assert(ri);
md = dirvote_create_microdescriptor(ri, 8);
- tt_str_op(md->body, ==, test_md_8);
+ tt_str_op(md->body, OP_EQ, test_md_8);
/* XXXX test family lines. */
/* XXXX test method 14 for A lines. */
@@ -379,22 +384,342 @@ test_md_generate(void *arg)
microdesc_free(md);
md = NULL;
md = dirvote_create_microdescriptor(ri, 16);
- tt_str_op(md->body, ==, test_md_16);
+ tt_str_op(md->body, OP_EQ, test_md_16);
microdesc_free(md);
md = NULL;
md = dirvote_create_microdescriptor(ri, 18);
- tt_str_op(md->body, ==, test_md_18);
+ tt_str_op(md->body, OP_EQ, test_md_18);
done:
microdesc_free(md);
routerinfo_free(ri);
}
+/* Taken at random from my ~/.tor/cached-microdescs file and then
+ * hand-munged */
+static const char MD_PARSE_TEST_DATA[] =
+ /* Good 0 */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANsKd1GRfOuSR1MkcwKqs6SVy4Gi/JXplt/bHDkIGm6Q96TeJ5uyVgUL\n"
+ "DBr/ij6+JqgVFeriuiMzHKREytzjdaTuKsKBFFpLwb+Ppcjr5nMIH/AR6/aHO8hW\n"
+ "T3B9lx5T6Kl7CqZ4yqXxYRHzn50EPTIZuz0y9se4J4gi9mLmL+pHAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "p accept 20-23,43,53,79-81,88,110,143,194,220,443,464,531,543-544\n"
+ "id rsa1024 GEo59/iR1GWSIWZDzXTd5QxtqnU\n"
+ /* Bad 0: I've messed with the onion-key in the second one. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMr4o/pflVwscx11vC1AKEADlKEqnhpvCIjAEzNEenMhvGQHRlA0EXLC\n"
+ "7G7O5bhnCwEHqK8Pvg8cuX/fD8v08TF1EVPhwPa0UI6ab8KnPP2F!!!!!!b92DG7EQIk3q\n"
+ "d68Uxp7E9/t3v1WWZjzDqvEe0par6ul+DKW6HMlTGebFo5Q4e8R1AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key 761Dmm27via7lXygNHM3l+oJLrYU2Nye0Uz4pkpipyY=\n"
+ "p accept 53\n"
+ "id rsa1024 3Y4fwXhtgkdGDZ5ef5mtb6TJRQQ\n"
+ /* Good 1 */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANsMSjVi3EX8ZHfm/dvPF6KdVR66k1tVul7Jp+dDbDajBYNhgKRzVCxy\n"
+ "Yac1CBuQjOqK89tKap9PQBnhF087eDrfaZDqYTLwB2W2sBJncVej15WEPXPRBifo\n"
+ "iFZ8337kgczkaY+IOfSuhtbOUyDOoDpRJheIKBNq0ZiTqtLbbadVAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key ncfiHJjSgdDEW/gc6q6/7idac7j+x7ejQrRm6i75pGA=\n"
+ "p accept 443,6660-6669,6697,7000-7001\n"
+ "id rsa1024 XXuLzw3mfBELEq3veXoNhdehwD4\n"
+ /* Good 2 */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANQfBlrHrh9F/CAOytrNFgi0ikWMW/HZxuoszF9X+AQ+MudR8bcxxOGl\n"
+ "1RFwb74s8E3uuzrCkNFvSw9Ar1L02F2DOX0gLsxEGuYC4Ave9NUteGqSqDyEJQUJ\n"
+ "KlfxCPn2qC9nvNT7wR/Dg2WRvAEKnJmkpb57N3+WSAOPLjKOFEz3AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key AppBt6CSeb1kKid/36ototmFA24ddfW5JpjWPLuoJgs=\n"
+ "id rsa1024 6y60AEI9a1PUUlRPO0YQT9WzrjI\n"
+ /* Bad 1: Here I've messed with the ntor key */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAPjy2HacU3jDNO5nTOFGSwNa0qKCNn4yhtrDVcAJ5alIQeBWZZGJLZ0q\n"
+ "Cqylw1vYqxu8E09g+QXXFbAgBv1U9TICaATxrIJhIJzc8TJPhqJemp1kq0DvHLDx\n"
+ "mxwlkNnCD/P5NS+JYB3EjOlU9EnSKUWNU61+Co344m2JqhEau40vAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key 4i2Fp9JHTUr1uQs0pxD5j5spl4/RG56S2P0gQxU=\n"
+ "id rsa1024 nMRmNEGysA0NmlALVaUmI7D5jLU\n"
+ /* Good 3: I've added a weird token in this one. This shouldn't prevent
+ * it parsing */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKmosxudyNA/yJNz3S890VqV/ebylzoD11Sc0b/d5tyNNaNZjcYy5vRD\n"
+ "kwyxFRMbP2TLZQ1zRfNwY7IDnYjU2SbW0pxuM6M8WRtsmx/YOE3kHMVAFJNrTUqU\n"
+ "6D1zB3IiRDS5q5+NoRxwqo+hYUck60O3WTwEoqb+l3lvXeu7z9rFAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "flux-capacitor 1.21 GW\n"
+ "ntor-onion-key MWBoEkl+RlBiGX44XKIvTSqbznTNZStOmUYtcYRQQyY=\n"
+ "id rsa1024 R+A5O9qRvRac4FT3C4L2QnFyxsc\n"
+ /* Good 4: Here I've made the 'id rsa' token odd. It should still parse
+ * just fine. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAOh+WMkdNe/Pkjb8UjQyfLOlFgpuVFrxAIGnJsmWWx0yBE97DQxGyh2n\n"
+ "h8G5OJZHRarJQyCIf7vpZQAi0oP0OkGGaCaDQsM+D8TnqhnU++RWGnMqY/cXxPrL\n"
+ "MEq+n6aGiLmzkO7ah8yorZpoREk4GqLUIN89/tHHGOhJL3c4CPGjAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n"
+ "id rsa1234 jlqAKFD2E7uMKv+8TmKSeo7NBho\n"
+ /* Good 5: Extra id type. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAMdgPPc5uaw4y/q+SUTN/I8Y+Gvdx9kKgWV4dmDGJ0mxsVZmo1v6+v3F\n"
+ "12M2f9m99G3WB8F8now29C+9XyEv8MBHj1lHRdUFHSQes3YTFvDNlgj+FjLqO5TJ\n"
+ "adOOmfu4DCUUtUEDyQKbNVL4EkMTXY73omTVsjcH3xxFjTx5wixhAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key AAVnWZcnDbxasdZwKqb4fL6O9sZV+XsRNHTpNd1YMz8=\n"
+ "id rsa1024 72EfBL11QuwX2vU8y+p9ExGfGEg\n"
+ "id expolding hedgehog 0+A5O9qRvRac4FT3C4L2QnFyxsc\n"
+ /* Good 6: I've given this a bogus policy. It should parse. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALNuufwhPMF8BooxYMNvhYJMPqUB8hQDt8wGmPKphJcD1sVD1i4gAZM2\n"
+ "HIo+zUBlljDrRWL5NzVzd1yxUJAiQxvXS5dRRFY3B70M7wTVpXw53xe0/BM5t1AX\n"
+ "n0MFk7Jl6XIKMlzRalZvmMvE/odtyWXkP4Nd1MyZ1QcIwrQ2iwyrAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "p condone 1-10\n"
+ "ntor-onion-key 2/nMJ+L4dd/2GpMyTYjz3zC59MvQy4MIzJZhdzKHekg=\n"
+ "id rsa1024 FHyh10glEMA6MCmBb5R9Y+X/MhQ\n"
+ /* Good 7: I've given this one another sort of odd policy. Should parse. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKcd3FmQ8iAADghyvX8eca0ePqtJ2w1IDdUdTlf5Y/8+OMdp//sD01yC\n"
+ "YmiX45LK5ge1O3AzcakYCO6fb3pyIqvXdvm24OjyYZELQ40cmKSLjdhcSf4Fr/N9\n"
+ "uR/CkknR9cEePu1wZ5WBIGmGdXI6s7t3LB+e7XFyBYAx6wMGlnX7AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "p accept frogs-mice\n"
+ "ntor-onion-key AMxvhaQ1Qg7jBJFoyHuPRgETvLbFmJ194hExV24FuAI=\n"
+ "family $D8CFEA0D996F5D1473D2063C041B7910DB23981E\n"
+ "id rsa1024 d0VVZC/cHh1P3y4MMbfKlQHFycc\n"
+ /* Good 8: This one has the ntor-onion-key without terminating =. That's
+ * allowed. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAL438YfjrJE2SPqkkXeQwICygu8KNO54Juj6sjqk5hgsiazIWMOBgbaX\n"
+ "LIRqPNGaiSq01xSqwjwCBCfwZYT/nSdDBqj1h9aoR8rnjxZjyQ+m3rWpdDqeCDMx\n"
+ "I3NgZ5w4bNX4poRb42lrV6NmQiFdjzpqszVbv5Lpn2CSKu32CwKVAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key UKL6Dnj2KwYsFlkCvOkXVatxvOPB4MaxqwPQQgZMTwI\n"
+ "id rsa1024 FPIXc6k++JnKCtSKWUxaR6oXEKs\n"
+ /* Good 9: Another totally normal one.*/
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANNGIKRd8PFNXkJ2JPV1ohDMFNbJwKbwybeieaQFjtU9KWedHCbr+QD4\n"
+ "B6zNY5ysguNjHNnlq2f6D09+uhnfDBON8tAz0mPQH/6JqnOXm+EiUn+8bN0E8Nke\n"
+ "/i3GEgDeaxJJMNQcpsJvmmSmKFOlYy9Fy7ejAjTGqtAnqOte7BnTAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key gUsq3e5iYgsQQvyxINtLzBpHxmIt5rtuFlEbKfI4gFk=\n"
+ "id rsa1024 jv+LdatDzsMfEW6pLBeL/5uzwCc\n"
+ /* Bad 2: RSA key has bad exponent of 3. */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGHAoGBAMMTWtvPxYnUNJ5Y7B+XENcpxzPoGstrdiUszCBS+/42xvluLJ+JDSdR\n"
+ "qJaMD6ax8vKAeLS5C6O17MNdG2VldlPRbtgl41MXsOoUqEJ+nY9e3WG9Snjp47xC\n"
+ "zmWIfeduXSavIsb3a43/MLIz/9qO0TkgAAiuQr79JlwKhLdzCqTLAgED\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key NkRB4wTUFogiVp5jYmjGORe2ffb/y5Kk8Itw8jdzMjA=\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n"
+ "id rsa1024 fKvYjP7TAjCC1FzYee5bYAwYkoDg\n"
+ /* Bad 3: Bogus annotation */
+ "@last-listed with strange aeons\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALcRBFNCZtpd2TFJysU77/fJMFzKisRQEBOtDGtTZ2Bg4aEGosssa0Id\n"
+ "YtUagRLYle08QVGvGB+EHBI5qf6Ah2yPH7k5QiN2a3Sq+nyh85dXKPazBGBBbM+C\n"
+ "DOfDauV02CAnADNMLJEf1voY3oBVvYyIsmHxn5i1R19ZYIiR8NX5AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key m4xcFXMWMjCvZDXq8FT3XmS0EHYseGOeu+fV+6FYDlk=\n"
+ "p accept 20-23,43,53,79-81,88,110,143,194,220,389,443,464,531,543-544\n"
+ "id rsa1024 SSbfNE9vmaiwRKH+eqNAkiKQhds\n"
+ /* Good 10: Normal, with added ipv6 address and added other address */
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM7uUtq5F6h63QNYIvC+4NcWaD0DjtnrOORZMkdpJhinXUOwce3cD5Dj\n"
+ "sgdN1wJpWpTQMXJ2DssfSgmOVXETP7qJuZyRprxalQhaEATMDNJA/66Ml1jSO9mZ\n"
+ "+8Xb7m/4q778lNtkSbsvMaYD2Dq6k2QQ3kMhr9z8oUtX0XA23+pfAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "a [::1:2:3:4]:9090\n"
+ "a 18.0.0.1:9999\n"
+ "ntor-onion-key k2yFqTU2vzMCQDEiE/j9UcEHxKrXMLpB3IL0or09sik=\n"
+ "id rsa1024 2A8wYpHxnkKJ92orocvIQBzeHlE\n"
+ "p6 allow 80\n"
+ ;
+
+/** More tests for parsing different kinds of microdescriptors, and getting
+ * invalid digests trackd from them. */
+static void
+test_md_parse(void *arg)
+{
+ (void) arg;
+ char *mem_op_hex_tmp = NULL;
+ smartlist_t *invalid = smartlist_new();
+
+ smartlist_t *mds = microdescs_parse_from_string(MD_PARSE_TEST_DATA,
+ NULL, 1, SAVED_NOWHERE,
+ invalid);
+ tt_int_op(smartlist_len(mds), OP_EQ, 11);
+ tt_int_op(smartlist_len(invalid), OP_EQ, 4);
+
+ test_memeq_hex(smartlist_get(invalid,0),
+ "5d76bf1c6614e885614a1e0ad074e1ab"
+ "4ea14655ebeefb1736a71b5ed8a15a51");
+ test_memeq_hex(smartlist_get(invalid,1),
+ "2fde0ee3343669c2444cd9d53cbd39c6"
+ "a7d1fc0513513e840ca7f6e68864b36c");
+ test_memeq_hex(smartlist_get(invalid,2),
+ "20d1576c5ab11bbcff0dedb1db4a3cfc"
+ "c8bc8dd839d8cbfef92d00a1a7d7b294");
+ test_memeq_hex(smartlist_get(invalid,3),
+ "074770f394c73dbde7b44412e9692add"
+ "691a478d4727f9804b77646c95420a96");
+
+ /* Spot-check the valid ones. */
+ const microdesc_t *md = smartlist_get(mds, 5);
+ test_memeq_hex(md->digest,
+ "54bb6d733ddeb375d2456c79ae103961"
+ "da0cae29620375ac4cf13d54da4d92b3");
+ tt_int_op(md->last_listed, OP_EQ, 0);
+ tt_int_op(md->saved_location, OP_EQ, SAVED_NOWHERE);
+ tt_int_op(md->no_save, OP_EQ, 0);
+ tt_uint_op(md->held_in_map, OP_EQ, 0);
+ tt_uint_op(md->held_by_nodes, OP_EQ, 0);
+ tt_assert(md->onion_curve25519_pkey);
+
+ md = smartlist_get(mds, 6);
+ test_memeq_hex(md->digest,
+ "53f740bd222ab37f19f604b1d3759aa6"
+ "5eff1fbce9ac254bd0fa50d4af9b1bae");
+ tt_assert(! md->exit_policy);
+
+ md = smartlist_get(mds, 8);
+ test_memeq_hex(md->digest,
+ "a0a155562d8093d8fd0feb7b93b7226e"
+ "17f056c2142aab7a4ea8c5867a0376d5");
+ tt_assert(md->onion_curve25519_pkey);
+
+ md = smartlist_get(mds, 10);
+ test_memeq_hex(md->digest,
+ "409ebd87d23925a2732bd467a92813c9"
+ "21ca378fcb9ca193d354c51550b6d5e9");
+ tt_assert(tor_addr_family(&md->ipv6_addr) == AF_INET6);
+ tt_int_op(md->ipv6_orport, OP_EQ, 9090);
+
+ done:
+ SMARTLIST_FOREACH(mds, microdesc_t *, md, microdesc_free(md));
+ smartlist_free(mds);
+ SMARTLIST_FOREACH(invalid, char *, cp, tor_free(cp));
+ smartlist_free(invalid);
+ tor_free(mem_op_hex_tmp);
+}
+
+static int mock_rgsbd_called = 0;
+static routerstatus_t *mock_rgsbd_val_a = NULL;
+static routerstatus_t *mock_rgsbd_val_b = NULL;
+static routerstatus_t *
+mock_router_get_status_by_digest(networkstatus_t *c, const char *d)
+{
+ (void) c;
+ ++mock_rgsbd_called;
+
+ if (fast_memeq(d, "\x5d\x76", 2)) {
+ memcpy(mock_rgsbd_val_a->descriptor_digest, d, 32);
+ return mock_rgsbd_val_a;
+ } else if (fast_memeq(d, "\x20\xd1", 2)) {
+ memcpy(mock_rgsbd_val_b->descriptor_digest, d, 32);
+ return mock_rgsbd_val_b;
+ } else {
+ return NULL;
+ }
+}
+
+static networkstatus_t *mock_ns_val = NULL;
+static networkstatus_t *
+mock_ns_get_by_flavor(consensus_flavor_t f)
+{
+ (void)f;
+ return mock_ns_val;
+}
+
+static void
+test_md_reject_cache(void *arg)
+{
+ (void) arg;
+ microdesc_cache_t *mc = NULL ;
+ smartlist_t *added = NULL, *wanted = smartlist_new();
+ or_options_t *options = get_options_mutable();
+ char buf[DIGEST256_LEN];
+
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup(get_fname("md_datadir_test_rej"));
+ mock_rgsbd_val_a = tor_malloc_zero(sizeof(routerstatus_t));
+ mock_rgsbd_val_b = tor_malloc_zero(sizeof(routerstatus_t));
+ mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t));
+
+ mock_ns_val->valid_after = time(NULL) - 86400;
+ mock_ns_val->valid_until = time(NULL) + 86400;
+ mock_ns_val->flavor = FLAV_MICRODESC;
+
+#ifdef _WIN32
+ tt_int_op(0, OP_EQ, mkdir(options->DataDirectory));
+#else
+ tt_int_op(0, OP_EQ, mkdir(options->DataDirectory, 0700));
+#endif
+
+ MOCK(router_get_mutable_consensus_status_by_descriptor_digest,
+ mock_router_get_status_by_digest);
+ MOCK(networkstatus_get_latest_consensus_by_flavor, mock_ns_get_by_flavor);
+
+ mc = get_microdesc_cache();
+#define ADD(hex) \
+ do { \
+ tt_int_op(0,OP_EQ,base16_decode(buf,sizeof(buf),hex,strlen(hex))); \
+ smartlist_add(wanted, tor_memdup(buf, DIGEST256_LEN)); \
+ } while (0)
+
+ /* invalid,0 */
+ ADD("5d76bf1c6614e885614a1e0ad074e1ab4ea14655ebeefb1736a71b5ed8a15a51");
+ /* invalid,2 */
+ ADD("20d1576c5ab11bbcff0dedb1db4a3cfcc8bc8dd839d8cbfef92d00a1a7d7b294");
+ /* valid, 6 */
+ ADD("53f740bd222ab37f19f604b1d3759aa65eff1fbce9ac254bd0fa50d4af9b1bae");
+ /* valid, 8 */
+ ADD("a0a155562d8093d8fd0feb7b93b7226e17f056c2142aab7a4ea8c5867a0376d5");
+
+ added = microdescs_add_to_cache(mc, MD_PARSE_TEST_DATA, NULL,
+ SAVED_NOWHERE, 0, time(NULL), wanted);
+
+ tt_int_op(smartlist_len(added), OP_EQ, 2);
+ tt_int_op(mock_rgsbd_called, OP_EQ, 2);
+ tt_int_op(mock_rgsbd_val_a->dl_status.n_download_failures, OP_EQ, 255);
+ tt_int_op(mock_rgsbd_val_b->dl_status.n_download_failures, OP_EQ, 255);
+
+ done:
+ UNMOCK(networkstatus_get_latest_consensus_by_flavor);
+ UNMOCK(router_get_mutable_consensus_status_by_descriptor_digest);
+ if (options)
+ tor_free(options->DataDirectory);
+ microdesc_free_all();
+ smartlist_free(added);
+ SMARTLIST_FOREACH(wanted, char *, cp, tor_free(cp));
+ smartlist_free(wanted);
+ tor_free(mock_rgsbd_val_a);
+ tor_free(mock_rgsbd_val_b);
+ tor_free(mock_ns_val);
+}
+
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 },
+ { "parse", test_md_parse, 0, NULL, NULL },
+ { "reject_cache", test_md_reject_cache, TT_FORK, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_nodelist.c b/src/test/test_nodelist.c
index 6d270db960..2fba3da7e0 100644
--- a/src/test/test_nodelist.c
+++ b/src/test/test_nodelist.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -25,7 +25,7 @@ test_nodelist_node_get_verbose_nickname_by_id_null_node(void *arg)
/* make sure node_get_by_id returns NULL */
tt_assert(!node_get_by_id(ID));
node_get_verbose_nickname_by_id(ID, vname);
- tt_str_op(vname,==, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+ tt_str_op(vname,OP_EQ, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
done:
return;
}
@@ -54,7 +54,7 @@ test_nodelist_node_get_verbose_nickname_not_named(void *arg)
"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA",
DIGEST_LEN);
node_get_verbose_nickname(&mock_node, vname);
- tt_str_op(vname,==, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR");
+ tt_str_op(vname,OP_EQ, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR");
done:
return;
diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c
index f2b7a72ad5..2899ad6710 100644
--- a/src/test/test_ntor_cl.c
+++ b/src/test/test_ntor_cl.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -13,10 +13,6 @@
#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); \
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
index 2726056b80..1f21f65c60 100644
--- a/src/test/test_oom.c
+++ b/src/test/test_oom.c
@@ -151,9 +151,9 @@ test_oom_circbuf(void *arg)
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);
+ tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We don't start out OOM. */
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
/* Now we're going to fake up some circuits and get them added to the global
circuit list. */
@@ -165,21 +165,21 @@ test_oom_circbuf(void *arg)
c2 = dummy_or_circuit_new(20, 20);
#ifdef ENABLE_MEMPOOLS
- tt_int_op(packed_cell_mem_cost(), ==,
+ tt_int_op(packed_cell_mem_cost(), OP_EQ,
sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD);
#else
- tt_int_op(packed_cell_mem_cost(), ==,
+ tt_int_op(packed_cell_mem_cost(), OP_EQ,
sizeof(packed_cell_t));
#endif /* ENABLE_MEMPOOLS */
- tt_int_op(cell_queues_get_total_allocation(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 70);
- tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */
+ tt_int_op(cell_queues_check_size(), OP_EQ, 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(), ==,
+ tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We are still not OOM */
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 255);
tv.tv_usec = 30*1000;
@@ -187,17 +187,17 @@ test_oom_circbuf(void *arg)
/* Adding this cell will trigger our OOM handler. */
c4 = dummy_or_circuit_new(2, 0);
- tt_int_op(cell_queues_get_total_allocation(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 257);
- tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+ tt_int_op(cell_queues_check_size(), OP_EQ, 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(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * (257 - 30));
circuit_free(c1);
@@ -208,14 +208,14 @@ test_oom_circbuf(void *arg)
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_int_op(cell_queues_check_size(), OP_EQ, 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(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * (257 - 30));
done:
@@ -250,9 +250,9 @@ test_oom_streambuf(void *arg)
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);
+ tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We don't start out OOM. */
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ, 0);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 0);
/* Start all circuits with a bit of data queued in cells */
tv.tv_usec = 500*1000; /* go halfway into the second. */
@@ -267,7 +267,7 @@ test_oom_streambuf(void *arg)
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(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 80);
tv.tv_usec = 600*1000;
@@ -303,24 +303,24 @@ test_oom_streambuf(void *arg)
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_cell_age(c1, tvms), OP_EQ, 500);
+ tt_int_op(circuit_max_queued_cell_age(c2, tvms), OP_EQ, 490);
+ tt_int_op(circuit_max_queued_cell_age(c3, tvms), OP_EQ, 480);
+ tt_int_op(circuit_max_queued_cell_age(c4, tvms), OP_EQ, 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_data_age(c1, tvms), OP_EQ, 390);
+ tt_int_op(circuit_max_queued_data_age(c2, tvms), OP_EQ, 380);
+ tt_int_op(circuit_max_queued_data_age(c3, tvms), OP_EQ, 0);
+ tt_int_op(circuit_max_queued_data_age(c4, tvms), OP_EQ, 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(circuit_max_queued_item_age(c1, tvms), OP_EQ, 500);
+ tt_int_op(circuit_max_queued_item_age(c2, tvms), OP_EQ, 490);
+ tt_int_op(circuit_max_queued_item_age(c3, tvms), OP_EQ, 480);
+ tt_int_op(circuit_max_queued_item_age(c4, tvms), OP_EQ, 370);
- tt_int_op(cell_queues_get_total_allocation(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 80);
- tt_int_op(buf_get_total_allocation(), ==, 4096*16*2);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*16*2);
/* Now give c4 a very old buffer of modest size */
{
@@ -332,21 +332,21 @@ test_oom_streambuf(void *arg)
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(buf_get_total_allocation(), OP_EQ, 4096*17*2);
+ tt_int_op(circuit_max_queued_item_age(c4, tvms), OP_EQ, 1000);
- tt_int_op(cell_queues_check_size(), ==, 0);
+ tt_int_op(cell_queues_check_size(), OP_EQ, 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(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 85);
- tt_int_op(buf_get_total_allocation(), ==, 4096*17*2);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*17*2);
- tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+ tt_int_op(cell_queues_check_size(), OP_EQ, 1); /* We are now OOM */
/* C4 should have died. */
tt_assert(! c1->marked_for_close);
@@ -355,9 +355,9 @@ test_oom_streambuf(void *arg)
tt_assert(c4->marked_for_close);
tt_assert(! c5->marked_for_close);
- tt_int_op(cell_queues_get_total_allocation(), ==,
+ tt_int_op(cell_queues_get_total_allocation(), OP_EQ,
packed_cell_mem_cost() * 85);
- tt_int_op(buf_get_total_allocation(), ==, 4096*8*2);
+ tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*8*2);
done:
circuit_free(c1);
diff --git a/src/test/test_options.c b/src/test/test_options.c
index 737f658e2c..44349b3800 100644
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define CONFIG_PRIVATE
@@ -87,10 +87,10 @@ test_options_validate_impl(const char *configuration,
clear_log_messages();
r = config_get_lines(configuration, &cl, 1);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
r = config_assign(&options_format, opt, cl, 0, 0, &msg);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
r = options_validate(NULL, opt, dflt, 0, &msg);
if (expect_errmsg && !msg) {
@@ -103,7 +103,7 @@ test_options_validate_impl(const char *configuration,
TT_DIE(("Expected no error message from <%s> but got <%s>.",
configuration, msg));
}
- tt_int_op((r == 0), ==, (msg == NULL));
+ tt_int_op((r == 0), OP_EQ, (msg == NULL));
if (expect_log) {
int found = 0;
diff --git a/src/test/test_policy.c b/src/test/test_policy.c
index 388251a61f..e77e16c99e 100644
--- a/src/test/test_policy.c
+++ b/src/test/test_policy.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Tor Project, Inc. */
+/* Copyright (c) 2013-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -22,7 +22,7 @@ test_short_policy_parse(const char *input,
short_policy = parse_short_policy(input);
tt_assert(short_policy);
out = write_short_policy(short_policy);
- tt_str_op(out, ==, expected);
+ tt_str_op(out, OP_EQ, expected);
done:
tor_free(out);
@@ -50,17 +50,17 @@ test_policy_summary_helper(const char *policy_str,
r = policies_parse_exit_policy(&line, &policy,
EXIT_POLICY_IPV6_ENABLED |
EXIT_POLICY_ADD_DEFAULT ,0);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
summary = policy_summarize(policy, AF_INET);
tt_assert(summary != NULL);
- tt_str_op(summary,==, expected_summary);
+ tt_str_op(summary,OP_EQ, expected_summary);
short_policy = parse_short_policy(summary);
tt_assert(short_policy);
summary_after = write_short_policy(short_policy);
- tt_str_op(summary,==, summary_after);
+ tt_str_op(summary,OP_EQ, summary_after);
done:
tor_free(summary_after);
@@ -90,12 +90,12 @@ test_policies_general(void *arg)
p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
tt_assert(p != NULL);
- tt_int_op(ADDR_POLICY_REJECT,==, p->policy_type);
+ tt_int_op(ADDR_POLICY_REJECT,OP_EQ, p->policy_type);
tor_addr_from_ipv4h(&tar, 0xc0a80000u);
- tt_int_op(0,==, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
- tt_int_op(16,==, p->maskbits);
- tt_int_op(1,==, p->prt_min);
- tt_int_op(65535,==, p->prt_max);
+ tt_int_op(0,OP_EQ, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
+ tt_int_op(16,OP_EQ, p->maskbits);
+ tt_int_op(1,OP_EQ, p->prt_min);
+ tt_int_op(65535,OP_EQ, p->prt_max);
smartlist_add(policy, p);
@@ -109,7 +109,7 @@ test_policies_general(void *arg)
tt_assert(ADDR_POLICY_REJECTED ==
compare_tor_addr_to_addr_policy(&tar, 2, policy));
- tt_int_op(0, ==, policies_parse_exit_policy(NULL, &policy2,
+ tt_int_op(0, OP_EQ, policies_parse_exit_policy(NULL, &policy2,
EXIT_POLICY_IPV6_ENABLED |
EXIT_POLICY_REJECT_PRIVATE |
EXIT_POLICY_ADD_DEFAULT, 0));
@@ -200,14 +200,14 @@ test_policies_general(void *arg)
line.key = (char*)"foo";
line.value = (char*)"accept *:80,reject private:*,reject *:*";
line.next = NULL;
- tt_int_op(0, ==, policies_parse_exit_policy(&line,&policy,
+ tt_int_op(0, OP_EQ, policies_parse_exit_policy(&line,&policy,
EXIT_POLICY_IPV6_ENABLED |
EXIT_POLICY_ADD_DEFAULT,0));
tt_assert(policy);
//test_streq(policy->string, "accept *:80");
//test_streq(policy->next->string, "reject *:*");
- tt_int_op(smartlist_len(policy),==, 4);
+ tt_int_op(smartlist_len(policy),OP_EQ, 4);
/* test policy summaries */
/* check if we properly ignore private IP addresses */
@@ -281,7 +281,7 @@ test_policies_general(void *arg)
/* Try parsing various broken short policies */
#define TT_BAD_SHORT_POLICY(s) \
do { \
- tt_ptr_op(NULL, ==, (short_parsed = parse_short_policy((s)))); \
+ tt_ptr_op(NULL, OP_EQ, (short_parsed = parse_short_policy((s)))); \
} while (0)
TT_BAD_SHORT_POLICY("accept 200-199");
TT_BAD_SHORT_POLICY("");
@@ -311,7 +311,7 @@ test_policies_general(void *arg)
smartlist_free(chunks);
short_parsed = parse_short_policy(policy);/* shouldn't be accepted */
tor_free(policy);
- tt_ptr_op(NULL, ==, short_parsed);
+ tt_ptr_op(NULL, OP_EQ, short_parsed);
}
/* truncation ports */
@@ -369,7 +369,7 @@ test_dump_exit_policy_to_string(void *arg)
ri->exit_policy = NULL; // expecting "reject *:*"
ep = router_dump_exit_policy_to_string(ri,1,1);
- tt_str_op("reject *:*",==, ep);
+ tt_str_op("reject *:*",OP_EQ, ep);
tor_free(ep);
@@ -382,7 +382,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1);
- tt_str_op("accept *:*",==, ep);
+ tt_str_op("accept *:*",OP_EQ, ep);
tor_free(ep);
@@ -392,7 +392,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1);
- tt_str_op("accept *:*\nreject *:25",==, ep);
+ tt_str_op("accept *:*\nreject *:25",OP_EQ, ep);
tor_free(ep);
@@ -403,7 +403,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1);
- tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*",==, ep);
+ tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*",OP_EQ, ep);
tor_free(ep);
policy_entry =
@@ -414,7 +414,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1);
tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
- "reject6 [fc00::]/7:*",==, ep);
+ "reject6 [fc00::]/7:*",OP_EQ, ep);
tor_free(ep);
policy_entry =
@@ -425,7 +425,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1);
tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
- "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",==, ep);
+ "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",OP_EQ, ep);
done:
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index 61ade84e3a..dba880ee19 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -69,7 +69,7 @@ test_pt_parsing(void *arg)
/* test registered SOCKS version of transport */
tt_assert(transport->socks_version == PROXY_SOCKS5);
/* test registered name of transport */
- tt_str_op(transport->name,==, "trebuchet");
+ tt_str_op(transport->name,OP_EQ, "trebuchet");
reset_mp(mp);
@@ -96,7 +96,7 @@ test_pt_parsing(void *arg)
/* test registered port of transport */
tt_assert(transport->port == 2999);
/* test registered name of transport */
- tt_str_op(transport->name,==, "trebuchy");
+ tt_str_op(transport->name,OP_EQ, "trebuchy");
reset_mp(mp);
@@ -105,14 +105,14 @@ test_pt_parsing(void *arg)
"ARGS:counterweight=3,sling=snappy",
sizeof(line));
tt_assert(parse_smethod_line(line, mp) == 0);
- tt_int_op(1, ==, smartlist_len(mp->transports));
+ tt_int_op(1, OP_EQ, 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, ==,
+ tt_str_op(transport->name, OP_EQ, "trebuchet");
+ tt_int_op(transport->port, OP_EQ, 9999);
+ tt_str_op(fmt_addr(&transport->addr), OP_EQ, "127.0.0.1");
+ tt_str_op(transport->extra_info_args, OP_EQ,
"counterweight=3,sling=snappy");
}
reset_mp(mp);
@@ -151,9 +151,9 @@ test_pt_get_transport_options(void *arg)
execve_args[1] = NULL;
mp = managed_proxy_create(transport_list, execve_args, 1);
- tt_ptr_op(mp, !=, NULL);
+ tt_ptr_op(mp, OP_NE, NULL);
opt_str = get_transport_options_for_server_proxy(mp);
- tt_ptr_op(opt_str, ==, NULL);
+ tt_ptr_op(opt_str, OP_EQ, NULL);
smartlist_add(mp->transports_to_launch, tor_strdup("gruyere"));
smartlist_add(mp->transports_to_launch, tor_strdup("roquefort"));
@@ -176,7 +176,7 @@ test_pt_get_transport_options(void *arg)
options->ServerTransportOptions = cl;
opt_str = get_transport_options_for_server_proxy(mp);
- tt_str_op(opt_str, ==,
+ tt_str_op(opt_str, OP_EQ,
"gruyere:melty=10;gruyere:hardness=se\\;ven;"
"stnectaire:melty=4;stnectaire:hardness=three");
@@ -196,7 +196,7 @@ test_pt_protocol(void *arg)
(void)arg;
mp->conf_state = PT_PROTO_LAUNCHED;
mp->transports = smartlist_new();
- mp->argv = tor_calloc(sizeof(char *), 2);
+ mp->argv = tor_calloc(2, sizeof(char *));
mp->argv[0] = tor_strdup("<testcase>");
/* various wrong protocol runs: */
@@ -262,17 +262,17 @@ test_pt_get_extrainfo_string(void *arg)
mp2 = managed_proxy_create(t2, argv2, 1);
r = parse_smethod_line("SMETHOD hagbard 127.0.0.1:5555", mp1);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
r = parse_smethod_line("SMETHOD celine 127.0.0.1:1723 ARGS:card=no-enemy",
mp2);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 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, ==,
+ tt_str_op(s, OP_EQ,
"transport hagbard 127.0.0.1:5555\n"
"transport celine 127.0.0.1:1723 card=no-enemy\n");
@@ -380,7 +380,7 @@ test_pt_configure_proxy(void *arg)
for (i = 0 ; i < 5 ; i++) {
retval = configure_proxy(mp);
/* retval should be zero because proxy hasn't finished configuring yet */
- tt_int_op(retval, ==, 0);
+ tt_int_op(retval, OP_EQ, 0);
/* check the number of registered transports */
tt_assert(smartlist_len(mp->transports) == i+1);
/* check that the mp is still waiting for transports */
@@ -390,23 +390,23 @@ test_pt_configure_proxy(void *arg)
/* this last configure_proxy() should finalize the proxy configuration. */
retval = configure_proxy(mp);
/* retval should be 1 since the proxy finished configuring */
- tt_int_op(retval, ==, 1);
+ tt_int_op(retval, OP_EQ, 1);
/* check the mp state */
tt_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);
+ tt_int_op(controlevent_n, OP_EQ, 5);
+ tt_int_op(controlevent_event, OP_EQ, EVENT_TRANSPORT_LAUNCHED);
+ tt_int_op(smartlist_len(controlevent_msgs), OP_EQ, 5);
smartlist_sort_strings(controlevent_msgs);
- tt_str_op(smartlist_get(controlevent_msgs, 0), ==,
+ tt_str_op(smartlist_get(controlevent_msgs, 0), OP_EQ,
"650 TRANSPORT_LAUNCHED server mock1 127.0.0.1 5551\r\n");
- tt_str_op(smartlist_get(controlevent_msgs, 1), ==,
+ tt_str_op(smartlist_get(controlevent_msgs, 1), OP_EQ,
"650 TRANSPORT_LAUNCHED server mock2 127.0.0.1 5552\r\n");
- tt_str_op(smartlist_get(controlevent_msgs, 2), ==,
+ tt_str_op(smartlist_get(controlevent_msgs, 2), OP_EQ,
"650 TRANSPORT_LAUNCHED server mock3 127.0.0.1 5553\r\n");
- tt_str_op(smartlist_get(controlevent_msgs, 3), ==,
+ tt_str_op(smartlist_get(controlevent_msgs, 3), OP_EQ,
"650 TRANSPORT_LAUNCHED server mock4 127.0.0.1 5554\r\n");
- tt_str_op(smartlist_get(controlevent_msgs, 4), ==,
+ tt_str_op(smartlist_get(controlevent_msgs, 4), OP_EQ,
"650 TRANSPORT_LAUNCHED server mock5 127.0.0.1 5555\r\n");
{ /* check that the transport info were saved properly in the tor state */
@@ -423,8 +423,8 @@ test_pt_configure_proxy(void *arg)
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");
+ tt_str_op(name_of_transport, OP_EQ, "mock1");
+ tt_str_op(bindaddr, OP_EQ, "127.0.0.1:5551");
SMARTLIST_FOREACH(transport_info_sl, char *, cp, tor_free(cp));
smartlist_free(transport_info_sl);
@@ -470,9 +470,9 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->Socks4Proxy,
&options->Socks4ProxyAddr,
&options->Socks4ProxyPort);
- tt_int_op(ret, ==, 0);
+ tt_int_op(ret, OP_EQ, 0);
uri = get_pt_proxy_uri();
- tt_str_op(uri, ==, "socks4a://192.0.2.1:1080");
+ tt_str_op(uri, OP_EQ, "socks4a://192.0.2.1:1080");
tor_free(uri);
tor_free(options->Socks4Proxy);
@@ -481,16 +481,16 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->Socks5Proxy,
&options->Socks5ProxyAddr,
&options->Socks5ProxyPort);
- tt_int_op(ret, ==, 0);
+ tt_int_op(ret, OP_EQ, 0);
uri = get_pt_proxy_uri();
- tt_str_op(uri, ==, "socks5://192.0.2.1:1080");
+ tt_str_op(uri, OP_EQ, "socks5://192.0.2.1:1080");
tor_free(uri);
/* Test with a SOCKS5 proxy, with username/password. */
options->Socks5ProxyUsername = tor_strdup("hwest");
options->Socks5ProxyPassword = tor_strdup("r34n1m470r");
uri = get_pt_proxy_uri();
- tt_str_op(uri, ==, "socks5://hwest:r34n1m470r@192.0.2.1:1080");
+ tt_str_op(uri, OP_EQ, "socks5://hwest:r34n1m470r@192.0.2.1:1080");
tor_free(uri);
tor_free(options->Socks5Proxy);
tor_free(options->Socks5ProxyUsername);
@@ -501,15 +501,15 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->HTTPSProxy,
&options->HTTPSProxyAddr,
&options->HTTPSProxyPort);
- tt_int_op(ret, ==, 0);
+ tt_int_op(ret, OP_EQ, 0);
uri = get_pt_proxy_uri();
- tt_str_op(uri, ==, "http://192.0.2.1:80");
+ tt_str_op(uri, OP_EQ, "http://192.0.2.1:80");
tor_free(uri);
/* Test with a HTTPS proxy, with authenticator. */
options->HTTPSProxyAuthenticator = tor_strdup("hwest:r34n1m470r");
uri = get_pt_proxy_uri();
- tt_str_op(uri, ==, "http://hwest:r34n1m470r@192.0.2.1:80");
+ tt_str_op(uri, OP_EQ, "http://hwest:r34n1m470r@192.0.2.1:80");
tor_free(uri);
tor_free(options->HTTPSProxy);
tor_free(options->HTTPSProxyAuthenticator);
@@ -519,9 +519,9 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->Socks4Proxy,
&options->Socks4ProxyAddr,
&options->Socks4ProxyPort);
- tt_int_op(ret, ==, 0);
+ tt_int_op(ret, OP_EQ, 0);
uri = get_pt_proxy_uri();
- tt_str_op(uri, ==, "socks4a://[2001:db8::1]:1080");
+ tt_str_op(uri, OP_EQ, "socks4a://[2001:db8::1]:1080");
tor_free(uri);
tor_free(options->Socks4Proxy);
diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c
index 5deb36260f..834dfeface 100644
--- a/src/test/test_relaycell.c
+++ b/src/test/test_relaycell.c
@@ -87,24 +87,24 @@ test_relaycell_resolved(void *arg)
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)); \
+ tt_int_op(mum_ncalls, OP_EQ, 1); \
+ tt_ptr_op(mum_conn, OP_EQ, entryconn); \
+ tt_int_op(mum_endreason, OP_EQ, (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)); \
+ tt_int_op(srm_ncalls, OP_EQ, 1); \
+ tt_ptr_op(srm_conn, OP_EQ, entryconn); \
+ tt_int_op(srm_atype, OP_EQ, (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); \
+ tt_int_op(srm_alen, OP_EQ, sizeof(answer)-1); \
+ tt_int_op(srm_alen, OP_LT, 512); \
+ tt_int_op(srm_answer_is_set, OP_EQ, 1); \
+ tt_mem_op(srm_answer, OP_EQ, answer, sizeof(answer)-1); \
} else { \
- tt_int_op(srm_answer_is_set, ==, 0); \
+ tt_int_op(srm_answer_is_set, OP_EQ, 0); \
} \
- tt_int_op(srm_ttl, ==, ttl); \
- tt_int_op(srm_expires, ==, expires); \
+ tt_int_op(srm_ttl, OP_EQ, ttl); \
+ tt_int_op(srm_expires, OP_EQ, expires); \
} while (0)
(void)arg;
@@ -130,9 +130,9 @@ test_relaycell_resolved(void *arg)
/* 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);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(srm_ncalls, OP_EQ, 0);
+ tt_int_op(mum_ncalls, OP_EQ, 0);
/* Now put it in the right state. */
ENTRY_TO_CONN(entryconn)->state = AP_CONN_STATE_RESOLVE_WAIT;
@@ -144,7 +144,7 @@ test_relaycell_resolved(void *arg)
/* 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);
+ tt_int_op(r, OP_EQ, 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);
@@ -153,7 +153,7 @@ test_relaycell_resolved(void *arg)
MOCK_RESET();
options->ClientDNSRejectInternalAddresses = 1;
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 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);
@@ -162,7 +162,7 @@ test_relaycell_resolved(void *arg)
entryconn->prefer_ipv6_traffic = 1;
MOCK_RESET();
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV6,
@@ -174,7 +174,7 @@ test_relaycell_resolved(void *arg)
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);
+ tt_int_op(r, OP_EQ, 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);
@@ -184,7 +184,7 @@ test_relaycell_resolved(void *arg)
MOCK_RESET();
entryconn->ipv4_traffic_ok = 0;
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1);
@@ -194,7 +194,7 @@ test_relaycell_resolved(void *arg)
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);
+ tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1);
@@ -203,7 +203,7 @@ test_relaycell_resolved(void *arg)
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);
+ tt_int_op(r, OP_EQ, 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);
@@ -213,9 +213,9 @@ test_relaycell_resolved(void *arg)
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);
+ tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL);
- tt_int_op(srm_ncalls, ==, 0);
+ tt_int_op(srm_ncalls, OP_EQ, 0);
/* error on all addresses private */
MOCK_RESET();
@@ -224,7 +224,7 @@ test_relaycell_resolved(void *arg)
/* 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);
+ tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL);
ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, 0, TIME_MAX);
@@ -232,7 +232,7 @@ test_relaycell_resolved(void *arg)
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);
+ tt_int_op(r, OP_EQ, 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);
diff --git a/src/test/test_replay.c b/src/test/test_replay.c
index 2f543512b0..b1f637a43b 100644
--- a/src/test/test_replay.c
+++ b/src/test/test_replay.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* Copyright (c) 2012-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define REPLAYCACHE_PRIVATE
@@ -44,7 +44,7 @@ test_replaycache_badalloc(void *arg)
/* Negative interval should get adjusted to zero */
r = replaycache_new(600, -300);
tt_assert(r != NULL);
- tt_int_op(r->scrub_interval,==, 0);
+ tt_int_op(r->scrub_interval,OP_EQ, 0);
replaycache_free(r);
/* Negative horizon and negative interval should still fail */
r = replaycache_new(-600, -300);
@@ -81,13 +81,13 @@ test_replaycache_miss(void *arg)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
/* poke the bad-parameter error case too */
result =
replaycache_add_and_test_internal(1200, NULL, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
done:
if (r) replaycache_free(r);
@@ -108,12 +108,12 @@ test_replaycache_hit(void *arg)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
done:
if (r) replaycache_free(r);
@@ -134,17 +134,17 @@ test_replaycache_age(void *arg)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
result =
replaycache_add_and_test_internal(3000, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
done:
if (r) replaycache_free(r);
@@ -166,13 +166,13 @@ test_replaycache_elapsed(void *arg)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), &elapsed);
- tt_int_op(result,==, 1);
- tt_int_op(elapsed,==, 100);
+ tt_int_op(result,OP_EQ, 1);
+ tt_int_op(elapsed,OP_EQ, 100);
done:
if (r) replaycache_free(r);
@@ -193,17 +193,17 @@ test_replaycache_noexpire(void *arg)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
result =
replaycache_add_and_test_internal(3000, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
done:
if (r) replaycache_free(r);
@@ -225,12 +225,12 @@ test_replaycache_scrub(void *arg)
result =
replaycache_add_and_test_internal(100, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
result =
replaycache_add_and_test_internal(200, r, test_buffer,
strlen(test_buffer), NULL);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
/*
* Poke a few replaycache_scrub_if_needed_internal() error cases that
@@ -245,7 +245,7 @@ test_replaycache_scrub(void *arg)
/* Make sure we hit the aging-out case too */
replaycache_scrub_if_needed_internal(1500, r);
/* Assert that we aged it */
- tt_int_op(digestmap_size(r->digests_seen),==, 0);
+ tt_int_op(digestmap_size(r->digests_seen),OP_EQ, 0);
done:
if (r) replaycache_free(r);
@@ -268,16 +268,16 @@ test_replaycache_future(void *arg)
result =
replaycache_add_and_test_internal(100, r, test_buffer,
strlen(test_buffer), &elapsed);
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
/* elapsed should still be 0, since it wasn't written */
- tt_int_op(elapsed,==, 0);
+ tt_int_op(elapsed,OP_EQ, 0);
result =
replaycache_add_and_test_internal(200, r, test_buffer,
strlen(test_buffer), &elapsed);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
/* elapsed should be the time since the last hit */
- tt_int_op(elapsed,==, 100);
+ tt_int_op(elapsed,OP_EQ, 100);
/*
* Now let's turn the clock back to get coverage on the cache entry from the
@@ -287,9 +287,9 @@ test_replaycache_future(void *arg)
replaycache_add_and_test_internal(150, r, test_buffer,
strlen(test_buffer), &elapsed);
/* We should still get a hit */
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
/* ...but it shouldn't let us see a negative elapsed time */
- tt_int_op(elapsed,==, 0);
+ tt_int_op(elapsed,OP_EQ, 0);
done:
if (r) replaycache_free(r);
@@ -316,18 +316,18 @@ test_replaycache_realtime(void *arg)
/* This should miss */
result =
replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
- tt_int_op(result,==, 0);
+ tt_int_op(result,OP_EQ, 0);
/* This should hit */
result =
replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
/* This should hit and return a small elapsed time */
result =
replaycache_add_test_and_elapsed(r, test_buffer,
strlen(test_buffer), &elapsed);
- tt_int_op(result,==, 1);
+ tt_int_op(result,OP_EQ, 1);
tt_assert(elapsed >= 0);
tt_assert(elapsed <= 5);
diff --git a/src/test/test_routerkeys.c b/src/test/test_routerkeys.c
index 182e0f6f87..d8ad59a58b 100644
--- a/src/test/test_routerkeys.c
+++ b/src/test/test_routerkeys.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -33,38 +33,38 @@ test_routerkeys_write_fingerprint(void *arg)
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);
+ tt_int_op(0, OP_EQ, check_private_dir(ddir, CPD_CREATE, NULL));
+ tt_int_op(crypto_pk_cmp_keys(get_server_identity_key(),key),OP_EQ,0);
/* Write fingerprint file */
- tt_int_op(0, ==, router_write_fingerprint(0));
+ tt_int_op(0, OP_EQ, 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);
+ tt_str_op(cp, OP_EQ, cp2);
tor_free(cp);
tor_free(cp2);
/* Write hashed-fingerprint file */
- tt_int_op(0, ==, router_write_fingerprint(1));
+ tt_int_op(0, OP_EQ, 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);
+ tt_str_op(cp, OP_EQ, 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));
+ tt_int_op(0, OP_EQ, 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);
+ tt_str_op(cp, OP_EQ, cp2);
tor_free(cp);
tor_free(cp2);
diff --git a/src/test/test_routerset.c b/src/test/test_routerset.c
index 81e4dbb1eb..9bd0c125c3 100644
--- a/src/test/test_routerset.c
+++ b/src/test/test_routerset.c
@@ -25,12 +25,12 @@ NS(test_main)(void *arg)
rs = routerset_new();
- tt_ptr_op(rs, !=, NULL);
- tt_ptr_op(rs->list, !=, NULL);
- tt_ptr_op(rs->names, !=, NULL);
- tt_ptr_op(rs->digests, !=, NULL);
- tt_ptr_op(rs->policies, !=, NULL);
- tt_ptr_op(rs->country_names, !=, NULL);
+ tt_ptr_op(rs, OP_NE, NULL);
+ tt_ptr_op(rs->list, OP_NE, NULL);
+ tt_ptr_op(rs->names, OP_NE, NULL);
+ tt_ptr_op(rs->digests, OP_NE, NULL);
+ tt_ptr_op(rs->policies, OP_NE, NULL);
+ tt_ptr_op(rs->country_names, OP_NE, NULL);
done:
routerset_free(rs);
@@ -53,30 +53,30 @@ NS(test_main)(void *arg)
/* strlen(c) < 4 */
input = "xxx";
name = routerset_get_countryname(input);
- tt_ptr_op(name, ==, NULL);
+ tt_ptr_op(name, OP_EQ, NULL);
tor_free(name);
/* c[0] != '{' */
input = "xxx}";
name = routerset_get_countryname(input);
- tt_ptr_op(name, ==, NULL);
+ tt_ptr_op(name, OP_EQ, NULL);
tor_free(name);
/* c[3] != '}' */
input = "{xxx";
name = routerset_get_countryname(input);
- tt_ptr_op(name, ==, NULL);
+ tt_ptr_op(name, OP_EQ, NULL);
tor_free(name);
/* tor_strlower */
input = "{XX}";
name = routerset_get_countryname(input);
- tt_str_op(name, ==, "xx");
+ tt_str_op(name, OP_EQ, "xx");
tor_free(name);
input = "{xx}";
name = routerset_get_countryname(input);
- tt_str_op(name, ==, "xx");
+ tt_str_op(name, OP_EQ, "xx");
done:
tor_free(name);
}
@@ -103,10 +103,10 @@ NS(test_main)(void *arg)
routerset_refresh_countries(set);
- tt_ptr_op(set->countries, ==, NULL);
- tt_int_op(set->n_countries, ==, 0);
- tt_int_op(CALLED(geoip_is_loaded), ==, 1);
- tt_int_op(CALLED(geoip_get_n_countries), ==, 0);
+ tt_ptr_op(set->countries, OP_EQ, NULL);
+ tt_int_op(set->n_countries, OP_EQ, 0);
+ tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 0);
done:
NS_UNMOCK(geoip_is_loaded);
@@ -154,12 +154,12 @@ NS(test_main)(void *arg)
routerset_refresh_countries(set);
- tt_ptr_op(set->countries, !=, NULL);
- tt_int_op(set->n_countries, ==, 1);
- tt_int_op((unsigned int)(*set->countries), ==, 0);
- tt_int_op(CALLED(geoip_is_loaded), ==, 1);
- tt_int_op(CALLED(geoip_get_n_countries), ==, 1);
- tt_int_op(CALLED(geoip_get_country), ==, 0);
+ tt_ptr_op(set->countries, OP_NE, NULL);
+ tt_int_op(set->n_countries, OP_EQ, 1);
+ tt_int_op((unsigned int)(*set->countries), OP_EQ, 0);
+ tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_country), OP_EQ, 0);
done:
NS_UNMOCK(geoip_is_loaded);
@@ -218,12 +218,12 @@ NS(test_main)(void *arg)
routerset_refresh_countries(set);
- tt_ptr_op(set->countries, !=, NULL);
- tt_int_op(set->n_countries, ==, 2);
- tt_int_op(CALLED(geoip_is_loaded), ==, 1);
- tt_int_op(CALLED(geoip_get_n_countries), ==, 1);
- tt_int_op(CALLED(geoip_get_country), ==, 1);
- tt_int_op((unsigned int)(*set->countries), !=, 0);
+ tt_ptr_op(set->countries, OP_NE, NULL);
+ tt_int_op(set->n_countries, OP_EQ, 2);
+ tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_country), OP_EQ, 1);
+ tt_int_op((unsigned int)(*set->countries), OP_NE, 0);
done:
NS_UNMOCK(geoip_is_loaded);
@@ -283,12 +283,12 @@ NS(test_main)(void *arg)
routerset_refresh_countries(set);
- tt_ptr_op(set->countries, !=, NULL);
- tt_int_op(set->n_countries, ==, 2);
- tt_int_op(CALLED(geoip_is_loaded), ==, 1);
- tt_int_op(CALLED(geoip_get_n_countries), ==, 1);
- tt_int_op(CALLED(geoip_get_country), ==, 1);
- tt_int_op((unsigned int)(*set->countries), ==, 0);
+ tt_ptr_op(set->countries, OP_NE, NULL);
+ tt_int_op(set->n_countries, OP_EQ, 2);
+ tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_country), OP_EQ, 1);
+ tt_int_op((unsigned int)(*set->countries), OP_EQ, 0);
done:
NS_UNMOCK(geoip_is_loaded);
@@ -340,7 +340,7 @@ NS(test_main)(void *arg)
r = routerset_parse(set, s, "");
- tt_int_op(r, ==, -1);
+ tt_int_op(r, OP_EQ, -1);
done:
routerset_free(set);
@@ -365,8 +365,8 @@ NS(test_main)(void *arg)
set = routerset_new();
s = "$0000000000000000000000000000000000000000";
r = routerset_parse(set, s, "");
- tt_int_op(r, ==, 0);
- tt_int_op(digestmap_isempty(set->digests), !=, 1);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(digestmap_isempty(set->digests), OP_NE, 1);
done:
routerset_free(set);
@@ -390,8 +390,8 @@ NS(test_main)(void *arg)
set = routerset_new();
s = "fred";
r = routerset_parse(set, s, "");
- tt_int_op(r, ==, 0);
- tt_int_op(strmap_isempty(set->names), !=, 1);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(strmap_isempty(set->names), OP_NE, 1);
done:
routerset_free(set);
@@ -415,8 +415,8 @@ NS(test_main)(void *arg)
set = routerset_new();
s = "{cc}";
r = routerset_parse(set, s, "");
- tt_int_op(r, ==, 0);
- tt_int_op(smartlist_len(set->country_names), !=, 0);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(set->country_names), OP_NE, 0);
done:
routerset_free(set);
@@ -448,9 +448,9 @@ NS(test_main)(void *arg)
set = routerset_new();
s = "*";
r = routerset_parse(set, s, "");
- tt_int_op(r, ==, 0);
- tt_int_op(smartlist_len(set->policies), !=, 0);
- tt_int_op(CALLED(router_parse_addr_policy_item_from_string), ==, 1);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(smartlist_len(set->policies), OP_NE, 0);
+ tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1);
done:
routerset_free(set);
@@ -489,10 +489,10 @@ NS(test_main)(void *arg)
NS_MOCK(smartlist_new);
routerset_union(set, NULL);
- tt_int_op(CALLED(smartlist_new), ==, 0);
+ tt_int_op(CALLED(smartlist_new), OP_EQ, 0);
routerset_union(set, bad_set);
- tt_int_op(CALLED(smartlist_new), ==, 0);
+ tt_int_op(CALLED(smartlist_new), OP_EQ, 0);
done:
NS_UNMOCK(smartlist_new);
@@ -529,7 +529,7 @@ NS(test_main)(void *arg)
smartlist_add(src->list, tor_strdup("{xx}"));
routerset_union(tgt, src);
- tt_int_op(smartlist_len(tgt->list), !=, 0);
+ tt_int_op(smartlist_len(tgt->list), OP_NE, 0);
done:
routerset_free(src);
@@ -556,7 +556,7 @@ NS(test_main)(void *arg)
is_list = routerset_is_list(set);
routerset_free(set);
set = NULL;
- tt_int_op(is_list, !=, 0);
+ tt_int_op(is_list, OP_NE, 0);
/* len(set->country_names) != 0, len(set->policies) == 0 */
set = routerset_new();
@@ -564,7 +564,7 @@ NS(test_main)(void *arg)
is_list = routerset_is_list(set);
routerset_free(set);
set = NULL;
- tt_int_op(is_list, ==, 0);
+ tt_int_op(is_list, OP_EQ, 0);
/* len(set->country_names) == 0, len(set->policies) != 0 */
set = routerset_new();
@@ -573,7 +573,7 @@ NS(test_main)(void *arg)
is_list = routerset_is_list(set);
routerset_free(set);
set = NULL;
- tt_int_op(is_list, ==, 0);
+ tt_int_op(is_list, OP_EQ, 0);
/* len(set->country_names) != 0, len(set->policies) != 0 */
set = routerset_new();
@@ -583,7 +583,7 @@ NS(test_main)(void *arg)
is_list = routerset_is_list(set);
routerset_free(set);
set = NULL;
- tt_int_op(is_list, ==, 0);
+ tt_int_op(is_list, OP_EQ, 0);
done:
;
@@ -605,12 +605,12 @@ NS(test_main)(void *arg)
set = NULL;
needs_geoip = routerset_needs_geoip(set);
- tt_int_op(needs_geoip, ==, 0);
+ tt_int_op(needs_geoip, OP_EQ, 0);
set = routerset_new();
needs_geoip = routerset_needs_geoip(set);
routerset_free((routerset_t *)set);
- tt_int_op(needs_geoip, ==, 0);
+ tt_int_op(needs_geoip, OP_EQ, 0);
set = NULL;
set = routerset_new();
@@ -618,7 +618,7 @@ NS(test_main)(void *arg)
needs_geoip = routerset_needs_geoip(set);
routerset_free((routerset_t *)set);
set = NULL;
- tt_int_op(needs_geoip, !=, 0);
+ tt_int_op(needs_geoip, OP_NE, 0);
done:
;
@@ -639,20 +639,20 @@ NS(test_main)(void *arg)
(void)arg;
is_empty = routerset_is_empty(set);
- tt_int_op(is_empty, !=, 0);
+ tt_int_op(is_empty, OP_NE, 0);
set = routerset_new();
is_empty = routerset_is_empty(set);
routerset_free(set);
set = NULL;
- tt_int_op(is_empty, !=, 0);
+ tt_int_op(is_empty, OP_NE, 0);
set = routerset_new();
smartlist_add(set->list, tor_strdup("{xx}"));
is_empty = routerset_is_empty(set);
routerset_free(set);
set = NULL;
- tt_int_op(is_empty, ==, 0);
+ tt_int_op(is_empty, OP_EQ, 0);
done:
;
@@ -675,13 +675,13 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
set = tor_malloc_zero(sizeof(routerset_t));
set->list = NULL;
contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
tor_free(set);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
@@ -706,7 +706,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, nickname, NULL, 0);
routerset_free(set);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
@@ -733,7 +733,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, nickname, NULL, 0);
routerset_free(set);
- tt_int_op(contains, ==, 4);
+ tt_int_op(contains, OP_EQ, 4);
done:
;
}
@@ -757,7 +757,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, "foo", NULL, 0);
routerset_free(set);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
}
@@ -782,7 +782,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, NULL, (const char*)foo, 0);
routerset_free(set);
- tt_int_op(contains, ==, 4);
+ tt_int_op(contains, OP_EQ, 4);
done:
;
}
@@ -808,7 +808,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, NULL, (const char*)foo, 0);
routerset_free(set);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
}
@@ -833,7 +833,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
routerset_free(set);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
}
@@ -865,8 +865,8 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, addr, 0, NULL, NULL, 0);
routerset_free(set);
- tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1);
- tt_int_op(contains, ==, 3);
+ tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
+ tt_int_op(contains, OP_EQ, 3);
done:
;
@@ -879,7 +879,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
(void)port;
(void)policy;
CALLED(compare_tor_addr_to_addr_policy)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
return ADDR_POLICY_REJECTED;
done:
@@ -910,8 +910,8 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, addr, 0, NULL, NULL, 0);
routerset_free(set);
- tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1);
- tt_int_op(contains, ==, 0);
+ tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
@@ -924,7 +924,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
(void)port;
(void)policy;
CALLED(compare_tor_addr_to_addr_policy)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
return ADDR_POLICY_ACCEPTED;
@@ -955,7 +955,7 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
routerset_free(set);
- tt_int_op(contains, ==, 0);
+ tt_int_op(contains, OP_EQ, 0);
done:
;
@@ -968,7 +968,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
(void)port;
(void)policy;
CALLED(compare_tor_addr_to_addr_policy)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
return ADDR_POLICY_ACCEPTED;
@@ -1003,9 +1003,9 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, MOCK_TOR_ADDR_PTR, 0, NULL, NULL, -1);
routerset_free(set);
- tt_int_op(contains, ==, 0);
- tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1);
- tt_int_op(CALLED(geoip_get_country_by_addr), ==, 1);
+ tt_int_op(contains, OP_EQ, 0);
+ tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_country_by_addr), OP_EQ, 1);
done:
;
@@ -1018,7 +1018,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
(void)port;
(void)policy;
CALLED(compare_tor_addr_to_addr_policy)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
done:
return ADDR_POLICY_ACCEPTED;
@@ -1028,7 +1028,7 @@ int
NS(geoip_get_country_by_addr)(const tor_addr_t *addr)
{
CALLED(geoip_get_country_by_addr)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
done:
return -1;
@@ -1062,9 +1062,9 @@ NS(test_main)(void *arg)
contains = routerset_contains(set, MOCK_TOR_ADDR_PTR, 0, NULL, NULL, -1);
routerset_free(set);
- tt_int_op(contains, ==, 2);
- tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1);
- tt_int_op(CALLED(geoip_get_country_by_addr), ==, 1);
+ tt_int_op(contains, OP_EQ, 2);
+ tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
+ tt_int_op(CALLED(geoip_get_country_by_addr), OP_EQ, 1);
done:
;
@@ -1077,7 +1077,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
(void)port;
(void)policy;
CALLED(compare_tor_addr_to_addr_policy)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
done:
return ADDR_POLICY_ACCEPTED;
@@ -1087,7 +1087,7 @@ int
NS(geoip_get_country_by_addr)(const tor_addr_t *addr)
{
CALLED(geoip_get_country_by_addr)++;
- tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR);
+ tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
done:
return 1;
@@ -1111,7 +1111,7 @@ NS(test_main)(void *arg)
r = routerset_add_unknown_ccs(setp, 1);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
done:
routerset_free(set);
@@ -1140,8 +1140,8 @@ NS(test_main)(void *arg)
r = routerset_add_unknown_ccs(setp, 0);
- tt_ptr_op(*setp, !=, NULL);
- tt_int_op(r, ==, 0);
+ tt_ptr_op(*setp, OP_NE, NULL);
+ tt_int_op(r, OP_EQ, 0);
done:
if (set != NULL)
@@ -1181,9 +1181,9 @@ NS(test_main)(void *arg)
r = routerset_add_unknown_ccs(setp, 0);
- tt_int_op(r, ==, 1);
- tt_int_op(smartlist_contains_string(set->country_names, "??"), ==, 1);
- tt_int_op(smartlist_contains_string(set->list, "{??}"), ==, 1);
+ tt_int_op(r, OP_EQ, 1);
+ tt_int_op(smartlist_contains_string(set->country_names, "??"), OP_EQ, 1);
+ tt_int_op(smartlist_contains_string(set->list, "{??}"), OP_EQ, 1);
done:
if (set != NULL)
@@ -1200,7 +1200,7 @@ NS(geoip_get_country)(const char *country)
arg_is_qq = !strcmp(country, "??");
arg_is_a1 = !strcmp(country, "A1");
- tt_int_op(arg_is_qq || arg_is_a1, ==, 1);
+ tt_int_op(arg_is_qq || arg_is_a1, OP_EQ, 1);
if (arg_is_qq)
return 1;
@@ -1214,7 +1214,7 @@ NS(geoip_is_loaded)(sa_family_t family)
{
CALLED(geoip_is_loaded)++;
- tt_int_op(family, ==, AF_INET);
+ tt_int_op(family, OP_EQ, AF_INET);
done:
return 0;
@@ -1244,9 +1244,9 @@ NS(test_main)(void *arg)
r = routerset_add_unknown_ccs(setp, 0);
- tt_int_op(r, ==, 1);
- tt_int_op(smartlist_contains_string(set->country_names, "a1"), ==, 1);
- tt_int_op(smartlist_contains_string(set->list, "{a1}"), ==, 1);
+ tt_int_op(r, OP_EQ, 1);
+ tt_int_op(smartlist_contains_string(set->country_names, "a1"), OP_EQ, 1);
+ tt_int_op(smartlist_contains_string(set->list, "{a1}"), OP_EQ, 1);
done:
if (set != NULL)
@@ -1263,7 +1263,7 @@ NS(geoip_get_country)(const char *country)
arg_is_qq = !strcmp(country, "??");
arg_is_a1 = !strcmp(country, "A1");
- tt_int_op(arg_is_qq || arg_is_a1, ==, 1);
+ tt_int_op(arg_is_qq || arg_is_a1, OP_EQ, 1);
if (arg_is_a1)
return 1;
@@ -1277,7 +1277,7 @@ NS(geoip_is_loaded)(sa_family_t family)
{
CALLED(geoip_is_loaded)++;
- tt_int_op(family, ==, AF_INET);
+ tt_int_op(family, OP_EQ, AF_INET);
done:
return 0;
@@ -1306,7 +1306,7 @@ NS(test_main)(void *arg)
r = routerset_contains_extendinfo(set, &ei);
- tt_int_op(r, ==, 4);
+ tt_int_op(r, OP_EQ, 4);
done:
routerset_free(set);
}
@@ -1334,7 +1334,7 @@ NS(test_main)(void *arg)
r = routerset_contains_router(set, &ri, country);
- tt_int_op(r, ==, 4);
+ tt_int_op(r, OP_EQ, 4);
done:
routerset_free(set);
}
@@ -1367,7 +1367,7 @@ NS(test_main)(void *arg)
r = routerset_contains_routerstatus(set, &rs, country);
- tt_int_op(r, ==, 4);
+ tt_int_op(r, OP_EQ, 4);
done:
routerset_free(set);
}
@@ -1393,7 +1393,7 @@ NS(test_main)(void *arg)
NS(mock_node).rs = NULL;
r = routerset_contains_node(set, &NS(mock_node));
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
done:
routerset_free(set);
@@ -1427,7 +1427,7 @@ NS(test_main)(void *arg)
r = routerset_contains_node(set, &NS(mock_node));
- tt_int_op(r, ==, 4);
+ tt_int_op(r, OP_EQ, 4);
done:
routerset_free(set);
}
@@ -1458,7 +1458,7 @@ NS(test_main)(void *arg)
r = routerset_contains_node(set, &mock_node);
- tt_int_op(r, ==, 4);
+ tt_int_op(r, OP_EQ, 4);
done:
routerset_free(set);
}
@@ -1478,15 +1478,15 @@ NS(test_main)(void *arg)
routerset_t *set = NULL;
(void)arg;
- tt_int_op(smartlist_len(out), ==, 0);
+ tt_int_op(smartlist_len(out), OP_EQ, 0);
routerset_get_all_nodes(out, NULL, NULL, 0);
- tt_int_op(smartlist_len(out), ==, 0);
+ tt_int_op(smartlist_len(out), OP_EQ, 0);
set = routerset_new();
smartlist_free(set->list);
routerset_get_all_nodes(out, NULL, NULL, 0);
- tt_int_op(smartlist_len(out), ==, 0);
+ tt_int_op(smartlist_len(out), OP_EQ, 0);
/* Just recreate list, so we can simply use routerset_free. */
set->list = smartlist_new();
@@ -1527,8 +1527,8 @@ NS(test_main)(void *arg)
smartlist_free(out);
routerset_free(set);
- tt_int_op(out_len, ==, 0);
- tt_int_op(CALLED(node_get_by_nickname), ==, 1);
+ tt_int_op(out_len, OP_EQ, 0);
+ tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1);
done:
;
@@ -1538,8 +1538,8 @@ const node_t *
NS(node_get_by_nickname)(const char *nickname, int warn_if_unused)
{
CALLED(node_get_by_nickname)++;
- tt_str_op(nickname, ==, NS(mock_nickname));
- tt_int_op(warn_if_unused, ==, 1);
+ tt_str_op(nickname, OP_EQ, NS(mock_nickname));
+ tt_int_op(warn_if_unused, OP_EQ, 1);
done:
return NULL;
@@ -1578,8 +1578,8 @@ NS(test_main)(void *arg)
smartlist_free(out);
routerset_free(set);
- tt_int_op(out_len, ==, 0);
- tt_int_op(CALLED(node_get_by_nickname), ==, 1);
+ tt_int_op(out_len, OP_EQ, 0);
+ tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1);
done:
;
@@ -1589,8 +1589,8 @@ const node_t *
NS(node_get_by_nickname)(const char *nickname, int warn_if_unused)
{
CALLED(node_get_by_nickname)++;
- tt_str_op(nickname, ==, NS(mock_nickname));
- tt_int_op(warn_if_unused, ==, 1);
+ tt_str_op(nickname, OP_EQ, NS(mock_nickname));
+ tt_int_op(warn_if_unused, OP_EQ, 1);
done:
return &NS(mock_node);
@@ -1629,9 +1629,9 @@ NS(test_main)(void *arg)
smartlist_free(out);
routerset_free(set);
- tt_int_op(out_len, ==, 1);
- tt_ptr_op(ent, ==, &NS(mock_node));
- tt_int_op(CALLED(node_get_by_nickname), ==, 1);
+ tt_int_op(out_len, OP_EQ, 1);
+ tt_ptr_op(ent, OP_EQ, &NS(mock_node));
+ tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1);
done:
;
@@ -1641,8 +1641,8 @@ const node_t *
NS(node_get_by_nickname)(const char *nickname, int warn_if_unused)
{
CALLED(node_get_by_nickname)++;
- tt_str_op(nickname, ==, NS(mock_nickname));
- tt_int_op(warn_if_unused, ==, 1);
+ tt_str_op(nickname, OP_EQ, NS(mock_nickname));
+ tt_int_op(warn_if_unused, OP_EQ, 1);
done:
return &NS(mock_node);
@@ -1678,8 +1678,8 @@ NS(test_main)(void *arg)
smartlist_free(out);
smartlist_free(NS(mock_smartlist));
- tt_int_op(r, ==, 0);
- tt_int_op(CALLED(nodelist_get_list), ==, 1);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(CALLED(nodelist_get_list), OP_EQ, 1);
done:
;
@@ -1727,8 +1727,8 @@ NS(test_main)(void *arg)
smartlist_free(out);
smartlist_free(NS(mock_smartlist));
- tt_int_op(r, ==, 0);
- tt_int_op(CALLED(nodelist_get_list), ==, 1);
+ tt_int_op(r, OP_EQ, 0);
+ tt_int_op(CALLED(nodelist_get_list), OP_EQ, 1);
done:
;
@@ -1766,10 +1766,10 @@ NS(test_main)(void *arg)
mock_node.ri = &ri;
smartlist_add(list, (void *)&mock_node);
- tt_int_op(smartlist_len(list), !=, 0);
+ tt_int_op(smartlist_len(list), OP_NE, 0);
routerset_subtract_nodes(list, set);
- tt_int_op(smartlist_len(list), ==, 0);
+ tt_int_op(smartlist_len(list), OP_EQ, 0);
done:
routerset_free(set);
smartlist_free(list);
@@ -1796,10 +1796,10 @@ NS(test_main)(void *arg)
mock_node.ri = &ri;
smartlist_add(list, (void *)&mock_node);
- tt_int_op(smartlist_len(list), !=, 0);
+ tt_int_op(smartlist_len(list), OP_NE, 0);
routerset_subtract_nodes(list, set);
- tt_int_op(smartlist_len(list), !=, 0);
+ tt_int_op(smartlist_len(list), OP_NE, 0);
done:
routerset_free(set);
smartlist_free(list);
@@ -1821,19 +1821,19 @@ NS(test_main)(void *arg)
set = NULL;
s = routerset_to_string(set);
- tt_str_op(s, ==, "");
+ tt_str_op(s, OP_EQ, "");
tor_free(s);
set = routerset_new();
s = routerset_to_string(set);
- tt_str_op(s, ==, "");
+ tt_str_op(s, OP_EQ, "");
tor_free(s);
routerset_free(set); set = NULL;
set = routerset_new();
smartlist_add(set->list, tor_strndup("a", 1));
s = routerset_to_string(set);
- tt_str_op(s, ==, "a");
+ tt_str_op(s, OP_EQ, "a");
tor_free(s);
routerset_free(set); set = NULL;
@@ -1841,7 +1841,7 @@ NS(test_main)(void *arg)
smartlist_add(set->list, tor_strndup("a", 1));
smartlist_add(set->list, tor_strndup("b", 1));
s = routerset_to_string(set);
- tt_str_op(s, ==, "a,b");
+ tt_str_op(s, OP_EQ, "a,b");
tor_free(s);
routerset_free(set); set = NULL;
@@ -1868,7 +1868,7 @@ NS(test_main)(void *arg)
routerset_free(a);
routerset_free(b);
- tt_int_op(r, ==, 1);
+ tt_int_op(r, OP_EQ, 1);
done:
;
@@ -1893,7 +1893,7 @@ NS(test_main)(void *arg)
routerset_free(a);
routerset_free(b);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
done:
;
}
@@ -1920,7 +1920,7 @@ NS(test_main)(void *arg)
routerset_free(a);
routerset_free(b);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
done:
;
}
@@ -1946,7 +1946,7 @@ NS(test_main)(void *arg)
routerset_free(a);
routerset_free(b);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
done:
;
}
@@ -1972,7 +1972,7 @@ NS(test_main)(void *arg)
routerset_free(a);
routerset_free(b);
- tt_int_op(r, ==, 1);
+ tt_int_op(r, OP_EQ, 1);
done:
;
}
@@ -1995,7 +1995,7 @@ NS(test_main)(void *arg)
routerset_free(NULL);
- tt_int_op(CALLED(smartlist_free), ==, 0);
+ tt_int_op(CALLED(smartlist_free), OP_EQ, 0);
done:
;
@@ -2031,9 +2031,9 @@ NS(test_main)(void *arg)
routerset_free(routerset);
- tt_int_op(CALLED(smartlist_free), !=, 0);
- tt_int_op(CALLED(strmap_free), !=, 0);
- tt_int_op(CALLED(digestmap_free), !=, 0);
+ tt_int_op(CALLED(smartlist_free), OP_NE, 0);
+ tt_int_op(CALLED(strmap_free), OP_NE, 0);
+ tt_int_op(CALLED(digestmap_free), OP_NE, 0);
done:
;
diff --git a/src/test/test_socks.c b/src/test/test_socks.c
index 20f58ca92a..fbb8b25980 100644
--- a/src/test/test_socks.c
+++ b/src/test/test_socks.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -63,8 +63,8 @@ test_socks_4_unsupported_commands(void *ptr)
ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == -1);
- tt_int_op(4,==, socks->socks_version);
- tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
+ tt_int_op(4,OP_EQ, socks->socks_version);
+ tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */
done:
;
@@ -76,49 +76,49 @@ test_socks_4_supported_commands(void *ptr)
{
SOCKS_TEST_INIT();
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, 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");
tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1);
- tt_int_op(4,==, socks->socks_version);
- tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
- tt_int_op(SOCKS_COMMAND_CONNECT,==, socks->command);
- tt_str_op("2.2.2.3",==, socks->address);
- tt_int_op(4370,==, socks->port);
+ tt_int_op(4,OP_EQ, socks->socks_version);
+ tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */
+ tt_int_op(SOCKS_COMMAND_CONNECT,OP_EQ, socks->command);
+ tt_str_op("2.2.2.3",OP_EQ, socks->address);
+ tt_int_op(4370,OP_EQ, socks->port);
tt_assert(socks->got_auth == 0);
tt_assert(! socks->username);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, 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");
tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1);
- tt_int_op(4,==, socks->socks_version);
- tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
- tt_int_op(SOCKS_COMMAND_CONNECT,==, socks->command);
- tt_str_op("2.2.2.4",==, socks->address);
- tt_int_op(4370,==, socks->port);
+ tt_int_op(4,OP_EQ, socks->socks_version);
+ tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */
+ tt_int_op(SOCKS_COMMAND_CONNECT,OP_EQ, socks->command);
+ tt_str_op("2.2.2.4",OP_EQ, socks->address);
+ tt_int_op(4370,OP_EQ, socks->port);
tt_assert(socks->got_auth == 1);
tt_assert(socks->username);
- tt_int_op(2,==, socks->usernamelen);
- tt_mem_op("me",==, socks->username, 2);
+ tt_int_op(2,OP_EQ, socks->usernamelen);
+ tt_mem_op("me",OP_EQ, socks->username, 2);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, 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");
tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1);
- tt_int_op(4,==, socks->socks_version);
- tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
- tt_str_op("torproject.org",==, socks->address);
+ tt_int_op(4,OP_EQ, socks->socks_version);
+ tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */
+ tt_str_op("torproject.org",OP_EQ, socks->address);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
done:
;
@@ -134,32 +134,42 @@ test_socks_5_unsupported_commands(void *ptr)
ADD_DATA(buf, "\x05\x02\x00\x01");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, 0);
- tt_int_op(0,==, buf_datalen(buf));
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
+ get_options()->SafeSocks),OP_EQ, 0);
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, -1);
- /* XXX: shouldn't tor reply 'command not supported' [07]? */
+ get_options()->SafeSocks),OP_EQ, -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_COMMAND_NOT_SUPPORTED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
buf_clear(buf);
socks_request_clear(socks);
/* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
- ADD_DATA(buf, "\x05\x03\x00\x01\x02");
+ ADD_DATA(buf, "\x05\x02\x00\x01");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, 0);
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(2,==, socks->reply[1]);
+ get_options()->SafeSocks),OP_EQ, 0);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, -1);
- /* XXX: shouldn't tor reply 'command not supported' [07]? */
+ get_options()->SafeSocks),OP_EQ, -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_COMMAND_NOT_SUPPORTED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
done:
;
@@ -174,35 +184,35 @@ test_socks_5_supported_commands(void *ptr)
/* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
ADD_DATA(buf, "\x05\x01\x00");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, 0);
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
+ get_options()->SafeSocks),OP_EQ, 0);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, 1);
- tt_str_op("2.2.2.2",==, socks->address);
- tt_int_op(4369,==, socks->port);
+ get_options()->SafeSocks),OP_EQ, 1);
+ tt_str_op("2.2.2.2",OP_EQ, socks->address);
+ tt_int_op(4369,OP_EQ, socks->port);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, 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");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks),==, 1);
+ get_options()->SafeSocks),OP_EQ, 1);
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
- tt_str_op("torproject.org",==, socks->address);
- tt_int_op(4369,==, socks->port);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
+ tt_str_op("torproject.org",OP_EQ, socks->address);
+ tt_int_op(4369,OP_EQ, socks->port);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
socks_request_clear(socks);
/* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
@@ -210,13 +220,49 @@ test_socks_5_supported_commands(void *ptr)
ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1);
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
- tt_str_op("torproject.org",==, socks->address);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
+ tt_str_op("torproject.org",OP_EQ, socks->address);
+
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Should reject RESOLVE [F0] request for IPv4 address
+ * string if SafeSocks is enabled. */
+
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF0\x00\x03\x07");
+ ADD_DATA(buf, "8.8.8.8");
+ ADD_DATA(buf, "\x01\x02");
+ tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1)
+ == -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_NOT_ALLOWED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
+
+ socks_request_clear(socks);
+
+ /* SOCKS 5 should reject RESOLVE [F0] reject for IPv6 address
+ * string if SafeSocks is enabled. */
+
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF0\x00\x03\x27");
+ ADD_DATA(buf, "2001:0db8:85a3:0000:0000:8a2e:0370:7334");
+ ADD_DATA(buf, "\x01\x02");
+ tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1)
+ == -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_NOT_ALLOWED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
- tt_int_op(0,==, buf_datalen(buf));
socks_request_clear(socks);
/* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
@@ -224,13 +270,13 @@ test_socks_5_supported_commands(void *ptr)
ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1);
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
- tt_str_op("2.2.2.5",==, socks->address);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
+ tt_str_op("2.2.2.5",OP_EQ, socks->address);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
done:
;
@@ -247,27 +293,27 @@ test_socks_5_no_authenticate(void *ptr)
tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks));
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(SOCKS_NO_AUTH,==, socks->reply[1]);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(SOCKS_NO_AUTH,OP_EQ, socks->reply[1]);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
/*SOCKS 5 Send username/password anyway - pretend to be broken */
ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks));
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(1,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(1,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
- tt_int_op(2,==, socks->usernamelen);
- tt_int_op(2,==, socks->passwordlen);
+ tt_int_op(2,OP_EQ, socks->usernamelen);
+ tt_int_op(2,OP_EQ, socks->passwordlen);
- tt_mem_op("\x01\x01",==, socks->username, 2);
- tt_mem_op("\x01\x01",==, socks->password, 2);
+ tt_mem_op("\x01\x01",OP_EQ, socks->username, 2);
+ tt_mem_op("\x01\x01",OP_EQ, socks->password, 2);
done:
;
@@ -285,28 +331,28 @@ test_socks_5_authenticate(void *ptr)
tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks));
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(SOCKS_USER_PASS,==, socks->reply[1]);
- tt_int_op(5,==, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(SOCKS_USER_PASS,OP_EQ, socks->reply[1]);
+ tt_int_op(5,OP_EQ, socks->socks_version);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
/* SOCKS 5 Send username/password */
ADD_DATA(buf, "\x01\x02me\x08mypasswd");
tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks));
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(1,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(1,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
- tt_int_op(2,==, socks->usernamelen);
- tt_int_op(8,==, socks->passwordlen);
+ tt_int_op(2,OP_EQ, socks->usernamelen);
+ tt_int_op(8,OP_EQ, socks->passwordlen);
- tt_mem_op("me",==, socks->username, 2);
- tt_mem_op("mypasswd",==, socks->password, 8);
+ tt_mem_op("me",OP_EQ, socks->username, 2);
+ tt_mem_op("mypasswd",OP_EQ, socks->password, 8);
done:
;
@@ -324,12 +370,12 @@ test_socks_5_authenticate_with_data(void *ptr)
tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks));
- tt_int_op(2,==, socks->replylen);
- tt_int_op(5,==, socks->reply[0]);
- tt_int_op(SOCKS_USER_PASS,==, socks->reply[1]);
- tt_int_op(5,==, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(5,OP_EQ, socks->reply[0]);
+ tt_int_op(SOCKS_USER_PASS,OP_EQ, socks->reply[1]);
+ tt_int_op(5,OP_EQ, socks->socks_version);
- tt_int_op(0,==, buf_datalen(buf));
+ tt_int_op(0,OP_EQ, buf_datalen(buf));
/* SOCKS 5 Send username/password */
/* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
@@ -337,18 +383,18 @@ test_socks_5_authenticate_with_data(void *ptr)
tt_assert(fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks) == 1);
- tt_int_op(5,==, socks->socks_version);
- tt_int_op(2,==, socks->replylen);
- tt_int_op(1,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
+ tt_int_op(5,OP_EQ, socks->socks_version);
+ tt_int_op(2,OP_EQ, socks->replylen);
+ tt_int_op(1,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
- tt_str_op("2.2.2.2",==, socks->address);
- tt_int_op(4369,==, socks->port);
+ tt_str_op("2.2.2.2",OP_EQ, socks->address);
+ tt_int_op(4369,OP_EQ, socks->port);
- tt_int_op(2,==, socks->usernamelen);
- tt_int_op(3,==, socks->passwordlen);
- tt_mem_op("me",==, socks->username, 2);
- tt_mem_op("you",==, socks->password, 3);
+ tt_int_op(2,OP_EQ, socks->usernamelen);
+ tt_int_op(3,OP_EQ, socks->passwordlen);
+ tt_mem_op("me",OP_EQ, socks->username, 2);
+ tt_mem_op("you",OP_EQ, socks->password, 3);
done:
;
@@ -365,10 +411,82 @@ test_socks_5_auth_before_negotiation(void *ptr)
tt_assert(fetch_from_buf_socks(buf, socks,
get_options()->TestSocks,
get_options()->SafeSocks) == -1);
- tt_int_op(0,==, socks->socks_version);
- tt_int_op(0,==, socks->replylen);
- tt_int_op(0,==, socks->reply[0]);
- tt_int_op(0,==, socks->reply[1]);
+ tt_int_op(0,OP_EQ, socks->socks_version);
+ tt_int_op(0,OP_EQ, socks->replylen);
+ tt_int_op(0,OP_EQ, socks->reply[0]);
+ tt_int_op(0,OP_EQ, socks->reply[1]);
+
+ done:
+ ;
+}
+
+/** Perform malformed SOCKS 5 commands */
+static void
+test_socks_5_malformed_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* XXX: Stringified address length > MAX_SOCKS_ADDR_LEN will never happen */
+
+ /** SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369, with SafeSocks set
+ */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1),
+ OP_EQ, -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_NOT_ALLOWED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
+
+ buf_clear(buf);
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE_PTR [F1] for FQDN torproject.org */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF1\x00\x03\x0Etorproject.org\x11\x11");
+ tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks),OP_EQ, -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
+
+ buf_clear(buf);
+ socks_request_clear(socks);
+
+ /* XXX: len + 1 > MAX_SOCKS_ADDR_LEN (FQDN request) will never happen */
+
+ /* SOCKS 5 Send CONNECT [01] to FQDN """"".com */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\x01\x00\x03\x09\"\"\"\"\".com\x11\x11");
+ tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks),OP_EQ, -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_GENERAL_ERROR,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
+
+ buf_clear(buf);
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send CONNECT [01] to address type 0x23 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\x01\x00\x23\x02\x02\x02\x02\x11\x11");
+ tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks),OP_EQ, -1);
+
+ tt_int_op(5,OP_EQ,socks->socks_version);
+ tt_int_op(10,OP_EQ,socks->replylen);
+ tt_int_op(5,OP_EQ,socks->reply[0]);
+ tt_int_op(SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED,OP_EQ,socks->reply[1]);
+ tt_int_op(1,OP_EQ,socks->reply[3]);
done:
;
@@ -387,6 +505,7 @@ struct testcase_t socks_tests[] = {
SOCKSENT(5_auth_before_negotiation),
SOCKSENT(5_authenticate),
SOCKSENT(5_authenticate_with_data),
+ SOCKSENT(5_malformed_commands),
END_OF_TESTCASES
};
diff --git a/src/test/test_status.c b/src/test/test_status.c
index 8bc0152ffb..aa71aa6a9b 100644
--- a/src/test/test_status.c
+++ b/src/test/test_status.c
@@ -86,62 +86,62 @@ NS(test_main)(void *arg)
expected = "0:00 hours";
actual = secs_to_uptime(0);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "0:00 hours";
actual = secs_to_uptime(1);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "0:01 hours";
actual = secs_to_uptime(60);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "0:59 hours";
actual = secs_to_uptime(60 * 59);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1:00 hours";
actual = secs_to_uptime(60 * 60);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "23:59 hours";
actual = secs_to_uptime(60 * 60 * 23 + 60 * 59);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1 day 0:00 hours";
actual = secs_to_uptime(60 * 60 * 23 + 60 * 60);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1 day 0:00 hours";
actual = secs_to_uptime(86400 + 1);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1 day 0:01 hours";
actual = secs_to_uptime(86400 + 60);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "10 days 0:00 hours";
actual = secs_to_uptime(86400 * 10);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "10 days 0:00 hours";
actual = secs_to_uptime(864000 + 1);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "10 days 0:01 hours";
actual = secs_to_uptime(864000 + 60);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
done:
@@ -167,62 +167,62 @@ NS(test_main)(void *arg)
expected = "0 kB";
actual = bytes_to_usage(0);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "0 kB";
actual = bytes_to_usage(1);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1 kB";
actual = bytes_to_usage(1024);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1023 kB";
actual = bytes_to_usage((1 << 20) - 1);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1.00 MB";
actual = bytes_to_usage((1 << 20));
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1.00 MB";
actual = bytes_to_usage((1 << 20) + 5242);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1.01 MB";
actual = bytes_to_usage((1 << 20) + 5243);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1024.00 MB";
actual = bytes_to_usage((1 << 30) - 1);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1.00 GB";
actual = bytes_to_usage((1 << 30));
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1.00 GB";
actual = bytes_to_usage((1 << 30) + 5368709);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "1.01 GB";
actual = bytes_to_usage((1 << 30) + 5368710);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
expected = "10.00 GB";
actual = bytes_to_usage((U64_LITERAL(1) << 30) * 10L);
- tt_str_op(actual, ==, expected);
+ tt_str_op(actual, OP_EQ, expected);
tor_free(actual);
done:
@@ -259,7 +259,7 @@ NS(test_main)(void *arg)
expected = -1;
actual = log_heartbeat(0);
- tt_int_op(actual, ==, expected);
+ tt_int_op(actual, OP_EQ, expected);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
@@ -347,8 +347,8 @@ NS(test_main)(void *arg)
expected = 0;
actual = log_heartbeat(0);
- tt_int_op(actual, ==, expected);
- tt_int_op(CALLED(logv), ==, 3);
+ tt_int_op(actual, OP_EQ, expected);
+ tt_int_op(CALLED(logv), OP_EQ, 3);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
@@ -411,39 +411,39 @@ NS(logv)(int severity, log_domain_mask_t domain,
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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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 */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* 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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "rep_hist_log_circuit_handshake_stats"),
+ OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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) */
+ tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes assigned (TAP) */
+ tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes requested (TAP) */
+ tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes assigned (NTOR) */
+ tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes requested (NTOR) */
break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
@@ -502,7 +502,7 @@ NS(test_main)(void *arg)
expected = 0;
actual = log_heartbeat(0);
- tt_int_op(actual, ==, expected);
+ tt_int_op(actual, OP_EQ, expected);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
@@ -564,18 +564,18 @@ 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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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.");
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), OP_EQ, " We are currently hibernating.");
done:
;
@@ -638,8 +638,8 @@ NS(test_main)(void *arg)
expected = 0;
actual = log_heartbeat(0);
- tt_int_op(actual, ==, expected);
- tt_int_op(CALLED(logv), ==, 2);
+ tt_int_op(actual, OP_EQ, expected);
+ tt_int_op(CALLED(logv), OP_EQ, 2);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
@@ -711,34 +711,35 @@ NS(logv)(int severity, log_domain_mask_t domain,
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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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 */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* 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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_accounting"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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 */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_sent */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_max */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_rcvd */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "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 */
+ tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"),
+ OP_NE, NULL); /* end_buf */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0:01 hours"); /* remaining */
break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
@@ -824,8 +825,8 @@ NS(test_main)(void *arg)
expected = 0;
actual = log_heartbeat(0);
- tt_int_op(actual, ==, expected);
- tt_int_op(CALLED(logv), ==, 2);
+ tt_int_op(actual, OP_EQ, expected);
+ tt_int_op(CALLED(logv), OP_EQ, 2);
done:
stats_n_data_bytes_packaged = 0;
@@ -893,27 +894,27 @@ NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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 */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* 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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"Average packaged cell fullness: %2.3f%%");
- tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1);
+ tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, OP_EQ, 1);
break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
@@ -982,8 +983,8 @@ NS(test_main)(void *arg)
expected = 0;
actual = log_heartbeat(0);
- tt_int_op(actual, ==, expected);
- tt_int_op(CALLED(logv), ==, 2);
+ tt_int_op(actual, OP_EQ, expected);
+ tt_int_op(CALLED(logv), OP_EQ, 2);
done:
NS_UNMOCK(tls_get_write_overhead_ratio);
@@ -1049,26 +1050,26 @@ NS(logv)(int severity, log_domain_mask_t domain,
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, ==,
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ,
"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 */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* 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);
+ tt_int_op(severity, OP_EQ, LOG_NOTICE);
+ tt_int_op(domain, OP_EQ, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL);
+ tt_ptr_op(suffix, OP_EQ, NULL);
+ tt_str_op(format, OP_EQ, "TLS write overhead: %.f%%");
+ tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, OP_EQ, 1);
break;
default:
tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 9d9b393a27..b952bb2596 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2013, The Tor Project, Inc. */
+ * Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -22,6 +22,7 @@
#include <tchar.h>
#endif
#include <math.h>
+#include <ctype.h>
/* XXXX this is a minimal wrapper to make the unit tests compile with the
* changed tor_timegm interface. */
@@ -52,20 +53,20 @@ test_util_read_until_eof_impl(const char *fname, size_t 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);
+ tt_int_op(r, OP_EQ, 0);
fd = open(fifo_name, O_RDONLY|O_BINARY);
- tt_int_op(fd, >=, 0);
+ tt_int_op(fd, OP_GE, 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);
+ tt_int_op(sz, OP_EQ, read_limit);
else
- tt_int_op(sz, ==, file_len);
+ tt_int_op(sz, OP_EQ, file_len);
- tt_mem_op(test_str, ==, str, sz);
- tt_int_op(str[sz], ==, '\0');
+ tt_mem_op(test_str, OP_EQ, str, sz);
+ tt_int_op(str[sz], OP_EQ, '\0');
done:
unlink(fifo_name);
@@ -167,17 +168,17 @@ test_util_write_chunks_to_file(void *arg)
// 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);
+ tt_int_op(r, OP_EQ, 0);
// call write_chunks_to_file
r = write_chunks_to_file(fname, chunks, 1, 0);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 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);
- tt_mem_op(data_str, ==, str, data_str_len);
+ tt_u64_op((uint64_t)st.st_size, OP_EQ, data_str_len);
+ tt_mem_op(data_str, OP_EQ, str, data_str_len);
tor_free(str);
// assert that the tempfile is removed (should not leave artifacts)
@@ -186,7 +187,7 @@ test_util_write_chunks_to_file(void *arg)
// Remove old testfile for second test
r = unlink(fname);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 0);
tor_free(fname);
tor_free(tempname);
@@ -198,24 +199,24 @@ test_util_write_chunks_to_file(void *arg)
// 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);
+ tt_int_op(r, OP_EQ, 0);
// call write_chunks_to_file with no_tempfile = true
r = write_chunks_to_file(fname, chunks, 1, 1);
- tt_int_op(r, ==, 0);
+ tt_int_op(r, OP_EQ, 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);
- tt_mem_op(data_str, ==, str, data_str_len);
+ tt_u64_op((uint64_t)st.st_size, OP_EQ, data_str_len);
+ tt_mem_op(data_str, OP_EQ, 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);
- tt_mem_op(temp_str, ==, str, temp_str_len);
+ tt_u64_op((uint64_t)st.st_size, OP_EQ, temp_str_len);
+ tt_mem_op(temp_str, OP_EQ, str, temp_str_len);
done:
unlink(fname);
@@ -228,11 +229,24 @@ test_util_write_chunks_to_file(void *arg)
tor_free(temp_str);
}
+#define _TFE(a, b, f) tt_int_op((a).f, OP_EQ, (b).f)
+/** test the minimum set of struct tm fields needed for a unique epoch value
+ * this is also the set we use to test tor_timegm */
+#define TM_EQUAL(a, b) \
+ TT_STMT_BEGIN \
+ _TFE(a, b, tm_year); \
+ _TFE(a, b, tm_mon ); \
+ _TFE(a, b, tm_mday); \
+ _TFE(a, b, tm_hour); \
+ _TFE(a, b, tm_min ); \
+ _TFE(a, b, tm_sec ); \
+ TT_STMT_END
+
static void
test_util_time(void *arg)
{
struct timeval start, end;
- struct tm a_time;
+ struct tm a_time, b_time;
char timestr[128];
time_t t_res;
int i;
@@ -247,119 +261,343 @@ test_util_time(void *arg)
end.tv_sec = 5;
end.tv_usec = 5000;
- tt_int_op(0L,==, tv_udiff(&start, &end));
+ tt_int_op(0L,OP_EQ, tv_udiff(&start, &end));
end.tv_usec = 7000;
- tt_int_op(2000L,==, tv_udiff(&start, &end));
+ tt_int_op(2000L,OP_EQ, tv_udiff(&start, &end));
end.tv_sec = 6;
- tt_int_op(1002000L,==, tv_udiff(&start, &end));
+ tt_int_op(1002000L,OP_EQ, tv_udiff(&start, &end));
end.tv_usec = 0;
- tt_int_op(995000L,==, tv_udiff(&start, &end));
+ tt_int_op(995000L,OP_EQ, tv_udiff(&start, &end));
end.tv_sec = 4;
- tt_int_op(-1005000L,==, tv_udiff(&start, &end));
+ tt_int_op(-1005000L,OP_EQ, tv_udiff(&start, &end));
- /* Test tor_timegm */
+ /* Test tor_timegm & tor_gmtime_r */
/* The test values here are confirmed to be correct on a platform
- * with a working timegm. */
+ * with a working timegm & gmtime_r. */
+
+ /* Start with known-zero a_time and b_time.
+ * This avoids passing uninitialised values to TM_EQUAL in a_time.
+ * Zeroing may not be needed for b_time, as long as tor_gmtime_r
+ * never reads the existing values in the structure.
+ * But we really don't want intermittently failing tests. */
+ memset(&a_time, 0, sizeof(struct tm));
+ memset(&b_time, 0, sizeof(struct tm));
+
a_time.tm_year = 2003-1900;
a_time.tm_mon = 7;
a_time.tm_mday = 30;
a_time.tm_hour = 6;
a_time.tm_min = 14;
a_time.tm_sec = 55;
- tt_int_op((time_t) 1062224095UL,==, tor_timegm(&a_time));
+ t_res = 1062224095UL;
+ tt_int_op(t_res, OP_EQ, tor_timegm(&a_time));
+ tor_gmtime_r(&t_res, &b_time);
+ TM_EQUAL(a_time, b_time);
+
a_time.tm_year = 2004-1900; /* Try a leap year, after feb. */
- tt_int_op((time_t) 1093846495UL,==, tor_timegm(&a_time));
+ t_res = 1093846495UL;
+ tt_int_op(t_res, OP_EQ, tor_timegm(&a_time));
+ tor_gmtime_r(&t_res, &b_time);
+ TM_EQUAL(a_time, b_time);
+
a_time.tm_mon = 1; /* Try a leap year, in feb. */
a_time.tm_mday = 10;
- tt_int_op((time_t) 1076393695UL,==, tor_timegm(&a_time));
+ t_res = 1076393695UL;
+ tt_int_op(t_res, OP_EQ, tor_timegm(&a_time));
+ tor_gmtime_r(&t_res, &b_time);
+ TM_EQUAL(a_time, b_time);
+
a_time.tm_mon = 0;
- a_time.tm_mday = 10;
- tt_int_op((time_t) 1073715295UL,==, tor_timegm(&a_time));
+ t_res = 1073715295UL;
+ tt_int_op(t_res, OP_EQ, tor_timegm(&a_time));
+ tor_gmtime_r(&t_res, &b_time);
+ TM_EQUAL(a_time, b_time);
+
+ /* Test tor_timegm out of range */
+
+ /* year */
+
+ /* Wrong year < 1970 */
+ a_time.tm_year = 1969-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = -1-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+#if SIZEOF_INT == 4 || SIZEOF_INT == 8
+ a_time.tm_year = -1*(1 << 16);
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* one of the smallest tm_year values my 64 bit system supports:
+ * t_res = -9223372036854775LL without clamping */
+ a_time.tm_year = -292275055-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = INT32_MIN;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+#endif
+
+#if SIZEOF_INT == 8
+ a_time.tm_year = -1*(1 << 48);
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* while unlikely, the system's gmtime(_r) could return
+ * a "correct" retrospective gregorian negative year value,
+ * which I'm pretty sure is:
+ * -1*(2^63)/60/60/24*2000/730485 + 1970 = -292277022657
+ * 730485 is the number of days in two millenia, including leap days */
+ a_time.tm_year = -292277022657-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = INT64_MIN;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+#endif
+
+ /* Wrong year >= INT32_MAX - 1900 */
+#if SIZEOF_INT == 4 || SIZEOF_INT == 8
+ a_time.tm_year = INT32_MAX-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = INT32_MAX;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+#endif
+
+#if SIZEOF_INT == 8
+ /* one of the largest tm_year values my 64 bit system supports */
+ a_time.tm_year = 292278994-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* while unlikely, the system's gmtime(_r) could return
+ * a "correct" proleptic gregorian year value,
+ * which I'm pretty sure is:
+ * (2^63-1)/60/60/24*2000/730485 + 1970 = 292277026596
+ * 730485 is the number of days in two millenia, including leap days */
+ a_time.tm_year = 292277026596-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = INT64_MAX-1900;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = INT64_MAX;
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+#endif
+
+ /* month */
+ a_time.tm_year = 2007-1900; /* restore valid year */
+
a_time.tm_mon = 12; /* Wrong month, it's 0-based */
- a_time.tm_mday = 10;
- tt_int_op((time_t) -1,==, tor_timegm(&a_time));
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
a_time.tm_mon = -1; /* Wrong month */
- a_time.tm_mday = 10;
- tt_int_op((time_t) -1,==, tor_timegm(&a_time));
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* day */
+ a_time.tm_mon = 6; /* Try July */
+ a_time.tm_mday = 32; /* Wrong day */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_mon = 5; /* Try June */
+ a_time.tm_mday = 31; /* Wrong day */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = 2008-1900; /* Try a leap year */
+ a_time.tm_mon = 1; /* in feb. */
+ a_time.tm_mday = 30; /* Wrong day */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_year = 2011-1900; /* Try a non-leap year */
+ a_time.tm_mon = 1; /* in feb. */
+ a_time.tm_mday = 29; /* Wrong day */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_mday = 0; /* Wrong day, it's 1-based (to be different) */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* hour */
+ a_time.tm_mday = 3; /* restore valid month day */
+
+ a_time.tm_hour = 24; /* Wrong hour, it's 0-based */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_hour = -1; /* Wrong hour */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* minute */
+ a_time.tm_hour = 22; /* restore valid hour */
+
+ a_time.tm_min = 60; /* Wrong minute, it's 0-based */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_min = -1; /* Wrong minute */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* second */
+ a_time.tm_min = 37; /* restore valid minute */
+
+ a_time.tm_sec = 61; /* Wrong second: 0-based with leap seconds */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ a_time.tm_sec = -1; /* Wrong second */
+ tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time));
+
+ /* Test tor_gmtime_r out of range */
+
+ /* time_t < 0 yields a year clamped to 1 or 1970,
+ * depending on whether the implementation of the system gmtime(_r)
+ * sets struct tm (1) or not (1970) */
+ t_res = -1;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (1970-1900) ||
+ b_time.tm_year == (1969-1900));
+
+ if (sizeof(time_t) == 4 || sizeof(time_t) == 8) {
+ t_res = -1*(1 << 30);
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (1970-1900) ||
+ b_time.tm_year == (1935-1900));
+
+ t_res = INT32_MIN;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (1970-1900) ||
+ b_time.tm_year == (1901-1900));
+ }
+
+#if SIZEOF_TIME_T == 8
+ {
+ /* one of the smallest tm_year values my 64 bit system supports:
+ * b_time.tm_year == (-292275055LL-1900LL) without clamping */
+ t_res = -9223372036854775LL;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (1970-1900) ||
+ b_time.tm_year == (1-1900));
+
+ /* while unlikely, the system's gmtime(_r) could return
+ * a "correct" retrospective gregorian negative year value,
+ * which I'm pretty sure is:
+ * -1*(2^63)/60/60/24*2000/730485 + 1970 = -292277022657
+ * 730485 is the number of days in two millenia, including leap days
+ * (int64_t)b_time.tm_year == (-292277022657LL-1900LL) without clamping */
+ t_res = INT64_MIN;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (1970-1900) ||
+ b_time.tm_year == (1-1900));
+ }
+#endif
+
+ /* time_t >= INT_MAX yields a year clamped to 2037 or 9999,
+ * depending on whether the implementation of the system gmtime(_r)
+ * sets struct tm (9999) or not (2037) */
+#if SIZEOF_TIME_T == 4 || SIZEOF_TIME_T == 8
+ {
+ t_res = 3*(1 << 29);
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (2021-1900));
+
+ t_res = INT32_MAX;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (2037-1900) ||
+ b_time.tm_year == (2038-1900));
+ }
+#endif
+
+#if SIZEOF_TIME_T == 8
+ {
+ /* one of the largest tm_year values my 64 bit system supports:
+ * b_time.tm_year == (292278994L-1900L) without clamping */
+ t_res = 9223372036854775LL;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (2037-1900) ||
+ b_time.tm_year == (9999-1900));
+
+ /* while unlikely, the system's gmtime(_r) could return
+ * a "correct" proleptic gregorian year value,
+ * which I'm pretty sure is:
+ * (2^63-1)/60/60/24*2000/730485 + 1970 = 292277026596
+ * 730485 is the number of days in two millenia, including leap days
+ * (int64_t)b_time.tm_year == (292277026596L-1900L) without clamping */
+ t_res = INT64_MAX;
+ tor_gmtime_r(&t_res, &b_time);
+ tt_assert(b_time.tm_year == (2037-1900) ||
+ b_time.tm_year == (9999-1900));
+ }
+#endif
/* Test {format,parse}_rfc1123_time */
format_rfc1123_time(timestr, 0);
- tt_str_op("Thu, 01 Jan 1970 00:00:00 GMT",==, timestr);
+ tt_str_op("Thu, 01 Jan 1970 00:00:00 GMT",OP_EQ, timestr);
format_rfc1123_time(timestr, (time_t)1091580502UL);
- tt_str_op("Wed, 04 Aug 2004 00:48:22 GMT",==, timestr);
+ tt_str_op("Wed, 04 Aug 2004 00:48:22 GMT",OP_EQ, timestr);
t_res = 0;
i = parse_rfc1123_time(timestr, &t_res);
- tt_int_op(0,==, i);
- tt_int_op(t_res,==, (time_t)1091580502UL);
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(t_res,OP_EQ, (time_t)1091580502UL);
/* The timezone doesn't matter */
t_res = 0;
- tt_int_op(0,==, parse_rfc1123_time("Wed, 04 Aug 2004 00:48:22 ZUL", &t_res));
- tt_int_op(t_res,==, (time_t)1091580502UL);
- tt_int_op(-1,==,
+ tt_int_op(0,OP_EQ,
+ parse_rfc1123_time("Wed, 04 Aug 2004 00:48:22 ZUL", &t_res));
+ tt_int_op(t_res,OP_EQ, (time_t)1091580502UL);
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, zz Aug 2004 99-99x99 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 32 Mar 2011 00:00:00 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 30 Mar 2011 24:00:00 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 30 Mar 2011 23:60:00 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 30 Mar 2011 23:59:62 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 30 Mar 1969 23:59:59 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 30 Ene 2011 23:59:59 GMT", &t_res));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_rfc1123_time("Wed, 30 Mar 2011 23:59:59 GM", &t_res));
-#if 0
- /* This fails, I imagine it's important and should be fixed? */
- test_eq(-1, parse_rfc1123_time("Wed, 29 Feb 2011 16:00:00 GMT", &t_res));
- /* Why is this string valid (ie. the test fails because it doesn't
- return -1)? */
- test_eq(-1, parse_rfc1123_time("Wed, 30 Mar 2011 23:59:61 GMT", &t_res));
-#endif
+ tt_int_op(-1,OP_EQ,
+ parse_rfc1123_time("Wed, 29 Feb 2011 16:00:00 GMT", &t_res));
+ tt_int_op(-1,OP_EQ,
+ parse_rfc1123_time("Wed, 30 Mar 2011 23:59:61 GMT", &t_res));
/* Test parse_iso_time */
t_res = 0;
i = parse_iso_time("", &t_res);
- tt_int_op(-1,==, i);
+ tt_int_op(-1,OP_EQ, i);
t_res = 0;
i = parse_iso_time("2004-08-32 00:48:22", &t_res);
- tt_int_op(-1,==, i);
+ tt_int_op(-1,OP_EQ, i);
t_res = 0;
i = parse_iso_time("1969-08-03 00:48:22", &t_res);
- tt_int_op(-1,==, i);
+ tt_int_op(-1,OP_EQ, i);
t_res = 0;
i = parse_iso_time("2004-08-04 00:48:22", &t_res);
- tt_int_op(0,==, i);
- tt_int_op(t_res,==, (time_t)1091580502UL);
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(t_res,OP_EQ, (time_t)1091580502UL);
t_res = 0;
i = parse_iso_time("2004-8-4 0:48:22", &t_res);
- tt_int_op(0,==, i);
- tt_int_op(t_res,==, (time_t)1091580502UL);
- tt_int_op(-1,==, parse_iso_time("2004-08-zz 99-99x99 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("2011-03-32 00:00:00 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("2011-03-30 24:00:00 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("2011-03-30 23:60:00 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("2011-03-30 23:59:62 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("1969-03-30 23:59:59 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("2011-00-30 23:59:59 GMT", &t_res));
- tt_int_op(-1,==, parse_iso_time("2147483647-08-29 14:00:00", &t_res));
- tt_int_op(-1,==, parse_iso_time("2011-03-30 23:59", &t_res));
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(t_res,OP_EQ, (time_t)1091580502UL);
+ tt_int_op(-1,OP_EQ, parse_iso_time("2004-08-zz 99-99x99 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-32 00:00:00 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 24:00:00 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 23:60:00 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 23:59:62 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("1969-03-30 23:59:59 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2011-00-30 23:59:59 GMT", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2147483647-08-29 14:00:00", &t_res));
+ tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 23:59", &t_res));
/* Test tor_gettimeofday */
@@ -372,14 +610,14 @@ test_util_time(void *arg)
/* now make sure time works. */
tor_gettimeofday(&end);
/* We might've timewarped a little. */
- tt_int_op(tv_udiff(&start, &end), >=, -5000);
+ tt_int_op(tv_udiff(&start, &end), OP_GE, -5000);
/* Test format_iso_time */
tv.tv_sec = (time_t)1326296338;
tv.tv_usec = 3060;
format_iso_time(timestr, (time_t)tv.tv_sec);
- tt_str_op("2012-01-11 15:38:58",==, timestr);
+ tt_str_op("2012-01-11 15:38:58",OP_EQ, 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.
Skip this test for now.
@@ -387,11 +625,11 @@ test_util_time(void *arg)
test_streq("2012-01-11 10:38:58", timestr);
*/
format_iso_time_nospace(timestr, (time_t)tv.tv_sec);
- tt_str_op("2012-01-11T15:38:58",==, timestr);
- tt_int_op(strlen(timestr),==, ISO_TIME_LEN);
+ tt_str_op("2012-01-11T15:38:58",OP_EQ, timestr);
+ tt_int_op(strlen(timestr),OP_EQ, ISO_TIME_LEN);
format_iso_time_nospace_usec(timestr, &tv);
- tt_str_op("2012-01-11T15:38:58.003060",==, timestr);
- tt_int_op(strlen(timestr),==, ISO_TIME_USEC_LEN);
+ tt_str_op("2012-01-11T15:38:58.003060",OP_EQ, timestr);
+ tt_int_op(strlen(timestr),OP_EQ, ISO_TIME_USEC_LEN);
done:
;
@@ -406,72 +644,74 @@ test_util_parse_http_time(void *arg)
#define T(s) do { \
format_iso_time(b, tor_timegm(&a_time)); \
- tt_str_op(b, ==, (s)); \
+ tt_str_op(b, OP_EQ, (s)); \
b[0]='\0'; \
} while (0)
/* Test parse_http_time */
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("", &a_time));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("Sunday, 32 Aug 2004 00:48:22 GMT", &a_time));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("Sunday, 3 Aug 1869 00:48:22 GMT", &a_time));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("Sunday, 32-Aug-94 00:48:22 GMT", &a_time));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("Sunday, 3-Ago-04 00:48:22", &a_time));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("Sunday, August the third", &a_time));
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ,
parse_http_time("Wednesday,,04 Aug 1994 00:48:22 GMT", &a_time));
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
parse_http_time("Wednesday, 04 Aug 1994 00:48:22 GMT", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
parse_http_time("Wednesday, 4 Aug 1994 0:48:22 GMT", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
parse_http_time("Miercoles, 4 Aug 1994 0:48:22 GMT", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
parse_http_time("Wednesday, 04-Aug-94 00:48:22 GMT", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==, parse_http_time("Wednesday, 4-Aug-94 0:48:22 GMT", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ,
+ parse_http_time("Wednesday, 4-Aug-94 0:48:22 GMT", &a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==, parse_http_time("Miercoles, 4-Aug-94 0:48:22 GMT", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ,
+ parse_http_time("Miercoles, 4-Aug-94 0:48:22 GMT", &a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==, parse_http_time("Wed Aug 04 00:48:22 1994", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ, parse_http_time("Wed Aug 04 00:48:22 1994", &a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==, parse_http_time("Wed Aug 4 0:48:22 1994", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ, parse_http_time("Wed Aug 4 0:48:22 1994", &a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==, parse_http_time("Mie Aug 4 0:48:22 1994", &a_time));
- tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ, parse_http_time("Mie Aug 4 0:48:22 1994", &a_time));
+ tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time));
T("1994-08-04 00:48:22");
- tt_int_op(0,==, parse_http_time("Sun, 1 Jan 2012 00:00:00 GMT", &a_time));
- tt_int_op((time_t)1325376000UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ,parse_http_time("Sun, 1 Jan 2012 00:00:00 GMT", &a_time));
+ tt_int_op((time_t)1325376000UL,OP_EQ, tor_timegm(&a_time));
T("2012-01-01 00:00:00");
- tt_int_op(0,==, parse_http_time("Mon, 31 Dec 2012 00:00:00 GMT", &a_time));
- tt_int_op((time_t)1356912000UL,==, tor_timegm(&a_time));
+ tt_int_op(0,OP_EQ,parse_http_time("Mon, 31 Dec 2012 00:00:00 GMT", &a_time));
+ tt_int_op((time_t)1356912000UL,OP_EQ, tor_timegm(&a_time));
T("2012-12-31 00:00:00");
- tt_int_op(-1,==, parse_http_time("2004-08-zz 99-99x99 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("2011-03-32 00:00:00 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("2011-03-30 24:00:00 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("2011-03-30 23:60:00 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("2011-03-30 23:59:62 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("1969-03-30 23:59:59 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("2011-00-30 23:59:59 GMT", &a_time));
- tt_int_op(-1,==, parse_http_time("2011-03-30 23:59", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2004-08-zz 99-99x99 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2011-03-32 00:00:00 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 24:00:00 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 23:60:00 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 23:59:62 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("1969-03-30 23:59:59 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2011-00-30 23:59:59 GMT", &a_time));
+ tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 23:59", &a_time));
#undef T
done:
@@ -506,110 +746,110 @@ test_util_config_line(void *arg)
str = buf;
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k");
- tt_str_op(v,==, "v");
+ tt_str_op(k,OP_EQ, "k");
+ tt_str_op(v,OP_EQ, "v");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "key value with"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "key");
- tt_str_op(v,==, "value with spaces");
+ tt_str_op(k,OP_EQ, "key");
+ tt_str_op(v,OP_EQ, "value with spaces");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "keykey"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "keykey");
- tt_str_op(v,==, "val");
+ tt_str_op(k,OP_EQ, "keykey");
+ tt_str_op(v,OP_EQ, "val");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "k2\n"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k2");
- tt_str_op(v,==, "");
+ tt_str_op(k,OP_EQ, "k2");
+ tt_str_op(v,OP_EQ, "");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "k3 \n"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k3");
- tt_str_op(v,==, "");
+ tt_str_op(k,OP_EQ, "k3");
+ tt_str_op(v,OP_EQ, "");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "#comment"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k4");
- tt_str_op(v,==, "");
+ tt_str_op(k,OP_EQ, "k4");
+ tt_str_op(v,OP_EQ, "");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "k5#abc"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k5");
- tt_str_op(v,==, "");
+ tt_str_op(k,OP_EQ, "k5");
+ tt_str_op(v,OP_EQ, "");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "k6"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k6");
- tt_str_op(v,==, "val");
+ tt_str_op(k,OP_EQ, "k6");
+ tt_str_op(v,OP_EQ, "val");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "kseven"));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "kseven");
- tt_str_op(v,==, "a quoted \'string");
+ tt_str_op(k,OP_EQ, "kseven");
+ tt_str_op(v,OP_EQ, "a quoted \'string");
tor_free(k); tor_free(v);
tt_assert(!strcmpstart(str, "k8 "));
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k8");
- tt_str_op(v,==, "a quoted\n\"str\\ing\t\x01\x01\x01\"");
+ tt_str_op(k,OP_EQ, "k8");
+ tt_str_op(v,OP_EQ, "a quoted\n\"str\\ing\t\x01\x01\x01\"");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k9");
- tt_str_op(v,==, "a line that spans two lines.");
+ tt_str_op(k,OP_EQ, "k9");
+ tt_str_op(v,OP_EQ, "a line that spans two lines.");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k10");
- tt_str_op(v,==, "more than one continuation");
+ tt_str_op(k,OP_EQ, "k10");
+ tt_str_op(v,OP_EQ, "more than one continuation");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k11");
- tt_str_op(v,==, "continuation at the start");
+ tt_str_op(k,OP_EQ, "k11");
+ tt_str_op(v,OP_EQ, "continuation at the start");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k12");
- tt_str_op(v,==, "line with a embedded");
+ tt_str_op(k,OP_EQ, "k12");
+ tt_str_op(v,OP_EQ, "line with a embedded");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k13");
- tt_str_op(v,==, "continuation at the very start");
+ tt_str_op(k,OP_EQ, "k13");
+ tt_str_op(v,OP_EQ, "continuation at the very start");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k14");
- tt_str_op(v,==, "a line that has a comment and" );
+ tt_str_op(k,OP_EQ, "k14");
+ tt_str_op(v,OP_EQ, "a line that has a comment and" );
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k15");
- tt_str_op(v,==, "this should be the next new line");
+ tt_str_op(k,OP_EQ, "k15");
+ tt_str_op(v,OP_EQ, "this should be the next new line");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k16");
- tt_str_op(v,==, "a line that has a comment and" );
+ tt_str_op(k,OP_EQ, "k16");
+ tt_str_op(v,OP_EQ, "a line that has a comment and" );
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k17");
- tt_str_op(v,==, "this should be the next new line");
+ tt_str_op(k,OP_EQ, "k17");
+ tt_str_op(v,OP_EQ, "this should be the next new line");
tor_free(k); tor_free(v);
- tt_str_op(str,==, "");
+ tt_str_op(str,OP_EQ, "");
done:
tor_free(k);
@@ -640,30 +880,30 @@ test_util_config_line_quotes(void *arg)
str = buf1;
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "kTrailingSpace");
- tt_str_op(v,==, "quoted value");
+ tt_str_op(k,OP_EQ, "kTrailingSpace");
+ tt_str_op(v,OP_EQ, "quoted value");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
str = buf2;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
str = buf3;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
str = buf4;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
done:
@@ -687,16 +927,16 @@ test_util_config_line_comment_character(void *arg)
str = buf;
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k1");
- tt_str_op(v,==, "# in quotes");
+ tt_str_op(k,OP_EQ, "k1");
+ tt_str_op(v,OP_EQ, "# in quotes");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "k2");
- tt_str_op(v,==, "some value");
+ tt_str_op(k,OP_EQ, "k2");
+ tt_str_op(v,OP_EQ, "some value");
tor_free(k); tor_free(v);
- tt_str_op(str,==, "k3 /home/user/myTorNetwork#2\n");
+ tt_str_op(str,OP_EQ, "k3 /home/user/myTorNetwork#2\n");
#if 0
str = parse_config_line_from_str(str, &k, &v);
@@ -757,91 +997,91 @@ test_util_config_line_escaped_content(void *arg)
str = buf1;
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "HexadecimalLower");
- tt_str_op(v,==, "*");
+ tt_str_op(k,OP_EQ, "HexadecimalLower");
+ tt_str_op(v,OP_EQ, "*");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "HexadecimalUpper");
- tt_str_op(v,==, "*");
+ tt_str_op(k,OP_EQ, "HexadecimalUpper");
+ tt_str_op(v,OP_EQ, "*");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "HexadecimalUpperX");
- tt_str_op(v,==, "*");
+ tt_str_op(k,OP_EQ, "HexadecimalUpperX");
+ tt_str_op(v,OP_EQ, "*");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "Octal");
- tt_str_op(v,==, "*");
+ tt_str_op(k,OP_EQ, "Octal");
+ tt_str_op(v,OP_EQ, "*");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "Newline");
- tt_str_op(v,==, "\n");
+ tt_str_op(k,OP_EQ, "Newline");
+ tt_str_op(v,OP_EQ, "\n");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "Tab");
- tt_str_op(v,==, "\t");
+ tt_str_op(k,OP_EQ, "Tab");
+ tt_str_op(v,OP_EQ, "\t");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "CarriageReturn");
- tt_str_op(v,==, "\r");
+ tt_str_op(k,OP_EQ, "CarriageReturn");
+ tt_str_op(v,OP_EQ, "\r");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "DoubleQuote");
- tt_str_op(v,==, "\"");
+ tt_str_op(k,OP_EQ, "DoubleQuote");
+ tt_str_op(v,OP_EQ, "\"");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "SimpleQuote");
- tt_str_op(v,==, "'");
+ tt_str_op(k,OP_EQ, "SimpleQuote");
+ tt_str_op(v,OP_EQ, "'");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "Backslash");
- tt_str_op(v,==, "\\");
+ tt_str_op(k,OP_EQ, "Backslash");
+ tt_str_op(v,OP_EQ, "\\");
tor_free(k); tor_free(v);
str = parse_config_line_from_str(str, &k, &v);
- tt_str_op(k,==, "Mix");
- tt_str_op(v,==, "This is a \"star\":\t'*'\nAnd second line");
+ tt_str_op(k,OP_EQ, "Mix");
+ tt_str_op(v,OP_EQ, "This is a \"star\":\t'*'\nAnd second line");
tor_free(k); tor_free(v);
- tt_str_op(str,==, "");
+ tt_str_op(str,OP_EQ, "");
str = buf2;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
str = buf3;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
str = buf4;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
#if 0
str = buf5;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str, ==, NULL);
+ tt_ptr_op(str, OP_EQ, NULL);
tor_free(k); tor_free(v);
#endif
str = buf6;
str = parse_config_line_from_str(str, &k, &v);
- tt_ptr_op(str,==, NULL);
+ tt_ptr_op(str,OP_EQ, NULL);
tor_free(k); tor_free(v);
done:
@@ -859,39 +1099,39 @@ test_util_expand_filename(void *arg)
setenv("HOME", "/home/itv", 1); /* For "internal test value" */
str = expand_filename("");
- tt_str_op("",==, str);
+ tt_str_op("",OP_EQ, str);
tor_free(str);
str = expand_filename("/normal/path");
- tt_str_op("/normal/path",==, str);
+ tt_str_op("/normal/path",OP_EQ, str);
tor_free(str);
str = expand_filename("/normal/trailing/path/");
- tt_str_op("/normal/trailing/path/",==, str);
+ tt_str_op("/normal/trailing/path/",OP_EQ, str);
tor_free(str);
str = expand_filename("~");
- tt_str_op("/home/itv/",==, str);
+ tt_str_op("/home/itv/",OP_EQ, str);
tor_free(str);
str = expand_filename("$HOME/nodice");
- tt_str_op("$HOME/nodice",==, str);
+ tt_str_op("$HOME/nodice",OP_EQ, str);
tor_free(str);
str = expand_filename("~/");
- tt_str_op("/home/itv/",==, str);
+ tt_str_op("/home/itv/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/foobarqux");
- tt_str_op("/home/itv/foobarqux",==, str);
+ tt_str_op("/home/itv/foobarqux",OP_EQ, str);
tor_free(str);
str = expand_filename("~/../../etc/passwd");
- tt_str_op("/home/itv/../../etc/passwd",==, str);
+ tt_str_op("/home/itv/../../etc/passwd",OP_EQ, str);
tor_free(str);
str = expand_filename("~/trailing/");
- tt_str_op("/home/itv/trailing/",==, str);
+ tt_str_op("/home/itv/trailing/",OP_EQ, str);
tor_free(str);
/* Ideally we'd test ~anotheruser, but that's shady to test (we'd
have to somehow inject/fake the get_user_homedir call) */
@@ -900,15 +1140,15 @@ test_util_expand_filename(void *arg)
setenv("HOME", "/home/itv/", 1);
str = expand_filename("~");
- tt_str_op("/home/itv/",==, str);
+ tt_str_op("/home/itv/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/");
- tt_str_op("/home/itv/",==, str);
+ tt_str_op("/home/itv/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/foo");
- tt_str_op("/home/itv/foo",==, str);
+ tt_str_op("/home/itv/foo",OP_EQ, str);
tor_free(str);
/* Try with empty $HOME */
@@ -916,15 +1156,15 @@ test_util_expand_filename(void *arg)
setenv("HOME", "", 1);
str = expand_filename("~");
- tt_str_op("/",==, str);
+ tt_str_op("/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/");
- tt_str_op("/",==, str);
+ tt_str_op("/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/foobar");
- tt_str_op("/foobar",==, str);
+ tt_str_op("/foobar",OP_EQ, str);
tor_free(str);
/* Try with $HOME unset */
@@ -932,15 +1172,15 @@ test_util_expand_filename(void *arg)
unsetenv("HOME");
str = expand_filename("~");
- tt_str_op("/",==, str);
+ tt_str_op("/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/");
- tt_str_op("/",==, str);
+ tt_str_op("/",OP_EQ, str);
tor_free(str);
str = expand_filename("~/foobar");
- tt_str_op("/foobar",==, str);
+ tt_str_op("/foobar",OP_EQ, str);
tor_free(str);
done:
@@ -958,30 +1198,30 @@ test_util_escape_string_socks(void *arg)
(void)arg;
escaped_string = tor_escape_str_for_pt_args("This is a backslash: \\",";\\");
tt_assert(escaped_string);
- tt_str_op(escaped_string,==, "This is a backslash: \\\\");
+ tt_str_op(escaped_string,OP_EQ, "This is a backslash: \\\\");
tor_free(escaped_string);
/** Simple semicolon escape. */
escaped_string = tor_escape_str_for_pt_args("First rule:Do not use ;",";\\");
tt_assert(escaped_string);
- tt_str_op(escaped_string,==, "First rule:Do not use \\;");
+ tt_str_op(escaped_string,OP_EQ, "First rule:Do not use \\;");
tor_free(escaped_string);
/** Empty string. */
escaped_string = tor_escape_str_for_pt_args("", ";\\");
tt_assert(escaped_string);
- tt_str_op(escaped_string,==, "");
+ tt_str_op(escaped_string,OP_EQ, "");
tor_free(escaped_string);
/** Escape all characters. */
escaped_string = tor_escape_str_for_pt_args(";\\;\\", ";\\");
tt_assert(escaped_string);
- tt_str_op(escaped_string,==, "\\;\\\\\\;\\\\");
+ tt_str_op(escaped_string,OP_EQ, "\\;\\\\\\;\\\\");
tor_free(escaped_string);
escaped_string = tor_escape_str_for_pt_args(";", ";\\");
tt_assert(escaped_string);
- tt_str_op(escaped_string,==, "\\;");
+ tt_str_op(escaped_string,OP_EQ, "\\;");
tor_free(escaped_string);
done:
@@ -1017,152 +1257,153 @@ test_util_strmisc(void *arg)
/* Test strl operations */
(void)arg;
- tt_int_op(5,==, strlcpy(buf, "Hello", 0));
- tt_int_op(5,==, strlcpy(buf, "Hello", 10));
- tt_str_op(buf,==, "Hello");
- tt_int_op(5,==, strlcpy(buf, "Hello", 6));
- tt_str_op(buf,==, "Hello");
- tt_int_op(5,==, strlcpy(buf, "Hello", 5));
- tt_str_op(buf,==, "Hell");
+ tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 0));
+ tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 10));
+ tt_str_op(buf,OP_EQ, "Hello");
+ tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 6));
+ tt_str_op(buf,OP_EQ, "Hello");
+ tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 5));
+ tt_str_op(buf,OP_EQ, "Hell");
strlcpy(buf, "Hello", sizeof(buf));
- tt_int_op(10,==, strlcat(buf, "Hello", 5));
+ tt_int_op(10,OP_EQ, strlcat(buf, "Hello", 5));
/* Test strstrip() */
strlcpy(buf, "Testing 1 2 3", sizeof(buf));
tor_strstrip(buf, ",!");
- tt_str_op(buf,==, "Testing 1 2 3");
+ tt_str_op(buf,OP_EQ, "Testing 1 2 3");
strlcpy(buf, "!Testing 1 2 3?", sizeof(buf));
tor_strstrip(buf, "!? ");
- tt_str_op(buf,==, "Testing123");
+ tt_str_op(buf,OP_EQ, "Testing123");
strlcpy(buf, "!!!Testing 1 2 3??", sizeof(buf));
tor_strstrip(buf, "!? ");
- tt_str_op(buf,==, "Testing123");
+ tt_str_op(buf,OP_EQ, "Testing123");
/* Test parse_long */
/* Empty/zero input */
- tt_int_op(0L,==, tor_parse_long("",10,0,100,&i,NULL));
- tt_int_op(0,==, i);
- tt_int_op(0L,==, tor_parse_long("0",10,0,100,&i,NULL));
- tt_int_op(1,==, i);
+ tt_int_op(0L,OP_EQ, tor_parse_long("",10,0,100,&i,NULL));
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(0L,OP_EQ, tor_parse_long("0",10,0,100,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
/* Normal cases */
- tt_int_op(10L,==, tor_parse_long("10",10,0,100,&i,NULL));
- tt_int_op(1,==, i);
- tt_int_op(10L,==, tor_parse_long("10",10,0,10,&i,NULL));
- tt_int_op(1,==, i);
- tt_int_op(10L,==, tor_parse_long("10",10,10,100,&i,NULL));
- tt_int_op(1,==, i);
- tt_int_op(-50L,==, tor_parse_long("-50",10,-100,100,&i,NULL));
- tt_int_op(1,==, i);
- tt_int_op(-50L,==, tor_parse_long("-50",10,-100,0,&i,NULL));
- tt_int_op(1,==, i);
- tt_int_op(-50L,==, tor_parse_long("-50",10,-50,0,&i,NULL));
- tt_int_op(1,==, i);
+ tt_int_op(10L,OP_EQ, tor_parse_long("10",10,0,100,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(10L,OP_EQ, tor_parse_long("10",10,0,10,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(10L,OP_EQ, tor_parse_long("10",10,10,100,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(-50L,OP_EQ, tor_parse_long("-50",10,-100,100,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(-50L,OP_EQ, tor_parse_long("-50",10,-100,0,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(-50L,OP_EQ, tor_parse_long("-50",10,-50,0,&i,NULL));
+ tt_int_op(1,OP_EQ, i);
/* Extra garbage */
- tt_int_op(0L,==, tor_parse_long("10m",10,0,100,&i,NULL));
- tt_int_op(0,==, i);
- tt_int_op(0L,==, tor_parse_long("-50 plus garbage",10,-100,100,&i,NULL));
- tt_int_op(0,==, i);
- tt_int_op(10L,==, tor_parse_long("10m",10,0,100,&i,&cp));
- tt_int_op(1,==, i);
- tt_str_op(cp,==, "m");
- tt_int_op(-50L,==, tor_parse_long("-50 plus garbage",10,-100,100,&i,&cp));
- tt_int_op(1,==, i);
- tt_str_op(cp,==, " plus garbage");
+ tt_int_op(0L,OP_EQ, tor_parse_long("10m",10,0,100,&i,NULL));
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(0L,OP_EQ, tor_parse_long("-50 plus garbage",10,-100,100,&i,NULL));
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(10L,OP_EQ, tor_parse_long("10m",10,0,100,&i,&cp));
+ tt_int_op(1,OP_EQ, i);
+ tt_str_op(cp,OP_EQ, "m");
+ tt_int_op(-50L,OP_EQ, tor_parse_long("-50 plus garbage",10,-100,100,&i,&cp));
+ tt_int_op(1,OP_EQ, i);
+ tt_str_op(cp,OP_EQ, " plus garbage");
/* Out of bounds */
- tt_int_op(0L,==, tor_parse_long("10",10,50,100,&i,NULL));
- tt_int_op(0,==, i);
- tt_int_op(0L,==, tor_parse_long("-50",10,0,100,&i,NULL));
- tt_int_op(0,==, i);
+ tt_int_op(0L,OP_EQ, tor_parse_long("10",10,50,100,&i,NULL));
+ tt_int_op(0,OP_EQ, i);
+ tt_int_op(0L,OP_EQ, tor_parse_long("-50",10,0,100,&i,NULL));
+ tt_int_op(0,OP_EQ, i);
/* Base different than 10 */
- tt_int_op(2L,==, tor_parse_long("10",2,0,100,NULL,NULL));
- tt_int_op(0L,==, tor_parse_long("2",2,0,100,NULL,NULL));
- tt_int_op(0L,==, tor_parse_long("10",-2,0,100,NULL,NULL));
- tt_int_op(68284L,==, tor_parse_long("10abc",16,0,70000,NULL,NULL));
- tt_int_op(68284L,==, tor_parse_long("10ABC",16,0,70000,NULL,NULL));
- tt_int_op(0,==, tor_parse_long("10ABC",-1,0,70000,&i,NULL));
- tt_int_op(i,==, 0);
+ tt_int_op(2L,OP_EQ, tor_parse_long("10",2,0,100,NULL,NULL));
+ tt_int_op(0L,OP_EQ, tor_parse_long("2",2,0,100,NULL,NULL));
+ tt_int_op(0L,OP_EQ, tor_parse_long("10",-2,0,100,NULL,NULL));
+ tt_int_op(68284L,OP_EQ, tor_parse_long("10abc",16,0,70000,NULL,NULL));
+ tt_int_op(68284L,OP_EQ, tor_parse_long("10ABC",16,0,70000,NULL,NULL));
+ tt_int_op(0,OP_EQ, tor_parse_long("10ABC",-1,0,70000,&i,NULL));
+ tt_int_op(i,OP_EQ, 0);
/* Test parse_ulong */
- tt_int_op(0UL,==, tor_parse_ulong("",10,0,100,NULL,NULL));
- tt_int_op(0UL,==, tor_parse_ulong("0",10,0,100,NULL,NULL));
- tt_int_op(10UL,==, tor_parse_ulong("10",10,0,100,NULL,NULL));
- tt_int_op(0UL,==, tor_parse_ulong("10",10,50,100,NULL,NULL));
- tt_int_op(10UL,==, tor_parse_ulong("10",10,0,10,NULL,NULL));
- tt_int_op(10UL,==, tor_parse_ulong("10",10,10,100,NULL,NULL));
- tt_int_op(0UL,==, tor_parse_ulong("8",8,0,100,NULL,NULL));
- tt_int_op(50UL,==, tor_parse_ulong("50",10,50,100,NULL,NULL));
- tt_int_op(0UL,==, tor_parse_ulong("-50",10,-100,100,NULL,NULL));
- tt_int_op(0UL,==, tor_parse_ulong("50",-1,50,100,&i,NULL));
- tt_int_op(0,==, i);
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong("",10,0,100,NULL,NULL));
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong("0",10,0,100,NULL,NULL));
+ tt_int_op(10UL,OP_EQ, tor_parse_ulong("10",10,0,100,NULL,NULL));
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong("10",10,50,100,NULL,NULL));
+ tt_int_op(10UL,OP_EQ, tor_parse_ulong("10",10,0,10,NULL,NULL));
+ tt_int_op(10UL,OP_EQ, tor_parse_ulong("10",10,10,100,NULL,NULL));
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong("8",8,0,100,NULL,NULL));
+ tt_int_op(50UL,OP_EQ, tor_parse_ulong("50",10,50,100,NULL,NULL));
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong("-50",10,-100,100,NULL,NULL));
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong("50",-1,50,100,&i,NULL));
+ tt_int_op(0,OP_EQ, i);
/* Test parse_uint64 */
tt_assert(U64_LITERAL(10) == tor_parse_uint64("10 x",10,0,100, &i, &cp));
- tt_int_op(1,==, i);
- tt_str_op(cp,==, " x");
+ tt_int_op(1,OP_EQ, i);
+ tt_str_op(cp,OP_EQ, " x");
tt_assert(U64_LITERAL(12345678901) ==
tor_parse_uint64("12345678901",10,0,UINT64_MAX, &i, &cp));
- tt_int_op(1,==, i);
- tt_str_op(cp,==, "");
+ tt_int_op(1,OP_EQ, i);
+ tt_str_op(cp,OP_EQ, "");
tt_assert(U64_LITERAL(0) ==
tor_parse_uint64("12345678901",10,500,INT32_MAX, &i, &cp));
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
tt_assert(U64_LITERAL(0) ==
tor_parse_uint64("123",-1,0,INT32_MAX, &i, &cp));
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
{
/* Test parse_double */
double d = tor_parse_double("10", 0, UINT64_MAX,&i,NULL);
- tt_int_op(1,==, i);
+ tt_int_op(1,OP_EQ, i);
tt_assert(DBL_TO_U64(d) == 10);
d = tor_parse_double("0", 0, UINT64_MAX,&i,NULL);
- tt_int_op(1,==, i);
+ tt_int_op(1,OP_EQ, i);
tt_assert(DBL_TO_U64(d) == 0);
d = tor_parse_double(" ", 0, UINT64_MAX,&i,NULL);
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
d = tor_parse_double(".0a", 0, UINT64_MAX,&i,NULL);
- tt_int_op(0,==, i);
+ tt_int_op(0,OP_EQ, i);
d = tor_parse_double(".0a", 0, UINT64_MAX,&i,&cp);
- tt_int_op(1,==, i);
+ tt_int_op(1,OP_EQ, i);
d = tor_parse_double("-.0", 0, UINT64_MAX,&i,NULL);
- tt_int_op(1,==, i);
+ tt_int_op(1,OP_EQ, i);
tt_assert(DBL_TO_U64(d) == 0);
d = tor_parse_double("-10", -100.0, 100.0,&i,NULL);
- tt_int_op(1,==, i);
- tt_int_op(-10.0,==, d);
+ tt_int_op(1,OP_EQ, i);
+ tt_int_op(-10.0,OP_EQ, d);
}
{
/* Test tor_parse_* where we overflow/underflow the underlying type. */
/* This string should overflow 64-bit ints. */
#define TOOBIG "100000000000000000000000000"
- tt_int_op(0L,==, tor_parse_long(TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL));
- tt_int_op(i,==, 0);
- tt_int_op(0L,==,
+ tt_int_op(0L, OP_EQ,
+ tor_parse_long(TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL));
+ tt_int_op(i,OP_EQ, 0);
+ tt_int_op(0L,OP_EQ,
tor_parse_long("-"TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL));
- tt_int_op(i,==, 0);
- tt_int_op(0UL,==, tor_parse_ulong(TOOBIG, 10, 0, ULONG_MAX, &i, NULL));
- tt_int_op(i,==, 0);
- tt_u64_op(U64_LITERAL(0), ==, tor_parse_uint64(TOOBIG, 10,
+ tt_int_op(i,OP_EQ, 0);
+ tt_int_op(0UL,OP_EQ, tor_parse_ulong(TOOBIG, 10, 0, ULONG_MAX, &i, NULL));
+ tt_int_op(i,OP_EQ, 0);
+ tt_u64_op(U64_LITERAL(0), OP_EQ, tor_parse_uint64(TOOBIG, 10,
0, UINT64_MAX, &i, NULL));
- tt_int_op(i,==, 0);
+ tt_int_op(i,OP_EQ, 0);
}
/* Test snprintf */
/* Returning -1 when there's not enough room in the output buffer */
- tt_int_op(-1,==, tor_snprintf(buf, 0, "Foo"));
- tt_int_op(-1,==, tor_snprintf(buf, 2, "Foo"));
- tt_int_op(-1,==, tor_snprintf(buf, 3, "Foo"));
- tt_int_op(-1,!=, tor_snprintf(buf, 4, "Foo"));
+ tt_int_op(-1,OP_EQ, tor_snprintf(buf, 0, "Foo"));
+ tt_int_op(-1,OP_EQ, tor_snprintf(buf, 2, "Foo"));
+ tt_int_op(-1,OP_EQ, tor_snprintf(buf, 3, "Foo"));
+ tt_int_op(-1,OP_NE, tor_snprintf(buf, 4, "Foo"));
/* Always NUL-terminate the output */
tor_snprintf(buf, 5, "abcdef");
- tt_int_op(0,==, buf[4]);
+ tt_int_op(0,OP_EQ, buf[4]);
tor_snprintf(buf, 10, "abcdef");
- tt_int_op(0,==, buf[6]);
+ tt_int_op(0,OP_EQ, buf[6]);
/* uint64 */
tor_snprintf(buf, sizeof(buf), "x!"U64_FORMAT"!x",
U64_PRINTF_ARG(U64_LITERAL(12345678901)));
- tt_str_op("x!12345678901!x",==, buf);
+ tt_str_op("x!12345678901!x",OP_EQ, buf);
/* Test str{,case}cmpstart */
tt_assert(strcmpstart("abcdef", "abcdef")==0);
@@ -1213,31 +1454,31 @@ test_util_strmisc(void *arg)
/* Test 'escaped' */
tt_assert(NULL == escaped(NULL));
- tt_str_op("\"\"",==, escaped(""));
- tt_str_op("\"abcd\"",==, escaped("abcd"));
- tt_str_op("\"\\\\ \\n\\r\\t\\\"\\'\"",==, escaped("\\ \n\r\t\"'"));
- tt_str_op("\"unnecessary \\'backslashes\\'\"",==,
+ tt_str_op("\"\"",OP_EQ, escaped(""));
+ tt_str_op("\"abcd\"",OP_EQ, escaped("abcd"));
+ tt_str_op("\"\\\\ \\n\\r\\t\\\"\\'\"",OP_EQ, escaped("\\ \n\r\t\"'"));
+ tt_str_op("\"unnecessary \\'backslashes\\'\"",OP_EQ,
escaped("unnecessary \'backslashes\'"));
/* Non-printable characters appear as octal */
- tt_str_op("\"z\\001abc\\277d\"",==, escaped("z\001abc\277d"));
- tt_str_op("\"z\\336\\255 ;foo\"",==, escaped("z\xde\xad\x20;foo"));
+ tt_str_op("\"z\\001abc\\277d\"",OP_EQ, escaped("z\001abc\277d"));
+ tt_str_op("\"z\\336\\255 ;foo\"",OP_EQ, escaped("z\xde\xad\x20;foo"));
/* Test strndup and memdup */
{
const char *s = "abcdefghijklmnopqrstuvwxyz";
cp_tmp = tor_strndup(s, 30);
- tt_str_op(cp_tmp,==, s); /* same string, */
- tt_ptr_op(cp_tmp,!=,s); /* but different pointers. */
+ tt_str_op(cp_tmp,OP_EQ, s); /* same string, */
+ tt_ptr_op(cp_tmp,OP_NE,s); /* but different pointers. */
tor_free(cp_tmp);
cp_tmp = tor_strndup(s, 5);
- tt_str_op(cp_tmp,==, "abcde");
+ tt_str_op(cp_tmp,OP_EQ, "abcde");
tor_free(cp_tmp);
s = "a\0b\0c\0d\0e\0";
cp_tmp = tor_memdup(s,10);
- tt_mem_op(cp_tmp,==, s, 10); /* same ram, */
- tt_ptr_op(cp_tmp,!=,s); /* but different pointers. */
+ tt_mem_op(cp_tmp,OP_EQ, s, 10); /* same ram, */
+ tt_ptr_op(cp_tmp,OP_NE,s); /* but different pointers. */
tor_free(cp_tmp);
}
@@ -1247,9 +1488,9 @@ test_util_strmisc(void *arg)
cp_tmp[3] = 'D';
tt_assert(!tor_strisnonupper(cp_tmp));
tor_strupper(cp_tmp);
- tt_str_op(cp_tmp,==, "ABCDEF");
+ tt_str_op(cp_tmp,OP_EQ, "ABCDEF");
tor_strlower(cp_tmp);
- tt_str_op(cp_tmp,==, "abcdef");
+ tt_str_op(cp_tmp,OP_EQ, "abcdef");
tt_assert(tor_strisnonupper(cp_tmp));
tt_assert(tor_strisprint(cp_tmp));
cp_tmp[3] = 3;
@@ -1260,18 +1501,18 @@ test_util_strmisc(void *arg)
{
const char *haystack = "abcde";
tt_assert(!tor_memmem(haystack, 5, "ef", 2));
- tt_ptr_op(tor_memmem(haystack, 5, "cd", 2),==, haystack + 2);
- tt_ptr_op(tor_memmem(haystack, 5, "cde", 3),==, haystack + 2);
+ tt_ptr_op(tor_memmem(haystack, 5, "cd", 2),OP_EQ, haystack + 2);
+ tt_ptr_op(tor_memmem(haystack, 5, "cde", 3),OP_EQ, haystack + 2);
tt_assert(!tor_memmem(haystack, 4, "cde", 3));
haystack = "ababcad";
- tt_ptr_op(tor_memmem(haystack, 7, "abc", 3),==, haystack + 2);
- tt_ptr_op(tor_memmem(haystack, 7, "ad", 2),==, haystack + 5);
- tt_ptr_op(tor_memmem(haystack, 7, "cad", 3),==, haystack + 4);
+ tt_ptr_op(tor_memmem(haystack, 7, "abc", 3),OP_EQ, haystack + 2);
+ tt_ptr_op(tor_memmem(haystack, 7, "ad", 2),OP_EQ, haystack + 5);
+ tt_ptr_op(tor_memmem(haystack, 7, "cad", 3),OP_EQ, haystack + 4);
tt_assert(!tor_memmem(haystack, 7, "dadad", 5));
tt_assert(!tor_memmem(haystack, 7, "abcdefghij", 10));
/* memstr */
- tt_ptr_op(tor_memstr(haystack, 7, "abc"),==, haystack + 2);
- tt_ptr_op(tor_memstr(haystack, 7, "cad"),==, haystack + 4);
+ tt_ptr_op(tor_memstr(haystack, 7, "abc"),OP_EQ, haystack + 2);
+ tt_ptr_op(tor_memstr(haystack, 7, "cad"),OP_EQ, haystack + 4);
tt_assert(!tor_memstr(haystack, 6, "cad"));
tt_assert(!tor_memstr(haystack, 7, "cadd"));
tt_assert(!tor_memstr(haystack, 7, "fe"));
@@ -1284,42 +1525,42 @@ test_util_strmisc(void *arg)
size_t i;
for (i = 0; i < sizeof(binary_data); ++i)
binary_data[i] = i;
- tt_str_op(hex_str(binary_data, 0),==, "");
- tt_str_op(hex_str(binary_data, 1),==, "00");
- tt_str_op(hex_str(binary_data, 17),==,
+ tt_str_op(hex_str(binary_data, 0),OP_EQ, "");
+ tt_str_op(hex_str(binary_data, 1),OP_EQ, "00");
+ tt_str_op(hex_str(binary_data, 17),OP_EQ,
"000102030405060708090A0B0C0D0E0F10");
- tt_str_op(hex_str(binary_data, 32),==,
+ tt_str_op(hex_str(binary_data, 32),OP_EQ,
"000102030405060708090A0B0C0D0E0F"
"101112131415161718191A1B1C1D1E1F");
- tt_str_op(hex_str(binary_data, 34),==,
+ tt_str_op(hex_str(binary_data, 34),OP_EQ,
"000102030405060708090A0B0C0D0E0F"
"101112131415161718191A1B1C1D1E1F");
/* Repeat these tests for shorter strings after longer strings
have been tried, to make sure we're correctly terminating strings */
- tt_str_op(hex_str(binary_data, 1),==, "00");
- tt_str_op(hex_str(binary_data, 0),==, "");
+ tt_str_op(hex_str(binary_data, 1),OP_EQ, "00");
+ tt_str_op(hex_str(binary_data, 0),OP_EQ, "");
}
/* Test strcmp_opt */
- tt_int_op(strcmp_opt("", "foo"), <, 0);
- tt_int_op(strcmp_opt("", ""), ==, 0);
- tt_int_op(strcmp_opt("foo", ""), >, 0);
+ tt_int_op(strcmp_opt("", "foo"), OP_LT, 0);
+ tt_int_op(strcmp_opt("", ""), OP_EQ, 0);
+ tt_int_op(strcmp_opt("foo", ""), OP_GT, 0);
- tt_int_op(strcmp_opt(NULL, ""), <, 0);
- tt_int_op(strcmp_opt(NULL, NULL), ==, 0);
- tt_int_op(strcmp_opt("", NULL), >, 0);
+ tt_int_op(strcmp_opt(NULL, ""), OP_LT, 0);
+ tt_int_op(strcmp_opt(NULL, NULL), OP_EQ, 0);
+ tt_int_op(strcmp_opt("", NULL), OP_GT, 0);
- tt_int_op(strcmp_opt(NULL, "foo"), <, 0);
- tt_int_op(strcmp_opt("foo", NULL), >, 0);
+ tt_int_op(strcmp_opt(NULL, "foo"), OP_LT, 0);
+ tt_int_op(strcmp_opt("foo", NULL), OP_GT, 0);
/* Test strcmp_len */
- tt_int_op(strcmp_len("foo", "bar", 3), >, 0);
- tt_int_op(strcmp_len("foo", "bar", 2), <, 0); /* First len, then lexical */
- tt_int_op(strcmp_len("foo2", "foo1", 4), >, 0);
- tt_int_op(strcmp_len("foo2", "foo1", 3), <, 0); /* Really stop at len */
- tt_int_op(strcmp_len("foo2", "foo", 3), ==, 0); /* Really stop at len */
- tt_int_op(strcmp_len("blah", "", 4), >, 0);
- tt_int_op(strcmp_len("blah", "", 0), ==, 0);
+ tt_int_op(strcmp_len("foo", "bar", 3), OP_GT, 0);
+ tt_int_op(strcmp_len("foo", "bar", 2), OP_LT, 0);
+ tt_int_op(strcmp_len("foo2", "foo1", 4), OP_GT, 0);
+ tt_int_op(strcmp_len("foo2", "foo1", 3), OP_LT, 0); /* Really stop at len */
+ tt_int_op(strcmp_len("foo2", "foo", 3), OP_EQ, 0); /* Really stop at len */
+ tt_int_op(strcmp_len("blah", "", 4), OP_GT, 0);
+ tt_int_op(strcmp_len("blah", "", 0), OP_EQ, 0);
done:
tor_free(cp_tmp);
@@ -1330,34 +1571,35 @@ test_util_pow2(void *arg)
{
/* Test tor_log2(). */
(void)arg;
- tt_int_op(tor_log2(64),==, 6);
- tt_int_op(tor_log2(65),==, 6);
- tt_int_op(tor_log2(63),==, 5);
- tt_int_op(tor_log2(0),==, 0);/* incorrect mathematically, but as specified */
- tt_int_op(tor_log2(1),==, 0);
- tt_int_op(tor_log2(2),==, 1);
- tt_int_op(tor_log2(3),==, 1);
- tt_int_op(tor_log2(4),==, 2);
- tt_int_op(tor_log2(5),==, 2);
- tt_int_op(tor_log2(U64_LITERAL(40000000000000000)),==, 55);
- tt_int_op(tor_log2(UINT64_MAX),==, 63);
+ tt_int_op(tor_log2(64),OP_EQ, 6);
+ tt_int_op(tor_log2(65),OP_EQ, 6);
+ tt_int_op(tor_log2(63),OP_EQ, 5);
+ /* incorrect mathematically, but as specified: */
+ tt_int_op(tor_log2(0),OP_EQ, 0);
+ tt_int_op(tor_log2(1),OP_EQ, 0);
+ tt_int_op(tor_log2(2),OP_EQ, 1);
+ tt_int_op(tor_log2(3),OP_EQ, 1);
+ tt_int_op(tor_log2(4),OP_EQ, 2);
+ tt_int_op(tor_log2(5),OP_EQ, 2);
+ tt_int_op(tor_log2(U64_LITERAL(40000000000000000)),OP_EQ, 55);
+ tt_int_op(tor_log2(UINT64_MAX),OP_EQ, 63);
/* Test round_to_power_of_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)), ==,
+ tt_u64_op(round_to_power_of_2(120), OP_EQ, 128);
+ tt_u64_op(round_to_power_of_2(128), OP_EQ, 128);
+ tt_u64_op(round_to_power_of_2(130), OP_EQ, 128);
+ tt_u64_op(round_to_power_of_2(U64_LITERAL(40000000000000000)), OP_EQ,
U64_LITERAL(1)<<55);
- tt_u64_op(round_to_power_of_2(U64_LITERAL(0xffffffffffffffff)), ==,
+ tt_u64_op(round_to_power_of_2(U64_LITERAL(0xffffffffffffffff)), OP_EQ,
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);
+ tt_u64_op(round_to_power_of_2(0), OP_EQ, 1);
+ tt_u64_op(round_to_power_of_2(1), OP_EQ, 1);
+ tt_u64_op(round_to_power_of_2(2), OP_EQ, 2);
+ tt_u64_op(round_to_power_of_2(3), OP_EQ, 2);
+ tt_u64_op(round_to_power_of_2(4), OP_EQ, 4);
+ tt_u64_op(round_to_power_of_2(5), OP_EQ, 4);
+ tt_u64_op(round_to_power_of_2(6), OP_EQ, 4);
+ tt_u64_op(round_to_power_of_2(7), OP_EQ, 8);
done:
;
@@ -1521,8 +1763,8 @@ test_util_gzip(void *arg)
tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1,
GZIP_METHOD, 1, LOG_INFO));
tt_assert(buf3);
- tt_int_op(strlen(buf1) + 1,==, len2);
- tt_str_op(buf1,==, buf3);
+ tt_int_op(strlen(buf1) + 1,OP_EQ, len2);
+ tt_str_op(buf1,OP_EQ, buf3);
tor_free(buf2);
tor_free(buf3);
@@ -1536,8 +1778,8 @@ test_util_gzip(void *arg)
tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1,
ZLIB_METHOD, 1, LOG_INFO));
tt_assert(buf3);
- tt_int_op(strlen(buf1) + 1,==, len2);
- tt_str_op(buf1,==, buf3);
+ tt_int_op(strlen(buf1) + 1,OP_EQ, len2);
+ tt_str_op(buf1,OP_EQ, buf3);
/* Check whether we can uncompress concatenated, compressed strings. */
tor_free(buf3);
@@ -1545,8 +1787,8 @@ test_util_gzip(void *arg)
memcpy(buf2+len1, buf2, len1);
tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1*2,
ZLIB_METHOD, 1, LOG_INFO));
- tt_int_op((strlen(buf1)+1)*2,==, len2);
- tt_mem_op(buf3,==,
+ tt_int_op((strlen(buf1)+1)*2,OP_EQ, len2);
+ tt_mem_op(buf3,OP_EQ,
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0",
(strlen(buf1)+1)*2);
@@ -1586,20 +1828,21 @@ test_util_gzip(void *arg)
len2 = 21;
tt_assert(tor_zlib_process(state, &cp1, &len1, &ccp2, &len2, 0)
== TOR_ZLIB_OK);
- tt_int_op(0,==, len2); /* Make sure we compressed it all. */
+ tt_int_op(0,OP_EQ, len2); /* Make sure we compressed it all. */
tt_assert(cp1 > buf1);
len2 = 0;
cp2 = cp1;
tt_assert(tor_zlib_process(state, &cp1, &len1, &ccp2, &len2, 1)
== TOR_ZLIB_DONE);
- tt_int_op(0,==, len2);
+ tt_int_op(0,OP_EQ, len2);
tt_assert(cp1 > cp2); /* Make sure we really added something. */
tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf1, 1024-len1,
ZLIB_METHOD, 1, LOG_WARN));
- tt_str_op(buf3,==,"ABCDEFGHIJABCDEFGHIJ"); /*Make sure it compressed right.*/
- tt_int_op(21,==, len2);
+ /* Make sure it compressed right. */
+ tt_str_op(buf3, OP_EQ, "ABCDEFGHIJABCDEFGHIJ");
+ tt_int_op(21,OP_EQ, len2);
done:
if (state)
@@ -1630,25 +1873,25 @@ test_util_mmap(void *arg)
mapping = tor_mmap_file(fname1);
tt_assert(mapping);
- tt_int_op(mapping->size,==, strlen("Short file."));
- tt_str_op(mapping->data,==, "Short file.");
+ tt_int_op(mapping->size,OP_EQ, strlen("Short file."));
+ tt_str_op(mapping->data,OP_EQ, "Short file.");
#ifdef _WIN32
- tt_int_op(0, ==, tor_munmap_file(mapping));
+ tt_int_op(0, OP_EQ, tor_munmap_file(mapping));
mapping = NULL;
tt_assert(unlink(fname1) == 0);
#else
/* make sure we can unlink. */
tt_assert(unlink(fname1) == 0);
- tt_str_op(mapping->data,==, "Short file.");
- tt_int_op(0, ==, tor_munmap_file(mapping));
+ tt_str_op(mapping->data,OP_EQ, "Short file.");
+ tt_int_op(0, OP_EQ, tor_munmap_file(mapping));
mapping = NULL;
#endif
/* Now a zero-length file. */
write_str_to_file(fname1, "", 1);
mapping = tor_mmap_file(fname1);
- tt_ptr_op(mapping,==, NULL);
- tt_int_op(ERANGE,==, errno);
+ tt_ptr_op(mapping,OP_EQ, NULL);
+ tt_int_op(ERANGE,OP_EQ, errno);
unlink(fname1);
/* Make sure that we fail to map a no-longer-existent file. */
@@ -1659,18 +1902,18 @@ test_util_mmap(void *arg)
write_bytes_to_file(fname2, buf, buflen, 1);
mapping = tor_mmap_file(fname2);
tt_assert(mapping);
- tt_int_op(mapping->size,==, buflen);
- tt_mem_op(mapping->data,==, buf, buflen);
- tt_int_op(0, ==, tor_munmap_file(mapping));
+ tt_int_op(mapping->size,OP_EQ, buflen);
+ tt_mem_op(mapping->data,OP_EQ, buf, buflen);
+ tt_int_op(0, OP_EQ, tor_munmap_file(mapping));
mapping = NULL;
/* Now try a big aligned file. */
write_bytes_to_file(fname3, buf, 16384, 1);
mapping = tor_mmap_file(fname3);
tt_assert(mapping);
- tt_int_op(mapping->size,==, 16384);
- tt_mem_op(mapping->data,==, buf, 16384);
- tt_int_op(0, ==, tor_munmap_file(mapping));
+ tt_int_op(mapping->size,OP_EQ, 16384);
+ tt_mem_op(mapping->data,OP_EQ, buf, 16384);
+ tt_int_op(0, OP_EQ, tor_munmap_file(mapping));
mapping = NULL;
done:
@@ -1697,9 +1940,9 @@ test_util_control_formats(void *arg)
(void)arg;
sz = read_escaped_data(inp, strlen(inp), &out);
- tt_str_op(out,==,
+ tt_str_op(out,OP_EQ,
".This is a test\nof the emergency \n.system.\n\rZ.\n");
- tt_int_op(sz,==, strlen(out));
+ tt_int_op(sz,OP_EQ, strlen(out));
done:
tor_free(out);
@@ -1731,334 +1974,335 @@ test_util_sscanf(void *arg)
/* Simple tests (malformed patterns, literal matching, ...) */
(void)arg;
- tt_int_op(-1,==, tor_sscanf("123", "%i", &r)); /* %i is not supported */
- tt_int_op(-1,==,
+ tt_int_op(-1,OP_EQ, tor_sscanf("123", "%i", &r)); /* %i is not supported */
+ tt_int_op(-1,OP_EQ,
tor_sscanf("wrong", "%5c", s1)); /* %c cannot have a number. */
- tt_int_op(-1,==, tor_sscanf("hello", "%s", s1)); /* %s needs a number. */
- tt_int_op(-1,==, tor_sscanf("prettylongstring", "%999999s", s1));
+ tt_int_op(-1,OP_EQ, tor_sscanf("hello", "%s", s1)); /* %s needs a number. */
+ tt_int_op(-1,OP_EQ, tor_sscanf("prettylongstring", "%999999s", s1));
#if 0
/* GCC thinks these two are illegal. */
test_eq(-1, tor_sscanf("prettylongstring", "%0s", s1));
test_eq(0, tor_sscanf("prettylongstring", "%10s", NULL));
#endif
/* No '%'-strings: always "success" */
- tt_int_op(0,==, tor_sscanf("hello world", "hello world"));
- tt_int_op(0,==, tor_sscanf("hello world", "good bye"));
+ tt_int_op(0,OP_EQ, tor_sscanf("hello world", "hello world"));
+ tt_int_op(0,OP_EQ, tor_sscanf("hello world", "good bye"));
/* Excess data */
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
tor_sscanf("hello 3", "%u", &u1)); /* have to match the start */
- tt_int_op(0,==, tor_sscanf(" 3 hello", "%u", &u1));
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ, tor_sscanf(" 3 hello", "%u", &u1));
+ tt_int_op(0,OP_EQ,
tor_sscanf(" 3 hello", "%2u", &u1)); /* not even in this case */
- tt_int_op(1,==,
+ tt_int_op(1,OP_EQ,
tor_sscanf("3 hello", "%u", &u1)); /* but trailing is alright */
/* Numbers (ie. %u) */
- tt_int_op(0,==,
+ tt_int_op(0,OP_EQ,
tor_sscanf("hello world 3", "hello worlb %u", &u1)); /* d vs b */
- tt_int_op(1,==, tor_sscanf("12345", "%u", &u1));
- tt_int_op(12345u,==, u1);
- tt_int_op(1,==, tor_sscanf("12346 ", "%u", &u1));
- tt_int_op(12346u,==, u1);
- tt_int_op(0,==, tor_sscanf(" 12347", "%u", &u1));
- tt_int_op(1,==, tor_sscanf(" 12348", " %u", &u1));
- tt_int_op(12348u,==, u1);
- tt_int_op(1,==, tor_sscanf("0", "%u", &u1));
- tt_int_op(0u,==, u1);
- tt_int_op(1,==, tor_sscanf("0000", "%u", &u2));
- tt_int_op(0u,==, u2);
- tt_int_op(0,==, tor_sscanf("", "%u", &u1)); /* absent number */
- tt_int_op(0,==, tor_sscanf("A", "%u", &u1)); /* bogus number */
- tt_int_op(0,==, tor_sscanf("-1", "%u", &u1)); /* negative number */
+ tt_int_op(1,OP_EQ, tor_sscanf("12345", "%u", &u1));
+ tt_int_op(12345u,OP_EQ, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("12346 ", "%u", &u1));
+ tt_int_op(12346u,OP_EQ, u1);
+ tt_int_op(0,OP_EQ, tor_sscanf(" 12347", "%u", &u1));
+ tt_int_op(1,OP_EQ, tor_sscanf(" 12348", " %u", &u1));
+ tt_int_op(12348u,OP_EQ, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("0", "%u", &u1));
+ tt_int_op(0u,OP_EQ, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("0000", "%u", &u2));
+ tt_int_op(0u,OP_EQ, u2);
+ tt_int_op(0,OP_EQ, tor_sscanf("", "%u", &u1)); /* absent number */
+ tt_int_op(0,OP_EQ, tor_sscanf("A", "%u", &u1)); /* bogus number */
+ tt_int_op(0,OP_EQ, tor_sscanf("-1", "%u", &u1)); /* negative number */
/* Numbers with size (eg. %2u) */
- tt_int_op(0,==, tor_sscanf("-1", "%2u", &u1));
- tt_int_op(2,==, tor_sscanf("123456", "%2u%u", &u1, &u2));
- tt_int_op(12u,==, u1);
- tt_int_op(3456u,==, u2);
- tt_int_op(1,==, tor_sscanf("123456", "%8u", &u1));
- tt_int_op(123456u,==, u1);
- tt_int_op(1,==, tor_sscanf("123457 ", "%8u", &u1));
- tt_int_op(123457u,==, u1);
- tt_int_op(0,==, tor_sscanf(" 123456", "%8u", &u1));
- tt_int_op(3,==, tor_sscanf("!12:3:456", "!%2u:%2u:%3u", &u1, &u2, &u3));
- tt_int_op(12u,==, u1);
- tt_int_op(3u,==, u2);
- tt_int_op(456u,==, u3);
- tt_int_op(3,==,
+ tt_int_op(0,OP_EQ, tor_sscanf("-1", "%2u", &u1));
+ tt_int_op(2,OP_EQ, tor_sscanf("123456", "%2u%u", &u1, &u2));
+ tt_int_op(12u,OP_EQ, u1);
+ tt_int_op(3456u,OP_EQ, u2);
+ tt_int_op(1,OP_EQ, tor_sscanf("123456", "%8u", &u1));
+ tt_int_op(123456u,OP_EQ, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("123457 ", "%8u", &u1));
+ tt_int_op(123457u,OP_EQ, u1);
+ tt_int_op(0,OP_EQ, tor_sscanf(" 123456", "%8u", &u1));
+ tt_int_op(3,OP_EQ, tor_sscanf("!12:3:456", "!%2u:%2u:%3u", &u1, &u2, &u3));
+ tt_int_op(12u,OP_EQ, u1);
+ tt_int_op(3u,OP_EQ, u2);
+ tt_int_op(456u,OP_EQ, u3);
+ tt_int_op(3,OP_EQ,
tor_sscanf("67:8:099", "%2u:%2u:%3u", &u1, &u2, &u3)); /* 0s */
- tt_int_op(67u,==, u1);
- tt_int_op(8u,==, u2);
- tt_int_op(99u,==, u3);
+ tt_int_op(67u,OP_EQ, u1);
+ tt_int_op(8u,OP_EQ, u2);
+ tt_int_op(99u,OP_EQ, u3);
/* %u does not match space.*/
- tt_int_op(2,==, tor_sscanf("12:3: 45", "%2u:%2u:%3u", &u1, &u2, &u3));
- tt_int_op(12u,==, u1);
- tt_int_op(3u,==, u2);
+ tt_int_op(2,OP_EQ, tor_sscanf("12:3: 45", "%2u:%2u:%3u", &u1, &u2, &u3));
+ tt_int_op(12u,OP_EQ, u1);
+ tt_int_op(3u,OP_EQ, u2);
/* %u does not match negative numbers. */
- tt_int_op(2,==, tor_sscanf("67:8:-9", "%2u:%2u:%3u", &u1, &u2, &u3));
- tt_int_op(67u,==, u1);
- tt_int_op(8u,==, u2);
+ tt_int_op(2,OP_EQ, tor_sscanf("67:8:-9", "%2u:%2u:%3u", &u1, &u2, &u3));
+ tt_int_op(67u,OP_EQ, u1);
+ tt_int_op(8u,OP_EQ, u2);
/* Arbitrary amounts of 0-padding are okay */
- tt_int_op(3,==, tor_sscanf("12:03:000000000000000099", "%2u:%2u:%u",
+ tt_int_op(3,OP_EQ, tor_sscanf("12:03:000000000000000099", "%2u:%2u:%u",
&u1, &u2, &u3));
- tt_int_op(12u,==, u1);
- tt_int_op(3u,==, u2);
- tt_int_op(99u,==, u3);
+ tt_int_op(12u,OP_EQ, u1);
+ tt_int_op(3u,OP_EQ, u2);
+ tt_int_op(99u,OP_EQ, u3);
/* Hex (ie. %x) */
- tt_int_op(3,==, tor_sscanf("1234 02aBcdEf ff", "%x %x %x", &u1, &u2, &u3));
- tt_int_op(0x1234,==, u1);
- tt_int_op(0x2ABCDEF,==, u2);
- tt_int_op(0xFF,==, u3);
+ tt_int_op(3,OP_EQ,
+ tor_sscanf("1234 02aBcdEf ff", "%x %x %x", &u1, &u2, &u3));
+ tt_int_op(0x1234,OP_EQ, u1);
+ tt_int_op(0x2ABCDEF,OP_EQ, u2);
+ tt_int_op(0xFF,OP_EQ, u3);
/* Width works on %x */
- tt_int_op(3,==, tor_sscanf("f00dcafe444", "%4x%4x%u", &u1, &u2, &u3));
- tt_int_op(0xf00d,==, u1);
- tt_int_op(0xcafe,==, u2);
- tt_int_op(444,==, u3);
+ tt_int_op(3,OP_EQ, tor_sscanf("f00dcafe444", "%4x%4x%u", &u1, &u2, &u3));
+ tt_int_op(0xf00d,OP_EQ, u1);
+ tt_int_op(0xcafe,OP_EQ, u2);
+ tt_int_op(444,OP_EQ, u3);
/* Literal '%' (ie. '%%') */
- tt_int_op(1,==, tor_sscanf("99% fresh", "%3u%% fresh", &u1));
- tt_int_op(99,==, u1);
- tt_int_op(0,==, tor_sscanf("99 fresh", "%% %3u %s", &u1, s1));
- tt_int_op(1,==, tor_sscanf("99 fresh", "%3u%% %s", &u1, s1));
- tt_int_op(2,==, tor_sscanf("99 fresh", "%3u %5s %%", &u1, s1));
- tt_int_op(99,==, u1);
- tt_str_op(s1,==, "fresh");
- tt_int_op(1,==, tor_sscanf("% boo", "%% %3s", s1));
- tt_str_op("boo",==, s1);
+ tt_int_op(1,OP_EQ, tor_sscanf("99% fresh", "%3u%% fresh", &u1));
+ tt_int_op(99,OP_EQ, u1);
+ tt_int_op(0,OP_EQ, tor_sscanf("99 fresh", "%% %3u %s", &u1, s1));
+ tt_int_op(1,OP_EQ, tor_sscanf("99 fresh", "%3u%% %s", &u1, s1));
+ tt_int_op(2,OP_EQ, tor_sscanf("99 fresh", "%3u %5s %%", &u1, s1));
+ tt_int_op(99,OP_EQ, u1);
+ tt_str_op(s1,OP_EQ, "fresh");
+ tt_int_op(1,OP_EQ, tor_sscanf("% boo", "%% %3s", s1));
+ tt_str_op("boo",OP_EQ, s1);
/* Strings (ie. %s) */
- tt_int_op(2,==, tor_sscanf("hello", "%3s%7s", s1, s2));
- tt_str_op(s1,==, "hel");
- tt_str_op(s2,==, "lo");
- tt_int_op(2,==, tor_sscanf("WD40", "%2s%u", s3, &u1)); /* %s%u */
- tt_str_op(s3,==, "WD");
- tt_int_op(40,==, u1);
- tt_int_op(2,==, tor_sscanf("WD40", "%3s%u", s3, &u1)); /* %s%u */
- tt_str_op(s3,==, "WD4");
- tt_int_op(0,==, u1);
- tt_int_op(2,==, tor_sscanf("76trombones", "%6u%9s", &u1, s1)); /* %u%s */
- tt_int_op(76,==, u1);
- tt_str_op(s1,==, "trombones");
- tt_int_op(1,==, tor_sscanf("prettylongstring", "%999s", s1));
- tt_str_op(s1,==, "prettylongstring");
+ tt_int_op(2,OP_EQ, tor_sscanf("hello", "%3s%7s", s1, s2));
+ tt_str_op(s1,OP_EQ, "hel");
+ tt_str_op(s2,OP_EQ, "lo");
+ tt_int_op(2,OP_EQ, tor_sscanf("WD40", "%2s%u", s3, &u1)); /* %s%u */
+ tt_str_op(s3,OP_EQ, "WD");
+ tt_int_op(40,OP_EQ, u1);
+ tt_int_op(2,OP_EQ, tor_sscanf("WD40", "%3s%u", s3, &u1)); /* %s%u */
+ tt_str_op(s3,OP_EQ, "WD4");
+ tt_int_op(0,OP_EQ, u1);
+ tt_int_op(2,OP_EQ, tor_sscanf("76trombones", "%6u%9s", &u1, s1)); /* %u%s */
+ tt_int_op(76,OP_EQ, u1);
+ tt_str_op(s1,OP_EQ, "trombones");
+ tt_int_op(1,OP_EQ, tor_sscanf("prettylongstring", "%999s", s1));
+ tt_str_op(s1,OP_EQ, "prettylongstring");
/* %s doesn't eat spaces */
- tt_int_op(2,==, tor_sscanf("hello world", "%9s %9s", s1, s2));
- tt_str_op(s1,==, "hello");
- tt_str_op(s2,==, "world");
- tt_int_op(2,==, tor_sscanf("bye world?", "%9s %9s", s1, s2));
- tt_str_op(s1,==, "bye");
- tt_str_op(s2,==, "");
- tt_int_op(3,==,
+ tt_int_op(2,OP_EQ, tor_sscanf("hello world", "%9s %9s", s1, s2));
+ tt_str_op(s1,OP_EQ, "hello");
+ tt_str_op(s2,OP_EQ, "world");
+ tt_int_op(2,OP_EQ, tor_sscanf("bye world?", "%9s %9s", s1, s2));
+ tt_str_op(s1,OP_EQ, "bye");
+ tt_str_op(s2,OP_EQ, "");
+ tt_int_op(3,OP_EQ,
tor_sscanf("hi", "%9s%9s%3s", s1, s2, s3)); /* %s can be empty. */
- tt_str_op(s1,==, "hi");
- tt_str_op(s2,==, "");
- tt_str_op(s3,==, "");
+ tt_str_op(s1,OP_EQ, "hi");
+ tt_str_op(s2,OP_EQ, "");
+ tt_str_op(s3,OP_EQ, "");
- tt_int_op(3,==, tor_sscanf("1.2.3", "%u.%u.%u%c", &u1, &u2, &u3, &ch));
- tt_int_op(4,==,
+ tt_int_op(3,OP_EQ, tor_sscanf("1.2.3", "%u.%u.%u%c", &u1, &u2, &u3, &ch));
+ tt_int_op(4,OP_EQ,
tor_sscanf("1.2.3 foobar", "%u.%u.%u%c", &u1, &u2, &u3, &ch));
- tt_int_op(' ',==, ch);
+ tt_int_op(' ',OP_EQ, ch);
r = tor_sscanf("12345 -67890 -1", "%d %ld %d", &int1, &lng1, &int2);
- tt_int_op(r,==, 3);
- tt_int_op(int1,==, 12345);
- tt_int_op(lng1,==, -67890);
- tt_int_op(int2,==, -1);
+ tt_int_op(r,OP_EQ, 3);
+ tt_int_op(int1,OP_EQ, 12345);
+ tt_int_op(lng1,OP_EQ, -67890);
+ tt_int_op(int2,OP_EQ, -1);
#if SIZEOF_INT == 4
/* %u */
/* UINT32_MAX should work */
- tt_int_op(1,==, tor_sscanf("4294967295", "%u", &u1));
- tt_int_op(4294967295U,==, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("4294967295", "%u", &u1));
+ tt_int_op(4294967295U,OP_EQ, u1);
/* But UINT32_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("4294967296", "%u", &u1));
+ tt_int_op(0,OP_EQ, tor_sscanf("4294967296", "%u", &u1));
/* but parsing only 9... */
- tt_int_op(1,==, tor_sscanf("4294967296", "%9u", &u1));
- tt_int_op(429496729U,==, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("4294967296", "%9u", &u1));
+ tt_int_op(429496729U,OP_EQ, u1);
/* %x */
/* UINT32_MAX should work */
- tt_int_op(1,==, tor_sscanf("FFFFFFFF", "%x", &u1));
- tt_int_op(0xFFFFFFFF,==, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFF", "%x", &u1));
+ tt_int_op(0xFFFFFFFF,OP_EQ, u1);
/* But UINT32_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("100000000", "%x", &u1));
+ tt_int_op(0,OP_EQ, tor_sscanf("100000000", "%x", &u1));
/* %d */
/* INT32_MIN and INT32_MAX should work */
r = tor_sscanf("-2147483648. 2147483647.", "%d. %d.", &int1, &int2);
- tt_int_op(r,==, 2);
- tt_int_op(int1,==, -2147483647 - 1);
- tt_int_op(int2,==, 2147483647);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(int1,OP_EQ, -2147483647 - 1);
+ tt_int_op(int2,OP_EQ, 2147483647);
/* But INT32_MIN - 1 and INT32_MAX + 1 shouldn't work */
r = tor_sscanf("-2147483649.", "%d.", &int1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("2147483648.", "%d.", &int1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
/* and the first failure stops further processing */
r = tor_sscanf("-2147483648. 2147483648.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 1);
+ tt_int_op(r,OP_EQ, 1);
r = tor_sscanf("-2147483649. 2147483647.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("2147483648. -2147483649.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
#elif SIZEOF_INT == 8
/* %u */
/* UINT64_MAX should work */
- tt_int_op(1,==, tor_sscanf("18446744073709551615", "%u", &u1));
- tt_int_op(18446744073709551615U,==, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551615", "%u", &u1));
+ tt_int_op(18446744073709551615U,OP_EQ, u1);
/* But UINT64_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("18446744073709551616", "%u", &u1));
+ tt_int_op(0,OP_EQ, tor_sscanf("18446744073709551616", "%u", &u1));
/* but parsing only 19... */
- tt_int_op(1,==, tor_sscanf("18446744073709551616", "%19u", &u1));
- tt_int_op(1844674407370955161U,==, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551616", "%19u", &u1));
+ tt_int_op(1844674407370955161U,OP_EQ, u1);
/* %x */
/* UINT64_MAX should work */
- tt_int_op(1,==, tor_sscanf("FFFFFFFFFFFFFFFF", "%x", &u1));
- tt_int_op(0xFFFFFFFFFFFFFFFF,==, u1);
+ tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFFFFFFFFFF", "%x", &u1));
+ tt_int_op(0xFFFFFFFFFFFFFFFF,OP_EQ, u1);
/* But UINT64_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("10000000000000000", "%x", &u1));
+ tt_int_op(0,OP_EQ, tor_sscanf("10000000000000000", "%x", &u1));
/* %d */
/* INT64_MIN and INT64_MAX should work */
r = tor_sscanf("-9223372036854775808. 9223372036854775807.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 2);
- tt_int_op(int1,==, -9223372036854775807 - 1);
- tt_int_op(int2,==, 9223372036854775807);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(int1,OP_EQ, -9223372036854775807 - 1);
+ tt_int_op(int2,OP_EQ, 9223372036854775807);
/* But INT64_MIN - 1 and INT64_MAX + 1 shouldn't work */
r = tor_sscanf("-9223372036854775809.", "%d.", &int1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("9223372036854775808.", "%d.", &int1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
/* and the first failure stops further processing */
r = tor_sscanf("-9223372036854775808. 9223372036854775808.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 1);
+ tt_int_op(r,OP_EQ, 1);
r = tor_sscanf("-9223372036854775809. 9223372036854775807.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("9223372036854775808. -9223372036854775809.",
"%d. %d.", &int1, &int2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
#endif
#if SIZEOF_LONG == 4
/* %lu */
/* UINT32_MAX should work */
- tt_int_op(1,==, tor_sscanf("4294967295", "%lu", &ulng));
- tt_int_op(4294967295UL,==, ulng);
+ tt_int_op(1,OP_EQ, tor_sscanf("4294967295", "%lu", &ulng));
+ tt_int_op(4294967295UL,OP_EQ, ulng);
/* But UINT32_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("4294967296", "%lu", &ulng));
+ tt_int_op(0,OP_EQ, tor_sscanf("4294967296", "%lu", &ulng));
/* but parsing only 9... */
- tt_int_op(1,==, tor_sscanf("4294967296", "%9lu", &ulng));
- tt_int_op(429496729UL,==, ulng);
+ tt_int_op(1,OP_EQ, tor_sscanf("4294967296", "%9lu", &ulng));
+ tt_int_op(429496729UL,OP_EQ, ulng);
/* %lx */
/* UINT32_MAX should work */
- tt_int_op(1,==, tor_sscanf("FFFFFFFF", "%lx", &ulng));
- tt_int_op(0xFFFFFFFFUL,==, ulng);
+ tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFF", "%lx", &ulng));
+ tt_int_op(0xFFFFFFFFUL,OP_EQ, ulng);
/* But UINT32_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("100000000", "%lx", &ulng));
+ tt_int_op(0,OP_EQ, tor_sscanf("100000000", "%lx", &ulng));
/* %ld */
/* INT32_MIN and INT32_MAX should work */
r = tor_sscanf("-2147483648. 2147483647.", "%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 2);
- tt_int_op(lng1,==, -2147483647L - 1L);
- tt_int_op(lng2,==, 2147483647L);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(lng1,OP_EQ, -2147483647L - 1L);
+ tt_int_op(lng2,OP_EQ, 2147483647L);
/* But INT32_MIN - 1 and INT32_MAX + 1 shouldn't work */
r = tor_sscanf("-2147483649.", "%ld.", &lng1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("2147483648.", "%ld.", &lng1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
/* and the first failure stops further processing */
r = tor_sscanf("-2147483648. 2147483648.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 1);
+ tt_int_op(r,OP_EQ, 1);
r = tor_sscanf("-2147483649. 2147483647.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("2147483648. -2147483649.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
#elif SIZEOF_LONG == 8
/* %lu */
/* UINT64_MAX should work */
- tt_int_op(1,==, tor_sscanf("18446744073709551615", "%lu", &ulng));
- tt_int_op(18446744073709551615UL,==, ulng);
+ tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551615", "%lu", &ulng));
+ tt_int_op(18446744073709551615UL,OP_EQ, ulng);
/* But UINT64_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("18446744073709551616", "%lu", &ulng));
+ tt_int_op(0,OP_EQ, tor_sscanf("18446744073709551616", "%lu", &ulng));
/* but parsing only 19... */
- tt_int_op(1,==, tor_sscanf("18446744073709551616", "%19lu", &ulng));
- tt_int_op(1844674407370955161UL,==, ulng);
+ tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551616", "%19lu", &ulng));
+ tt_int_op(1844674407370955161UL,OP_EQ, ulng);
/* %lx */
/* UINT64_MAX should work */
- tt_int_op(1,==, tor_sscanf("FFFFFFFFFFFFFFFF", "%lx", &ulng));
- tt_int_op(0xFFFFFFFFFFFFFFFFUL,==, ulng);
+ tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFFFFFFFFFF", "%lx", &ulng));
+ tt_int_op(0xFFFFFFFFFFFFFFFFUL,OP_EQ, ulng);
/* But UINT64_MAX + 1 shouldn't work */
- tt_int_op(0,==, tor_sscanf("10000000000000000", "%lx", &ulng));
+ tt_int_op(0,OP_EQ, tor_sscanf("10000000000000000", "%lx", &ulng));
/* %ld */
/* INT64_MIN and INT64_MAX should work */
r = tor_sscanf("-9223372036854775808. 9223372036854775807.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 2);
- tt_int_op(lng1,==, -9223372036854775807L - 1L);
- tt_int_op(lng2,==, 9223372036854775807L);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(lng1,OP_EQ, -9223372036854775807L - 1L);
+ tt_int_op(lng2,OP_EQ, 9223372036854775807L);
/* But INT64_MIN - 1 and INT64_MAX + 1 shouldn't work */
r = tor_sscanf("-9223372036854775809.", "%ld.", &lng1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("9223372036854775808.", "%ld.", &lng1);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
/* and the first failure stops further processing */
r = tor_sscanf("-9223372036854775808. 9223372036854775808.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 1);
+ tt_int_op(r,OP_EQ, 1);
r = tor_sscanf("-9223372036854775809. 9223372036854775807.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
r = tor_sscanf("9223372036854775808. -9223372036854775809.",
"%ld. %ld.", &lng1, &lng2);
- tt_int_op(r,==, 0);
+ tt_int_op(r,OP_EQ, 0);
#endif
r = tor_sscanf("123.456 .000007 -900123123.2000787 00003.2",
"%lf %lf %lf %lf", &d1,&d2,&d3,&d4);
- tt_int_op(r,==, 4);
+ tt_int_op(r,OP_EQ, 4);
test_feq(d1, 123.456);
test_feq(d2, .000007);
test_feq(d3, -900123123.2000787);
@@ -2068,35 +2312,466 @@ test_util_sscanf(void *arg)
;
}
+#define tt_char_op(a,op,b) tt_assert_op_type(a,op,b,char,"%c")
+#define tt_ci_char_op(a,op,b) tt_char_op(tolower(a),op,tolower(b))
+
+#ifndef HAVE_STRNLEN
+static size_t
+strnlen(const char *s, size_t len)
+{
+ const char *p = memchr(s, 0, len);
+ if (!p)
+ return len;
+ return p - s;
+}
+#endif
+
+static void
+test_util_format_time_interval(void *arg)
+{
+ /* use the same sized buffer and integers as tor uses */
+#define DBUF_SIZE 64
+ char dbuf[DBUF_SIZE];
+#define T_ "%ld"
+ long sec, min, hour, day;
+
+ /* we don't care about the exact spelling of the
+ * second(s), minute(s), hour(s), day(s) labels */
+#define LABEL_SIZE 21
+#define L_ "%20s"
+ char label_s[LABEL_SIZE];
+ char label_m[LABEL_SIZE];
+ char label_h[LABEL_SIZE];
+ char label_d[LABEL_SIZE];
+
+#define TL_ T_ " " L_
+
+ int r;
+
+ (void)arg;
+
+ /* In these tests, we're not picky about
+ * spelling or abbreviations */
+
+ /* seconds: 0, 1, 9, 10, 59 */
+
+ /* ignore exact spelling of "second(s)"*/
+ format_time_interval(dbuf, sizeof(dbuf), 0);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &sec, label_s);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(sec,OP_EQ, 0);
+
+ format_time_interval(dbuf, sizeof(dbuf), 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &sec, label_s);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(sec,OP_EQ, 1);
+
+ format_time_interval(dbuf, sizeof(dbuf), 10);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &sec, label_s);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(sec,OP_EQ, 10);
+
+ format_time_interval(dbuf, sizeof(dbuf), 59);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &sec, label_s);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(sec,OP_EQ, 59);
+
+ /* negative seconds are reported as their absolute value */
+
+ format_time_interval(dbuf, sizeof(dbuf), -4);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &sec, label_s);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(sec,OP_EQ, 4);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+
+ format_time_interval(dbuf, sizeof(dbuf), -32);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &sec, label_s);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(sec,OP_EQ, 32);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+
+ /* minutes: 1:00, 1:01, 1:59, 2:00, 2:01, 59:59 */
+
+ /* ignore trailing "0 second(s)", if present */
+ format_time_interval(dbuf, sizeof(dbuf), 60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &min, label_m);
+ tt_int_op(r,OP_EQ, 2);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(min,OP_EQ, 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+
+ /* ignore exact spelling of "minute(s)," and "second(s)" */
+ format_time_interval(dbuf, sizeof(dbuf), 60 + 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &min, label_m, &sec, label_s);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(min,OP_EQ, 1);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(sec,OP_EQ, 1);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+
+ format_time_interval(dbuf, sizeof(dbuf), 60*2 - 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &min, label_m, &sec, label_s);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(min,OP_EQ, 1);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(sec,OP_EQ, 59);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+
+ /* ignore trailing "0 second(s)", if present */
+ format_time_interval(dbuf, sizeof(dbuf), 60*2);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &min, label_m);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(min,OP_EQ, 2);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* ignore exact spelling of "minute(s)," and "second(s)" */
+ format_time_interval(dbuf, sizeof(dbuf), 60*2 + 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &min, label_m, &sec, label_s);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(min,OP_EQ, 2);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(sec,OP_EQ, 1);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+
+ format_time_interval(dbuf, sizeof(dbuf), 60*60 - 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &min, label_m, &sec, label_s);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(min,OP_EQ, 59);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(sec,OP_EQ, 59);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+
+ /* negative minutes are reported as their absolute value */
+
+ /* ignore trailing "0 second(s)", if present */
+ format_time_interval(dbuf, sizeof(dbuf), -3*60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &min, label_m);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(min,OP_EQ, 3);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* ignore exact spelling of "minute(s)," and "second(s)" */
+ format_time_interval(dbuf, sizeof(dbuf), -96);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &min, label_m, &sec, label_s);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(min,OP_EQ, 1);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(sec,OP_EQ, 36);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+
+ format_time_interval(dbuf, sizeof(dbuf), -2815);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &min, label_m, &sec, label_s);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(min,OP_EQ, 46);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ tt_int_op(sec,OP_EQ, 55);
+ tt_ci_char_op(label_s[0],OP_EQ, 's');
+
+ /* hours: 1:00, 1:00:01, 1:01, 23:59, 23:59:59 */
+ /* always ignore trailing seconds, if present */
+
+ /* ignore trailing "0 minute(s)" etc., if present */
+ format_time_interval(dbuf, sizeof(dbuf), 60*60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &hour, label_h);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(hour,OP_EQ, 1);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+
+ format_time_interval(dbuf, sizeof(dbuf), 60*60 + 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &hour, label_h);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(hour,OP_EQ, 1);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+
+ /* ignore exact spelling of "hour(s)," etc. */
+ format_time_interval(dbuf, sizeof(dbuf), 60*60 + 60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(hour,OP_EQ, 1);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 1);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 - 60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(hour,OP_EQ, 23);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 59);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 - 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(hour,OP_EQ, 23);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 59);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* negative hours are reported as their absolute value */
+
+ /* ignore exact spelling of "hour(s)," etc., if present */
+ format_time_interval(dbuf, sizeof(dbuf), -2*60*60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &hour, label_h);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(hour,OP_EQ, 2);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+
+ format_time_interval(dbuf, sizeof(dbuf), -75804);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(hour,OP_EQ, 21);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 3);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* days: 1:00, 1:00:00:01, 1:00:01, 1:01 */
+ /* always ignore trailing seconds, if present */
+
+ /* ignore trailing "0 hours(s)" etc., if present */
+ format_time_interval(dbuf, sizeof(dbuf), 24*60*60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &day, label_d);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(day,OP_EQ, 1);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+
+ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 + 1);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_, &day, label_d);
+ tt_int_op(r,OP_EQ, 2);
+ tt_int_op(day,OP_EQ, 1);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+
+ /* ignore exact spelling of "days(s)," etc. */
+ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 + 60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ if (r == -1) {
+ /* ignore 0 hours(s), if present */
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &day, label_d, &min, label_m);
+ }
+ tt_assert(r == 4 || r == 6);
+ tt_int_op(day,OP_EQ, 1);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ if (r == 6) {
+ tt_int_op(hour,OP_EQ, 0);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ }
+ tt_int_op(min,OP_EQ, 1);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* ignore trailing "0 minutes(s)" etc., if present */
+ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 + 60*60);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_,
+ &day, label_d, &hour, label_h);
+ tt_int_op(r,OP_EQ, 4);
+ tt_int_op(day,OP_EQ, 1);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 1);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+
+ /* negative days are reported as their absolute value */
+
+ format_time_interval(dbuf, sizeof(dbuf), -21936184);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 253);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 21);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 23);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* periods > 1 year are reported in days (warn?) */
+
+ /* ignore exact spelling of "days(s)," etc., if present */
+ format_time_interval(dbuf, sizeof(dbuf), 758635154);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 8780);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 11);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 59);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+ /* negative periods > 1 year are reported in days (warn?) */
+
+ format_time_interval(dbuf, sizeof(dbuf), -1427014922);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 16516);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 9);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 2);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+
+#if SIZEOF_LONG == 4 || SIZEOF_LONG == 8
+
+ /* We can try INT32_MIN/MAX */
+ /* Always ignore second(s) */
+
+ /* INT32_MAX */
+ format_time_interval(dbuf, sizeof(dbuf), 2147483647);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 24855);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 3);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 14);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ /* and 7 seconds - ignored */
+
+ /* INT32_MIN: check that we get the absolute value of interval,
+ * which doesn't actually fit in int32_t.
+ * We expect INT32_MAX or INT32_MAX + 1 with 64 bit longs */
+ format_time_interval(dbuf, sizeof(dbuf), -2147483647L - 1L);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 24855);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 3);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 14);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ /* and 7 or 8 seconds - ignored */
+
+#endif
+
+#if SIZEOF_LONG == 8
+
+ /* We can try INT64_MIN/MAX */
+ /* Always ignore second(s) */
+
+ /* INT64_MAX */
+ format_time_interval(dbuf, sizeof(dbuf), 9223372036854775807L);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 106751991167300L);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 15);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 30);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ /* and 7 seconds - ignored */
+
+ /* INT64_MIN: check that we get the absolute value of interval,
+ * which doesn't actually fit in int64_t.
+ * We expect INT64_MAX */
+ format_time_interval(dbuf, sizeof(dbuf),
+ -9223372036854775807L - 1L);
+ tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1);
+ r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_,
+ &day, label_d, &hour, label_h, &min, label_m);
+ tt_int_op(r,OP_EQ, 6);
+ tt_int_op(day,OP_EQ, 106751991167300L);
+ tt_ci_char_op(label_d[0],OP_EQ, 'd');
+ tt_int_op(hour,OP_EQ, 15);
+ tt_ci_char_op(label_h[0],OP_EQ, 'h');
+ tt_int_op(min,OP_EQ, 30);
+ tt_ci_char_op(label_m[0],OP_EQ, 'm');
+ /* and 7 or 8 seconds - ignored */
+
+#endif
+
+ done:
+ ;
+}
+
+#undef tt_char_op
+#undef tt_ci_char_op
+#undef DBUF_SIZE
+#undef T_
+#undef LABEL_SIZE
+#undef L_
+#undef TL_
+
static void
test_util_path_is_relative(void *arg)
{
/* OS-independent tests */
(void)arg;
- tt_int_op(1,==, path_is_relative(""));
- tt_int_op(1,==, path_is_relative("dir"));
- tt_int_op(1,==, path_is_relative("dir/"));
- tt_int_op(1,==, path_is_relative("./dir"));
- tt_int_op(1,==, path_is_relative("../dir"));
+ tt_int_op(1,OP_EQ, path_is_relative(""));
+ tt_int_op(1,OP_EQ, path_is_relative("dir"));
+ tt_int_op(1,OP_EQ, path_is_relative("dir/"));
+ tt_int_op(1,OP_EQ, path_is_relative("./dir"));
+ tt_int_op(1,OP_EQ, path_is_relative("../dir"));
- tt_int_op(0,==, path_is_relative("/"));
- tt_int_op(0,==, path_is_relative("/dir"));
- tt_int_op(0,==, path_is_relative("/dir/"));
+ tt_int_op(0,OP_EQ, path_is_relative("/"));
+ tt_int_op(0,OP_EQ, path_is_relative("/dir"));
+ tt_int_op(0,OP_EQ, path_is_relative("/dir/"));
/* Windows */
#ifdef _WIN32
/* I don't have Windows so I can't test this, hence the "#ifdef
0". These are tests that look useful, so please try to get them
running and uncomment if it all works as it should */
- tt_int_op(1,==, path_is_relative("dir"));
- tt_int_op(1,==, path_is_relative("dir\\"));
- tt_int_op(1,==, path_is_relative("dir\\a:"));
- tt_int_op(1,==, path_is_relative("dir\\a:\\"));
- tt_int_op(1,==, path_is_relative("http:\\dir"));
-
- tt_int_op(0,==, path_is_relative("\\dir"));
- tt_int_op(0,==, path_is_relative("a:\\dir"));
- tt_int_op(0,==, path_is_relative("z:\\dir"));
+ tt_int_op(1,OP_EQ, path_is_relative("dir"));
+ tt_int_op(1,OP_EQ, path_is_relative("dir\\"));
+ tt_int_op(1,OP_EQ, path_is_relative("dir\\a:"));
+ tt_int_op(1,OP_EQ, path_is_relative("dir\\a:\\"));
+ tt_int_op(1,OP_EQ, path_is_relative("http:\\dir"));
+
+ tt_int_op(0,OP_EQ, path_is_relative("\\dir"));
+ tt_int_op(0,OP_EQ, path_is_relative("a:\\dir"));
+ tt_int_op(0,OP_EQ, path_is_relative("z:\\dir"));
#endif
done:
@@ -2125,7 +2800,7 @@ test_util_mempool(void *arg)
tt_assert(pool);
tt_assert(pool->new_chunk_capacity >= 10);
tt_assert(pool->item_alloc_size >= sizeof(void*)+241);
- tt_int_op(pool->item_alloc_size & 0x03,==, 0);
+ tt_int_op(pool->item_alloc_size & 0x03,OP_EQ, 0);
tt_assert(pool->new_chunk_capacity < 60);
allocated = smartlist_new();
@@ -2189,16 +2864,16 @@ test_util_memarea(void *arg)
tt_assert(p1+64 <= p2);
tt_assert(p2+52 <= p3);
/* Make sure we aligned. */
- tt_int_op(((uintptr_t)p1) % sizeof(void*),==, 0);
- tt_int_op(((uintptr_t)p2) % sizeof(void*),==, 0);
- tt_int_op(((uintptr_t)p3) % sizeof(void*),==, 0);
+ tt_int_op(((uintptr_t)p1) % sizeof(void*),OP_EQ, 0);
+ tt_int_op(((uintptr_t)p2) % sizeof(void*),OP_EQ, 0);
+ tt_int_op(((uintptr_t)p3) % sizeof(void*),OP_EQ, 0);
tt_assert(!memarea_owns_ptr(area, p3+8192));
tt_assert(!memarea_owns_ptr(area, p3+30));
tt_assert(tor_mem_is_zero(p2, 52));
/* Make sure we don't overalign. */
p1 = memarea_alloc(area, 1);
p2 = memarea_alloc(area, 1);
- tt_ptr_op(p1+sizeof(void*),==, p2);
+ tt_ptr_op(p1+sizeof(void*),OP_EQ, p2);
{
malloced_ptr = tor_malloc(64);
tt_assert(!memarea_owns_ptr(area, malloced_ptr));
@@ -2211,7 +2886,7 @@ test_util_memarea(void *arg)
crypto_rand((char*)malloced_ptr, 64);
p1 = memarea_memdup(area, malloced_ptr, 64);
tt_assert(p1 != malloced_ptr);
- tt_mem_op(p1,==, malloced_ptr, 64);
+ tt_mem_op(p1,OP_EQ, malloced_ptr, 64);
tor_free(malloced_ptr);
}
@@ -2220,8 +2895,8 @@ test_util_memarea(void *arg)
p2 = memarea_strdup(area, "abcd");
tt_assert(p1);
tt_assert(p2);
- tt_str_op(p1,==, "");
- tt_str_op(p2,==, "abcd");
+ tt_str_op(p1,OP_EQ, "");
+ tt_str_op(p2,OP_EQ, "abcd");
/* memarea_strndup. */
{
@@ -2230,20 +2905,20 @@ test_util_memarea(void *arg)
size_t len = strlen(s);
p1 = memarea_strndup(area, s, 1000);
p2 = memarea_strndup(area, s, 10);
- tt_str_op(p1,==, s);
+ tt_str_op(p1,OP_EQ, s);
tt_assert(p2 >= p1 + len + 1);
- tt_mem_op(s,==, p2, 10);
- tt_int_op(p2[10],==, '\0');
+ tt_mem_op(s,OP_EQ, p2, 10);
+ tt_int_op(p2[10],OP_EQ, '\0');
p3 = memarea_strndup(area, s, len);
- tt_str_op(p3,==, s);
+ tt_str_op(p3,OP_EQ, s);
p3 = memarea_strndup(area, s, len-1);
- tt_mem_op(s,==, p3, len-1);
- tt_int_op(p3[len-1],==, '\0');
+ tt_mem_op(s,OP_EQ, p3, len-1);
+ tt_int_op(p3[len-1],OP_EQ, '\0');
}
memarea_clear(area);
p1 = memarea_alloc(area, 1);
- tt_ptr_op(p1,==, p1_orig);
+ tt_ptr_op(p1,OP_EQ, p1_orig);
memarea_clear(area);
/* Check for running over an area's size. */
@@ -2276,22 +2951,22 @@ test_util_datadir(void *arg)
temp_dir = get_datadir_fname(NULL);
f = get_datadir_fname("state");
tor_snprintf(buf, sizeof(buf), "%s"PATH_SEPARATOR"state", temp_dir);
- tt_str_op(f,==, buf);
+ tt_str_op(f,OP_EQ, buf);
tor_free(f);
f = get_datadir_fname2("cache", "thingy");
tor_snprintf(buf, sizeof(buf),
"%s"PATH_SEPARATOR"cache"PATH_SEPARATOR"thingy", temp_dir);
- tt_str_op(f,==, buf);
+ tt_str_op(f,OP_EQ, buf);
tor_free(f);
f = get_datadir_fname2_suffix("cache", "thingy", ".foo");
tor_snprintf(buf, sizeof(buf),
"%s"PATH_SEPARATOR"cache"PATH_SEPARATOR"thingy.foo", temp_dir);
- tt_str_op(f,==, buf);
+ tt_str_op(f,OP_EQ, buf);
tor_free(f);
f = get_datadir_fname_suffix("cache", ".foo");
tor_snprintf(buf, sizeof(buf), "%s"PATH_SEPARATOR"cache.foo",
temp_dir);
- tt_str_op(f,==, buf);
+ tt_str_op(f,OP_EQ, buf);
done:
tor_free(f);
@@ -2332,43 +3007,43 @@ test_util_strtok(void *arg)
"%sthey.seemed;;their!.own;most.perfect;monument%s",pad2,pad2);
/* -- "Year's End", Richard Wilbur */
- tt_str_op("Graved",==, tor_strtok_r_impl(buf, " ", &cp1));
- tt_str_op("they",==, tor_strtok_r_impl(buf2, ".!..;!", &cp2));
+ tt_str_op("Graved",OP_EQ, tor_strtok_r_impl(buf, " ", &cp1));
+ tt_str_op("they",OP_EQ, tor_strtok_r_impl(buf2, ".!..;!", &cp2));
#define S1() tor_strtok_r_impl(NULL, " ", &cp1)
#define S2() tor_strtok_r_impl(NULL, ".!..;!", &cp2)
- tt_str_op("on",==, S1());
- tt_str_op("the",==, S1());
- tt_str_op("dark",==, S1());
- tt_str_op("seemed",==, S2());
- tt_str_op("their",==, S2());
- tt_str_op("own",==, S2());
- tt_str_op("in",==, S1());
- tt_str_op("gestures",==, S1());
- tt_str_op("of",==, S1());
- tt_str_op("most",==, S2());
- tt_str_op("perfect",==, S2());
- tt_str_op("descent",==, S1());
- tt_str_op("monument",==, S2());
- tt_ptr_op(NULL,==, S1());
- tt_ptr_op(NULL,==, S2());
+ tt_str_op("on",OP_EQ, S1());
+ tt_str_op("the",OP_EQ, S1());
+ tt_str_op("dark",OP_EQ, S1());
+ tt_str_op("seemed",OP_EQ, S2());
+ tt_str_op("their",OP_EQ, S2());
+ tt_str_op("own",OP_EQ, S2());
+ tt_str_op("in",OP_EQ, S1());
+ tt_str_op("gestures",OP_EQ, S1());
+ tt_str_op("of",OP_EQ, S1());
+ tt_str_op("most",OP_EQ, S2());
+ tt_str_op("perfect",OP_EQ, S2());
+ tt_str_op("descent",OP_EQ, S1());
+ tt_str_op("monument",OP_EQ, S2());
+ tt_ptr_op(NULL,OP_EQ, S1());
+ tt_ptr_op(NULL,OP_EQ, S2());
}
buf[0] = 0;
- tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, " ", &cp1));
- tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, "!", &cp1));
+ tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, " ", &cp1));
+ tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, "!", &cp1));
strlcpy(buf, "Howdy!", sizeof(buf));
- tt_str_op("Howdy",==, tor_strtok_r_impl(buf, "!", &cp1));
- tt_ptr_op(NULL,==, tor_strtok_r_impl(NULL, "!", &cp1));
+ tt_str_op("Howdy",OP_EQ, tor_strtok_r_impl(buf, "!", &cp1));
+ tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(NULL, "!", &cp1));
strlcpy(buf, " ", sizeof(buf));
- tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, " ", &cp1));
+ tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, " ", &cp1));
strlcpy(buf, " ", sizeof(buf));
- tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, " ", &cp1));
+ tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, " ", &cp1));
strlcpy(buf, "something ", sizeof(buf));
- tt_str_op("something",==, tor_strtok_r_impl(buf, " ", &cp1));
- tt_ptr_op(NULL,==, tor_strtok_r_impl(NULL, ";", &cp1));
+ tt_str_op("something",OP_EQ, tor_strtok_r_impl(buf, " ", &cp1));
+ tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(NULL, ";", &cp1));
done:
;
}
@@ -2388,24 +3063,26 @@ test_util_find_str_at_start_of_line(void *ptr)
(void)ptr;
- tt_ptr_op(long_string,==, find_str_at_start_of_line(long_string, ""));
- tt_ptr_op(NULL,==, find_str_at_start_of_line(short_string, "nonsense"));
- tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "nonsense"));
- tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "\n"));
- tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "how "));
- tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "kitty"));
- tt_ptr_op(long_string,==, find_str_at_start_of_line(long_string, "h"));
- tt_ptr_op(long_string,==, find_str_at_start_of_line(long_string, "how"));
- tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "he"));
- tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "hell"));
- tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "hello k"));
- tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "hello kitty\n"));
- tt_ptr_op(line2,==,
+ tt_ptr_op(long_string,OP_EQ, find_str_at_start_of_line(long_string, ""));
+ tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(short_string, "nonsense"));
+ tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "nonsense"));
+ tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "\n"));
+ tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "how "));
+ tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "kitty"));
+ tt_ptr_op(long_string,OP_EQ, find_str_at_start_of_line(long_string, "h"));
+ tt_ptr_op(long_string,OP_EQ, find_str_at_start_of_line(long_string, "how"));
+ tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "he"));
+ tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hell"));
+ tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello k"));
+ tt_ptr_op(line2,OP_EQ,
+ find_str_at_start_of_line(long_string, "hello kitty\n"));
+ tt_ptr_op(line2,OP_EQ,
find_str_at_start_of_line(long_string, "hello kitty\nt"));
- tt_ptr_op(line3,==, find_str_at_start_of_line(long_string, "third"));
- tt_ptr_op(line3,==, find_str_at_start_of_line(long_string, "third line"));
- tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "third line\n"));
- tt_ptr_op(short_line2,==, find_str_at_start_of_line(short_string,
+ tt_ptr_op(line3,OP_EQ, find_str_at_start_of_line(long_string, "third"));
+ tt_ptr_op(line3,OP_EQ, find_str_at_start_of_line(long_string, "third line"));
+ tt_ptr_op(NULL, OP_EQ,
+ find_str_at_start_of_line(long_string, "third line\n"));
+ tt_ptr_op(short_line2,OP_EQ, find_str_at_start_of_line(short_string,
"second line\n"));
done:
;
@@ -2416,25 +3093,25 @@ test_util_string_is_C_identifier(void *ptr)
{
(void)ptr;
- tt_int_op(1,==, string_is_C_identifier("string_is_C_identifier"));
- tt_int_op(1,==, string_is_C_identifier("_string_is_C_identifier"));
- tt_int_op(1,==, string_is_C_identifier("_"));
- tt_int_op(1,==, string_is_C_identifier("i"));
- tt_int_op(1,==, string_is_C_identifier("_____"));
- tt_int_op(1,==, string_is_C_identifier("__00__"));
- tt_int_op(1,==, string_is_C_identifier("__init__"));
- tt_int_op(1,==, string_is_C_identifier("_0"));
- tt_int_op(1,==, string_is_C_identifier("_0string_is_C_identifier"));
- tt_int_op(1,==, string_is_C_identifier("_0"));
-
- tt_int_op(0,==, string_is_C_identifier("0_string_is_C_identifier"));
- tt_int_op(0,==, string_is_C_identifier("0"));
- tt_int_op(0,==, string_is_C_identifier(""));
- tt_int_op(0,==, string_is_C_identifier(";"));
- tt_int_op(0,==, string_is_C_identifier("i;"));
- tt_int_op(0,==, string_is_C_identifier("_;"));
- tt_int_op(0,==, string_is_C_identifier("í"));
- tt_int_op(0,==, string_is_C_identifier("ñ"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("string_is_C_identifier"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("_string_is_C_identifier"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("_"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("i"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("_____"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("__00__"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("__init__"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("_0"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("_0string_is_C_identifier"));
+ tt_int_op(1,OP_EQ, string_is_C_identifier("_0"));
+
+ tt_int_op(0,OP_EQ, string_is_C_identifier("0_string_is_C_identifier"));
+ tt_int_op(0,OP_EQ, string_is_C_identifier("0"));
+ tt_int_op(0,OP_EQ, string_is_C_identifier(""));
+ tt_int_op(0,OP_EQ, string_is_C_identifier(";"));
+ tt_int_op(0,OP_EQ, string_is_C_identifier("i;"));
+ tt_int_op(0,OP_EQ, string_is_C_identifier("_;"));
+ tt_int_op(0,OP_EQ, string_is_C_identifier("í"));
+ tt_int_op(0,OP_EQ, string_is_C_identifier("ñ"));
done:
;
@@ -2452,29 +3129,29 @@ test_util_asprintf(void *ptr)
/* simple string */
r = tor_asprintf(&cp, "simple string 100%% safe");
tt_assert(cp);
- tt_str_op("simple string 100% safe",==, cp);
- tt_int_op(strlen(cp),==, r);
+ tt_str_op("simple string 100% safe",OP_EQ, cp);
+ tt_int_op(strlen(cp),OP_EQ, r);
tor_free(cp);
/* empty string */
r = tor_asprintf(&cp, "%s", "");
tt_assert(cp);
- tt_str_op("",==, cp);
- tt_int_op(strlen(cp),==, r);
+ tt_str_op("",OP_EQ, cp);
+ tt_int_op(strlen(cp),OP_EQ, r);
tor_free(cp);
/* numbers (%i) */
r = tor_asprintf(&cp, "I like numbers-%2i, %i, etc.", -1, 2);
tt_assert(cp);
- tt_str_op("I like numbers--1, 2, etc.",==, cp);
- tt_int_op(strlen(cp),==, r);
+ tt_str_op("I like numbers--1, 2, etc.",OP_EQ, cp);
+ tt_int_op(strlen(cp),OP_EQ, r);
/* don't free cp; next test uses it. */
/* numbers (%d) */
r = tor_asprintf(&cp2, "First=%d, Second=%d", 101, 202);
tt_assert(cp2);
- tt_int_op(strlen(cp2),==, r);
- tt_str_op("First=101, Second=202",==, cp2);
+ tt_int_op(strlen(cp2),OP_EQ, r);
+ tt_str_op("First=101, Second=202",OP_EQ, cp2);
tt_assert(cp != cp2);
tor_free(cp);
tor_free(cp2);
@@ -2482,17 +3159,17 @@ test_util_asprintf(void *ptr)
/* Glass-box test: a string exactly 128 characters long. */
r = tor_asprintf(&cp, "Lorem1: %sLorem2: %s", LOREMIPSUM, LOREMIPSUM);
tt_assert(cp);
- tt_int_op(128,==, r);
- tt_int_op(cp[128], ==, '\0');
- tt_str_op("Lorem1: "LOREMIPSUM"Lorem2: "LOREMIPSUM,==, cp);
+ tt_int_op(128,OP_EQ, r);
+ tt_int_op(cp[128], OP_EQ, '\0');
+ tt_str_op("Lorem1: "LOREMIPSUM"Lorem2: "LOREMIPSUM,OP_EQ, cp);
tor_free(cp);
/* String longer than 128 characters */
r = tor_asprintf(&cp, "1: %s 2: %s 3: %s",
LOREMIPSUM, LOREMIPSUM, LOREMIPSUM);
tt_assert(cp);
- tt_int_op(strlen(cp),==, r);
- tt_str_op("1: "LOREMIPSUM" 2: "LOREMIPSUM" 3: "LOREMIPSUM,==, cp);
+ tt_int_op(strlen(cp),OP_EQ, r);
+ tt_str_op("1: "LOREMIPSUM" 2: "LOREMIPSUM" 3: "LOREMIPSUM,OP_EQ, cp);
done:
tor_free(cp);
@@ -2513,9 +3190,9 @@ test_util_listdir(void *ptr)
dir1 = tor_strdup(get_fname("some-directory"));
dirname = tor_strdup(get_fname(NULL));
- tt_int_op(0,==, write_str_to_file(fname1, "X\n", 0));
- tt_int_op(0,==, write_str_to_file(fname2, "Y\n", 0));
- tt_int_op(0,==, write_str_to_file(fname3, "Z\n", 0));
+ tt_int_op(0,OP_EQ, write_str_to_file(fname1, "X\n", 0));
+ tt_int_op(0,OP_EQ, write_str_to_file(fname2, "Y\n", 0));
+ tt_int_op(0,OP_EQ, write_str_to_file(fname3, "Z\n", 0));
#ifdef _WIN32
r = mkdir(dir1);
#else
@@ -2561,9 +3238,9 @@ test_util_parent_dir(void *ptr)
int ok; \
cp = tor_strdup(input); \
ok = get_parent_directory(cp); \
- tt_int_op(expect_ok, ==, ok); \
+ tt_int_op(expect_ok, OP_EQ, ok); \
if (ok==0) \
- tt_str_op(output, ==, cp); \
+ tt_str_op(output, OP_EQ, cp); \
tor_free(cp); \
} while (0);
@@ -2612,32 +3289,32 @@ test_util_ftruncate(void *ptr)
fname = get_fname("ftruncate");
fd = tor_open_cloexec(fname, O_WRONLY|O_CREAT, 0600);
- tt_int_op(fd, >=, 0);
+ tt_int_op(fd, OP_GE, 0);
/* Make the file be there. */
- tt_int_op(strlen(message), ==, write_all(fd, message, strlen(message), 0));
- tt_int_op((int)tor_fd_getpos(fd), ==, strlen(message));
- tt_int_op(0, ==, fstat(fd, &st));
- tt_int_op((int)st.st_size, ==, strlen(message));
+ tt_int_op(strlen(message), OP_EQ, write_all(fd, message, strlen(message),0));
+ tt_int_op((int)tor_fd_getpos(fd), OP_EQ, strlen(message));
+ tt_int_op(0, OP_EQ, fstat(fd, &st));
+ tt_int_op((int)st.st_size, OP_EQ, strlen(message));
/* Truncate and see if it got truncated */
- tt_int_op(0, ==, tor_ftruncate(fd));
- tt_int_op((int)tor_fd_getpos(fd), ==, 0);
- tt_int_op(0, ==, fstat(fd, &st));
- tt_int_op((int)st.st_size, ==, 0);
+ tt_int_op(0, OP_EQ, tor_ftruncate(fd));
+ tt_int_op((int)tor_fd_getpos(fd), OP_EQ, 0);
+ tt_int_op(0, OP_EQ, fstat(fd, &st));
+ tt_int_op((int)st.st_size, OP_EQ, 0);
/* Replace, and see if it got replaced */
- tt_int_op(strlen(message2), ==,
+ tt_int_op(strlen(message2), OP_EQ,
write_all(fd, message2, strlen(message2), 0));
- tt_int_op((int)tor_fd_getpos(fd), ==, strlen(message2));
- tt_int_op(0, ==, fstat(fd, &st));
- tt_int_op((int)st.st_size, ==, strlen(message2));
+ tt_int_op((int)tor_fd_getpos(fd), OP_EQ, strlen(message2));
+ tt_int_op(0, OP_EQ, fstat(fd, &st));
+ tt_int_op((int)st.st_size, OP_EQ, strlen(message2));
close(fd);
fd = -1;
buf = read_file_to_str(fname, 0, NULL);
- tt_str_op(message2, ==, buf);
+ tt_str_op(message2, OP_EQ, buf);
done:
if (fd >= 0)
@@ -2676,53 +3353,53 @@ test_util_exit_status(void *ptr)
(void)ptr;
clear_hex_errno(hex_errno);
- tt_str_op("",==, hex_errno);
+ tt_str_op("",OP_EQ, hex_errno);
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0, 0, hex_errno);
- tt_str_op("0/0\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
+ tt_str_op("0/0\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
#if SIZEOF_INT == 4
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0, 0x7FFFFFFF, hex_errno);
- tt_str_op("0/7FFFFFFF\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
+ tt_str_op("0/7FFFFFFF\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0xFF, -0x80000000, hex_errno);
- tt_str_op("FF/-80000000\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
- tt_int_op(n,==, HEX_ERRNO_SIZE);
+ tt_str_op("FF/-80000000\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
+ tt_int_op(n,OP_EQ, HEX_ERRNO_SIZE);
#elif SIZEOF_INT == 8
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0, 0x7FFFFFFFFFFFFFFF, hex_errno);
- tt_str_op("0/7FFFFFFFFFFFFFFF\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
+ tt_str_op("0/7FFFFFFFFFFFFFFF\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0xFF, -0x8000000000000000, hex_errno);
- tt_str_op("FF/-8000000000000000\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
- tt_int_op(n,==, HEX_ERRNO_SIZE);
+ tt_str_op("FF/-8000000000000000\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
+ tt_int_op(n,OP_EQ, HEX_ERRNO_SIZE);
#endif
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0x7F, 0, hex_errno);
- tt_str_op("7F/0\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
+ tt_str_op("7F/0\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0x08, -0x242, hex_errno);
- tt_str_op("8/-242\n",==, hex_errno);
- tt_int_op(n,==, strlen(hex_errno));
+ tt_str_op("8/-242\n",OP_EQ, hex_errno);
+ tt_int_op(n,OP_EQ, strlen(hex_errno));
clear_hex_errno(hex_errno);
- tt_str_op("",==, hex_errno);
+ tt_str_op("",OP_EQ, hex_errno);
done:
;
@@ -2749,83 +3426,83 @@ test_util_fgets_eagain(void *ptr)
/* Set up a pipe to test on */
retval = pipe(test_pipe);
- tt_int_op(retval, ==, 0);
+ tt_int_op(retval, OP_EQ, 0);
/* Set up the read-end to be non-blocking */
retval = fcntl(test_pipe[0], F_SETFL, O_NONBLOCK);
- tt_int_op(retval, ==, 0);
+ tt_int_op(retval, OP_EQ, 0);
/* Open it as a stdio stream */
test_stream = fdopen(test_pipe[0], "r");
- tt_ptr_op(test_stream, !=, NULL);
+ tt_ptr_op(test_stream, OP_NE, NULL);
/* Send in a partial line */
retlen = write(test_pipe[1], "A", 1);
- tt_int_op(retlen, ==, 1);
+ tt_int_op(retlen, OP_EQ, 1);
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, EAGAIN);
- tt_ptr_op(retptr, ==, buf);
- tt_str_op(buf, ==, "A");
+ tt_int_op(errno, OP_EQ, EAGAIN);
+ tt_ptr_op(retptr, OP_EQ, buf);
+ tt_str_op(buf, OP_EQ, "A");
errno = 0;
/* Send in the rest */
retlen = write(test_pipe[1], "B\n", 2);
- tt_int_op(retlen, ==, 2);
+ tt_int_op(retlen, OP_EQ, 2);
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, 0);
- tt_ptr_op(retptr, ==, buf);
- tt_str_op(buf, ==, "B\n");
+ tt_int_op(errno, OP_EQ, 0);
+ tt_ptr_op(retptr, OP_EQ, buf);
+ tt_str_op(buf, OP_EQ, "B\n");
errno = 0;
/* Send in a full line */
retlen = write(test_pipe[1], "CD\n", 3);
- tt_int_op(retlen, ==, 3);
+ tt_int_op(retlen, OP_EQ, 3);
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, 0);
- tt_ptr_op(retptr, ==, buf);
- tt_str_op(buf, ==, "CD\n");
+ tt_int_op(errno, OP_EQ, 0);
+ tt_ptr_op(retptr, OP_EQ, buf);
+ tt_str_op(buf, OP_EQ, "CD\n");
errno = 0;
/* Send in a partial line */
retlen = write(test_pipe[1], "E", 1);
- tt_int_op(retlen, ==, 1);
+ tt_int_op(retlen, OP_EQ, 1);
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, EAGAIN);
- tt_ptr_op(retptr, ==, buf);
- tt_str_op(buf, ==, "E");
+ tt_int_op(errno, OP_EQ, EAGAIN);
+ tt_ptr_op(retptr, OP_EQ, buf);
+ tt_str_op(buf, OP_EQ, "E");
errno = 0;
/* Send in the rest */
retlen = write(test_pipe[1], "F\n", 2);
- tt_int_op(retlen, ==, 2);
+ tt_int_op(retlen, OP_EQ, 2);
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, 0);
- tt_ptr_op(retptr, ==, buf);
- tt_str_op(buf, ==, "F\n");
+ tt_int_op(errno, OP_EQ, 0);
+ tt_ptr_op(retptr, OP_EQ, buf);
+ tt_str_op(buf, OP_EQ, "F\n");
errno = 0;
/* Send in a full line and close */
retlen = write(test_pipe[1], "GH", 2);
- tt_int_op(retlen, ==, 2);
+ tt_int_op(retlen, OP_EQ, 2);
retval = close(test_pipe[1]);
- tt_int_op(retval, ==, 0);
+ tt_int_op(retval, OP_EQ, 0);
test_pipe[1] = -1;
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, 0);
- tt_ptr_op(retptr, ==, buf);
- tt_str_op(buf, ==, "GH");
+ tt_int_op(errno, OP_EQ, 0);
+ tt_ptr_op(retptr, OP_EQ, buf);
+ tt_str_op(buf, OP_EQ, "GH");
errno = 0;
/* Check for EOF */
retptr = fgets(buf, sizeof(buf), test_stream);
- tt_int_op(errno, ==, 0);
- tt_ptr_op(retptr, ==, NULL);
+ tt_int_op(errno, OP_EQ, 0);
+ tt_ptr_op(retptr, OP_EQ, NULL);
retval = feof(test_stream);
- tt_int_op(retval, !=, 0);
+ tt_int_op(retval, OP_NE, 0);
errno = 0;
/* Check that buf is unchanged according to C99 and C11 */
- tt_str_op(buf, ==, "GH");
+ tt_str_op(buf, OP_EQ, "GH");
done:
if (test_stream != NULL)
@@ -2850,6 +3527,30 @@ test_util_fgets_eagain(void *ptr)
#define EOL "\n"
#endif
+#ifdef _WIN32
+/* I've assumed Windows doesn't have the gap between fork and exec
+ * that causes the race condition on unix-like platforms */
+#define MATCH_PROCESS_STATUS(s1,s2) ((s1) == (s2))
+
+#else
+/* work around a race condition of the timing of SIGCHLD handler updates
+ * to the process_handle's fields, and checks of those fields
+ *
+ * TODO: Once we can signal failure to exec, change PROCESS_STATUS_RUNNING to
+ * PROCESS_STATUS_ERROR (and similarly with *_OR_NOTRUNNING) */
+#define PROCESS_STATUS_RUNNING_OR_NOTRUNNING (PROCESS_STATUS_RUNNING+1)
+#define IS_RUNNING_OR_NOTRUNNING(s) \
+ ((s) == PROCESS_STATUS_RUNNING || (s) == PROCESS_STATUS_NOTRUNNING)
+/* well, this is ugly */
+#define MATCH_PROCESS_STATUS(s1,s2) \
+ ( (s1) == (s2) \
+ ||((s1) == PROCESS_STATUS_RUNNING_OR_NOTRUNNING \
+ && IS_RUNNING_OR_NOTRUNNING(s2)) \
+ ||((s2) == PROCESS_STATUS_RUNNING_OR_NOTRUNNING \
+ && IS_RUNNING_OR_NOTRUNNING(s1)))
+
+#endif // _WIN32
+
/** Helper function for testing tor_spawn_background */
static void
run_util_spawn_background(const char *argv[], const char *expected_out,
@@ -2871,18 +3572,39 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
notify_pending_waitpid_callbacks();
- tt_int_op(expected_status,==, status);
+ /* the race condition doesn't affect status,
+ * because status isn't updated by the SIGCHLD handler,
+ * but we still need to handle PROCESS_STATUS_RUNNING_OR_NOTRUNNING */
+ tt_assert(MATCH_PROCESS_STATUS(expected_status, status));
if (status == PROCESS_STATUS_ERROR) {
- tt_ptr_op(process_handle, ==, NULL);
+ tt_ptr_op(process_handle, OP_EQ, NULL);
return;
}
tt_assert(process_handle != NULL);
- tt_int_op(expected_status,==, process_handle->status);
+
+ /* When a spawned process forks, fails, then exits very quickly,
+ * (this typically occurs when exec fails)
+ * there is a race condition between the SIGCHLD handler
+ * updating the process_handle's fields, and this test
+ * checking the process status in those fields.
+ * The SIGCHLD update can occur before or after the code below executes.
+ * This causes intermittent failures in spawn_background_fail(),
+ * typically when the machine is under load.
+ * We use PROCESS_STATUS_RUNNING_OR_NOTRUNNING to avoid this issue. */
+
+ /* the race condition affects the change in
+ * process_handle->status from RUNNING to NOTRUNNING */
+ tt_assert(MATCH_PROCESS_STATUS(expected_status, process_handle->status));
#ifndef _WIN32
notify_pending_waitpid_callbacks();
- tt_ptr_op(process_handle->waitpid_cb, !=, NULL);
+ /* the race condition affects the change in
+ * process_handle->waitpid_cb to NULL,
+ * so we skip the check if expected_status is ambiguous,
+ * that is, PROCESS_STATUS_RUNNING_OR_NOTRUNNING */
+ tt_assert(process_handle->waitpid_cb != NULL
+ || expected_status == PROCESS_STATUS_RUNNING_OR_NOTRUNNING);
#endif
#ifdef _WIN32
@@ -2898,20 +3620,20 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
sizeof(stdout_buf) - 1);
tt_assert(pos >= 0);
stdout_buf[pos] = '\0';
- tt_int_op(strlen(expected_out),==, pos);
- tt_str_op(expected_out,==, stdout_buf);
+ tt_int_op(strlen(expected_out),OP_EQ, pos);
+ tt_str_op(expected_out,OP_EQ, stdout_buf);
notify_pending_waitpid_callbacks();
/* Check it terminated correctly */
retval = tor_get_exit_code(process_handle, 1, &exit_code);
- tt_int_op(PROCESS_EXIT_EXITED,==, retval);
- tt_int_op(expected_exit,==, exit_code);
+ tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval);
+ tt_int_op(expected_exit,OP_EQ, exit_code);
// TODO: Make test-child exit with something other than 0
#ifndef _WIN32
notify_pending_waitpid_callbacks();
- tt_ptr_op(process_handle->waitpid_cb, ==, NULL);
+ tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL);
#endif
/* Check stderr */
@@ -2919,8 +3641,8 @@ run_util_spawn_background(const char *argv[], const char *expected_out,
sizeof(stderr_buf) - 1);
tt_assert(pos >= 0);
stderr_buf[pos] = '\0';
- tt_str_op(expected_err,==, stderr_buf);
- tt_int_op(strlen(expected_err),==, pos);
+ tt_str_op(expected_err,OP_EQ, stderr_buf);
+ tt_int_op(strlen(expected_err),OP_EQ, pos);
notify_pending_waitpid_callbacks();
@@ -2955,8 +3677,8 @@ test_util_spawn_background_fail(void *ptr)
const int expected_status = PROCESS_STATUS_ERROR;
#else
/* TODO: Once we can signal failure to exec, set this to be
- * PROCESS_STATUS_ERROR */
- const int expected_status = PROCESS_STATUS_RUNNING;
+ * PROCESS_STATUS_RUNNING_OR_ERROR */
+ const int expected_status = PROCESS_STATUS_RUNNING_OR_NOTRUNNING;
#endif
memset(expected_out, 0xf0, sizeof(expected_out));
@@ -3009,9 +3731,9 @@ test_util_spawn_background_partial_read_impl(int exit_early)
#else
status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
#endif
- tt_int_op(expected_status,==, status);
+ tt_int_op(expected_status,OP_EQ, status);
tt_assert(process_handle);
- tt_int_op(expected_status,==, process_handle->status);
+ tt_int_op(expected_status,OP_EQ, process_handle->status);
/* Check stdout */
for (expected_out_ctr = 0; expected_out[expected_out_ctr] != NULL;) {
@@ -3032,8 +3754,8 @@ test_util_spawn_background_partial_read_impl(int exit_early)
tt_assert(pos > 0);
stdout_buf[pos] = '\0';
- tt_str_op(expected_out[expected_out_ctr],==, stdout_buf);
- tt_int_op(strlen(expected_out[expected_out_ctr]),==, pos);
+ tt_str_op(expected_out[expected_out_ctr],OP_EQ, stdout_buf);
+ tt_int_op(strlen(expected_out[expected_out_ctr]),OP_EQ, pos);
expected_out_ctr++;
}
@@ -3048,14 +3770,14 @@ test_util_spawn_background_partial_read_impl(int exit_early)
pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf,
sizeof(stdout_buf) - 1,
process_handle);
- tt_int_op(0,==, pos);
+ tt_int_op(0,OP_EQ, pos);
#else
if (!eof) {
/* We should have got all the data, but maybe not the EOF flag */
pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf,
sizeof(stdout_buf) - 1,
process_handle, &eof);
- tt_int_op(0,==, pos);
+ tt_int_op(0,OP_EQ, pos);
tt_assert(eof);
}
/* Otherwise, we got the EOF on the last read */
@@ -3063,8 +3785,8 @@ test_util_spawn_background_partial_read_impl(int exit_early)
/* Check it terminated correctly */
retval = tor_get_exit_code(process_handle, 1, &exit_code);
- tt_int_op(PROCESS_EXIT_EXITED,==, retval);
- tt_int_op(expected_exit,==, exit_code);
+ tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval);
+ tt_int_op(expected_exit,OP_EQ, exit_code);
// TODO: Make test-child exit with something other than 0
@@ -3073,8 +3795,8 @@ test_util_spawn_background_partial_read_impl(int exit_early)
sizeof(stderr_buf) - 1);
tt_assert(pos >= 0);
stderr_buf[pos] = '\0';
- tt_str_op(expected_err,==, stderr_buf);
- tt_int_op(strlen(expected_err),==, pos);
+ tt_str_op(expected_err,OP_EQ, stderr_buf);
+ tt_int_op(strlen(expected_err),OP_EQ, pos);
done:
tor_process_handle_destroy(process_handle, 1);
@@ -3112,8 +3834,8 @@ test_util_spawn_background_waitpid_notify(void *arg)
status = tor_spawn_background(argv[0], argv, NULL, &process_handle);
#endif
- tt_int_op(status, ==, PROCESS_STATUS_RUNNING);
- tt_ptr_op(process_handle, !=, NULL);
+ tt_int_op(status, OP_EQ, PROCESS_STATUS_RUNNING);
+ tt_ptr_op(process_handle, OP_NE, NULL);
/* We're not going to look at the stdout/stderr output this time. Instead,
* we're testing whether notify_pending_waitpid_calbacks() can report the
@@ -3122,14 +3844,14 @@ test_util_spawn_background_waitpid_notify(void *arg)
#ifndef _WIN32
ms_timer = 30*1000;
- tt_ptr_op(process_handle->waitpid_cb, !=, NULL);
+ tt_ptr_op(process_handle->waitpid_cb, OP_NE, NULL);
while (process_handle->waitpid_cb && ms_timer > 0) {
tor_sleep_msec(100);
ms_timer -= 100;
notify_pending_waitpid_callbacks();
}
- tt_int_op(ms_timer, >, 0);
- tt_ptr_op(process_handle->waitpid_cb, ==, NULL);
+ tt_int_op(ms_timer, OP_GT, 0);
+ tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL);
#endif
ms_timer = 30*1000;
@@ -3138,9 +3860,9 @@ test_util_spawn_background_waitpid_notify(void *arg)
tor_sleep_msec(100);
ms_timer -= 100;
}
- tt_int_op(ms_timer, >, 0);
+ tt_int_op(ms_timer, OP_GT, 0);
- tt_int_op(retval, ==, PROCESS_EXIT_EXITED);
+ tt_int_op(retval, OP_EQ, PROCESS_EXIT_EXITED);
done:
tor_process_handle_destroy(process_handle, 1);
@@ -3149,6 +3871,13 @@ test_util_spawn_background_waitpid_notify(void *arg)
#undef TEST_CHILD
#undef EOL
+#undef MATCH_PROCESS_STATUS
+
+#ifndef _WIN32
+#undef PROCESS_STATUS_RUNNING_OR_NOTRUNNING
+#undef IS_RUNNING_OR_NOTRUNNING
+#endif
+
/**
* Test for format_hex_number_sigsafe()
*/
@@ -3179,15 +3908,15 @@ test_util_format_hex_number(void *ptr)
for (i = 0; test_data[i].str != NULL; ++i) {
len = format_hex_number_sigsafe(test_data[i].x, buf, sizeof(buf));
- tt_int_op(len,!=, 0);
- tt_int_op(len,==, strlen(buf));
- tt_str_op(buf,==, test_data[i].str);
+ tt_int_op(len,OP_NE, 0);
+ tt_int_op(len,OP_EQ, strlen(buf));
+ tt_str_op(buf,OP_EQ, test_data[i].str);
}
- tt_int_op(4,==, format_hex_number_sigsafe(0xffff, buf, 5));
- tt_str_op(buf,==, "FFFF");
- tt_int_op(0,==, format_hex_number_sigsafe(0xffff, buf, 4));
- tt_int_op(0,==, format_hex_number_sigsafe(0, buf, 1));
+ tt_int_op(4,OP_EQ, format_hex_number_sigsafe(0xffff, buf, 5));
+ tt_str_op(buf,OP_EQ, "FFFF");
+ tt_int_op(0,OP_EQ, format_hex_number_sigsafe(0xffff, buf, 4));
+ tt_int_op(0,OP_EQ, format_hex_number_sigsafe(0, buf, 1));
done:
return;
@@ -3223,21 +3952,21 @@ test_util_format_dec_number(void *ptr)
for (i = 0; test_data[i].str != NULL; ++i) {
len = format_dec_number_sigsafe(test_data[i].x, buf, sizeof(buf));
- tt_int_op(len,!=, 0);
- tt_int_op(len,==, strlen(buf));
- tt_str_op(buf,==, test_data[i].str);
+ tt_int_op(len,OP_NE, 0);
+ tt_int_op(len,OP_EQ, strlen(buf));
+ tt_str_op(buf,OP_EQ, test_data[i].str);
len = format_dec_number_sigsafe(test_data[i].x, buf,
(int)(strlen(test_data[i].str) + 1));
- tt_int_op(len,==, strlen(buf));
- tt_str_op(buf,==, test_data[i].str);
+ tt_int_op(len,OP_EQ, strlen(buf));
+ tt_str_op(buf,OP_EQ, test_data[i].str);
}
- tt_int_op(4,==, format_dec_number_sigsafe(7331, buf, 5));
- tt_str_op(buf,==, "7331");
- tt_int_op(0,==, format_dec_number_sigsafe(7331, buf, 4));
- tt_int_op(1,==, format_dec_number_sigsafe(0, buf, 2));
- tt_int_op(0,==, format_dec_number_sigsafe(0, buf, 1));
+ tt_int_op(4,OP_EQ, format_dec_number_sigsafe(7331, buf, 5));
+ tt_str_op(buf,OP_EQ, "7331");
+ tt_int_op(0,OP_EQ, format_dec_number_sigsafe(7331, buf, 4));
+ tt_int_op(1,OP_EQ, format_dec_number_sigsafe(0, buf, 2));
+ tt_int_op(0,OP_EQ, format_dec_number_sigsafe(0, buf, 1));
done:
return;
@@ -3286,7 +4015,7 @@ test_util_join_win_cmdline(void *ptr)
for (i=0; cmdlines[i]!=NULL; i++) {
log_info(LD_GENERAL, "Joining argvs[%d], expecting <%s>", i, cmdlines[i]);
joined_argv = tor_join_win_cmdline(argvs[i]);
- tt_str_op(cmdlines[i],==, joined_argv);
+ tt_str_op(cmdlines[i],OP_EQ, joined_argv);
tor_free(joined_argv);
}
@@ -3341,17 +4070,17 @@ test_util_split_lines(void *ptr)
i, tests[i].orig_length);
SMARTLIST_FOREACH_BEGIN(sl, const char *, line) {
/* Check we have not got too many lines */
- tt_int_op(MAX_SPLIT_LINE_COUNT, >, j);
+ tt_int_op(MAX_SPLIT_LINE_COUNT, OP_GT, j);
/* Check that there actually should be a line here */
tt_assert(tests[i].split_line[j] != NULL);
log_info(LD_GENERAL, "Line %d of test %d, should be <%s>",
j, i, tests[i].split_line[j]);
/* Check that the line is as expected */
- tt_str_op(line,==, tests[i].split_line[j]);
+ tt_str_op(line,OP_EQ, tests[i].split_line[j]);
j++;
} SMARTLIST_FOREACH_END(line);
/* Check that we didn't miss some lines */
- tt_ptr_op(NULL,==, tests[i].split_line[j]);
+ tt_ptr_op(NULL,OP_EQ, tests[i].split_line[j]);
tor_free(orig_line);
smartlist_free(sl);
sl = NULL;
@@ -3387,7 +4116,7 @@ test_util_di_ops(void *arg)
for (i = 0; examples[i].a; ++i) {
size_t len = strlen(examples[i].a);
int eq1, eq2, neq1, neq2, cmp1, cmp2;
- tt_int_op(len,==, strlen(examples[i].b));
+ tt_int_op(len,OP_EQ, strlen(examples[i].b));
/* We do all of the operations, with operands in both orders. */
eq1 = tor_memeq(examples[i].a, examples[i].b, len);
eq2 = tor_memeq(examples[i].b, examples[i].a, len);
@@ -3405,11 +4134,11 @@ test_util_di_ops(void *arg)
TT_DIE(("Assertion failed."));
/* Check for consistency of everything else with cmp1 */
- tt_int_op(eq1,==, eq2);
- tt_int_op(neq1,==, neq2);
- tt_int_op(cmp1,==, -cmp2);
- tt_int_op(eq1,==, cmp1 == 0);
- tt_int_op(neq1,==, !eq1);
+ tt_int_op(eq1,OP_EQ, eq2);
+ tt_int_op(neq1,OP_EQ, neq2);
+ tt_int_op(cmp1,OP_EQ, -cmp2);
+ tt_int_op(eq1,OP_EQ, cmp1 == 0);
+ tt_int_op(neq1,OP_EQ, !eq1);
}
{
@@ -3424,22 +4153,24 @@ test_util_di_ops(void *arg)
for (i = 0; i < 256; i++) {
ii = (uint8_t)i;
zz = (uint8_t)z;
- tt_int_op(tor_memeq(&zz, &ii, 1),==, zz == ii);
- tt_int_op(tor_memcmp(&zz, &ii, 1) > 0 ? GT : EQ,==, zz > ii ? GT : EQ);
- tt_int_op(tor_memcmp(&ii, &zz, 1) < 0 ? LT : EQ,==, ii < zz ? LT : EQ);
+ tt_int_op(tor_memeq(&zz, &ii, 1),OP_EQ, zz == ii);
+ tt_int_op(tor_memcmp(&zz, &ii, 1) > 0 ? GT : EQ,OP_EQ,
+ zz > ii ? GT : EQ);
+ tt_int_op(tor_memcmp(&ii, &zz, 1) < 0 ? LT : EQ,OP_EQ,
+ ii < zz ? LT : EQ);
}
}
}
- 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));
+ tt_int_op(1, OP_EQ, safe_mem_is_zero("", 0));
+ tt_int_op(1, OP_EQ, safe_mem_is_zero("", 1));
+ tt_int_op(0, OP_EQ, safe_mem_is_zero("a", 1));
+ tt_int_op(0, OP_EQ, safe_mem_is_zero("a", 2));
+ tt_int_op(0, OP_EQ, safe_mem_is_zero("\0a", 2));
+ tt_int_op(1, OP_EQ, safe_mem_is_zero("\0\0a", 2));
+ tt_int_op(1, OP_EQ, safe_mem_is_zero("\0\0\0\0\0\0\0\0", 8));
+ tt_int_op(1, OP_EQ, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 8));
+ tt_int_op(0, OP_EQ, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 9));
done:
;
@@ -3452,12 +4183,12 @@ static void
test_util_n_bits_set(void *ptr)
{
(void)ptr;
- tt_int_op(0,==, n_bits_set_u8(0));
- tt_int_op(1,==, n_bits_set_u8(1));
- tt_int_op(3,==, n_bits_set_u8(7));
- tt_int_op(1,==, n_bits_set_u8(8));
- tt_int_op(2,==, n_bits_set_u8(129));
- tt_int_op(8,==, n_bits_set_u8(255));
+ tt_int_op(0,OP_EQ, n_bits_set_u8(0));
+ tt_int_op(1,OP_EQ, n_bits_set_u8(1));
+ tt_int_op(3,OP_EQ, n_bits_set_u8(7));
+ tt_int_op(1,OP_EQ, n_bits_set_u8(8));
+ tt_int_op(2,OP_EQ, n_bits_set_u8(129));
+ tt_int_op(8,OP_EQ, n_bits_set_u8(255));
done:
;
}
@@ -3478,78 +4209,82 @@ test_util_eat_whitespace(void *ptr)
strlcpy(str, "fuubaar", sizeof(str));
for (i = 0; i < sizeof(ws); ++i) {
str[0] = ws[i];
- tt_ptr_op(str + 1,==, eat_whitespace(str));
- tt_ptr_op(str + 1,==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str + 1,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str + 1,==, eat_whitespace_eos_no_nl(str, str + strlen(str)));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str)));
}
str[0] = '\n';
- tt_ptr_op(str + 1,==, eat_whitespace(str));
- tt_ptr_op(str + 1,==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str + strlen(str)));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Empty string */
strlcpy(str, "", sizeof(str));
- tt_ptr_op(str,==, eat_whitespace(str));
- tt_ptr_op(str,==, eat_whitespace_eos(str, str));
- tt_ptr_op(str,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_eos(str, str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str));
/* Only ws */
strlcpy(str, " \t\r\n", sizeof(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str + strlen(str) - 1,==,
+ tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + strlen(str),OP_EQ,
+ eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str + strlen(str) - 1,OP_EQ,
eat_whitespace_no_nl(str));
- tt_ptr_op(str + strlen(str) - 1,==,
+ tt_ptr_op(str + strlen(str) - 1,OP_EQ,
eat_whitespace_eos_no_nl(str, str + strlen(str)));
strlcpy(str, " \t\r ", sizeof(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace(str));
- tt_ptr_op(str + strlen(str),==,
+ tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + strlen(str),OP_EQ,
eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str + strlen(str),==, eat_whitespace_no_nl(str));
- tt_ptr_op(str + strlen(str),==,
+ tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str + strlen(str),OP_EQ,
eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Multiple ws */
strlcpy(str, "fuubaar", sizeof(str));
for (i = 0; i < sizeof(ws); ++i)
str[i] = ws[i];
- tt_ptr_op(str + sizeof(ws),==, eat_whitespace(str));
- tt_ptr_op(str + sizeof(ws),==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str + sizeof(ws),==, eat_whitespace_no_nl(str));
- tt_ptr_op(str + sizeof(ws),==,
+ tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + sizeof(ws),OP_EQ,
+ eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str + sizeof(ws),OP_EQ,
eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat comment */
strlcpy(str, "# Comment \n No Comment", sizeof(str));
- tt_str_op("No Comment",==, eat_whitespace(str));
- tt_str_op("No Comment",==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str + strlen(str)));
+ tt_str_op("No Comment",OP_EQ, eat_whitespace(str));
+ tt_str_op("No Comment",OP_EQ, eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat comment & ws mix */
strlcpy(str, " # \t Comment \n\t\nNo Comment", sizeof(str));
- tt_str_op("No Comment",==, eat_whitespace(str));
- tt_str_op("No Comment",==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str + 1,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str + 1,==, eat_whitespace_eos_no_nl(str, str + strlen(str)));
+ tt_str_op("No Comment",OP_EQ, eat_whitespace(str));
+ tt_str_op("No Comment",OP_EQ, eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat entire comment */
strlcpy(str, "#Comment", sizeof(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str + strlen(str)));
+ tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + strlen(str),OP_EQ,
+ eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Blank line, then comment */
strlcpy(str, " \t\n # Comment", sizeof(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace(str));
- tt_ptr_op(str + strlen(str),==, eat_whitespace_eos(str, str + strlen(str)));
- tt_ptr_op(str + 2,==, eat_whitespace_no_nl(str));
- tt_ptr_op(str + 2,==, eat_whitespace_eos_no_nl(str, str + strlen(str)));
+ tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str));
+ tt_ptr_op(str + strlen(str),OP_EQ,
+ eat_whitespace_eos(str, str + strlen(str)));
+ tt_ptr_op(str + 2,OP_EQ, eat_whitespace_no_nl(str));
+ tt_ptr_op(str + 2,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str)));
done:
;
@@ -3588,11 +4323,11 @@ test_util_sl_new_from_text_lines(void *ptr)
smartlist_t *sl = smartlist_new_from_text_lines("foo\nbar\nbaz\n");
int sl_len = smartlist_len(sl);
- tt_want_int_op(sl_len, ==, 3);
+ tt_want_int_op(sl_len, OP_EQ, 3);
- if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), ==, "foo");
- if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), ==, "bar");
- if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), ==, "baz");
+ if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), OP_EQ, "foo");
+ if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), OP_EQ, "bar");
+ if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), OP_EQ, "baz");
SMARTLIST_FOREACH(sl, void *, x, tor_free(x));
smartlist_free(sl);
@@ -3602,11 +4337,11 @@ test_util_sl_new_from_text_lines(void *ptr)
smartlist_t *sl = smartlist_new_from_text_lines("foo\nbar\nbaz");
int sl_len = smartlist_len(sl);
- tt_want_int_op(sl_len, ==, 3);
+ tt_want_int_op(sl_len, OP_EQ, 3);
- if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), ==, "foo");
- if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), ==, "bar");
- if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), ==, "baz");
+ if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), OP_EQ, "foo");
+ if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), OP_EQ, "bar");
+ if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), OP_EQ, "baz");
SMARTLIST_FOREACH(sl, void *, x, tor_free(x));
smartlist_free(sl);
@@ -3616,9 +4351,9 @@ test_util_sl_new_from_text_lines(void *ptr)
smartlist_t *sl = smartlist_new_from_text_lines("foo");
int sl_len = smartlist_len(sl);
- tt_want_int_op(sl_len, ==, 1);
+ tt_want_int_op(sl_len, OP_EQ, 1);
- if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), ==, "foo");
+ if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), OP_EQ, "foo");
SMARTLIST_FOREACH(sl, void *, x, tor_free(x));
smartlist_free(sl);
@@ -3628,7 +4363,7 @@ test_util_sl_new_from_text_lines(void *ptr)
smartlist_t *sl = smartlist_new_from_text_lines("");
int sl_len = smartlist_len(sl);
- tt_want_int_op(sl_len, ==, 0);
+ tt_want_int_op(sl_len, OP_EQ, 0);
SMARTLIST_FOREACH(sl, void *, x, tor_free(x));
smartlist_free(sl);
@@ -3711,7 +4446,7 @@ test_util_make_environment(void *ptr)
smartlist_sort_strings(env_vars_sorted);
smartlist_sort_strings(env_vars_in_unixoid_env_block_sorted);
- tt_want_int_op(smartlist_len(env_vars_sorted), ==,
+ tt_want_int_op(smartlist_len(env_vars_sorted), OP_EQ,
smartlist_len(env_vars_in_unixoid_env_block_sorted));
{
int len = smartlist_len(env_vars_sorted);
@@ -3722,7 +4457,7 @@ test_util_make_environment(void *ptr)
}
for (i = 0; i < len; ++i) {
- tt_want_str_op(smartlist_get(env_vars_sorted, i), ==,
+ tt_want_str_op(smartlist_get(env_vars_sorted, i), OP_EQ,
smartlist_get(env_vars_in_unixoid_env_block_sorted, i));
}
}
@@ -3804,7 +4539,7 @@ test_util_set_env_var_in_sl(void *ptr)
smartlist_sort_strings(merged_env_vars);
smartlist_sort_strings(expected_resulting_env_vars);
- tt_want_int_op(smartlist_len(merged_env_vars), ==,
+ tt_want_int_op(smartlist_len(merged_env_vars), OP_EQ,
smartlist_len(expected_resulting_env_vars));
{
int len = smartlist_len(merged_env_vars);
@@ -3815,7 +4550,7 @@ test_util_set_env_var_in_sl(void *ptr)
}
for (i = 0; i < len; ++i) {
- tt_want_str_op(smartlist_get(merged_env_vars, i), ==,
+ tt_want_str_op(smartlist_get(merged_env_vars, i), OP_EQ,
smartlist_get(expected_resulting_env_vars, i));
}
}
@@ -3842,8 +4577,8 @@ test_util_weak_random(void *arg)
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);
+ tt_int_op(0, OP_LE, r);
+ tt_int_op(r, OP_LT, i);
}
}
@@ -3853,7 +4588,7 @@ test_util_weak_random(void *arg)
}
for (i=0;i<16;++i)
- tt_int_op(n[i], >, 0);
+ tt_int_op(n[i], OP_GT, 0);
done:
;
}
@@ -3865,9 +4600,9 @@ test_util_mathlog(void *arg)
(void) arg;
d = tor_mathlog(2.718281828);
- tt_double_op(fabs(d - 1.0), <, .000001);
+ tt_double_op(fabs(d - 1.0), OP_LT, .000001);
d = tor_mathlog(10);
- tt_double_op(fabs(d - 2.30258509), <, .000001);
+ tt_double_op(fabs(d - 2.30258509), OP_LT, .000001);
done:
;
}
@@ -3951,36 +4686,36 @@ test_util_socket(void *arg)
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);
+ tt_int_op(get_n_open_sockets(), OP_EQ, 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);
+ tt_int_op(get_n_open_sockets(), OP_EQ, 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);
+ tt_int_op(fd_is_cloexec(fd1), OP_EQ, 0);
+ tt_int_op(fd_is_cloexec(fd2), OP_EQ, 0);
+ tt_int_op(fd_is_cloexec(fd3), OP_EQ, 1);
+ tt_int_op(fd_is_cloexec(fd4), OP_EQ, 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);
+ tt_int_op(fd_is_nonblocking(fd1), OP_EQ, 0);
+ tt_int_op(fd_is_nonblocking(fd2), OP_EQ, 1);
+ tt_int_op(fd_is_nonblocking(fd3), OP_EQ, 0);
+ tt_int_op(fd_is_nonblocking(fd4), OP_EQ, 1);
#endif
tor_close_socket(fd1);
tor_close_socket(fd2);
fd1 = fd2 = TOR_INVALID_SOCKET;
- tt_int_op(get_n_open_sockets(), ==, n + 2);
+ tt_int_op(get_n_open_sockets(), OP_EQ, n + 2);
tor_close_socket(fd3);
tor_close_socket(fd4);
fd3 = fd4 = TOR_INVALID_SOCKET;
- tt_int_op(get_n_open_sockets(), ==, n);
+ tt_int_op(get_n_open_sockets(), OP_EQ, n);
done:
if (SOCKET_OK(fd1))
@@ -4022,17 +4757,17 @@ test_util_socketpair(void *arg)
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_int_op(0, OP_EQ, 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);
+ tt_int_op(get_n_open_sockets(), OP_EQ, n + 2);
#ifdef CAN_CHECK_CLOEXEC
- tt_int_op(fd_is_cloexec(fds[0]), ==, 1);
- tt_int_op(fd_is_cloexec(fds[1]), ==, 1);
+ tt_int_op(fd_is_cloexec(fds[0]), OP_EQ, 1);
+ tt_int_op(fd_is_cloexec(fds[1]), OP_EQ, 1);
#endif
#ifdef CAN_CHECK_NONBLOCK
- tt_int_op(fd_is_nonblocking(fds[0]), ==, 0);
- tt_int_op(fd_is_nonblocking(fds[1]), ==, 0);
+ tt_int_op(fd_is_nonblocking(fds[0]), OP_EQ, 0);
+ tt_int_op(fd_is_nonblocking(fds[1]), OP_EQ, 0);
#endif
done:
@@ -4051,18 +4786,18 @@ test_util_max_mem(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_int_op(r, OP_EQ, r2);
+ tt_uint_op(memory2, OP_EQ, 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));
+ tt_uint_op(memory1, OP_GT, (1<<20));
} else {
/* You do not have a petabyte. */
#if SIZEOF_SIZE_T == SIZEOF_UINT64_T
- tt_uint_op(memory1, <, (U64_LITERAL(1)<<50));
+ tt_uint_op(memory1, OP_LT, (U64_LITERAL(1)<<50));
#endif
}
@@ -4070,6 +4805,52 @@ test_util_max_mem(void *arg)
;
}
+static void
+test_util_hostname_validation(void *arg)
+{
+ (void)arg;
+
+ // Lets try valid hostnames first.
+ tt_assert(string_is_valid_hostname("torproject.org"));
+ tt_assert(string_is_valid_hostname("ocw.mit.edu"));
+ tt_assert(string_is_valid_hostname("i.4cdn.org"));
+ tt_assert(string_is_valid_hostname("stanford.edu"));
+ tt_assert(string_is_valid_hostname("multiple-words-with-hypens.jp"));
+
+ // Subdomain name cannot start with '-'.
+ tt_assert(!string_is_valid_hostname("-torproject.org"));
+ tt_assert(!string_is_valid_hostname("subdomain.-domain.org"));
+ tt_assert(!string_is_valid_hostname("-subdomain.domain.org"));
+
+ // Hostnames cannot contain non-alphanumeric characters.
+ tt_assert(!string_is_valid_hostname("%%domain.\\org."));
+ tt_assert(!string_is_valid_hostname("***x.net"));
+ tt_assert(!string_is_valid_hostname("___abc.org"));
+ tt_assert(!string_is_valid_hostname("\xff\xffxyz.org"));
+ tt_assert(!string_is_valid_hostname("word1 word2.net"));
+
+ // XXX: do we allow single-label DNS names?
+
+ done:
+ return;
+}
+
+static void
+test_util_ipv4_validation(void *arg)
+{
+ (void)arg;
+
+ tt_assert(string_is_valid_ipv4_address("192.168.0.1"));
+ tt_assert(string_is_valid_ipv4_address("8.8.8.8"));
+
+ tt_assert(!string_is_valid_ipv4_address("abcd"));
+ tt_assert(!string_is_valid_ipv4_address("300.300.300.300"));
+ tt_assert(!string_is_valid_ipv4_address("8.8."));
+
+ done:
+ return;
+}
+
struct testcase_t util_tests[] = {
UTIL_LEGACY(time),
UTIL_TEST(parse_http_time, 0),
@@ -4094,6 +4875,7 @@ struct testcase_t util_tests[] = {
UTIL_LEGACY(mmap),
UTIL_LEGACY(threads),
UTIL_LEGACY(sscanf),
+ UTIL_LEGACY(format_time_interval),
UTIL_LEGACY(path_is_relative),
UTIL_LEGACY(strtok),
UTIL_LEGACY(di_ops),
@@ -4142,6 +4924,8 @@ struct testcase_t util_tests[] = {
{ "socketpair_ersatz", test_util_socketpair, TT_FORK,
&socketpair_setup, (void*)"1" },
UTIL_TEST(max_mem, 0),
+ UTIL_TEST(hostname_validation, 0),
+ UTIL_TEST(ipv4_validation, 0),
END_OF_TESTCASES
};
diff --git a/src/tools/tor-checkkey.c b/src/tools/tor-checkkey.c
index d50f12ed2a..f6c6508c33 100644
--- a/src/tools/tor-checkkey.c
+++ b/src/tools/tor-checkkey.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2013, The Tor Project, Inc. */
+/* Copyright (c) 2008-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -21,7 +21,7 @@ main(int c, char **v)
int wantdigest=0;
int fname_idx;
char *fname=NULL;
- init_logging();
+ init_logging(1);
if (c < 2) {
fprintf(stderr, "Hi. I'm tor-checkkey. Tell me a filename that "
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 41eb9dcb76..74485f9803 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
index 2d924ce750..1bfebd91f9 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
index 692186d372..59bc232dd3 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.h b/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
index b6c7ed8643..9a5123e09f 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.c b/src/tools/tor-fw-helper/tor-fw-helper.c
index 84cc21e346..9a32b0cbe2 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.h b/src/tools/tor-fw-helper/tor-fw-helper.h
index 0b0d179935..71bc11e168 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-2013, The Tor Project, Inc. */
+ * Copyright (c) 2010-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index fae26ef956..f6805c1193 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -525,7 +525,7 @@ int
main(int argc, char **argv)
{
int r = 1;
- init_logging();
+ init_logging(1);
/* Don't bother using acceleration. */
if (crypto_global_init(0, NULL, NULL)) {
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 306f6c66ab..6ee155ade5 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
- * Copyright (c) 2007-2013, The Tor Project, Inc.
+ * Copyright (c) 2007-2014, The Tor Project, Inc.
*/
/* See LICENSE for licensing information */
@@ -8,6 +8,7 @@
#include "../common/util.h"
#include "address.h"
#include "../common/torlog.h"
+#include "sandbox.h"
#include <stdio.h>
#include <stdlib.h>
@@ -343,7 +344,8 @@ main(int argc, char **argv)
char *result_hostname = NULL;
log_severity_list_t *s = tor_malloc_zero(sizeof(log_severity_list_t));
- init_logging();
+ init_logging(1);
+ sandbox_disable_getaddrinfo_cache();
arg = &argv[1];
n_args = argc-1;
diff --git a/src/trunnel/include.am b/src/trunnel/include.am
new file mode 100644
index 0000000000..c7ac1679d0
--- /dev/null
+++ b/src/trunnel/include.am
@@ -0,0 +1,29 @@
+
+noinst_LIBRARIES += \
+ src/trunnel/libor-trunnel.a
+
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += \
+ src/trunnel/libor-trunnel-testing.a
+endif
+
+AM_CPPFLAGS += -I$(srcdir)/src/ext/trunnel -I$(srcdir)/src/trunnel
+
+TRUNNELSOURCES = \
+ src/ext/trunnel/trunnel.c \
+ src/trunnel/pwbox.c
+
+TRUNNELHEADERS = \
+ src/ext/trunnel/trunnel.h \
+ src/ext/trunnel/trunnel-impl.h \
+ src/trunnel/trunnel-local.h \
+ src/trunnel/pwbox.h
+
+src_trunnel_libor_trunnel_a_SOURCES = $(TRUNNELSOURCES)
+src_trunnel_libor_trunnel_a_CPPFLAGS = -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS)
+
+src_trunnel_libor_trunnel_testing_a_SOURCES = $(TRUNNELSOURCES)
+src_trunnel_libor_trunnel_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS)
+src_trunnel_libor_trunnel_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
+noinst_HEADERS+= $(TRUNNELHEADERS)
diff --git a/src/trunnel/pwbox.c b/src/trunnel/pwbox.c
new file mode 100644
index 0000000000..bfea3ac671
--- /dev/null
+++ b/src/trunnel/pwbox.c
@@ -0,0 +1,515 @@
+/* pwbox.c -- generated by Trunnel v1.2.
+ * https://gitweb.torproject.org/trunnel.git
+ * You probably shouldn't edit this file.
+ */
+#include <stdlib.h>
+#include "trunnel-impl.h"
+
+#include "pwbox.h"
+
+#define TRUNNEL_SET_ERROR_CODE(obj) \
+ do { \
+ (obj)->trunnel_error_code_ = 1; \
+ } while (0)
+
+#if defined(__COVERITY__) || defined(__clang_analyzer__)
+/* If we're runnning a static analysis tool, we don't want it to complain
+ * that some of our remaining-bytes checks are dead-code. */
+int pwbox_deadcode_dummy__ = 0;
+#define OR_DEADCODE_DUMMY || pwbox_deadcode_dummy__
+#else
+#define OR_DEADCODE_DUMMY
+#endif
+
+#define CHECK_REMAINING(nbytes, label) \
+ do { \
+ if (remaining < (nbytes) OR_DEADCODE_DUMMY) { \
+ goto label; \
+ } \
+ } while (0)
+
+pwbox_encoded_t *
+pwbox_encoded_new(void)
+{
+ pwbox_encoded_t *val = trunnel_calloc(1, sizeof(pwbox_encoded_t));
+ if (NULL == val)
+ return NULL;
+ val->fixedbytes0 = PWBOX0_CONST0;
+ val->fixedbytes1 = PWBOX0_CONST1;
+ return val;
+}
+
+/** Release all storage held inside 'obj', but do not free 'obj'.
+ */
+static void
+pwbox_encoded_clear(pwbox_encoded_t *obj)
+{
+ (void) obj;
+ TRUNNEL_DYNARRAY_WIPE(&obj->skey_header);
+ TRUNNEL_DYNARRAY_CLEAR(&obj->skey_header);
+ TRUNNEL_DYNARRAY_WIPE(&obj->data);
+ TRUNNEL_DYNARRAY_CLEAR(&obj->data);
+}
+
+void
+pwbox_encoded_free(pwbox_encoded_t *obj)
+{
+ if (obj == NULL)
+ return;
+ pwbox_encoded_clear(obj);
+ trunnel_memwipe(obj, sizeof(pwbox_encoded_t));
+ trunnel_free_(obj);
+}
+
+uint32_t
+pwbox_encoded_get_fixedbytes0(pwbox_encoded_t *inp)
+{
+ return inp->fixedbytes0;
+}
+int
+pwbox_encoded_set_fixedbytes0(pwbox_encoded_t *inp, uint32_t val)
+{
+ if (! ((val == PWBOX0_CONST0))) {
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+ }
+ inp->fixedbytes0 = val;
+ return 0;
+}
+uint32_t
+pwbox_encoded_get_fixedbytes1(pwbox_encoded_t *inp)
+{
+ return inp->fixedbytes1;
+}
+int
+pwbox_encoded_set_fixedbytes1(pwbox_encoded_t *inp, uint32_t val)
+{
+ if (! ((val == PWBOX0_CONST1))) {
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+ }
+ inp->fixedbytes1 = val;
+ return 0;
+}
+uint8_t
+pwbox_encoded_get_header_len(pwbox_encoded_t *inp)
+{
+ return inp->header_len;
+}
+int
+pwbox_encoded_set_header_len(pwbox_encoded_t *inp, uint8_t val)
+{
+ inp->header_len = val;
+ return 0;
+}
+size_t
+pwbox_encoded_getlen_skey_header(const pwbox_encoded_t *inp)
+{
+ return TRUNNEL_DYNARRAY_LEN(&inp->skey_header);
+}
+
+uint8_t
+pwbox_encoded_get_skey_header(pwbox_encoded_t *inp, size_t idx)
+{
+ return TRUNNEL_DYNARRAY_GET(&inp->skey_header, idx);
+}
+
+int
+pwbox_encoded_set_skey_header(pwbox_encoded_t *inp, size_t idx, uint8_t elt)
+{
+ TRUNNEL_DYNARRAY_SET(&inp->skey_header, idx, elt);
+ return 0;
+}
+int
+pwbox_encoded_add_skey_header(pwbox_encoded_t *inp, uint8_t elt)
+{
+#if SIZE_MAX >= UINT8_MAX
+ if (inp->skey_header.n_ == UINT8_MAX)
+ goto trunnel_alloc_failed;
+#endif
+ TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->skey_header, elt, {});
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+
+uint8_t *
+pwbox_encoded_getarray_skey_header(pwbox_encoded_t *inp)
+{
+ return inp->skey_header.elts_;
+}
+int
+pwbox_encoded_setlen_skey_header(pwbox_encoded_t *inp, size_t newlen)
+{
+ uint8_t *newptr;
+#if UINT8_MAX < SIZE_MAX
+ if (newlen > UINT8_MAX)
+ goto trunnel_alloc_failed;
+#endif
+ newptr = trunnel_dynarray_setlen(&inp->skey_header.allocated_,
+ &inp->skey_header.n_, inp->skey_header.elts_, newlen,
+ sizeof(inp->skey_header.elts_[0]), (trunnel_free_fn_t) NULL,
+ &inp->trunnel_error_code_);
+ if (newptr == NULL)
+ goto trunnel_alloc_failed;
+ inp->skey_header.elts_ = newptr;
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+size_t
+pwbox_encoded_getlen_iv(const pwbox_encoded_t *inp)
+{
+ (void)inp; return 16;
+}
+
+uint8_t
+pwbox_encoded_get_iv(const pwbox_encoded_t *inp, size_t idx)
+{
+ trunnel_assert(idx < 16);
+ return inp->iv[idx];
+}
+
+int
+pwbox_encoded_set_iv(pwbox_encoded_t *inp, size_t idx, uint8_t elt)
+{
+ trunnel_assert(idx < 16);
+ inp->iv[idx] = elt;
+ return 0;
+}
+
+uint8_t *
+pwbox_encoded_getarray_iv(pwbox_encoded_t *inp)
+{
+ return inp->iv;
+}
+size_t
+pwbox_encoded_getlen_data(const pwbox_encoded_t *inp)
+{
+ return TRUNNEL_DYNARRAY_LEN(&inp->data);
+}
+
+uint8_t
+pwbox_encoded_get_data(pwbox_encoded_t *inp, size_t idx)
+{
+ return TRUNNEL_DYNARRAY_GET(&inp->data, idx);
+}
+
+int
+pwbox_encoded_set_data(pwbox_encoded_t *inp, size_t idx, uint8_t elt)
+{
+ TRUNNEL_DYNARRAY_SET(&inp->data, idx, elt);
+ return 0;
+}
+int
+pwbox_encoded_add_data(pwbox_encoded_t *inp, uint8_t elt)
+{
+ TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->data, elt, {});
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+
+uint8_t *
+pwbox_encoded_getarray_data(pwbox_encoded_t *inp)
+{
+ return inp->data.elts_;
+}
+int
+pwbox_encoded_setlen_data(pwbox_encoded_t *inp, size_t newlen)
+{
+ uint8_t *newptr;
+ newptr = trunnel_dynarray_setlen(&inp->data.allocated_,
+ &inp->data.n_, inp->data.elts_, newlen,
+ sizeof(inp->data.elts_[0]), (trunnel_free_fn_t) NULL,
+ &inp->trunnel_error_code_);
+ if (newptr == NULL)
+ goto trunnel_alloc_failed;
+ inp->data.elts_ = newptr;
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+size_t
+pwbox_encoded_getlen_hmac(const pwbox_encoded_t *inp)
+{
+ (void)inp; return 32;
+}
+
+uint8_t
+pwbox_encoded_get_hmac(const pwbox_encoded_t *inp, size_t idx)
+{
+ trunnel_assert(idx < 32);
+ return inp->hmac[idx];
+}
+
+int
+pwbox_encoded_set_hmac(pwbox_encoded_t *inp, size_t idx, uint8_t elt)
+{
+ trunnel_assert(idx < 32);
+ inp->hmac[idx] = elt;
+ return 0;
+}
+
+uint8_t *
+pwbox_encoded_getarray_hmac(pwbox_encoded_t *inp)
+{
+ return inp->hmac;
+}
+const char *
+pwbox_encoded_check(const pwbox_encoded_t *obj)
+{
+ if (obj == NULL)
+ return "Object was NULL";
+ if (obj->trunnel_error_code_)
+ return "A set function failed on this object";
+ if (! (obj->fixedbytes0 == PWBOX0_CONST0))
+ return "Integer out of bounds";
+ if (! (obj->fixedbytes1 == PWBOX0_CONST1))
+ return "Integer out of bounds";
+ if (TRUNNEL_DYNARRAY_LEN(&obj->skey_header) != obj->header_len)
+ return "Length mismatch for skey_header";
+ return NULL;
+}
+
+ssize_t
+pwbox_encoded_encoded_len(const pwbox_encoded_t *obj)
+{
+ ssize_t result = 0;
+
+ if (NULL != pwbox_encoded_check(obj))
+ return -1;
+
+
+ /* Length of u32 fixedbytes0 IN [PWBOX0_CONST0] */
+ result += 4;
+
+ /* Length of u32 fixedbytes1 IN [PWBOX0_CONST1] */
+ result += 4;
+
+ /* Length of u8 header_len */
+ result += 1;
+
+ /* Length of u8 skey_header[header_len] */
+ result += TRUNNEL_DYNARRAY_LEN(&obj->skey_header);
+
+ /* Length of u8 iv[16] */
+ result += 16;
+
+ /* Length of u8 data[] */
+ result += TRUNNEL_DYNARRAY_LEN(&obj->data);
+
+ /* Length of u8 hmac[32] */
+ result += 32;
+ return result;
+}
+int
+pwbox_encoded_clear_errors(pwbox_encoded_t *obj)
+{
+ int r = obj->trunnel_error_code_;
+ obj->trunnel_error_code_ = 0;
+ return r;
+}
+ssize_t
+pwbox_encoded_encode(uint8_t *output, size_t avail, const pwbox_encoded_t *obj)
+{
+ ssize_t result = 0;
+ size_t written = 0;
+ uint8_t *ptr = output;
+ const char *msg;
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ const ssize_t encoded_len = pwbox_encoded_encoded_len(obj);
+#endif
+ int enforce_avail = 0;
+ const size_t avail_orig = avail;
+
+ if (NULL != (msg = pwbox_encoded_check(obj)))
+ goto check_failed;
+
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ trunnel_assert(encoded_len >= 0);
+#endif
+
+ /* Encode u32 fixedbytes0 IN [PWBOX0_CONST0] */
+ trunnel_assert(written <= avail);
+ if (avail - written < 4)
+ goto truncated;
+ trunnel_set_uint32(ptr, trunnel_htonl(obj->fixedbytes0));
+ written += 4; ptr += 4;
+
+ /* Encode u32 fixedbytes1 IN [PWBOX0_CONST1] */
+ trunnel_assert(written <= avail);
+ if (avail - written < 4)
+ goto truncated;
+ trunnel_set_uint32(ptr, trunnel_htonl(obj->fixedbytes1));
+ written += 4; ptr += 4;
+
+ /* Encode u8 header_len */
+ trunnel_assert(written <= avail);
+ if (avail - written < 1)
+ goto truncated;
+ trunnel_set_uint8(ptr, (obj->header_len));
+ written += 1; ptr += 1;
+
+ /* Encode u8 skey_header[header_len] */
+ {
+ size_t elt_len = TRUNNEL_DYNARRAY_LEN(&obj->skey_header);
+ trunnel_assert(obj->header_len == elt_len);
+ trunnel_assert(written <= avail);
+ if (avail - written < elt_len)
+ goto truncated;
+ memcpy(ptr, obj->skey_header.elts_, elt_len);
+ written += elt_len; ptr += elt_len;
+ }
+
+ /* Encode u8 iv[16] */
+ trunnel_assert(written <= avail);
+ if (avail - written < 16)
+ goto truncated;
+ memcpy(ptr, obj->iv, 16);
+ written += 16; ptr += 16;
+ {
+
+ /* Encode u8 data[] */
+ {
+ size_t elt_len = TRUNNEL_DYNARRAY_LEN(&obj->data);
+ trunnel_assert(written <= avail);
+ if (avail - written < elt_len)
+ goto truncated;
+ memcpy(ptr, obj->data.elts_, elt_len);
+ written += elt_len; ptr += elt_len;
+ }
+ trunnel_assert(written <= avail);
+ if (avail - written < 32)
+ goto truncated;
+ avail = written + 32;
+ enforce_avail = 1;
+ }
+
+ /* Encode u8 hmac[32] */
+ trunnel_assert(written <= avail);
+ if (avail - written < 32) {
+ if (avail_orig - written < 32)
+ goto truncated;
+ else
+ goto check_failed;
+ }
+ memcpy(ptr, obj->hmac, 32);
+ written += 32; ptr += 32;
+
+
+ trunnel_assert(ptr == output + written);
+ if (enforce_avail && avail != written)
+ goto check_failed;
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ {
+ trunnel_assert(encoded_len >= 0);
+ trunnel_assert((size_t)encoded_len == written);
+ }
+
+#endif
+
+ return written;
+
+ truncated:
+ result = -2;
+ goto fail;
+ check_failed:
+ (void)msg;
+ result = -1;
+ goto fail;
+ fail:
+ trunnel_assert(result < 0);
+ return result;
+}
+
+/** As pwbox_encoded_parse(), but do not allocate the output object.
+ */
+static ssize_t
+pwbox_encoded_parse_into(pwbox_encoded_t *obj, const uint8_t *input, const size_t len_in)
+{
+ const uint8_t *ptr = input;
+ size_t remaining = len_in;
+ ssize_t result = 0;
+ (void)result;
+
+ /* Parse u32 fixedbytes0 IN [PWBOX0_CONST0] */
+ CHECK_REMAINING(4, truncated);
+ obj->fixedbytes0 = trunnel_ntohl(trunnel_get_uint32(ptr));
+ remaining -= 4; ptr += 4;
+ if (! (obj->fixedbytes0 == PWBOX0_CONST0))
+ goto fail;
+
+ /* Parse u32 fixedbytes1 IN [PWBOX0_CONST1] */
+ CHECK_REMAINING(4, truncated);
+ obj->fixedbytes1 = trunnel_ntohl(trunnel_get_uint32(ptr));
+ remaining -= 4; ptr += 4;
+ if (! (obj->fixedbytes1 == PWBOX0_CONST1))
+ goto fail;
+
+ /* Parse u8 header_len */
+ CHECK_REMAINING(1, truncated);
+ obj->header_len = (trunnel_get_uint8(ptr));
+ remaining -= 1; ptr += 1;
+
+ /* Parse u8 skey_header[header_len] */
+ CHECK_REMAINING(obj->header_len, truncated);
+ TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->skey_header, obj->header_len, {});
+ obj->skey_header.n_ = obj->header_len;
+ memcpy(obj->skey_header.elts_, ptr, obj->header_len);
+ ptr += obj->header_len; remaining -= obj->header_len;
+
+ /* Parse u8 iv[16] */
+ CHECK_REMAINING(16, truncated);
+ memcpy(obj->iv, ptr, 16);
+ remaining -= 16; ptr += 16;
+ {
+ size_t remaining_after;
+ CHECK_REMAINING(32, truncated);
+ remaining_after = 32;
+ remaining = remaining - 32;
+
+ /* Parse u8 data[] */
+ TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->data, remaining, {});
+ obj->data.n_ = remaining;
+ memcpy(obj->data.elts_, ptr, remaining);
+ ptr += remaining; remaining -= remaining;
+ if (remaining != 0)
+ goto fail;
+ remaining = remaining_after;
+ }
+
+ /* Parse u8 hmac[32] */
+ CHECK_REMAINING(32, truncated);
+ memcpy(obj->hmac, ptr, 32);
+ remaining -= 32; ptr += 32;
+ trunnel_assert(ptr + remaining == input + len_in);
+ return len_in - remaining;
+
+ truncated:
+ return -2;
+ trunnel_alloc_failed:
+ return -1;
+ fail:
+ result = -1;
+ return result;
+}
+
+ssize_t
+pwbox_encoded_parse(pwbox_encoded_t **output, const uint8_t *input, const size_t len_in)
+{
+ ssize_t result;
+ *output = pwbox_encoded_new();
+ if (NULL == *output)
+ return -1;
+ result = pwbox_encoded_parse_into(*output, input, len_in);
+ if (result < 0) {
+ pwbox_encoded_free(*output);
+ *output = NULL;
+ }
+ return result;
+}
diff --git a/src/trunnel/pwbox.h b/src/trunnel/pwbox.h
new file mode 100644
index 0000000000..5b170eb45e
--- /dev/null
+++ b/src/trunnel/pwbox.h
@@ -0,0 +1,173 @@
+/* pwbox.h -- generated by by Trunnel v1.2.
+ * https://gitweb.torproject.org/trunnel.git
+ * You probably shouldn't edit this file.
+ */
+#ifndef TRUNNEL_PWBOX_H
+#define TRUNNEL_PWBOX_H
+
+#include <stdint.h>
+#include "trunnel.h"
+
+#define PWBOX0_CONST0 1414484546
+#define PWBOX0_CONST1 1331179568
+#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_PWBOX_ENCODED)
+struct pwbox_encoded_st {
+ uint32_t fixedbytes0;
+ uint32_t fixedbytes1;
+ uint8_t header_len;
+ TRUNNEL_DYNARRAY_HEAD(, uint8_t) skey_header;
+ uint8_t iv[16];
+ TRUNNEL_DYNARRAY_HEAD(, uint8_t) data;
+ uint8_t hmac[32];
+ uint8_t trunnel_error_code_;
+};
+#endif
+typedef struct pwbox_encoded_st pwbox_encoded_t;
+/** Return a newly allocated pwbox_encoded with all elements set to
+ * zero.
+ */
+pwbox_encoded_t *pwbox_encoded_new(void);
+/** Release all storage held by the pwbox_encoded in 'victim'. (Do
+ * nothing if 'victim' is NULL.)
+ */
+void pwbox_encoded_free(pwbox_encoded_t *victim);
+/** Try to parse a pwbox_encoded from the buffer in 'input', using up
+ * to 'len_in' bytes from the input buffer. On success, return the
+ * number of bytes consumed and set *output to the newly allocated
+ * pwbox_encoded_t. On failure, return -2 if the input appears
+ * truncated, and -1 if the input is otherwise invalid.
+ */
+ssize_t pwbox_encoded_parse(pwbox_encoded_t **output, const uint8_t *input, const size_t len_in);
+/** Return the number of bytes we expect to need to encode the
+ * pwbox_encoded in 'obj'. On failure, return a negative value. Note
+ * that this value may be an overestimate, and can even be an
+ * underestimate for certain unencodeable objects.
+ */
+ssize_t pwbox_encoded_encoded_len(const pwbox_encoded_t *obj);
+/** Try to encode the pwbox_encoded from 'input' into the buffer at
+ * 'output', using up to 'avail' bytes of the output buffer. On
+ * success, return the number of bytes used. On failure, return -2 if
+ * the buffer was not long enough, and -1 if the input was invalid.
+ */
+ssize_t pwbox_encoded_encode(uint8_t *output, const size_t avail, const pwbox_encoded_t *input);
+/** Check whether the internal state of the pwbox_encoded in 'obj' is
+ * consistent. Return NULL if it is, and a short message if it is not.
+ */
+const char *pwbox_encoded_check(const pwbox_encoded_t *obj);
+/** Clear any errors that were set on the object 'obj' by its setter
+ * functions. Return true iff errors were cleared.
+ */
+int pwbox_encoded_clear_errors(pwbox_encoded_t *obj);
+/** Return the value of the fixedbytes0 field of the pwbox_encoded_t
+ * in 'inp'
+ */
+uint32_t pwbox_encoded_get_fixedbytes0(pwbox_encoded_t *inp);
+/** Set the value of the fixedbytes0 field of the pwbox_encoded_t in
+ * 'inp' to 'val'. Return 0 on success; return -1 and set the error
+ * code on 'inp' on failure.
+ */
+int pwbox_encoded_set_fixedbytes0(pwbox_encoded_t *inp, uint32_t val);
+/** Return the value of the fixedbytes1 field of the pwbox_encoded_t
+ * in 'inp'
+ */
+uint32_t pwbox_encoded_get_fixedbytes1(pwbox_encoded_t *inp);
+/** Set the value of the fixedbytes1 field of the pwbox_encoded_t in
+ * 'inp' to 'val'. Return 0 on success; return -1 and set the error
+ * code on 'inp' on failure.
+ */
+int pwbox_encoded_set_fixedbytes1(pwbox_encoded_t *inp, uint32_t val);
+/** Return the value of the header_len field of the pwbox_encoded_t in
+ * 'inp'
+ */
+uint8_t pwbox_encoded_get_header_len(pwbox_encoded_t *inp);
+/** Set the value of the header_len field of the pwbox_encoded_t in
+ * 'inp' to 'val'. Return 0 on success; return -1 and set the error
+ * code on 'inp' on failure.
+ */
+int pwbox_encoded_set_header_len(pwbox_encoded_t *inp, uint8_t val);
+/** Return the length of the dynamic array holding the skey_header
+ * field of the pwbox_encoded_t in 'inp'.
+ */
+size_t pwbox_encoded_getlen_skey_header(const pwbox_encoded_t *inp);
+/** Return the element at position 'idx' of the dynamic array field
+ * skey_header of the pwbox_encoded_t in 'inp'.
+ */
+uint8_t pwbox_encoded_get_skey_header(pwbox_encoded_t *inp, size_t idx);
+/** Change the element at position 'idx' of the dynamic array field
+ * skey_header of the pwbox_encoded_t in 'inp', so that it will hold
+ * the value 'elt'.
+ */
+int pwbox_encoded_set_skey_header(pwbox_encoded_t *inp, size_t idx, uint8_t elt);
+/** Append a new element 'elt' to the dynamic array field skey_header
+ * of the pwbox_encoded_t in 'inp'.
+ */
+int pwbox_encoded_add_skey_header(pwbox_encoded_t *inp, uint8_t elt);
+/** Return a pointer to the variable-length array field skey_header of
+ * 'inp'.
+ */
+uint8_t * pwbox_encoded_getarray_skey_header(pwbox_encoded_t *inp);
+/** Change the length of the variable-length array field skey_header
+ * of 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on
+ * success; return -1 and set the error code on 'inp' on failure.
+ */
+int pwbox_encoded_setlen_skey_header(pwbox_encoded_t *inp, size_t newlen);
+/** Return the (constant) length of the array holding the iv field of
+ * the pwbox_encoded_t in 'inp'.
+ */
+size_t pwbox_encoded_getlen_iv(const pwbox_encoded_t *inp);
+/** Return the element at position 'idx' of the fixed array field iv
+ * of the pwbox_encoded_t in 'inp'.
+ */
+uint8_t pwbox_encoded_get_iv(const pwbox_encoded_t *inp, size_t idx);
+/** Change the element at position 'idx' of the fixed array field iv
+ * of the pwbox_encoded_t in 'inp', so that it will hold the value
+ * 'elt'.
+ */
+int pwbox_encoded_set_iv(pwbox_encoded_t *inp, size_t idx, uint8_t elt);
+/** Return a pointer to the 16-element array field iv of 'inp'.
+ */
+uint8_t * pwbox_encoded_getarray_iv(pwbox_encoded_t *inp);
+/** Return the length of the dynamic array holding the data field of
+ * the pwbox_encoded_t in 'inp'.
+ */
+size_t pwbox_encoded_getlen_data(const pwbox_encoded_t *inp);
+/** Return the element at position 'idx' of the dynamic array field
+ * data of the pwbox_encoded_t in 'inp'.
+ */
+uint8_t pwbox_encoded_get_data(pwbox_encoded_t *inp, size_t idx);
+/** Change the element at position 'idx' of the dynamic array field
+ * data of the pwbox_encoded_t in 'inp', so that it will hold the
+ * value 'elt'.
+ */
+int pwbox_encoded_set_data(pwbox_encoded_t *inp, size_t idx, uint8_t elt);
+/** Append a new element 'elt' to the dynamic array field data of the
+ * pwbox_encoded_t in 'inp'.
+ */
+int pwbox_encoded_add_data(pwbox_encoded_t *inp, uint8_t elt);
+/** Return a pointer to the variable-length array field data of 'inp'.
+ */
+uint8_t * pwbox_encoded_getarray_data(pwbox_encoded_t *inp);
+/** Change the length of the variable-length array field data of 'inp'
+ * to 'newlen'.Fill extra elements with 0. Return 0 on success; return
+ * -1 and set the error code on 'inp' on failure.
+ */
+int pwbox_encoded_setlen_data(pwbox_encoded_t *inp, size_t newlen);
+/** Return the (constant) length of the array holding the hmac field
+ * of the pwbox_encoded_t in 'inp'.
+ */
+size_t pwbox_encoded_getlen_hmac(const pwbox_encoded_t *inp);
+/** Return the element at position 'idx' of the fixed array field hmac
+ * of the pwbox_encoded_t in 'inp'.
+ */
+uint8_t pwbox_encoded_get_hmac(const pwbox_encoded_t *inp, size_t idx);
+/** Change the element at position 'idx' of the fixed array field hmac
+ * of the pwbox_encoded_t in 'inp', so that it will hold the value
+ * 'elt'.
+ */
+int pwbox_encoded_set_hmac(pwbox_encoded_t *inp, size_t idx, uint8_t elt);
+/** Return a pointer to the 32-element array field hmac of 'inp'.
+ */
+uint8_t * pwbox_encoded_getarray_hmac(pwbox_encoded_t *inp);
+
+
+#endif
diff --git a/src/trunnel/pwbox.trunnel b/src/trunnel/pwbox.trunnel
new file mode 100644
index 0000000000..10db74b4e5
--- /dev/null
+++ b/src/trunnel/pwbox.trunnel
@@ -0,0 +1,14 @@
+
+const PWBOX0_CONST0 = 0x544f5242; // TORB
+const PWBOX0_CONST1 = 0x4f583030; // OX00
+
+struct pwbox_encoded {
+ u32 fixedbytes0 IN [PWBOX0_CONST0];
+ u32 fixedbytes1 IN [PWBOX0_CONST1];
+ u8 header_len;
+ u8 skey_header[header_len];
+ u8 iv[16];
+ u8 data[..-32];
+ u8 hmac[32];
+};
+
diff --git a/src/trunnel/trunnel-local.h b/src/trunnel/trunnel-local.h
new file mode 100644
index 0000000000..b7c2ab98ef
--- /dev/null
+++ b/src/trunnel/trunnel-local.h
@@ -0,0 +1,18 @@
+
+#ifndef TRUNNEL_LOCAL_H_INCLUDED
+#define TRUNNEL_LOCAL_H_INCLUDED
+
+#include "util.h"
+#include "compat.h"
+#include "crypto.h"
+
+#define trunnel_malloc tor_malloc
+#define trunnel_calloc tor_calloc
+#define trunnel_strdup tor_strdup
+#define trunnel_free_ tor_free_
+#define trunnel_realloc tor_realloc
+#define trunnel_reallocarray tor_reallocarray
+#define trunnel_assert tor_assert
+#define trunnel_memwipe(mem, len) memwipe((mem), 0, (len))
+
+#endif
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index aa29d0ccaf..cee81b31eb 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -232,7 +232,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.6.0-alpha-dev"
+#define VERSION "0.2.6.1-alpha-dev"
@@ -244,7 +244,6 @@
#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