diff options
Diffstat (limited to 'src/network')
59 files changed, 17296 insertions, 674 deletions
diff --git a/src/network/.prev_CMakeLists.txt b/src/network/.prev_CMakeLists.txt new file mode 100644 index 0000000000..8f38d07e93 --- /dev/null +++ b/src/network/.prev_CMakeLists.txt @@ -0,0 +1,460 @@ +# Generated from network.pro. + +##################################################################### +## Network Module: +##################################################################### + +qt_add_module(Network + SOURCES + access/qabstractnetworkcache.cpp access/qabstractnetworkcache.h access/qabstractnetworkcache_p.h + access/qhsts.cpp access/qhsts_p.h + access/qhstspolicy.cpp access/qhstspolicy.h + access/qnetworkaccessauthenticationmanager.cpp access/qnetworkaccessauthenticationmanager_p.h + access/qnetworkaccessbackend.cpp access/qnetworkaccessbackend_p.h + access/qnetworkaccesscache.cpp access/qnetworkaccesscache_p.h + access/qnetworkaccesscachebackend.cpp access/qnetworkaccesscachebackend_p.h + access/qnetworkaccessdebugpipebackend.cpp access/qnetworkaccessdebugpipebackend_p.h + access/qnetworkaccessfilebackend.cpp access/qnetworkaccessfilebackend_p.h + access/qnetworkaccessmanager.cpp access/qnetworkaccessmanager.h access/qnetworkaccessmanager_p.h + access/qnetworkcookie.cpp access/qnetworkcookie.h access/qnetworkcookie_p.h + access/qnetworkcookiejar.cpp access/qnetworkcookiejar.h access/qnetworkcookiejar_p.h + access/qnetworkfile.cpp access/qnetworkfile_p.h + access/qnetworkreply.cpp access/qnetworkreply.h access/qnetworkreply_p.h + access/qnetworkreplydataimpl.cpp access/qnetworkreplydataimpl_p.h + access/qnetworkreplyfileimpl.cpp access/qnetworkreplyfileimpl_p.h + access/qnetworkreplyimpl.cpp access/qnetworkreplyimpl_p.h + access/qnetworkrequest.cpp access/qnetworkrequest.h access/qnetworkrequest_p.h + kernel/qauthenticator.cpp kernel/qauthenticator.h kernel/qauthenticator_p.h + kernel/qhostaddress.cpp kernel/qhostaddress.h kernel/qhostaddress_p.h + kernel/qhostinfo.cpp kernel/qhostinfo.h kernel/qhostinfo_p.h + kernel/qnetconmonitor_p.h + kernel/qnetworkdatagram.cpp kernel/qnetworkdatagram.h kernel/qnetworkdatagram_p.h + kernel/qnetworkinterface.cpp kernel/qnetworkinterface.h kernel/qnetworkinterface_p.h + kernel/qnetworkinterface_unix_p.h + kernel/qnetworkproxy.cpp kernel/qnetworkproxy.h + kernel/qtnetworkglobal.h kernel/qtnetworkglobal_p.h + socket/qabstractsocket.cpp socket/qabstractsocket.h socket/qabstractsocket_p.h + socket/qabstractsocketengine.cpp socket/qabstractsocketengine_p.h + socket/qtcpserver.cpp socket/qtcpserver.h socket/qtcpserver_p.h + socket/qtcpsocket.cpp socket/qtcpsocket.h socket/qtcpsocket_p.h + socket/qudpsocket.cpp socket/qudpsocket.h + ssl/qasn1element.cpp ssl/qasn1element_p.h + ssl/qpassworddigestor.cpp ssl/qpassworddigestor.h + ssl/qssl.cpp ssl/qssl.h ssl/qssl_p.h + ssl/qsslcertificate.cpp ssl/qsslcertificate.h ssl/qsslcertificate_p.h + ssl/qsslcertificateextension.cpp ssl/qsslcertificateextension.h ssl/qsslcertificateextension_p.h + DEFINES + QT_NO_FOREACH + QT_NO_USING_NAMESPACE + INCLUDE_DIRECTORIES + kernel + LIBRARIES + Qt::CorePrivate + PUBLIC_LIBRARIES + Qt::Core + PRIVATE_MODULE_INTERFACE + Qt::CorePrivate + PRECOMPILED_HEADER + "../corelib/global/qt_pch.h" +) + +#### Keys ignored in scope 1:.:.:network.pro:<TRUE>: +# MODULE_WINRT_CAPABILITIES = "internetClient" "internetClientServer" "privateNetworkClientServer" +# QMAKE_LIBS = "$$QMAKE_LIBS_NETWORK" + +## Scopes: +##################################################################### + +qt_extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386") + LINK_OPTIONS + "/BASE:0x64000000" +) + +if(ANDROID AND (QT_FEATURE_bearermanagement)) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES + jar/QtAndroidBearer.jar + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES + plugins/bearer/libplugins_bearer_qandroidbearer.so + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_PERMISSIONS + android.permission.ACCESS_NETWORK_STATE + ) +endif() + +qt_extend_target(Network CONDITION QT_FEATURE_bearermanagement + SOURCES + bearer/qbearerengine.cpp bearer/qbearerengine_p.h + bearer/qbearerengine_impl_p.h + bearer/qbearerplugin.cpp bearer/qbearerplugin_p.h + bearer/qnetworkconfigmanager.cpp bearer/qnetworkconfigmanager.h bearer/qnetworkconfigmanager_p.cpp bearer/qnetworkconfigmanager_p.h + bearer/qnetworkconfiguration.cpp bearer/qnetworkconfiguration.h bearer/qnetworkconfiguration_p.h + bearer/qnetworksession.cpp bearer/qnetworksession.h bearer/qnetworksession_p.h + bearer/qnetworksession_impl.cpp bearer/qnetworksession_impl_p.h + bearer/qsharednetworksession.cpp bearer/qsharednetworksession_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ftp + SOURCES + access/qftp.cpp access/qftp_p.h + access/qnetworkaccessftpbackend.cpp access/qnetworkaccessftpbackend_p.h + kernel/qurlinfo.cpp kernel/qurlinfo_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_networkdiskcache + SOURCES + access/qnetworkdiskcache.cpp access/qnetworkdiskcache.h access/qnetworkdiskcache_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_settings + SOURCES + access/qhstsstore.cpp access/qhstsstore_p.h +) + +qt_extend_target(Network CONDITION APPLE + LIBRARIES + ${FWCoreFoundation} + ${FWSecurity} +) + +qt_extend_target(Network CONDITION WASM + SOURCES + access/qnetworkreplywasmimpl.cpp access/qnetworkreplywasmimpl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_http + SOURCES + access/http2/bitstreams.cpp access/http2/bitstreams_p.h + access/http2/hpack.cpp access/http2/hpack_p.h + access/http2/hpacktable.cpp access/http2/hpacktable_p.h + access/http2/http2frames.cpp access/http2/http2frames_p.h + access/http2/http2protocol.cpp access/http2/http2protocol_p.h + access/http2/http2streams.cpp access/http2/http2streams_p.h + access/http2/huffman.cpp access/http2/huffman_p.h + access/qabstractprotocolhandler.cpp access/qabstractprotocolhandler_p.h + access/qhttp2configuration.cpp access/qhttp2configuration.h + access/qhttp2protocolhandler.cpp access/qhttp2protocolhandler_p.h + access/qhttpmultipart.cpp access/qhttpmultipart.h access/qhttpmultipart_p.h + access/qhttpnetworkconnection.cpp access/qhttpnetworkconnection_p.h + access/qhttpnetworkconnectionchannel.cpp access/qhttpnetworkconnectionchannel_p.h + access/qhttpnetworkheader.cpp access/qhttpnetworkheader_p.h + access/qhttpnetworkreply.cpp access/qhttpnetworkreply_p.h + access/qhttpnetworkrequest.cpp access/qhttpnetworkrequest_p.h + access/qhttpprotocolhandler.cpp access/qhttpprotocolhandler_p.h + access/qhttpthreaddelegate.cpp access/qhttpthreaddelegate_p.h + access/qnetworkreplyhttpimpl.cpp access/qnetworkreplyhttpimpl_p.h + socket/qhttpsocketengine.cpp socket/qhttpsocketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_zlib + LIBRARIES + ZLIB::ZLIB +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib + INCLUDE_DIRECTORIES + ../3rdparty/zlib/src +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep + LIBRARIES + Qt::Core +) + +qt_extend_target(Network CONDITION QT_FEATURE_topleveldomain + SOURCES + kernel/qtldurl.cpp kernel/qtldurl_p.h + kernel/qurltlds_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup.cpp kernel/qdnslookup.h kernel/qdnslookup_p.h +) + +qt_extend_target(Network CONDITION UNIX + SOURCES + kernel/qhostinfo_unix.cpp + socket/qnativesocketengine_unix.cpp + socket/qnet_unix_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dlopen AND UNIX + LIBRARIES + ${CMAKE_DL_LIBS} +) + +qt_extend_target(Network CONDITION QT_FEATURE_linux_netlink AND UNIX + SOURCES + kernel/qnetworkinterface_linux.cpp +) + +qt_extend_target(Network CONDITION UNIX AND NOT QT_FEATURE_linux_netlink + SOURCES + kernel/qnetworkinterface_unix.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup_android.cpp +) + +qt_extend_target(Network CONDITION WIN32 + SOURCES + kernel/qhostinfo_win.cpp +) + +qt_extend_target(Network CONDITION WIN32 AND NOT WINRT + SOURCES + kernel/qnetworkinterface_win.cpp + kernel/qnetworkproxy_win.cpp + socket/qnativesocketengine_win.cpp + LIBRARIES + advapi32 + dnsapi + iphlpapi +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WIN32 AND NOT WINRT + SOURCES + kernel/qdnslookup_win.cpp +) + +qt_extend_target(Network CONDITION WINRT + SOURCES + kernel/qnetworkinterface_winrt.cpp + socket/qnativesocketengine_winrt.cpp socket/qnativesocketengine_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WINRT + SOURCES + kernel/qdnslookup_winrt.cpp +) + +qt_extend_target(Network CONDITION APPLE AND NOT APPLE_UIKIT + LIBRARIES + ${FWCoreServices} + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION APPLE_IOS OR APPLE_OSX + SOURCES + kernel/qnetconmonitor_darwin.mm + LIBRARIES + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION QT_FEATURE_netlistmgr AND NOT APPLE_IOS AND NOT APPLE_OSX + SOURCES + kernel/qnetconmonitor_win.cpp +) + +qt_extend_target(Network CONDITION NOT APPLE_IOS AND NOT APPLE_OSX AND NOT QT_FEATURE_netlistmgr + SOURCES + kernel/qnetconmonitor_stub.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_gssapi + LIBRARIES + GSSAPI::GSSAPI +) + +qt_extend_target(Network CONDITION APPLE_UIKIT + SOURCES + kernel/qnetworkinterface_uikit_p.h +) + +qt_extend_target(Network CONDITION APPLE_OSX + SOURCES + kernel/qnetworkproxy_mac.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_libproxy AND NOT APPLE_OSX AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_libproxy.cpp + LIBRARIES + ${CMAKE_DL_LIBS} + PkgConfig::Libproxy +) + +qt_extend_target(Network CONDITION NOT APPLE_OSX AND NOT QT_FEATURE_libproxy AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_generic.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_socks5 + SOURCES + socket/qsocks5socketengine.cpp socket/qsocks5socketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_sctp + SOURCES + socket/qsctpserver.cpp socket/qsctpserver.h socket/qsctpserver_p.h + socket/qsctpsocket.cpp socket/qsctpsocket.h socket/qsctpsocket_p.h +) + +qt_extend_target(Network CONDITION NOT WINRT + SOURCES + socket/qnativesocketengine.cpp socket/qnativesocketengine_p.h +) + +qt_extend_target(Network CONDITION MSVC + MOC_OPTIONS + "-D_WINSOCK_DEPRECATED_NO_WARNINGS" +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver + SOURCES + socket/qlocalserver.cpp socket/qlocalserver.h socket/qlocalserver_p.h + socket/qlocalsocket.cpp socket/qlocalsocket.h socket/qlocalsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND (INTEGRITY OR WINRT) + SOURCES + socket/qlocalserver_tcp.cpp + socket/qlocalsocket_tcp.cpp + DEFINES + QT_LOCALSOCKET_TCP +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND UNIX AND NOT INTEGRITY AND NOT WINRT + SOURCES + socket/qlocalserver_unix.cpp + socket/qlocalsocket_unix.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND WIN32 AND NOT WINRT + SOURCES + socket/qlocalserver_win.cpp + socket/qlocalsocket_win.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_proxies + DEFINES + QT_USE_SYSTEM_PROXIES +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_openssl + SOURCES + ssl/qsslcertificate_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl + SOURCES + ssl/qocspresponse.cpp ssl/qocspresponse.h ssl/qocspresponse_p.h + ssl/qsslcipher.cpp ssl/qsslcipher.h ssl/qsslcipher_p.h + ssl/qsslconfiguration.cpp ssl/qsslconfiguration.h ssl/qsslconfiguration_p.h + ssl/qssldiffiehellmanparameters.cpp ssl/qssldiffiehellmanparameters.h ssl/qssldiffiehellmanparameters_p.h + ssl/qsslellipticcurve.cpp ssl/qsslellipticcurve.h + ssl/qsslerror.cpp ssl/qsslerror.h + ssl/qsslkey.h ssl/qsslkey_p.cpp ssl/qsslkey_p.h + ssl/qsslpresharedkeyauthenticator.cpp ssl/qsslpresharedkeyauthenticator.h ssl/qsslpresharedkeyauthenticator_p.h + ssl/qsslsocket.cpp ssl/qsslsocket.h ssl/qsslsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl AND WINRT + SOURCES + ssl/qsslcertificate_winrt.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_winrt.cpp + ssl/qsslsocket_winrt.cpp ssl/qsslsocket_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_schannel AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_schannel.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_schannel.cpp + ssl/qsslsocket_qt.cpp + ssl/qsslsocket_schannel.cpp ssl/qsslsocket_schannel_p.h + LIBRARIES + Crypt32 + Secur32 + bcrypt + ncrypt +) + +qt_extend_target(Network CONDITION QT_FEATURE_securetransport AND QT_FEATURE_ssl + SOURCES + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_mac.cpp + ssl/qsslkey_qt.cpp + ssl/qsslsocket_mac.cpp ssl/qsslsocket_mac_p.h + ssl/qsslsocket_mac_shared.cpp + ssl/qsslsocket_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_ssl + SOURCES + ssl/qdtls.cpp ssl/qdtls.h ssl/qdtls_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_openssl.cpp + ssl/qsslcontext_openssl.cpp ssl/qsslcontext_openssl_p.h + ssl/qssldiffiehellmanparameters_openssl.cpp + ssl/qsslellipticcurve_openssl.cpp + ssl/qsslkey_openssl.cpp + ssl/qsslsocket_openssl.cpp ssl/qsslsocket_openssl_p.h + ssl/qsslsocket_openssl_symbols.cpp ssl/qsslsocket_openssl_symbols_p.h + DEFINES + OPENSSL_API_COMPAT=0x10100000L +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qdtls_openssl.cpp ssl/qdtls_openssl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ocsp AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qocsp_p.h +) + +qt_extend_target(Network CONDITION APPLE AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslsocket_mac_shared.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT ANDROID_EMBEDDED + SOURCES + ssl/qsslsocket_openssl_android.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND build_pass + LIBRARIES + crypto_${CMAKE_SYSTEM_PROCESSOR} + ssl_${CMAKE_SYSTEM_PROCESSOR} +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND NOT ANDROID + LIBRARIES + OpenSSL::SSL +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked + LIBRARIES + OpenSSL::SSL_nolink +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32 + SOURCES + ssl/qwindowscarootfetcher.cpp ssl/qwindowscarootfetcher_p.h + LIBRARIES + crypt32 +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND UNIX AND NOT ANDROID AND NOT INTEGRITY + SOURCES + kernel/qdnslookup_unix.cpp +) +qt_add_docs(Network + doc/qtnetwork.qdocconf +) + diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt new file mode 100644 index 0000000000..c455a00121 --- /dev/null +++ b/src/network/CMakeLists.txt @@ -0,0 +1,474 @@ +# Generated from network.pro. + +# special case begin +# Temporary fix for OpenSSL feature detection until we can provide a +# proper implementation of additional compile tests for library dependencies +# in configure.json + +find_package(OpenSSL) +if (NOT OPENSSL_FOUND OR NOT OPENSSL_VERSION VERSION_GREATER_EQUAL "1.1.0") + set(QT_FEATURE_openssl_runtime OFF CACHE BOOL "" FORCE) + set(QT_FEATURE_openssl_linked OFF CACHE BOOL "" FORCE) + set(QT_FEATURE_openssl OFF CACHE BOOL "" FORCE) +endif() +# special case end + +##################################################################### +## Network Module: +##################################################################### + +qt_add_module(Network + SOURCES + access/qabstractnetworkcache.cpp access/qabstractnetworkcache.h access/qabstractnetworkcache_p.h + access/qhsts.cpp access/qhsts_p.h + access/qhstspolicy.cpp access/qhstspolicy.h + access/qnetworkaccessauthenticationmanager.cpp access/qnetworkaccessauthenticationmanager_p.h + access/qnetworkaccessbackend.cpp access/qnetworkaccessbackend_p.h + access/qnetworkaccesscache.cpp access/qnetworkaccesscache_p.h + access/qnetworkaccesscachebackend.cpp access/qnetworkaccesscachebackend_p.h + access/qnetworkaccessdebugpipebackend.cpp access/qnetworkaccessdebugpipebackend_p.h + access/qnetworkaccessfilebackend.cpp access/qnetworkaccessfilebackend_p.h + access/qnetworkaccessmanager.cpp access/qnetworkaccessmanager.h access/qnetworkaccessmanager_p.h + access/qnetworkcookie.cpp access/qnetworkcookie.h access/qnetworkcookie_p.h + access/qnetworkcookiejar.cpp access/qnetworkcookiejar.h access/qnetworkcookiejar_p.h + access/qnetworkfile.cpp access/qnetworkfile_p.h + access/qnetworkreply.cpp access/qnetworkreply.h access/qnetworkreply_p.h + access/qnetworkreplydataimpl.cpp access/qnetworkreplydataimpl_p.h + access/qnetworkreplyfileimpl.cpp access/qnetworkreplyfileimpl_p.h + access/qnetworkreplyimpl.cpp access/qnetworkreplyimpl_p.h + access/qnetworkrequest.cpp access/qnetworkrequest.h access/qnetworkrequest_p.h + kernel/qauthenticator.cpp kernel/qauthenticator.h kernel/qauthenticator_p.h + kernel/qhostaddress.cpp kernel/qhostaddress.h kernel/qhostaddress_p.h + kernel/qhostinfo.cpp kernel/qhostinfo.h kernel/qhostinfo_p.h + kernel/qnetconmonitor_p.h + kernel/qnetworkdatagram.cpp kernel/qnetworkdatagram.h kernel/qnetworkdatagram_p.h + kernel/qnetworkinterface.cpp kernel/qnetworkinterface.h kernel/qnetworkinterface_p.h + kernel/qnetworkinterface_unix_p.h + kernel/qnetworkproxy.cpp kernel/qnetworkproxy.h + kernel/qtnetworkglobal.h kernel/qtnetworkglobal_p.h + socket/qabstractsocket.cpp socket/qabstractsocket.h socket/qabstractsocket_p.h + socket/qabstractsocketengine.cpp socket/qabstractsocketengine_p.h + socket/qtcpserver.cpp socket/qtcpserver.h socket/qtcpserver_p.h + socket/qtcpsocket.cpp socket/qtcpsocket.h socket/qtcpsocket_p.h + socket/qudpsocket.cpp socket/qudpsocket.h + ssl/qasn1element.cpp ssl/qasn1element_p.h + ssl/qpassworddigestor.cpp ssl/qpassworddigestor.h + ssl/qssl.cpp ssl/qssl.h ssl/qssl_p.h + ssl/qsslcertificate.cpp ssl/qsslcertificate.h ssl/qsslcertificate_p.h + ssl/qsslcertificateextension.cpp ssl/qsslcertificateextension.h ssl/qsslcertificateextension_p.h + DEFINES + QT_NO_FOREACH + QT_NO_USING_NAMESPACE + INCLUDE_DIRECTORIES + kernel + LIBRARIES + Qt::CorePrivate + PUBLIC_LIBRARIES + Qt::Core + PRIVATE_MODULE_INTERFACE + Qt::CorePrivate + PRECOMPILED_HEADER + "../corelib/global/qt_pch.h" +) + +#### Keys ignored in scope 1:.:.:network.pro:<TRUE>: +# MODULE_WINRT_CAPABILITIES = "internetClient" "internetClientServer" "privateNetworkClientServer" +# QMAKE_LIBS = "$$QMAKE_LIBS_NETWORK" + +## Scopes: +##################################################################### + +qt_extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386") + LINK_OPTIONS + "/BASE:0x64000000" +) + +if(ANDROID AND (QT_FEATURE_bearermanagement)) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES + jar/QtAndroidBearer.jar + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES + plugins/bearer/libplugins_bearer_qandroidbearer.so + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_PERMISSIONS + android.permission.ACCESS_NETWORK_STATE + ) +endif() + +qt_extend_target(Network CONDITION QT_FEATURE_bearermanagement + SOURCES + bearer/qbearerengine.cpp bearer/qbearerengine_p.h + bearer/qbearerengine_impl_p.h + bearer/qbearerplugin.cpp bearer/qbearerplugin_p.h + bearer/qnetworkconfigmanager.cpp bearer/qnetworkconfigmanager.h bearer/qnetworkconfigmanager_p.cpp bearer/qnetworkconfigmanager_p.h + bearer/qnetworkconfiguration.cpp bearer/qnetworkconfiguration.h bearer/qnetworkconfiguration_p.h + bearer/qnetworksession.cpp bearer/qnetworksession.h bearer/qnetworksession_p.h + bearer/qnetworksession_impl.cpp bearer/qnetworksession_impl_p.h + bearer/qsharednetworksession.cpp bearer/qsharednetworksession_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ftp + SOURCES + access/qftp.cpp access/qftp_p.h + access/qnetworkaccessftpbackend.cpp access/qnetworkaccessftpbackend_p.h + kernel/qurlinfo.cpp kernel/qurlinfo_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_networkdiskcache + SOURCES + access/qnetworkdiskcache.cpp access/qnetworkdiskcache.h access/qnetworkdiskcache_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_settings + SOURCES + access/qhstsstore.cpp access/qhstsstore_p.h +) + +qt_extend_target(Network CONDITION APPLE + LIBRARIES + ${FWCoreFoundation} + ${FWSecurity} +) + +qt_extend_target(Network CONDITION WASM + SOURCES + access/qnetworkreplywasmimpl.cpp access/qnetworkreplywasmimpl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_http + SOURCES + access/http2/bitstreams.cpp access/http2/bitstreams_p.h + access/http2/hpack.cpp access/http2/hpack_p.h + access/http2/hpacktable.cpp access/http2/hpacktable_p.h + access/http2/http2frames.cpp access/http2/http2frames_p.h + access/http2/http2protocol.cpp access/http2/http2protocol_p.h + access/http2/http2streams.cpp access/http2/http2streams_p.h + access/http2/huffman.cpp access/http2/huffman_p.h + access/qabstractprotocolhandler.cpp access/qabstractprotocolhandler_p.h + access/qhttp2configuration.cpp access/qhttp2configuration.h + access/qhttp2protocolhandler.cpp access/qhttp2protocolhandler_p.h + access/qhttpmultipart.cpp access/qhttpmultipart.h access/qhttpmultipart_p.h + access/qhttpnetworkconnection.cpp access/qhttpnetworkconnection_p.h + access/qhttpnetworkconnectionchannel.cpp access/qhttpnetworkconnectionchannel_p.h + access/qhttpnetworkheader.cpp access/qhttpnetworkheader_p.h + access/qhttpnetworkreply.cpp access/qhttpnetworkreply_p.h + access/qhttpnetworkrequest.cpp access/qhttpnetworkrequest_p.h + access/qhttpprotocolhandler.cpp access/qhttpprotocolhandler_p.h + access/qhttpthreaddelegate.cpp access/qhttpthreaddelegate_p.h + access/qnetworkreplyhttpimpl.cpp access/qnetworkreplyhttpimpl_p.h + socket/qhttpsocketengine.cpp socket/qhttpsocketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_zlib + LIBRARIES + ZLIB::ZLIB +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib + INCLUDE_DIRECTORIES + ../3rdparty/zlib/src +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep + LIBRARIES + Qt::Core +) + +qt_extend_target(Network CONDITION QT_FEATURE_topleveldomain + SOURCES + kernel/qtldurl.cpp kernel/qtldurl_p.h + kernel/qurltlds_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup.cpp kernel/qdnslookup.h kernel/qdnslookup_p.h +) + +qt_extend_target(Network CONDITION UNIX + SOURCES + kernel/qhostinfo_unix.cpp + socket/qnativesocketengine_unix.cpp + socket/qnet_unix_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dlopen AND UNIX + LIBRARIES + ${CMAKE_DL_LIBS} +) + +qt_extend_target(Network CONDITION QT_FEATURE_linux_netlink AND UNIX + SOURCES + kernel/qnetworkinterface_linux.cpp +) + +qt_extend_target(Network CONDITION UNIX AND NOT QT_FEATURE_linux_netlink + SOURCES + kernel/qnetworkinterface_unix.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup_android.cpp +) + +qt_extend_target(Network CONDITION WIN32 + SOURCES + kernel/qhostinfo_win.cpp +) + +qt_extend_target(Network CONDITION WIN32 AND NOT WINRT + SOURCES + kernel/qnetworkinterface_win.cpp + kernel/qnetworkproxy_win.cpp + socket/qnativesocketengine_win.cpp + LIBRARIES + advapi32 + dnsapi + iphlpapi +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WIN32 AND NOT WINRT + SOURCES + kernel/qdnslookup_win.cpp +) + +qt_extend_target(Network CONDITION WINRT + SOURCES + kernel/qnetworkinterface_winrt.cpp + socket/qnativesocketengine_winrt.cpp socket/qnativesocketengine_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WINRT + SOURCES + kernel/qdnslookup_winrt.cpp +) + +qt_extend_target(Network CONDITION APPLE AND NOT APPLE_UIKIT + LIBRARIES + ${FWCoreServices} + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION APPLE_IOS OR APPLE_OSX + SOURCES + kernel/qnetconmonitor_darwin.mm + LIBRARIES + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION QT_FEATURE_netlistmgr AND NOT APPLE_IOS AND NOT APPLE_OSX + SOURCES + kernel/qnetconmonitor_win.cpp +) + +qt_extend_target(Network CONDITION NOT APPLE_IOS AND NOT APPLE_OSX AND NOT QT_FEATURE_netlistmgr + SOURCES + kernel/qnetconmonitor_stub.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_gssapi + LIBRARIES + GSSAPI::GSSAPI +) + +qt_extend_target(Network CONDITION APPLE_UIKIT + SOURCES + kernel/qnetworkinterface_uikit_p.h +) + +qt_extend_target(Network CONDITION APPLE_OSX + SOURCES + kernel/qnetworkproxy_mac.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_libproxy AND NOT APPLE_OSX AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_libproxy.cpp + LIBRARIES + ${CMAKE_DL_LIBS} + PkgConfig::Libproxy +) + +qt_extend_target(Network CONDITION NOT APPLE_OSX AND NOT QT_FEATURE_libproxy AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_generic.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_socks5 + SOURCES + socket/qsocks5socketengine.cpp socket/qsocks5socketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_sctp + SOURCES + socket/qsctpserver.cpp socket/qsctpserver.h socket/qsctpserver_p.h + socket/qsctpsocket.cpp socket/qsctpsocket.h socket/qsctpsocket_p.h +) + +qt_extend_target(Network CONDITION NOT WINRT + SOURCES + socket/qnativesocketengine.cpp socket/qnativesocketengine_p.h +) + +qt_extend_target(Network CONDITION MSVC + MOC_OPTIONS + "-D_WINSOCK_DEPRECATED_NO_WARNINGS" +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver + SOURCES + socket/qlocalserver.cpp socket/qlocalserver.h socket/qlocalserver_p.h + socket/qlocalsocket.cpp socket/qlocalsocket.h socket/qlocalsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND (INTEGRITY OR WINRT) + SOURCES + socket/qlocalserver_tcp.cpp + socket/qlocalsocket_tcp.cpp + DEFINES + QT_LOCALSOCKET_TCP +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND UNIX AND NOT INTEGRITY AND NOT WINRT + SOURCES + socket/qlocalserver_unix.cpp + socket/qlocalsocket_unix.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND WIN32 AND NOT WINRT + SOURCES + socket/qlocalserver_win.cpp + socket/qlocalsocket_win.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_proxies + DEFINES + QT_USE_SYSTEM_PROXIES +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_openssl + SOURCES + ssl/qsslcertificate_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl + SOURCES + ssl/qocspresponse.cpp ssl/qocspresponse.h ssl/qocspresponse_p.h + ssl/qsslcipher.cpp ssl/qsslcipher.h ssl/qsslcipher_p.h + ssl/qsslconfiguration.cpp ssl/qsslconfiguration.h ssl/qsslconfiguration_p.h + ssl/qssldiffiehellmanparameters.cpp ssl/qssldiffiehellmanparameters.h ssl/qssldiffiehellmanparameters_p.h + ssl/qsslellipticcurve.cpp ssl/qsslellipticcurve.h + ssl/qsslerror.cpp ssl/qsslerror.h + ssl/qsslkey.h ssl/qsslkey_p.cpp ssl/qsslkey_p.h + ssl/qsslpresharedkeyauthenticator.cpp ssl/qsslpresharedkeyauthenticator.h ssl/qsslpresharedkeyauthenticator_p.h + ssl/qsslsocket.cpp ssl/qsslsocket.h ssl/qsslsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl AND WINRT + SOURCES + ssl/qsslcertificate_winrt.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_winrt.cpp + ssl/qsslsocket_winrt.cpp ssl/qsslsocket_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_schannel AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_schannel.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_schannel.cpp + ssl/qsslsocket_qt.cpp + ssl/qsslsocket_schannel.cpp ssl/qsslsocket_schannel_p.h + LIBRARIES + Crypt32 + Secur32 + bcrypt + ncrypt +) + +qt_extend_target(Network CONDITION QT_FEATURE_securetransport AND QT_FEATURE_ssl + SOURCES + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_mac.cpp + ssl/qsslkey_qt.cpp + ssl/qsslsocket_mac.cpp ssl/qsslsocket_mac_p.h + ssl/qsslsocket_mac_shared.cpp + ssl/qsslsocket_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_ssl + SOURCES + ssl/qdtls.cpp ssl/qdtls.h ssl/qdtls_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_openssl.cpp + ssl/qsslcontext_openssl.cpp ssl/qsslcontext_openssl_p.h + ssl/qssldiffiehellmanparameters_openssl.cpp + ssl/qsslellipticcurve_openssl.cpp + ssl/qsslkey_openssl.cpp + ssl/qsslsocket_openssl.cpp ssl/qsslsocket_openssl_p.h + ssl/qsslsocket_openssl_symbols.cpp ssl/qsslsocket_openssl_symbols_p.h + DEFINES + OPENSSL_API_COMPAT=0x10100000L +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qdtls_openssl.cpp ssl/qdtls_openssl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ocsp AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qocsp_p.h +) + +qt_extend_target(Network CONDITION APPLE AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslsocket_mac_shared.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT ANDROID_EMBEDDED + SOURCES + ssl/qsslsocket_openssl_android.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND build_pass + LIBRARIES + crypto_${CMAKE_SYSTEM_PROCESSOR} + ssl_${CMAKE_SYSTEM_PROCESSOR} +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND NOT ANDROID + LIBRARIES + OpenSSL::SSL +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked + LIBRARIES + OpenSSL::SSL_nolink +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32 + SOURCES + ssl/qwindowscarootfetcher.cpp ssl/qwindowscarootfetcher_p.h + LIBRARIES + crypt32 +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND UNIX AND NOT ANDROID AND NOT INTEGRITY + SOURCES + kernel/qdnslookup_unix.cpp +) +qt_add_docs(Network + doc/qtnetwork.qdocconf +) + +qt_extend_target(Network CONDITION WIN32 PUBLIC_LIBRARIES ws2_32) # special case: mkspecs/common/msvc-desktop.conf diff --git a/src/network/access/access.pri b/src/network/access/access.pri index cfb20dcd71..083fbbf5fd 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -114,11 +114,4 @@ qtConfig(http) { access/qhttpthreaddelegate_p.h \ access/qnetworkreplyhttpimpl_p.h \ access/qhttp2configuration.h - - qtConfig(ssl) { - SOURCES += \ - access/qspdyprotocolhandler.cpp - HEADERS += \ - access/qspdyprotocolhandler_p.h - } } diff --git a/src/network/access/qabstractnetworkcache.h b/src/network/access/qabstractnetworkcache.h index e357dfe58f..a4048c5b8f 100644 --- a/src/network/access/qabstractnetworkcache.h +++ b/src/network/access/qabstractnetworkcache.h @@ -52,7 +52,6 @@ QT_BEGIN_NAMESPACE class QIODevice; class QDateTime; class QUrl; -template<class T> class QList; class QNetworkCacheMetaDataPrivate; class Q_NETWORK_EXPORT QNetworkCacheMetaData diff --git a/src/network/access/qhsts_p.h b/src/network/access/qhsts_p.h index c219d9eab5..b5be4ff455 100644 --- a/src/network/access/qhsts_p.h +++ b/src/network/access/qhsts_p.h @@ -66,7 +66,6 @@ QT_BEGIN_NAMESPACE -template<typename T> class QList; template <typename T> class QVector; class Q_AUTOTEST_EXPORT QHstsCache diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index dce51d4fd5..efbeb17d39 100644 --- a/src/network/access/qhttp2protocolhandler.cpp +++ b/src/network/access/qhttp2protocolhandler.cpp @@ -332,13 +332,13 @@ bool QHttp2ProtocolHandler::sendRequest() // so we cannot create new streams. m_channel->emitFinishedWithError(QNetworkReply::ProtocolUnknownError, "GOAWAY received, cannot start a request"); - m_channel->spdyRequestsToSend.clear(); + m_channel->h2RequestsToSend.clear(); return false; } // Process 'fake' (created by QNetworkAccessManager::connectToHostEncrypted()) // requests first: - auto &requests = m_channel->spdyRequestsToSend; + auto &requests = m_channel->h2RequestsToSend; for (auto it = requests.begin(), endIt = requests.end(); it != endIt;) { const auto &pair = *it; const QString scheme(pair.first.url().scheme()); @@ -862,7 +862,7 @@ void QHttp2ProtocolHandler::handleGOAWAY() m_channel->emitFinishedWithError(QNetworkReply::ProtocolUnknownError, "GOAWAY received, cannot start a request"); // Also, prevent further calls to sendRequest: - m_channel->spdyRequestsToSend.clear(); + m_channel->h2RequestsToSend.clear(); QNetworkReply::NetworkError error = QNetworkReply::NoError; QString message; @@ -1281,7 +1281,7 @@ quint32 QHttp2ProtocolHandler::createNewStream(const HttpMessagePair &message, b const auto replyPrivate = reply->d_func(); replyPrivate->connection = m_connection; replyPrivate->connectionChannel = m_channel; - reply->setSpdyWasUsed(true); + reply->setHttp2WasUsed(true); streamIDs.insert(reply, newStreamID); connect(reply, SIGNAL(destroyed(QObject*)), this, SLOT(_q_replyDestroyed(QObject*))); @@ -1387,7 +1387,7 @@ void QHttp2ProtocolHandler::deleteActiveStream(quint32 streamID) } removeFromSuspended(streamID); - if (m_channel->spdyRequestsToSend.size()) + if (m_channel->h2RequestsToSend.size()) QMetaObject::invokeMethod(this, "sendRequest", Qt::QueuedConnection); } @@ -1506,7 +1506,7 @@ void QHttp2ProtocolHandler::initReplyFromPushPromise(const HttpMessagePair &mess Q_ASSERT(promisedData.contains(cacheKey)); auto promise = promisedData.take(cacheKey); Q_ASSERT(message.second); - message.second->setSpdyWasUsed(true); + message.second->setHttp2WasUsed(true); qCDebug(QT_HTTP2) << "found cached/promised response on stream" << promise.reservedID; diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index fce01bf349..b64e4fde86 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -82,9 +82,6 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host hostName(hostName), port(port), encrypt(encrypt), delayIpv4(true) , activeChannelCount(type == QHttpNetworkConnection::ConnectionTypeHTTP2 || type == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#ifndef QT_NO_SSL - || type == QHttpNetworkConnection::ConnectionTypeSPDY -#endif ? 1 : defaultHttpChannelCount) , channelCount(defaultHttpChannelCount) #ifndef QT_NO_NETWORKPROXY @@ -93,9 +90,9 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host , preConnectRequests(0) , connectionType(type) { - // We allocate all 6 channels even if it's SPDY or HTTP/2 enabled - // connection: in case the protocol negotiation via NPN/ALPN fails, - // we will have normally working HTTP/1.1. + // We allocate all 6 channels even if it's HTTP/2 enabled connection: + // in case the protocol negotiation via NPN/ALPN fails, we will have + // normally working HTTP/1.1. Q_ASSERT(channelCount >= activeChannelCount); channels = new QHttpNetworkConnectionChannel[channelCount]; } @@ -641,10 +638,10 @@ QHttpNetworkReply* QHttpNetworkConnectionPrivate::queueRequest(const QHttpNetwor break; } } - else { // SPDY, HTTP/2 ('h2' mode) + else { // HTTP/2 ('h2' mode) if (!pair.second->d_func()->requestIsPrepared) prepareRequest(pair); - channels[0].spdyRequestsToSend.insert(request.priority(), pair); + channels[0].h2RequestsToSend.insert(request.priority(), pair); } #ifndef Q_OS_WINRT @@ -680,7 +677,7 @@ void QHttpNetworkConnectionPrivate::fillHttp2Queue() for (auto &pair : highPriorityQueue) { if (!pair.second->d_func()->requestIsPrepared) prepareRequest(pair); - channels[0].spdyRequestsToSend.insert(QHttpNetworkRequest::HighPriority, pair); + channels[0].h2RequestsToSend.insert(QHttpNetworkRequest::HighPriority, pair); } highPriorityQueue.clear(); @@ -688,7 +685,7 @@ void QHttpNetworkConnectionPrivate::fillHttp2Queue() for (auto &pair : lowPriorityQueue) { if (!pair.second->d_func()->requestIsPrepared) prepareRequest(pair); - channels[0].spdyRequestsToSend.insert(pair.first.priority(), pair); + channels[0].h2RequestsToSend.insert(pair.first.priority(), pair); } lowPriorityQueue.clear(); @@ -984,12 +981,12 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply) } } #ifndef QT_NO_SSL - // is the reply inside the SPDY pipeline of this channel already? - QMultiMap<int, HttpMessagePair>::iterator it = channels[i].spdyRequestsToSend.begin(); - QMultiMap<int, HttpMessagePair>::iterator end = channels[i].spdyRequestsToSend.end(); + // is the reply inside the H2 pipeline of this channel already? + QMultiMap<int, HttpMessagePair>::iterator it = channels[i].h2RequestsToSend.begin(); + QMultiMap<int, HttpMessagePair>::iterator end = channels[i].h2RequestsToSend.end(); for (; it != end; ++it) { if (it.value().second == reply) { - channels[i].spdyRequestsToSend.remove(it.key()); + channels[i].h2RequestsToSend.remove(it.key()); QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection); return; @@ -1068,9 +1065,8 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() break; } case QHttpNetworkConnection::ConnectionTypeHTTP2Direct: - case QHttpNetworkConnection::ConnectionTypeHTTP2: - case QHttpNetworkConnection::ConnectionTypeSPDY: { - if (channels[0].spdyRequestsToSend.isEmpty() && channels[0].switchedToHttp2) + case QHttpNetworkConnection::ConnectionTypeHTTP2: { + if (channels[0].h2RequestsToSend.isEmpty() && channels[0].switchedToHttp2) return; if (networkLayerState == IPv4) @@ -1079,7 +1075,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() channels[0].networkLayerPreference = QAbstractSocket::IPv6Protocol; channels[0].ensureConnection(); if (channels[0].socket && channels[0].socket->state() == QAbstractSocket::ConnectedState - && !channels[0].pendingEncrypt && channels[0].spdyRequestsToSend.size()) + && !channels[0].pendingEncrypt && channels[0].h2RequestsToSend.size()) channels[0].sendRequest(); break; } @@ -1234,19 +1230,18 @@ void QHttpNetworkConnectionPrivate::_q_hostLookupFinished(const QHostInfo &info) if (dequeueRequest(channels[0].socket)) { emitReplyError(channels[0].socket, channels[0].reply, QNetworkReply::HostNotFoundError); networkLayerState = QHttpNetworkConnectionPrivate::Unknown; - } else if (connectionType == QHttpNetworkConnection::ConnectionTypeSPDY - || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2 + } else if (connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2 || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { - for (const HttpMessagePair &spdyPair : qAsConst(channels[0].spdyRequestsToSend)) { + for (const HttpMessagePair &h2Pair : qAsConst(channels[0].h2RequestsToSend)) { // emit error for all replies - QHttpNetworkReply *currentReply = spdyPair.second; + QHttpNetworkReply *currentReply = h2Pair.second; Q_ASSERT(currentReply); emitReplyError(channels[0].socket, currentReply, QNetworkReply::HostNotFoundError); } } else { // Should not happen: we start a host lookup before sending a request, - // so it's natural to have requests either in SPDY/HTTP/2 queue, - // or in low/high priority queues. + // so it's natural to have requests either in HTTP/2 queue, or in low/high + // priority queues. qWarning("QHttpNetworkConnectionPrivate::_q_hostLookupFinished" " could not de-queue request, failed to report HostNotFoundError"); networkLayerState = QHttpNetworkConnectionPrivate::Unknown; @@ -1576,17 +1571,12 @@ void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpN pauseConnection(); QHttpNetworkReply *reply; if (connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2 - || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#if QT_CONFIG(ssl) - || connectionType == QHttpNetworkConnection::ConnectionTypeSPDY -#endif - ) { - + || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { // we choose the reply to emit the proxyAuth signal from somewhat arbitrarily, // but that does not matter because the signal will ultimately be emitted // by the QNetworkAccessManager. - Q_ASSERT(chan->spdyRequestsToSend.count() > 0); - reply = chan->spdyRequestsToSend.cbegin().value().second; + Q_ASSERT(chan->h2RequestsToSend.count() > 0); + reply = chan->h2RequestsToSend.cbegin().value().second; } else { // HTTP reply = chan->reply; } diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 845b55bc5d..cfce3ecc00 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -96,7 +96,6 @@ public: enum ConnectionType { ConnectionTypeHTTP, - ConnectionTypeSPDY, ConnectionTypeHTTP2, ConnectionTypeHTTP2Direct }; @@ -172,7 +171,6 @@ private: friend class QHttpNetworkConnectionChannel; friend class QHttp2ProtocolHandler; friend class QHttpProtocolHandler; - friend class QSpdyProtocolHandler; Q_PRIVATE_SLOT(d_func(), void _q_startNextRequest()) Q_PRIVATE_SLOT(d_func(), void _q_hostLookupFinished(QHostInfo)) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index ccdb1cd6cd..65c2ae3054 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -48,7 +48,6 @@ #include <private/qhttp2protocolhandler_p.h> #include <private/qhttpprotocolhandler_p.h> -#include <private/qspdyprotocolhandler_p.h> #include <private/http2protocol_p.h> #ifndef QT_NO_SSL @@ -931,7 +930,7 @@ void QHttpNetworkConnectionChannel::_q_connected() } else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { state = QHttpNetworkConnectionChannel::IdleState; protocolHandler.reset(new QHttp2ProtocolHandler(this)); - if (spdyRequestsToSend.count() > 0) { + if (h2RequestsToSend.count() > 0) { // In case our peer has sent us its settings (window size, max concurrent streams etc.) // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection). QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); @@ -1109,15 +1108,11 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket || !connection->d_func()->lowPriorityQueue.isEmpty()); if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#ifndef QT_NO_SSL - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY -#endif - ) { - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { + || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { // emit error for all replies - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->finishedWithError(errorCode, errorString); } @@ -1144,12 +1139,8 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket void QHttpNetworkConnectionChannel::_q_proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator* auth) { if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#ifndef QT_NO_SSL - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY -#endif - ) { - if (spdyRequestsToSend.count() > 0) + || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { + if (h2RequestsToSend.count() > 0) connection->d_func()->emitProxyAuthenticationRequired(this, proxy, auth); } else { // HTTP // Need to dequeue the request before we can emit the error. @@ -1172,9 +1163,9 @@ void QHttpNetworkConnectionChannel::emitFinishedWithError(QNetworkReply::Network { if (reply) emit reply->finishedWithError(error, QHttpNetworkConnectionChannel::tr(message)); - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->finishedWithError(error, QHttpNetworkConnectionChannel::tr(message)); } @@ -1196,12 +1187,6 @@ void QHttpNetworkConnectionChannel::_q_encrypted() QByteArray nextProtocol = sslSocket->sslConfiguration().nextNegotiatedProtocol(); if (nextProtocol == QSslConfiguration::NextProtocolHttp1_1) { // fall through to create a QHttpProtocolHandler - } else if (nextProtocol == QSslConfiguration::NextProtocolSpdy3_0) { - protocolHandler.reset(new QSpdyProtocolHandler(this)); - connection->setConnectionType(QHttpNetworkConnection::ConnectionTypeSPDY); - // no need to re-queue requests, if SPDY was enabled on the request it - // has gone to the SPDY queue already - break; } else if (nextProtocol == QSslConfiguration::ALPNProtocolHTTP2) { switchedToHttp2 = true; protocolHandler.reset(new QHttp2ProtocolHandler(this)); @@ -1230,8 +1215,6 @@ void QHttpNetworkConnectionChannel::_q_encrypted() // it again on other channels that our connection can create/open. if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2) protocols.removeAll(QSslConfiguration::ALPNProtocolHTTP2); - else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY) - protocols.removeAll(QSslConfiguration::NextProtocolSpdy3_0); if (nProtocols > protocols.size()) { sslConfiguration->setAllowedNextProtocols(protocols); @@ -1241,13 +1224,13 @@ void QHttpNetworkConnectionChannel::_q_encrypted() } connection->setConnectionType(QHttpNetworkConnection::ConnectionTypeHTTP); - // We use only one channel for SPDY or HTTP/2, but normally six for + // We use only one channel for HTTP/2, but normally six for // HTTP/1.1 - let's restore this number to the reserved number of // channels: if (connection->d_func()->activeChannelCount < connection->d_func()->channelCount) { connection->d_func()->activeChannelCount = connection->d_func()->channelCount; - // re-queue requests from SPDY queue to HTTP queue, if any - requeueSpdyRequests(); + // re-queue requests from HTTP/2 queue to HTTP queue, if any + requeueHttp2Requests(); } break; } @@ -1267,11 +1250,9 @@ void QHttpNetworkConnectionChannel::_q_encrypted() state = QHttpNetworkConnectionChannel::IdleState; pendingEncrypt = false; - if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY || - connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 || + if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { - // we call setSpdyWasUsed(true) on the replies in the SPDY handler when the request is sent - if (spdyRequestsToSend.count() > 0) { + if (h2RequestsToSend.count() > 0) { // In case our peer has sent us its settings (window size, max concurrent streams etc.) // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection). QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); @@ -1280,7 +1261,7 @@ void QHttpNetworkConnectionChannel::_q_encrypted() if (!reply) connection->d_func()->dequeueRequest(socket); if (reply) { - reply->setSpdyWasUsed(false); + reply->setHttp2WasUsed(false); Q_ASSERT(reply->d_func()->connectionChannel == this); emit reply->encrypted(); } @@ -1289,13 +1270,12 @@ void QHttpNetworkConnectionChannel::_q_encrypted() } } -void QHttpNetworkConnectionChannel::requeueSpdyRequests() +void QHttpNetworkConnectionChannel::requeueHttp2Requests() { - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { - connection->d_func()->requeueRequest(spdyPairs.at(a)); - } - spdyRequestsToSend.clear(); + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) + connection->d_func()->requeueRequest(h2Pairs.at(a)); + h2RequestsToSend.clear(); } void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors) @@ -1313,11 +1293,11 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors) emit reply->sslErrors(errors); } #ifndef QT_NO_SSL - else { // SPDY - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { + else { // HTTP/2 + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { // emit SSL errors for all replies - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->sslErrors(errors); } @@ -1337,10 +1317,10 @@ void QHttpNetworkConnectionChannel::_q_preSharedKeyAuthenticationRequired(QSslPr if (reply) emit reply->preSharedKeyAuthenticationRequired(authenticator); } else { - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { // emit SSL errors for all replies - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->preSharedKeyAuthenticationRequired(authenticator); } diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index d8ac3979d1..c73c4c3bd5 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -123,10 +123,7 @@ public: bool authenticationCredentialsSent; bool proxyCredentialsSent; QScopedPointer<QAbstractProtocolHandler> protocolHandler; - // SPDY or HTTP/2 requests; SPDY is TLS-only, but - // HTTP/2 can be cleartext also, that's why it's - // outside of QT_NO_SSL section. Sorted by priority: - QMultiMap<int, HttpMessagePair> spdyRequestsToSend; + QMultiMap<int, HttpMessagePair> h2RequestsToSend; bool switchedToHttp2 = false; #ifndef QT_NO_SSL bool ignoreAllSslErrors; @@ -135,7 +132,7 @@ public: void ignoreSslErrors(); void ignoreSslErrors(const QList<QSslError> &errors); void setSslConfiguration(const QSslConfiguration &config); - void requeueSpdyRequests(); // when we wanted SPDY but got HTTP + void requeueHttp2Requests(); // when we wanted HTTP/2 but got HTTP/1.1 #endif // to emit the signal for all in-flight replies: void emitFinishedWithError(QNetworkReply::NetworkError error, const char *message); diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index 2024c0fefb..78413062b4 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -292,14 +292,14 @@ bool QHttpNetworkReply::isPipeliningUsed() const return d_func()->pipeliningUsed; } -bool QHttpNetworkReply::isSpdyUsed() const +bool QHttpNetworkReply::isHttp2Used() const { - return d_func()->spdyUsed; + return d_func()->h2Used; } -void QHttpNetworkReply::setSpdyWasUsed(bool spdy) +void QHttpNetworkReply::setHttp2WasUsed(bool h2) { - d_func()->spdyUsed = spdy; + d_func()->h2Used = h2; } qint64 QHttpNetworkReply::removedContentLength() const @@ -329,15 +329,11 @@ QHttpNetworkReplyPrivate::QHttpNetworkReplyPrivate(const QUrl &newUrl) forceConnectionCloseEnabled(false), lastChunkRead(false), currentChunkSize(0), currentChunkRead(0), readBufferMaxSize(0), - windowSizeDownload(65536), // 64K initial window size according to SPDY standard - windowSizeUpload(65536), // 64K initial window size according to SPDY standard - currentlyReceivedDataInWindow(0), - currentlyUploadedDataInWindow(0), totallyUploadedData(0), removedContentLength(-1), connection(nullptr), autoDecompress(false), responseData(), requestIsPrepared(false) - ,pipeliningUsed(false), spdyUsed(false), downstreamLimited(false) + ,pipeliningUsed(false), h2Used(false), downstreamLimited(false) ,userProvidedDownloadBuffer(nullptr) #ifndef QT_NO_COMPRESS ,inflateStrm(nullptr) diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 9c03a403e1..4638d056de 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -139,8 +139,8 @@ public: bool isFinished() const; bool isPipeliningUsed() const; - bool isSpdyUsed() const; - void setSpdyWasUsed(bool spdy); + bool isHttp2Used() const; + void setHttp2WasUsed(bool h2Used); qint64 removedContentLength() const; bool isRedirecting() const; @@ -253,11 +253,7 @@ public: qint64 currentChunkSize; qint64 currentChunkRead; qint64 readBufferMaxSize; - qint32 windowSizeDownload; // only for SPDY - qint32 windowSizeUpload; // only for SPDY - qint32 currentlyReceivedDataInWindow; // only for SPDY - qint32 currentlyUploadedDataInWindow; // only for SPDY - qint64 totallyUploadedData; // only for SPDY + qint64 totallyUploadedData; // HTTP/2 qint64 removedContentLength; QPointer<QHttpNetworkConnection> connection; QPointer<QHttpNetworkConnectionChannel> connectionChannel; @@ -270,7 +266,7 @@ public: bool requestIsPrepared; bool pipeliningUsed; - bool spdyUsed; + bool h2Used; bool downstreamLimited; char* userProvidedDownloadBuffer; diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp index 5fb8885bdf..0b03e6e69e 100644 --- a/src/network/access/qhttpnetworkrequest.cpp +++ b/src/network/access/qhttpnetworkrequest.cpp @@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Operation op, QHttpNetworkRequest::Priority pri, const QUrl &newUrl) : QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(nullptr), - autoDecompress(false), pipeliningAllowed(false), spdyAllowed(false), http2Allowed(false), + autoDecompress(false), pipeliningAllowed(false), http2Allowed(false), http2Direct(false), withCredentials(true), preConnect(false), redirectCount(0), redirectPolicy(QNetworkRequest::ManualRedirectPolicy) { @@ -59,7 +59,6 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest uploadByteDevice(other.uploadByteDevice), autoDecompress(other.autoDecompress), pipeliningAllowed(other.pipeliningAllowed), - spdyAllowed(other.spdyAllowed), http2Allowed(other.http2Allowed), http2Direct(other.http2Direct), withCredentials(other.withCredentials), @@ -83,7 +82,6 @@ bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &ot && (uploadByteDevice == other.uploadByteDevice) && (autoDecompress == other.autoDecompress) && (pipeliningAllowed == other.pipeliningAllowed) - && (spdyAllowed == other.spdyAllowed) && (http2Allowed == other.http2Allowed) && (http2Direct == other.http2Direct) // we do not clear the customVerb in setOperation @@ -339,16 +337,6 @@ void QHttpNetworkRequest::setPipeliningAllowed(bool b) d->pipeliningAllowed = b; } -bool QHttpNetworkRequest::isSPDYAllowed() const -{ - return d->spdyAllowed; -} - -void QHttpNetworkRequest::setSPDYAllowed(bool b) -{ - d->spdyAllowed = b; -} - bool QHttpNetworkRequest::isHTTP2Allowed() const { return d->http2Allowed; diff --git a/src/network/access/qhttpnetworkrequest_p.h b/src/network/access/qhttpnetworkrequest_p.h index fb4896195b..f263e348ef 100644 --- a/src/network/access/qhttpnetworkrequest_p.h +++ b/src/network/access/qhttpnetworkrequest_p.h @@ -116,9 +116,6 @@ public: bool isPipeliningAllowed() const; void setPipeliningAllowed(bool b); - bool isSPDYAllowed() const; - void setSPDYAllowed(bool b); - bool isHTTP2Allowed() const; void setHTTP2Allowed(bool b); @@ -176,7 +173,6 @@ public: mutable QNonContiguousByteDevice* uploadByteDevice; bool autoDecompress; bool pipeliningAllowed; - bool spdyAllowed; bool http2Allowed; bool http2Direct; bool withCredentials; diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp index dcc8c9337e..fa03bf7a11 100644 --- a/src/network/access/qhttpthreaddelegate.cpp +++ b/src/network/access/qhttpthreaddelegate.cpp @@ -236,7 +236,7 @@ QHttpThreadDelegate::QHttpThreadDelegate(QObject *parent) : , synchronous(false) , incomingStatusCode(0) , isPipeliningUsed(false) - , isSpdyUsed(false) + , isHttp2Used(false) , incomingContentLength(-1) , removedContentLength(-1) , incomingErrorCode(QNetworkReply::NoError) @@ -320,17 +320,6 @@ void QHttpThreadDelegate::startRequest() } } -#ifndef QT_NO_SSL - if (!isH2 && httpRequest.isSPDYAllowed() && ssl) { - connectionType = QHttpNetworkConnection::ConnectionTypeSPDY; - urlCopy.setScheme(QStringLiteral("spdy")); // to differentiate SPDY requests from HTTPS requests - QList<QByteArray> nextProtocols; - nextProtocols << QSslConfiguration::NextProtocolSpdy3_0 - << QSslConfiguration::NextProtocolHttp1_1; - incomingSslConfiguration->setAllowedNextProtocols(nextProtocols); - } -#endif // QT_NO_SSL - #ifndef QT_NO_NETWORKPROXY if (transparentProxy.type() != QNetworkProxy::NoProxy) cacheKey = makeCacheKey(urlCopy, &transparentProxy, httpRequest.peerVerifyName()); @@ -658,7 +647,7 @@ void QHttpThreadDelegate::headerChangedSlot() isPipeliningUsed = httpReply->isPipeliningUsed(); incomingContentLength = httpReply->contentLength(); removedContentLength = httpReply->removedContentLength(); - isSpdyUsed = httpReply->isSpdyUsed(); + isHttp2Used = httpReply->isHttp2Used(); emit downloadMetaData(incomingHeaders, incomingStatusCode, @@ -667,7 +656,7 @@ void QHttpThreadDelegate::headerChangedSlot() downloadBuffer, incomingContentLength, removedContentLength, - isSpdyUsed); + isHttp2Used); } void QHttpThreadDelegate::synchronousHeaderChangedSlot() @@ -683,7 +672,7 @@ void QHttpThreadDelegate::synchronousHeaderChangedSlot() incomingStatusCode = httpReply->statusCode(); incomingReasonPhrase = httpReply->reasonPhrase(); isPipeliningUsed = httpReply->isPipeliningUsed(); - isSpdyUsed = httpReply->isSpdyUsed(); + isHttp2Used = httpReply->isHttp2Used(); incomingContentLength = httpReply->contentLength(); } diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h index a5272fc15c..8a197b0b98 100644 --- a/src/network/access/qhttpthreaddelegate_p.h +++ b/src/network/access/qhttpthreaddelegate_p.h @@ -112,7 +112,7 @@ public: int incomingStatusCode; QString incomingReasonPhrase; bool isPipeliningUsed; - bool isSpdyUsed; + bool isHttp2Used; qint64 incomingContentLength; qint64 removedContentLength; QNetworkReply::NetworkError incomingErrorCode; diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 9cbf7b45c6..85f065223a 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1226,12 +1226,10 @@ void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quin if (sslConfiguration != QSslConfiguration::defaultConfiguration()) request.setSslConfiguration(sslConfiguration); - // There is no way to enable SPDY/HTTP2 via a request, so we need to check - // the ssl configuration whether SPDY/HTTP2 is allowed here. + // There is no way to enable HTTP2 via a request, so we need to check + // the ssl configuration whether HTTP2 is allowed here. if (sslConfiguration.allowedNextProtocols().contains(QSslConfiguration::ALPNProtocolHTTP2)) request.setAttribute(QNetworkRequest::Http2AllowedAttribute, true); - else if (sslConfiguration.allowedNextProtocols().contains(QSslConfiguration::NextProtocolSpdy3_0)) - request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true); request.setPeerVerifyName(peerName); get(request); diff --git a/src/network/access/qnetworkaccessmanager.h b/src/network/access/qnetworkaccessmanager.h index a75b16a6ca..5194afb1be 100644 --- a/src/network/access/qnetworkaccessmanager.h +++ b/src/network/access/qnetworkaccessmanager.h @@ -56,7 +56,6 @@ class QIODevice; class QAbstractNetworkCache; class QAuthenticator; class QByteArray; -template<typename T> class QList; class QNetworkCookie; class QNetworkCookieJar; class QNetworkReply; diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 12f402cabd..c7d22be8f5 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -775,9 +775,6 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq if (newHttpRequest.attribute(QNetworkRequest::HttpPipeliningAllowedAttribute).toBool()) httpRequest.setPipeliningAllowed(true); - if (request.attribute(QNetworkRequest::SpdyAllowedAttribute).toBool()) - httpRequest.setSPDYAllowed(true); - if (request.attribute(QNetworkRequest::Http2AllowedAttribute).toBool()) httpRequest.setHTTP2Allowed(true); @@ -969,7 +966,7 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq QSharedPointer<char>(), delegate->incomingContentLength, delegate->removedContentLength, - delegate->isSpdyUsed); + delegate->isHttp2Used); replyDownloadData(delegate->synchronousDownloadData); httpError(delegate->incomingErrorCode, delegate->incomingErrorDetail); } else { @@ -981,7 +978,7 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq QSharedPointer<char>(), delegate->incomingContentLength, delegate->removedContentLength, - delegate->isSpdyUsed); + delegate->isHttp2Used); replyDownloadData(delegate->synchronousDownloadData); } @@ -1256,7 +1253,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData(const QList<QPair<QByte QSharedPointer<char> db, qint64 contentLength, qint64 removedContentLength, - bool spdyWasUsed) + bool h2Used) { Q_Q(QNetworkReplyHttpImpl); Q_UNUSED(contentLength); @@ -1282,16 +1279,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData(const QList<QPair<QByte } q->setAttribute(QNetworkRequest::HttpPipeliningWasUsedAttribute, pu); - const QVariant http2Allowed = request.attribute(QNetworkRequest::Http2AllowedAttribute); - const QVariant http2Direct = request.attribute(QNetworkRequest::Http2DirectAttribute); - if ((http2Allowed.isValid() && http2Allowed.toBool()) - || (http2Direct.isValid() && http2Direct.toBool())) { - q->setAttribute(QNetworkRequest::Http2WasUsedAttribute, spdyWasUsed); - q->setAttribute(QNetworkRequest::SpdyWasUsedAttribute, false); - } else { - q->setAttribute(QNetworkRequest::SpdyWasUsedAttribute, spdyWasUsed); - q->setAttribute(QNetworkRequest::Http2WasUsedAttribute, false); - } + q->setAttribute(QNetworkRequest::Http2WasUsedAttribute, h2Used); // reconstruct the HTTP header QList<QPair<QByteArray, QByteArray> > headerMap = hm; diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index f1c8575c58..4765fdc30e 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -272,18 +272,6 @@ QT_BEGIN_NAMESPACE The QNetworkSession ConnectInBackground property will be set according to this attribute. - \value SpdyAllowedAttribute - Requests only, type: QMetaType::Bool (default: false) - Indicates whether the QNetworkAccessManager code is - allowed to use SPDY with this request. This applies only - to SSL requests, and depends on the server supporting SPDY. - Obsolete, use Http2 instead of Spdy. - - \value SpdyWasUsedAttribute - Replies only, type: QMetaType::Bool - Indicates whether SPDY was used for receiving - this reply. Obsolete, use Http2 instead of Spdy. - \value Http2AllowedAttribute Requests only, type: QMetaType::Bool (default: false) Indicates whether the QNetworkAccessManager code is @@ -295,12 +283,6 @@ QT_BEGIN_NAMESPACE Indicates whether HTTP/2 was used for receiving this reply. (This value was introduced in 5.9.) - \value HTTP2AllowedAttribute - Obsolete alias for Http2AllowedAttribute. - - \value HTTP2WasUsedAttribute - Obsolete alias for Http2WasUsedAttribute. - \value EmitAllUploadProgressSignalsAttribute Requests only, type: QMetaType::Bool (default: false) Indicates whether all upload signals should be emitted. diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h index 66b9a43e01..035b5b378a 100644 --- a/src/network/access/qnetworkrequest.h +++ b/src/network/access/qnetworkrequest.h @@ -89,18 +89,10 @@ public: DownloadBufferAttribute, // internal SynchronousRequestAttribute, // internal BackgroundRequestAttribute, -#if QT_DEPRECATED_SINCE(5, 15) - SpdyAllowedAttribute, - SpdyWasUsedAttribute, -#endif // QT_DEPRECATED_SINCE(5, 15) EmitAllUploadProgressSignalsAttribute = BackgroundRequestAttribute + 3, FollowRedirectsAttribute, Http2AllowedAttribute, Http2WasUsedAttribute, -#if QT_DEPRECATED_SINCE(5, 15) - HTTP2AllowedAttribute Q_DECL_ENUMERATOR_DEPRECATED_X("Use Http2AllowedAttribute") = Http2AllowedAttribute, - HTTP2WasUsedAttribute Q_DECL_ENUMERATOR_DEPRECATED_X("Use Http2WasUsedAttribute"), -#endif // QT_DEPRECATED_SINCE(5, 15) OriginalContentLengthAttribute, RedirectPolicyAttribute, Http2DirectAttribute, diff --git a/src/network/access/qspdyprotocolhandler_p.h b/src/network/access/qspdyprotocolhandler_p.h deleted file mode 100644 index 14e2ff388a..0000000000 --- a/src/network/access/qspdyprotocolhandler_p.h +++ /dev/null @@ -1,232 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 BlackBerry Limited. All rights reserved. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSPDYPROTOCOLHANDLER_H -#define QSPDYPROTOCOLHANDLER_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the Network Access API. This header file may change from -// version to version without notice, or even be removed. -// -// We mean it. -// - -#include <QtNetwork/private/qtnetworkglobal_p.h> -#include <private/qabstractprotocolhandler_p.h> -#include <QtNetwork/qnetworkreply.h> -#include <private/qbytedata_p.h> - -#include <zlib.h> - -QT_REQUIRE_CONFIG(http); - -#if !defined(QT_NO_SSL) - -QT_BEGIN_NAMESPACE - -class QHttpNetworkRequest; - -#ifndef HttpMessagePair -typedef QPair<QHttpNetworkRequest, QHttpNetworkReply*> HttpMessagePair; -#endif - -class QSpdyProtocolHandler : public QObject, public QAbstractProtocolHandler { - Q_OBJECT -public: - QSpdyProtocolHandler(QHttpNetworkConnectionChannel *channel); - ~QSpdyProtocolHandler(); - - enum DataFrameFlag { - DataFrame_FLAG_FIN = 0x01, - DataFrame_FLAG_COMPRESS = 0x02 - }; - - Q_DECLARE_FLAGS(DataFrameFlags, DataFrameFlag) - - enum ControlFrameFlag { - ControlFrame_FLAG_FIN = 0x01, - ControlFrame_FLAG_UNIDIRECTIONAL = 0x02 - }; - - Q_DECLARE_FLAGS(ControlFrameFlags, ControlFrameFlag) - - enum SETTINGS_Flag { - FLAG_SETTINGS_CLEAR_SETTINGS = 0x01 - }; - - Q_DECLARE_FLAGS(SETTINGS_Flags, SETTINGS_Flag) - - enum SETTINGS_ID_Flag { - FLAG_SETTINGS_PERSIST_VALUE = 0x01, - FLAG_SETTINGS_PERSISTED = 0x02 - }; - - Q_DECLARE_FLAGS(SETTINGS_ID_Flags, SETTINGS_ID_Flag) - - virtual void _q_receiveReply() override; - virtual void _q_readyRead() override; - virtual bool sendRequest() override; - -private slots: - void _q_uploadDataReadyRead(); - void _q_replyDestroyed(QObject*); - void _q_uploadDataDestroyed(QObject *); - -private: - - enum FrameType { - FrameType_SYN_STREAM = 1, - FrameType_SYN_REPLY = 2, - FrameType_RST_STREAM = 3, - FrameType_SETTINGS = 4, - FrameType_PING = 6, - FrameType_GOAWAY = 7, - FrameType_HEADERS = 8, - FrameType_WINDOW_UPDATE = 9, - FrameType_CREDENTIAL // has a special type - }; - - enum StatusCode { - StatusCode_PROTOCOL_ERROR = 1, - StatusCode_INVALID_STREAM = 2, - StatusCode_REFUSED_STREAM = 3, - StatusCode_UNSUPPORTED_VERSION = 4, - StatusCode_CANCEL = 5, - StatusCode_INTERNAL_ERROR = 6, - StatusCode_FLOW_CONTROL_ERROR = 7, - StatusCode_STREAM_IN_USE = 8, - StatusCode_STREAM_ALREADY_CLOSED = 9, - StatusCode_INVALID_CREDENTIALS = 10, - StatusCode_FRAME_TOO_LARGE = 11 - }; - - enum SETTINGS_ID { - SETTINGS_UPLOAD_BANDWIDTH = 1, - SETTINGS_DOWNLOAD_BANDWIDTH = 2, - SETTINGS_ROUND_TRIP_TIME = 3, - SETTINGS_MAX_CONCURRENT_STREAMS = 4, - SETTINGS_CURRENT_CWND = 5, - SETTINGS_DOWNLOAD_RETRANS_RATE = 6, - SETTINGS_INITIAL_WINDOW_SIZE = 7, - SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE = 8 - }; - - enum GOAWAY_STATUS { - GOAWAY_OK = 0, - GOAWAY_PROTOCOL_ERROR = 1, - GOAWAY_INTERNAL_ERROR = 11 - }; - - enum RST_STREAM_STATUS_CODE { - RST_STREAM_PROTOCOL_ERROR = 1, - RST_STREAM_INVALID_STREAM = 2, - RST_STREAM_REFUSED_STREAM = 3, - RST_STREAM_UNSUPPORTED_VERSION = 4, - RST_STREAM_CANCEL = 5, - RST_STREAM_INTERNAL_ERROR = 6, - RST_STREAM_FLOW_CONTROL_ERROR = 7, - RST_STREAM_STREAM_IN_USE = 8, - RST_STREAM_STREAM_ALREADY_CLOSED = 9, - RST_STREAM_INVALID_CREDENTIALS = 10, - RST_STREAM_FRAME_TOO_LARGE = 11 - }; - - quint64 bytesAvailable() const; - bool readNextChunk(qint64 length, char *sink); - - void sendControlFrame(FrameType type, ControlFrameFlags flags, const char *data, quint32 length); - - void sendSYN_STREAM(const HttpMessagePair &pair, qint32 streamID, - qint32 associatedToStreamID); - void sendRST_STREAM(qint32 streamID, RST_STREAM_STATUS_CODE statusCode); - void sendPING(quint32 pingID); - - bool uploadData(qint32 streamID); - Q_INVOKABLE void sendWINDOW_UPDATE(qint32 streamID, quint32 deltaWindowSize); - - qint64 sendDataFrame(qint32 streamID, DataFrameFlags flags, quint32 length, - const char *data); - - QByteArray composeHeader(const QHttpNetworkRequest &request); - bool uncompressHeader(const QByteArray &input, QByteArray *output); - - void handleControlFrame(const QByteArray &frameHeaders); - void handleDataFrame(const QByteArray &frameHeaders); - - void handleSYN_STREAM(char, quint32, const QByteArray &frameData); - void handleSYN_REPLY(char flags, quint32, const QByteArray &frameData); - void handleRST_STREAM(char flags, quint32 length, const QByteArray &frameData); - void handleSETTINGS(char flags, quint32 length, const QByteArray &frameData); - void handlePING(char, quint32 length, const QByteArray &frameData); - void handleGOAWAY(char flags, quint32, const QByteArray &frameData); - void handleHEADERS(char flags, quint32, const QByteArray &frameData); - void handleWINDOW_UPDATE(char, quint32, const QByteArray &frameData); - - qint32 generateNextStreamID(); - void parseHttpHeaders(char flags, const QByteArray &frameData); - - void replyFinished(QHttpNetworkReply *httpReply, qint32 streamID); - void replyFinishedWithError(QHttpNetworkReply *httpReply, qint32 streamID, - QNetworkReply::NetworkError errorCode, const char *errorMessage); - - qint32 m_nextStreamID; - QHash<quint32, HttpMessagePair> m_inFlightStreams; - qint32 m_maxConcurrentStreams; - quint32 m_initialWindowSize; - QByteDataBuffer m_spdyBuffer; - bool m_waitingForCompleteStream; - z_stream m_deflateStream; - z_stream m_inflateStream; - QHash<QObject *, qint32> m_streamIDs; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::DataFrameFlags) -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::ControlFrameFlags) -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::SETTINGS_Flags) -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::SETTINGS_ID_Flags) - -QT_END_NAMESPACE - -#endif // !defined(QT_NO_SSL) - -#endif // QSPDYPROTOCOLHANDLER_H diff --git a/src/network/bearer/bearer.pri b/src/network/bearer/bearer.pri index d58d5ec168..bcb7a5971e 100644 --- a/src/network/bearer/bearer.pri +++ b/src/network/bearer/bearer.pri @@ -6,11 +6,14 @@ HEADERS += bearer/qnetworkconfiguration.h \ bearer/qnetworkconfigmanager_p.h \ bearer/qnetworkconfiguration_p.h \ bearer/qnetworksession_p.h \ + bearer/qnetworksession_impl_p.h \ bearer/qbearerengine_p.h \ + bearer/qbearerengine_impl_p.h \ bearer/qbearerplugin_p.h \ bearer/qsharednetworksession_p.h SOURCES += bearer/qnetworksession.cpp \ + bearer/qnetworksession_impl.cpp \ bearer/qnetworkconfigmanager.cpp \ bearer/qnetworkconfiguration.cpp \ bearer/qnetworkconfigmanager_p.cpp \ diff --git a/src/network/bearer/qbearerengine_impl_p.h b/src/network/bearer/qbearerengine_impl_p.h new file mode 100644 index 0000000000..4221b73276 --- /dev/null +++ b/src/network/bearer/qbearerengine_impl_p.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QBEARERENGINE_IMPL_H +#define QBEARERENGINE_IMPL_H + +#include <QtNetwork/private/qbearerengine_p.h> + +#ifndef QT_NO_BEARERMANAGEMENT + +QT_BEGIN_NAMESPACE + +class Q_NETWORK_EXPORT QBearerEngineImpl : public QBearerEngine +{ + Q_OBJECT + +public: + enum ConnectionError { + InterfaceLookupError = 0, + ConnectError, + OperationNotSupported, + DisconnectionError, + }; + + QBearerEngineImpl(QObject *parent = nullptr) : QBearerEngine(parent) {} + ~QBearerEngineImpl() {} + + virtual void connectToId(const QString &id) = 0; + virtual void disconnectFromId(const QString &id) = 0; + + virtual QString getInterfaceFromId(const QString &id) = 0; + + virtual QNetworkSession::State sessionStateForId(const QString &id) = 0; + + virtual quint64 bytesWritten(const QString &) { return Q_UINT64_C(0); } + virtual quint64 bytesReceived(const QString &) { return Q_UINT64_C(0); } + virtual quint64 startTime(const QString &) { return Q_UINT64_C(0); } + +Q_SIGNALS: + void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); +}; + +QT_END_NAMESPACE + +Q_DECLARE_METATYPE(QBearerEngineImpl::ConnectionError) + +#endif // QT_NO_BEARERMANAGEMENT + +#endif // QBEARERENGINE_IMPL_H diff --git a/src/network/bearer/qnetworksession_impl.cpp b/src/network/bearer/qnetworksession_impl.cpp new file mode 100644 index 0000000000..45a00b45fd --- /dev/null +++ b/src/network/bearer/qnetworksession_impl.cpp @@ -0,0 +1,439 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// see comment in ../platformdefs_win.h. +#define WIN32_LEAN_AND_MEAN 1 + +#include "qnetworksession_impl_p.h" +#include "qbearerengine_impl_p.h" + +#include <QtNetwork/qnetworksession.h> +#include <QtNetwork/private/qnetworkconfigmanager_p.h> + +#include <QtCore/qdatetime.h> +#include <QtCore/qdebug.h> +#include <QtCore/qmutex.h> +#include <QtCore/qstringlist.h> + +#ifndef QT_NO_BEARERMANAGEMENT + +QT_BEGIN_NAMESPACE + +static QBearerEngineImpl *getEngineFromId(const QString &id) +{ + QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); + if (priv) { + const auto engines = priv->engines(); + for (QBearerEngine *engine : engines) { + QBearerEngineImpl *engineImpl = qobject_cast<QBearerEngineImpl *>(engine); + if (engineImpl && engineImpl->hasIdentifier(id)) + return engineImpl; + } + } + + return nullptr; +} + +class QNetworkSessionManagerPrivate : public QObject +{ + Q_OBJECT + +public: + QNetworkSessionManagerPrivate(QObject *parent = nullptr) : QObject(parent) {} + ~QNetworkSessionManagerPrivate() {} + + inline void forceSessionClose(const QNetworkConfiguration &config) + { emit forcedSessionClose(config); } + +Q_SIGNALS: + void forcedSessionClose(const QNetworkConfiguration &config); +}; + +Q_GLOBAL_STATIC(QNetworkSessionManagerPrivate, sessionManager); + +void QNetworkSessionPrivateImpl::syncStateWithInterface() +{ + connect(sessionManager(), SIGNAL(forcedSessionClose(QNetworkConfiguration)), + this, SLOT(forcedSessionClose(QNetworkConfiguration))); + + opened = false; + isOpen = false; + state = QNetworkSession::Invalid; + lastError = QNetworkSession::UnknownSessionError; + + qRegisterMetaType<QBearerEngineImpl::ConnectionError>(); + + switch (publicConfig.type()) { + case QNetworkConfiguration::InternetAccessPoint: + activeConfig = publicConfig; + engine = getEngineFromId(activeConfig.identifier()); + if (engine) { + qRegisterMetaType<QNetworkConfigurationPrivatePointer>(); + connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), + this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)), + Qt::QueuedConnection); + connect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), + this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError)), + Qt::QueuedConnection); + } + break; + case QNetworkConfiguration::ServiceNetwork: + serviceConfig = publicConfig; + // Defer setting engine and signals until open(). + Q_FALLTHROUGH(); + case QNetworkConfiguration::UserChoice: + // Defer setting serviceConfig and activeConfig until open(). + Q_FALLTHROUGH(); + default: + engine = nullptr; + } + + networkConfigurationsChanged(); +} + +void QNetworkSessionPrivateImpl::open() +{ + if (serviceConfig.isValid()) { + lastError = QNetworkSession::OperationNotSupportedError; + emit QNetworkSessionPrivate::error(lastError); + } else if (!isOpen) { + if ((activeConfig.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { + lastError = QNetworkSession::InvalidConfigurationError; + state = QNetworkSession::Invalid; + emit stateChanged(state); + emit QNetworkSessionPrivate::error(lastError); + return; + } + opened = true; + + if ((activeConfig.state() & QNetworkConfiguration::Active) != QNetworkConfiguration::Active && + (activeConfig.state() & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) { + state = QNetworkSession::Connecting; + emit stateChanged(state); + + engine->connectToId(activeConfig.identifier()); + } + + isOpen = (activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active; + if (isOpen) + emit quitPendingWaitsForOpened(); + } +} + +void QNetworkSessionPrivateImpl::close() +{ + if (serviceConfig.isValid()) { + lastError = QNetworkSession::OperationNotSupportedError; + emit QNetworkSessionPrivate::error(lastError); + } else if (isOpen) { + opened = false; + isOpen = false; + emit closed(); + } +} + +void QNetworkSessionPrivateImpl::stop() +{ + if (serviceConfig.isValid()) { + lastError = QNetworkSession::OperationNotSupportedError; + emit QNetworkSessionPrivate::error(lastError); + } else { + if ((activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { + state = QNetworkSession::Closing; + emit stateChanged(state); + + engine->disconnectFromId(activeConfig.identifier()); + + sessionManager()->forceSessionClose(activeConfig); + } + + opened = false; + isOpen = false; + emit closed(); + } +} + +void QNetworkSessionPrivateImpl::migrate() +{ +} + +void QNetworkSessionPrivateImpl::accept() +{ +} + +void QNetworkSessionPrivateImpl::ignore() +{ +} + +void QNetworkSessionPrivateImpl::reject() +{ +} + +#ifndef QT_NO_NETWORKINTERFACE +QNetworkInterface QNetworkSessionPrivateImpl::currentInterface() const +{ + if (!engine || state != QNetworkSession::Connected || !publicConfig.isValid()) + return QNetworkInterface(); + + QString iface = engine->getInterfaceFromId(activeConfig.identifier()); + if (iface.isEmpty()) + return QNetworkInterface(); + return QNetworkInterface::interfaceFromName(iface); +} +#endif + +QVariant QNetworkSessionPrivateImpl::sessionProperty(const QString &key) const +{ + if (key == QLatin1String("AutoCloseSessionTimeout")) { + if (engine && engine->requiresPolling() && + !(engine->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces)) { + return sessionTimeout >= 0 ? sessionTimeout * 10000 : -1; + } + } + + return QVariant(); +} + +void QNetworkSessionPrivateImpl::setSessionProperty(const QString &key, const QVariant &value) +{ + if (key == QLatin1String("AutoCloseSessionTimeout")) { + if (engine && engine->requiresPolling() && + !(engine->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces)) { + int timeout = value.toInt(); + if (timeout >= 0) { + connect(engine, SIGNAL(updateCompleted()), + this, SLOT(decrementTimeout()), Qt::UniqueConnection); + sessionTimeout = timeout / 10000; // convert to poll intervals + } else { + disconnect(engine, SIGNAL(updateCompleted()), this, SLOT(decrementTimeout())); + sessionTimeout = -1; + } + } + } +} + +QString QNetworkSessionPrivateImpl::errorString() const +{ + switch (lastError) { + case QNetworkSession::UnknownSessionError: + return tr("Unknown session error."); + case QNetworkSession::SessionAbortedError: + return tr("The session was aborted by the user or system."); + case QNetworkSession::OperationNotSupportedError: + return tr("The requested operation is not supported by the system."); + case QNetworkSession::InvalidConfigurationError: + return tr("The specified configuration cannot be used."); + case QNetworkSession::RoamingError: + return tr("Roaming was aborted or is not possible."); + default: + break; + } + + return QString(); +} + +QNetworkSession::SessionError QNetworkSessionPrivateImpl::error() const +{ + return lastError; +} + +quint64 QNetworkSessionPrivateImpl::bytesWritten() const +{ + if (engine && state == QNetworkSession::Connected) + return engine->bytesWritten(activeConfig.identifier()); + return Q_UINT64_C(0); +} + +quint64 QNetworkSessionPrivateImpl::bytesReceived() const +{ + if (engine && state == QNetworkSession::Connected) + return engine->bytesReceived(activeConfig.identifier()); + return Q_UINT64_C(0); +} + +quint64 QNetworkSessionPrivateImpl::activeTime() const +{ + if (state == QNetworkSession::Connected && startTime != Q_UINT64_C(0)) + return QDateTime::currentSecsSinceEpoch() - startTime; + return Q_UINT64_C(0); +} + +QNetworkSession::UsagePolicies QNetworkSessionPrivateImpl::usagePolicies() const +{ + return currentPolicies; +} + +void QNetworkSessionPrivateImpl::setUsagePolicies(QNetworkSession::UsagePolicies newPolicies) +{ + if (newPolicies != currentPolicies) { + currentPolicies = newPolicies; + emit usagePoliciesChanged(currentPolicies); + } +} + +void QNetworkSessionPrivateImpl::updateStateFromServiceNetwork() +{ + QNetworkSession::State oldState = state; + + const auto configs = serviceConfig.children(); + for (const QNetworkConfiguration &config : configs) { + if ((config.state() & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) + continue; + + if (activeConfig != config) { + if (engine) { + disconnect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), + this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError))); + } + + activeConfig = config; + engine = getEngineFromId(activeConfig.identifier()); + + if (engine) { + connect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), + this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError)), + Qt::QueuedConnection); + } + emit newConfigurationActivated(); + } + + state = QNetworkSession::Connected; + if (state != oldState) + emit stateChanged(state); + + return; + } + + if (serviceConfig.children().isEmpty()) + state = QNetworkSession::NotAvailable; + else + state = QNetworkSession::Disconnected; + + if (state != oldState) + emit stateChanged(state); +} + +void QNetworkSessionPrivateImpl::updateStateFromActiveConfig() +{ + if (!engine) + return; + + QNetworkSession::State oldState = state; + state = engine->sessionStateForId(activeConfig.identifier()); + + bool oldActive = isOpen; + isOpen = (state == QNetworkSession::Connected) ? opened : false; + + if (!oldActive && isOpen) + emit quitPendingWaitsForOpened(); + if (oldActive && !isOpen) + emit closed(); + + if (oldState != state) + emit stateChanged(state); +} + +void QNetworkSessionPrivateImpl::networkConfigurationsChanged() +{ + if (serviceConfig.isValid()) + updateStateFromServiceNetwork(); + else + updateStateFromActiveConfig(); + + if (engine) + startTime = engine->startTime(activeConfig.identifier()); +} + +void QNetworkSessionPrivateImpl::configurationChanged(QNetworkConfigurationPrivatePointer config) +{ + if (serviceConfig.isValid() && + (config->id == serviceConfig.identifier() || config->id == activeConfig.identifier())) { + updateStateFromServiceNetwork(); + } else if (config->id == activeConfig.identifier()) { + updateStateFromActiveConfig(); + } +} + +void QNetworkSessionPrivateImpl::forcedSessionClose(const QNetworkConfiguration &config) +{ + if (activeConfig == config) { + opened = false; + isOpen = false; + + emit closed(); + + lastError = QNetworkSession::SessionAbortedError; + emit QNetworkSessionPrivate::error(lastError); + } +} + +void QNetworkSessionPrivateImpl::connectionError(const QString &id, QBearerEngineImpl::ConnectionError error) +{ + if (activeConfig.identifier() == id) { + networkConfigurationsChanged(); + switch (error) { + case QBearerEngineImpl::OperationNotSupported: + lastError = QNetworkSession::OperationNotSupportedError; + opened = false; + break; + case QBearerEngineImpl::InterfaceLookupError: + case QBearerEngineImpl::ConnectError: + case QBearerEngineImpl::DisconnectionError: + default: + lastError = QNetworkSession::UnknownSessionError; + } + + emit QNetworkSessionPrivate::error(lastError); + } +} + +void QNetworkSessionPrivateImpl::decrementTimeout() +{ + if (--sessionTimeout <= 0) { + disconnect(engine, SIGNAL(updateCompleted()), this, SLOT(decrementTimeout())); + sessionTimeout = -1; + close(); + } +} + +QT_END_NAMESPACE + +#include "qnetworksession_impl.moc" + +#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qnetworksession_impl_p.h b/src/network/bearer/qnetworksession_impl_p.h new file mode 100644 index 0000000000..b174760152 --- /dev/null +++ b/src/network/bearer/qnetworksession_impl_p.h @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNETWORKSESSION_IMPL_H +#define QNETWORKSESSION_IMPL_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qbearerengine_impl_p.h" + +#include <QtNetwork/private/qnetworkconfigmanager_p.h> +#include <QtNetwork/private/qnetworksession_p.h> + +#ifndef QT_NO_BEARERMANAGEMENT + +QT_BEGIN_NAMESPACE + +class QBearerEngineImpl; + +class Q_NETWORK_EXPORT QNetworkSessionPrivateImpl : public QNetworkSessionPrivate +{ + Q_OBJECT + +public: + QNetworkSessionPrivateImpl() + : engine(nullptr), startTime(0), lastError(QNetworkSession::UnknownSessionError), sessionTimeout(-1), currentPolicies(QNetworkSession::NoPolicy), opened(false) + {} + ~QNetworkSessionPrivateImpl() + {} + + //called by QNetworkSession constructor and ensures + //that the state is immediately updated (w/o actually opening + //a session). Also this function should take care of + //notification hooks to discover future state changes. + void syncStateWithInterface() override; + +#ifndef QT_NO_NETWORKINTERFACE + QNetworkInterface currentInterface() const override; +#endif + QVariant sessionProperty(const QString& key) const override; + void setSessionProperty(const QString& key, const QVariant& value) override; + + void open() override; + void close() override; + void stop() override; + void migrate() override; + void accept() override; + void ignore() override; + void reject() override; + + QString errorString() const override; //must return translated string + QNetworkSession::SessionError error() const override; + + quint64 bytesWritten() const override; + quint64 bytesReceived() const override; + quint64 activeTime() const override; + + QNetworkSession::UsagePolicies usagePolicies() const override; + void setUsagePolicies(QNetworkSession::UsagePolicies) override; + +private Q_SLOTS: + void networkConfigurationsChanged(); + void configurationChanged(QNetworkConfigurationPrivatePointer config); + void forcedSessionClose(const QNetworkConfiguration &config); + void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); + void decrementTimeout(); + +private: + void updateStateFromServiceNetwork(); + void updateStateFromActiveConfig(); + +private: + QBearerEngineImpl *engine; + + quint64 startTime; + + QNetworkSession::SessionError lastError; + + int sessionTimeout; + QNetworkSession::UsagePolicies currentPolicies; + + bool opened; +}; + +QT_END_NAMESPACE + +#endif // QT_NO_BEARERMANAGEMENT + +#endif // QNETWORKSESSION_IMPL_H diff --git a/src/network/configure.cmake b/src/network/configure.cmake new file mode 100644 index 0000000000..a3fad4d226 --- /dev/null +++ b/src/network/configure.cmake @@ -0,0 +1,365 @@ + + +#### Inputs + + + +#### Libraries + +qt_find_package(Libproxy PROVIDED_TARGETS PkgConfig::Libproxy) +qt_find_package(OpenSSL PROVIDED_TARGETS OpenSSL::SSL) +qt_find_package(OpenSSL PROVIDED_TARGETS OpenSSL::SSL) +qt_find_package(GSSAPI PROVIDED_TARGETS GSSAPI::GSSAPI) + + +#### Tests + +# getifaddrs +qt_config_compile_test(getifaddrs + LABEL "getifaddrs()" + CODE +" +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <ifaddrs.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +ifaddrs *list; +getifaddrs(&list); +freeifaddrs(list); + /* END TEST: */ + return 0; +} +"# FIXME: use: unmapped library: network +) + +# ipv6ifname +qt_config_compile_test(ipv6ifname + LABEL "IPv6 ifname" + CODE +" +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +char buf[IFNAMSIZ]; +if_nametoindex(\"eth0\"); +if_indextoname(1, buf); +if_freenameindex(if_nameindex()); + /* END TEST: */ + return 0; +} +"# FIXME: use: unmapped library: network +) + +# linux-netlink +qt_config_compile_test(linux_netlink + LABEL "Linux AF_NETLINK sockets" + CODE +" +#include <asm/types.h> +#include <linux/netlink.h> +#include <linux/rtnetlink.h> +#include <sys/socket.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +struct rtattr rta = { }; +struct ifinfomsg ifi = {}; +struct ifaddrmsg ifa = {}; +struct ifa_cacheinfo ci; +ci.ifa_prefered = ci.ifa_valid = 0; +(void)RTM_NEWLINK; (void)RTM_NEWADDR; +(void)IFLA_ADDRESS; (void)IFLA_IFNAME; +(void)IFA_ADDRESS; (void)IFA_LABEL; (void)IFA_CACHEINFO; +(void)(IFA_F_SECONDARY | IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR); + /* END TEST: */ + return 0; +} +") + +# sctp +qt_config_compile_test(sctp + LABEL "SCTP support" + CODE +" +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netinet/sctp.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +sctp_initmsg sctpInitMsg; +socklen_t sctpInitMsgSize = sizeof(sctpInitMsg); +(void) socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP); +(void) getsockopt(-1, SOL_SCTP, SCTP_INITMSG, &sctpInitMsg, &sctpInitMsgSize); + /* END TEST: */ + return 0; +} +"# FIXME: use: unmapped library: network +) + +# dtls +qt_config_compile_test(dtls + LABEL "DTLS support in OpenSSL" + LIBRARIES + OpenSSL::SSL + CODE +" +#include <openssl/ssl.h> +#if defined(OPENSSL_NO_DTLS) || !defined(DTLS1_2_VERSION) +# error OpenSSL without DTLS support +#endif +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ + + /* END TEST: */ + return 0; +} +") + +# ocsp +qt_config_compile_test(ocsp + LABEL "OCSP stapling support in OpenSSL" + LIBRARIES + OpenSSL::SSL + CODE +" +#include <openssl/ssl.h> +#include <openssl/ocsp.h> +#if defined(OPENSSL_NO_OCSP) || defined(OPENSSL_NO_TLSEXT) +# error OpenSSL without OCSP stapling +#endif +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ + + /* END TEST: */ + return 0; +} +") + +# netlistmgr +qt_config_compile_test(netlistmgr + LABEL "Network List Manager" + CODE +" +#include <netlistmgr.h> +#include <wrl/client.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +using namespace Microsoft::WRL; +ComPtr<INetworkListManager> networkListManager; +ComPtr<IConnectionPoint> connectionPoint; +ComPtr<IConnectionPointContainer> connectionPointContainer; +networkListManager.As(&connectionPointContainer); +connectionPointContainer->FindConnectionPoint(IID_INetworkConnectionEvents, &connectionPoint); + /* END TEST: */ + return 0; +} +"# FIXME: qmake: LIBS += -lOle32 +) + + + +#### Features + +qt_feature("corewlan" PUBLIC PRIVATE + LABEL "CoreWLan" + CONDITION libs.corewlan OR FIXME + EMIT_IF APPLE +) +qt_feature_definition("corewlan" "QT_NO_COREWLAN" NEGATE VALUE "1") +qt_feature("getifaddrs" PUBLIC + LABEL "getifaddrs()" + CONDITION TEST_getifaddrs +) +qt_feature_definition("getifaddrs" "QT_NO_GETIFADDRS" NEGATE VALUE "1") +qt_feature("ipv6ifname" PUBLIC + LABEL "IPv6 ifname" + CONDITION TEST_ipv6ifname +) +qt_feature_definition("ipv6ifname" "QT_NO_IPV6IFNAME" NEGATE VALUE "1") +qt_feature("libproxy" PRIVATE + LABEL "libproxy" + AUTODETECT OFF + CONDITION Libproxy_FOUND +) +qt_feature("linux-netlink" PRIVATE + LABEL "Linux AF_NETLINK" + CONDITION LINUX AND TEST_linux_netlink +) +qt_feature("openssl" PRIVATE + LABEL "OpenSSL" + CONDITION QT_FEATURE_openssl_runtime OR QT_FEATURE_openssl_linked + ENABLE false +) +qt_feature_definition("openssl" "QT_NO_OPENSSL" NEGATE) +qt_feature_config("openssl" QMAKE_PUBLIC_QT_CONFIG) +qt_feature("openssl-runtime" + AUTODETECT NOT WINRT AND NOT WASM + CONDITION NOT QT_FEATURE_securetransport AND NOT QT_FEATURE_schannel AND OPENSSL_INCLUDE_DIR + ENABLE INPUT_openssl STREQUAL 'yes' OR INPUT_openssl STREQUAL 'runtime' + DISABLE INPUT_openssl STREQUAL 'no' OR INPUT_openssl STREQUAL 'linked' OR INPUT_ssl STREQUAL 'no' +) +qt_feature("openssl-linked" PRIVATE + LABEL " Qt directly linked to OpenSSL" + AUTODETECT OFF + CONDITION NOT QT_FEATURE_securetransport AND NOT QT_FEATURE_schannel AND OpenSSL_FOUND + ENABLE INPUT_openssl STREQUAL 'linked' +) +qt_feature_definition("openssl-linked" "QT_LINKED_OPENSSL") +qt_feature("securetransport" PUBLIC + LABEL "SecureTransport" + CONDITION APPLE AND ( INPUT_openssl STREQUAL '' OR INPUT_openssl STREQUAL 'no' ) + DISABLE INPUT_securetransport STREQUAL 'no' OR INPUT_ssl STREQUAL 'no' +) +qt_feature_definition("securetransport" "QT_SECURETRANSPORT") +qt_feature("schannel" PUBLIC + LABEL "Schannel" + CONDITION INPUT_schannel STREQUAL 'yes' AND WIN32 AND NOT WINRT AND ( INPUT_openssl STREQUAL '' OR INPUT_openssl STREQUAL 'no' ) + DISABLE INPUT_schannel STREQUAL 'no' OR INPUT_ssl STREQUAL 'no' +) +qt_feature_definition("schannel" "QT_SCHANNEL") +qt_feature("ssl" PUBLIC + LABEL "SSL" + CONDITION WINRT OR QT_FEATURE_securetransport OR QT_FEATURE_openssl OR QT_FEATURE_schannel +) +qt_feature_definition("ssl" "QT_NO_SSL" NEGATE VALUE "1") +qt_feature("dtls" PUBLIC + SECTION "Networking" + LABEL "DTLS" + PURPOSE "Provides a DTLS implementation" + CONDITION QT_FEATURE_openssl AND QT_FEATURE_udpsocket AND TEST_dtls +) +qt_feature("ocsp" PUBLIC + SECTION "Networking" + LABEL "OCSP-stapling" + PURPOSE "Provides OCSP stapling support" + CONDITION QT_FEATURE_opensslv11 AND TEST_ocsp +) +qt_feature("opensslv11" PUBLIC + LABEL "OpenSSL 1.1" + CONDITION QT_FEATURE_openssl +) +qt_feature("sctp" PUBLIC + LABEL "SCTP" + AUTODETECT OFF + CONDITION TEST_sctp +) +qt_feature_definition("sctp" "QT_NO_SCTP" NEGATE VALUE "1") +qt_feature("system-proxies" PRIVATE + LABEL "Use system proxies" +) +qt_feature("ftp" PUBLIC + SECTION "Networking" + LABEL "FTP" + PURPOSE "Provides support for the File Transfer Protocol in QNetworkAccessManager." + AUTODETECT OFF + CONDITION QT_FEATURE_textdate +) +qt_feature_definition("ftp" "QT_NO_FTP" NEGATE VALUE "1") +qt_feature("http" PUBLIC + SECTION "Networking" + LABEL "HTTP" + PURPOSE "Provides support for the Hypertext Transfer Protocol in QNetworkAccessManager." + CONDITION QT_FEATURE_thread +) +qt_feature_definition("http" "QT_NO_HTTP" NEGATE VALUE "1") +qt_feature("udpsocket" PUBLIC + SECTION "Networking" + LABEL "QUdpSocket" + PURPOSE "Provides access to UDP sockets." +) +qt_feature_definition("udpsocket" "QT_NO_UDPSOCKET" NEGATE VALUE "1") +qt_feature("networkproxy" PUBLIC + SECTION "Networking" + LABEL "QNetworkProxy" + PURPOSE "Provides network proxy support." +) +qt_feature_definition("networkproxy" "QT_NO_NETWORKPROXY" NEGATE VALUE "1") +qt_feature("socks5" PUBLIC + SECTION "Networking" + LABEL "SOCKS5" + PURPOSE "Provides SOCKS5 support in QNetworkProxy." + CONDITION QT_FEATURE_networkproxy +) +qt_feature_definition("socks5" "QT_NO_SOCKS5" NEGATE VALUE "1") +qt_feature("networkinterface" PUBLIC + SECTION "Networking" + LABEL "QNetworkInterface" + PURPOSE "Supports enumerating a host's IP addresses and network interfaces." + CONDITION NOT WASM +) +qt_feature_definition("networkinterface" "QT_NO_NETWORKINTERFACE" NEGATE VALUE "1") +qt_feature("networkdiskcache" PUBLIC + SECTION "Networking" + LABEL "QNetworkDiskCache" + PURPOSE "Provides a disk cache for network resources." + CONDITION QT_FEATURE_temporaryfile +) +qt_feature_definition("networkdiskcache" "QT_NO_NETWORKDISKCACHE" NEGATE VALUE "1") +qt_feature("bearermanagement" PUBLIC + SECTION "Networking" + LABEL "Bearer management" + PURPOSE "Provides bearer management for the network stack." + CONDITION QT_FEATURE_thread AND QT_FEATURE_library AND QT_FEATURE_networkinterface AND QT_FEATURE_properties +) +qt_feature_definition("bearermanagement" "QT_NO_BEARERMANAGEMENT" NEGATE VALUE "1") +qt_feature_definition("bearermanagement" "QT_NO_BEARERMANAGEMENT" NEGATE) +qt_feature("localserver" PUBLIC + SECTION "Networking" + LABEL "QLocalServer" + PURPOSE "Provides a local socket based server." + CONDITION QT_FEATURE_temporaryfile +) +qt_feature_definition("localserver" "QT_NO_LOCALSERVER" NEGATE VALUE "1") +qt_feature("dnslookup" PUBLIC + SECTION "Networking" + LABEL "QDnsLookup" + PURPOSE "Provides API for DNS lookups." +) +qt_feature("gssapi" PUBLIC + SECTION "Networking" + LABEL "GSSAPI" + PURPOSE "Enable SPNEGO authentication through GSSAPI" + CONDITION NOT WIN32 AND GSSAPI_FOUND +) +qt_feature_definition("gssapi" "QT_NO_GSSAPI" NEGATE VALUE "1") +qt_feature("sspi" PUBLIC + SECTION "Networking" + LABEL "SSPI" + PURPOSE "Enable NTLM/SPNEGO authentication through SSPI" + CONDITION WIN32 AND NOT WINRT +) +qt_feature_definition("sspi" "QT_NO_SSPI" NEGATE VALUE "1") +qt_feature("netlistmgr" PRIVATE + SECTION "Networking" + LABEL "Network List Manager" + PURPOSE "Use Network List Manager to keep track of network connectivity" + CONDITION WIN32 AND TEST_netlistmgr +) +qt_feature("topleveldomain" PUBLIC + SECTION "Networking" + LABEL "qTopLevelDomain()" + PURPOSE "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie." +) diff --git a/src/network/configure.json b/src/network/configure.json index 496401749f..a18db9fa52 100644 --- a/src/network/configure.json +++ b/src/network/configure.json @@ -343,6 +343,7 @@ "label": "FTP", "purpose": "Provides support for the File Transfer Protocol in QNetworkAccessManager.", "section": "Networking", + "autoDetect": false, "condition": "features.textdate", "output": [ "publicFeature", "feature" ] }, @@ -430,6 +431,12 @@ "section": "Networking", "condition": "config.win32 && tests.netlistmgr", "output": [ "privateFeature" ] + }, + "topleveldomain": { + "label": "qTopLevelDomain()", + "purpose": "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie.", + "section": "Networking", + "output": [ "publicFeature" ] } }, @@ -446,15 +453,7 @@ For example: { "type": "warning", "condition": "features.libproxy && input.qt_namespace == ''", - "message": "Some of libproxy's plugins may use incompatible Qt versions. - - Some platforms and distributions ship libproxy with plugins, such - as config_kde4.so, that are linked against old versions of Qt; and - libproxy loads these plugins automatically when initialized. If Qt - is not in a namespace, that loading causes a crash. Even if the - systems on which you build and test have no such plugins, your - users' systems may have them. We therefore recommend that you - combine -libproxy with -qtnamespace when configuring Qt." + "message": "Some of libproxy's plugins may use incompatible Qt versions. Some platforms and distributions ship libproxy with plugins, such as config_kde4.so, that are linked against old versions of Qt; and libproxy loads these plugins automatically when initialized. If Qt is not in a namespace, that loading causes a crash. Even if the systems on which you build and test have no such plugins, your users' systems may have them. We therefore recommend that you combine -libproxy with -qtnamespace when configuring Qt." } ], @@ -488,6 +487,7 @@ For example: "opensslv11", "dtls", "ocsp", + "ftp", "sctp", "system-proxies", "gssapi" diff --git a/src/network/kernel/kernel.pri b/src/network/kernel/kernel.pri index 110d9f56bf..7dd5b1d97e 100644 --- a/src/network/kernel/kernel.pri +++ b/src/network/kernel/kernel.pri @@ -26,6 +26,13 @@ SOURCES += kernel/qauthenticator.cpp \ kernel/qnetworkinterface.cpp \ kernel/qnetworkproxy.cpp + +qtConfig(topleveldomain) { + HEADERS += kernel/qurltlds_p.h \ + kernel/qtldurl_p.h + SOURCES += kernel/qtldurl.cpp +} + qtConfig(ftp) { HEADERS += kernel/qurlinfo_p.h SOURCES += kernel/qurlinfo.cpp diff --git a/src/network/kernel/qnetworkinterface.h b/src/network/kernel/qnetworkinterface.h index 4caedaa38f..c65ea58860 100644 --- a/src/network/kernel/qnetworkinterface.h +++ b/src/network/kernel/qnetworkinterface.h @@ -50,7 +50,6 @@ QT_BEGIN_NAMESPACE class QDeadlineTimer; -template<typename T> class QList; class QNetworkAddressEntryPrivate; class Q_NETWORK_EXPORT QNetworkAddressEntry diff --git a/src/network/kernel/qtldurl.cpp b/src/network/kernel/qtldurl.cpp new file mode 100644 index 0000000000..249f4912b1 --- /dev/null +++ b/src/network/kernel/qtldurl.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qglobal.h> + +#include <QtNetwork/private/qtnetworkglobal_p.h> + +#if QT_CONFIG(topleveldomain) + +#include "qplatformdefs.h" +#include "qurl.h" +#include "private/qurltlds_p.h" +#include "private/qtldurl_p.h" +#include "QtCore/qstring.h" +#include "QtCore/qvector.h" + +QT_BEGIN_NAMESPACE + +enum TLDMatchType { + ExactMatch, + SuffixMatch, + ExceptionMatch, +}; + +static bool containsTLDEntry(QStringView entry, TLDMatchType match) +{ + const QStringView matchSymbols[] = { + u"", + u"*", + u"!", + }; + const auto symbol = matchSymbols[match]; + int index = qt_hash(entry, qt_hash(symbol)) % tldCount; + + // select the right chunk from the big table + short chunk = 0; + uint chunkIndex = tldIndices[index], offset = 0; + while (chunk < tldChunkCount && tldIndices[index] >= tldChunks[chunk]) { + chunkIndex -= tldChunks[chunk]; + offset += tldChunks[chunk]; + chunk++; + } + + // check all the entries from the given index + while (chunkIndex < tldIndices[index+1] - offset) { + const auto utf8 = tldData[chunk] + chunkIndex; + if ((symbol.isEmpty() || QLatin1Char(*utf8) == symbol) && entry == QString::fromUtf8(utf8 + symbol.size())) + return true; + chunkIndex += qstrlen(utf8) + 1; // +1 for the ending \0 + } + return false; +} + +/*! + \internal + + Return the top-level-domain per Qt's copy of the Mozilla public suffix list of + \a domain. +*/ + +Q_NETWORK_EXPORT QString qTopLevelDomain(const QString &domain) +{ + const QString domainLower = domain.toLower(); + QVector<QStringRef> sections = domainLower.splitRef(QLatin1Char('.'), QString::SkipEmptyParts); + if (sections.isEmpty()) + return QString(); + + QString level, tld; + for (int j = sections.count() - 1; j >= 0; --j) { + level.prepend(QLatin1Char('.') + sections.at(j)); + if (qIsEffectiveTLD(level.rightRef(level.size() - 1))) + tld = level; + } + return tld; +} + +/*! + \internal + + Return true if \a domain is a top-level-domain per Qt's copy of the Mozilla public suffix list. +*/ + +Q_NETWORK_EXPORT bool qIsEffectiveTLD(const QStringRef &domain) +{ + // for domain 'foo.bar.com': + // 1. return if TLD table contains 'foo.bar.com' + // 2. else if table contains '*.bar.com', + // 3. test that table does not contain '!foo.bar.com' + + if (containsTLDEntry(domain, ExactMatch)) // 1 + return true; + + const int dot = domain.indexOf(QLatin1Char('.')); + if (dot < 0) // Actual TLD: may be effective if the subject of a wildcard rule: + return containsTLDEntry(QString(QLatin1Char('.') + domain), SuffixMatch); + if (containsTLDEntry(domain.mid(dot), SuffixMatch)) // 2 + return !containsTLDEntry(domain, ExceptionMatch); // 3 + return false; +} + +QT_END_NAMESPACE + +#endif diff --git a/src/network/kernel/qtldurl_p.h b/src/network/kernel/qtldurl_p.h new file mode 100644 index 0000000000..a6948cfd48 --- /dev/null +++ b/src/network/kernel/qtldurl_p.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtNetwork module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTLDURL_P_H +#define QTLDURL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qDecodeDataUrl. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtNetwork/private/qtnetworkglobal_p.h> +#include "QtCore/qurl.h" +#include "QtCore/qstring.h" + +QT_REQUIRE_CONFIG(topleveldomain); + +QT_BEGIN_NAMESPACE + +Q_NETWORK_EXPORT QString qTopLevelDomain(const QString &domain); +Q_NETWORK_EXPORT bool qIsEffectiveTLD(const QStringRef &domain); +inline bool qIsEffectiveTLD(const QString &domain) +{ + return qIsEffectiveTLD(QStringRef(&domain)); +} + +QT_END_NAMESPACE + +#endif // QDATAURL_P_H diff --git a/src/network/kernel/qurltlds_p.h b/src/network/kernel/qurltlds_p.h new file mode 100644 index 0000000000..7d79797cd4 --- /dev/null +++ b/src/network/kernel/qurltlds_p.h @@ -0,0 +1,14363 @@ +// License: MPL 2.0/GPL 2.0/LGPL 3 +// +// The contents of this file are subject to the Mozilla Public License Version +// 2.0 (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the +// License. +// +// The Original Code is the Public Suffix List. +// +// The Initial Developer of the Original Code is +// Jo Hermans <jo.hermans@gmail.com>. +// Portions created by the Initial Developer are Copyright (C) 2007 +// the Initial Developer. All Rights Reserved. +// +// Contributor(s): +// Ruben Arakelyan <ruben@wackomenace.co.uk> +// Gervase Markham <gerv@gerv.net> +// Pamela Greene <pamg.bugs@gmail.com> +// David Triendl <david@triendl.name> +// Jothan Frakes <jothan@gmail.com> +// The kind representatives of many TLD registries +// +// Alternatively, the contents of this file may be used under the terms of +// either the GNU General Public License Version 2 or later (the "GPL"), or +// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +// in which case the provisions of the GPL or the LGPL are applicable instead +// of those above. If you wish to allow use of your version of this file only +// under the terms of either the GPL or the LGPL, and not to allow others to +// use your version of this file under the terms of the MPL, indicate your +// decision by deleting the provisions above and replace them with the notice +// and other provisions required by the GPL or the LGPL. If you do not delete +// the provisions above, a recipient may use your version of this file under +// the terms of any one of the MPL, the GPL or the LGPL. +// + +#ifndef QURLTLD_P_H +#define QURLTLD_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the Network Access and Core framework. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +#include <QtNetwork/private/qtnetworkglobal_p.h> + +QT_BEGIN_NAMESPACE + +// note to maintainer: +// this file should be updated before each release -> +// for instructions see the program at +// util/corelib/qurl-generateTLDs/ + +static const quint16 tldCount = 8799; +static const quint32 tldIndices[] = { +0, +29, +29, +36, +36, +69, +83, +97, +116, +123, +133, +140, +171, +186, +193, +200, +200, +200, +200, +225, +263, +272, +305, +332, +332, +378, +388, +395, +425, +444, +449, +449, +459, +459, +459, +459, +484, +513, +538, +538, +538, +563, +563, +580, +599, +618, +618, +660, +670, +670, +670, +670, +682, +712, +718, +750, +790, +790, +812, +834, +851, +869, +912, +937, +977, +977, +977, +977, +977, +987, +987, +1002, +1015, +1024, +1030, +1051, +1051, +1061, +1070, +1076, +1076, +1076, +1094, +1129, +1158, +1195, +1195, +1195, +1215, +1234, +1234, +1245, +1245, +1245, +1245, +1245, +1268, +1276, +1291, +1297, +1304, +1316, +1337, +1379, +1397, +1408, +1413, +1429, +1429, +1429, +1429, +1444, +1467, +1476, +1476, +1505, +1505, +1505, +1523, +1523, +1547, +1547, +1566, +1590, +1590, +1600, +1612, +1612, +1612, +1612, +1631, +1674, +1712, +1712, +1722, +1730, +1751, +1751, +1769, +1769, +1769, +1784, +1784, +1817, +1817, +1817, +1817, +1817, +1817, +1837, +1837, +1850, +1850, +1850, +1850, +1871, +1914, +1914, +1932, +1960, +1960, +1967, +1977, +1977, +1977, +1977, +2015, +2038, +2071, +2090, +2090, +2105, +2121, +2136, +2157, +2157, +2209, +2216, +2231, +2231, +2231, +2231, +2231, +2238, +2238, +2247, +2271, +2318, +2331, +2346, +2359, +2368, +2368, +2368, +2377, +2377, +2377, +2377, +2386, +2391, +2391, +2391, +2398, +2398, +2405, +2461, +2485, +2513, +2513, +2543, +2550, +2550, +2579, +2579, +2579, +2579, +2590, +2630, +2630, +2673, +2673, +2673, +2673, +2673, +2700, +2700, +2700, +2706, +2706, +2767, +2786, +2794, +2818, +2818, +2824, +2835, +2850, +2850, +2868, +2868, +2868, +2875, +2875, +2894, +2912, +2928, +2928, +2928, +2946, +2946, +2956, +2956, +2956, +2956, +2956, +2956, +2974, +2974, +2995, +2995, +2995, +3008, +3014, +3022, +3060, +3060, +3073, +3120, +3127, +3135, +3145, +3200, +3210, +3210, +3210, +3210, +3210, +3210, +3210, +3227, +3244, +3255, +3276, +3285, +3285, +3293, +3293, +3293, +3293, +3332, +3377, +3377, +3384, +3402, +3416, +3416, +3442, +3442, +3442, +3442, +3461, +3461, +3461, +3474, +3474, +3499, +3529, +3540, +3591, +3602, +3602, +3602, +3602, +3624, +3661, +3661, +3668, +3668, +3700, +3733, +3737, +3753, +3799, +3817, +3839, +3839, +3839, +3863, +3894, +3910, +3920, +3920, +3936, +3936, +3947, +3981, +3993, +3993, +4019, +4019, +4023, +4030, +4038, +4038, +4038, +4038, +4038, +4038, +4038, +4038, +4038, +4054, +4054, +4069, +4082, +4088, +4116, +4116, +4120, +4146, +4160, +4177, +4177, +4195, +4204, +4204, +4204, +4214, +4214, +4214, +4229, +4229, +4229, +4229, +4244, +4257, +4265, +4265, +4279, +4290, +4329, +4385, +4385, +4385, +4385, +4396, +4400, +4447, +4465, +4465, +4471, +4492, +4507, +4513, +4513, +4525, +4531, +4531, +4558, +4575, +4591, +4617, +4653, +4658, +4658, +4666, +4712, +4712, +4718, +4718, +4735, +4745, +4745, +4751, +4751, +4772, +4812, +4835, +4835, +4842, +4864, +4864, +4881, +4881, +4897, +4908, +4917, +4933, +4948, +4968, +4968, +4968, +4968, +4974, +4998, +5031, +5038, +5053, +5067, +5083, +5116, +5126, +5133, +5155, +5155, +5155, +5155, +5155, +5155, +5155, +5168, +5173, +5173, +5177, +5188, +5226, +5226, +5271, +5271, +5282, +5282, +5296, +5313, +5313, +5313, +5333, +5333, +5333, +5342, +5358, +5358, +5370, +5374, +5396, +5396, +5396, +5413, +5413, +5413, +5413, +5413, +5413, +5413, +5417, +5417, +5467, +5473, +5473, +5524, +5539, +5578, +5585, +5585, +5585, +5600, +5600, +5600, +5600, +5631, +5642, +5642, +5642, +5642, +5669, +5676, +5683, +5690, +5708, +5721, +5721, +5734, +5743, +5758, +5799, +5817, +5835, +5835, +5835, +5841, +5841, +5872, +5872, +5888, +5904, +5917, +5952, +5952, +5997, +6010, +6044, +6054, +6078, +6078, +6116, +6128, +6128, +6128, +6137, +6137, +6143, +6143, +6143, +6155, +6160, +6160, +6160, +6160, +6160, +6173, +6173, +6173, +6189, +6189, +6189, +6205, +6237, +6237, +6252, +6252, +6263, +6263, +6296, +6321, +6321, +6321, +6328, +6343, +6343, +6373, +6391, +6391, +6426, +6426, +6436, +6475, +6489, +6507, +6511, +6511, +6515, +6530, +6530, +6548, +6548, +6552, +6552, +6572, +6572, +6622, +6651, +6651, +6668, +6668, +6693, +6731, +6731, +6746, +6775, +6787, +6787, +6787, +6787, +6787, +6787, +6787, +6787, +6787, +6802, +6806, +6810, +6823, +6823, +6834, +6870, +6874, +6933, +6954, +6966, +6966, +6966, +6966, +6982, +6982, +6982, +6988, +6998, +7028, +7037, +7037, +7070, +7070, +7098, +7098, +7098, +7127, +7153, +7153, +7164, +7164, +7174, +7174, +7174, +7205, +7205, +7224, +7224, +7240, +7240, +7284, +7284, +7284, +7284, +7284, +7284, +7301, +7318, +7364, +7364, +7374, +7401, +7424, +7424, +7443, +7448, +7448, +7448, +7448, +7448, +7462, +7462, +7462, +7462, +7462, +7462, +7462, +7466, +7466, +7488, +7488, +7498, +7502, +7520, +7530, +7530, +7530, +7534, +7540, +7540, +7540, +7547, +7547, +7547, +7561, +7571, +7571, +7571, +7582, +7582, +7603, +7603, +7617, +7628, +7647, +7666, +7666, +7666, +7694, +7707, +7738, +7750, +7768, +7825, +7864, +7880, +7880, +7880, +7880, +7880, +7893, +7893, +7893, +7898, +7911, +7917, +7944, +7944, +7989, +7989, +7989, +7989, +7989, +7989, +8006, +8037, +8037, +8037, +8063, +8074, +8091, +8113, +8135, +8148, +8148, +8162, +8162, +8169, +8169, +8176, +8197, +8197, +8197, +8216, +8216, +8216, +8230, +8230, +8240, +8240, +8246, +8257, +8262, +8279, +8279, +8286, +8286, +8296, +8313, +8313, +8334, +8339, +8339, +8353, +8353, +8363, +8363, +8370, +8370, +8384, +8384, +8430, +8458, +8458, +8492, +8511, +8511, +8518, +8565, +8565, +8565, +8565, +8565, +8637, +8665, +8675, +8701, +8708, +8708, +8744, +8754, +8754, +8766, +8814, +8826, +8838, +8865, +8865, +8882, +8892, +8892, +8899, +8899, +8905, +8918, +8928, +8935, +8962, +8975, +8975, +8986, +9019, +9019, +9063, +9071, +9077, +9089, +9111, +9118, +9118, +9118, +9118, +9139, +9165, +9202, +9212, +9225, +9237, +9267, +9291, +9291, +9291, +9322, +9322, +9330, +9330, +9330, +9338, +9355, +9423, +9423, +9429, +9447, +9468, +9480, +9480, +9480, +9545, +9600, +9606, +9615, +9615, +9640, +9671, +9671, +9671, +9744, +9744, +9783, +9783, +9783, +9796, +9814, +9833, +9838, +9857, +9857, +9864, +9902, +9922, +9944, +9944, +9976, +9976, +10001, +10006, +10023, +10023, +10029, +10037, +10054, +10054, +10054, +10072, +10072, +10072, +10094, +10112, +10144, +10158, +10174, +10196, +10213, +10213, +10235, +10254, +10279, +10291, +10311, +10326, +10366, +10383, +10393, +10399, +10399, +10399, +10431, +10431, +10431, +10431, +10431, +10440, +10459, +10472, +10472, +10495, +10507, +10537, +10582, +10598, +10612, +10626, +10666, +10684, +10690, +10710, +10725, +10765, +10783, +10783, +10802, +10825, +10825, +10843, +10853, +10865, +10902, +10902, +10953, +10953, +10984, +10990, +10990, +10990, +10990, +11027, +11036, +11036, +11036, +11036, +11057, +11073, +11073, +11073, +11082, +11082, +11082, +11137, +11142, +11152, +11168, +11181, +11181, +11181, +11181, +11199, +11199, +11212, +11226, +11253, +11271, +11287, +11311, +11322, +11340, +11356, +11380, +11380, +11401, +11407, +11420, +11475, +11514, +11523, +11529, +11529, +11547, +11572, +11572, +11588, +11588, +11588, +11602, +11602, +11602, +11608, +11625, +11641, +11676, +11683, +11683, +11683, +11699, +11706, +11706, +11706, +11723, +11729, +11729, +11761, +11767, +11767, +11767, +11799, +11810, +11810, +11810, +11810, +11810, +11810, +11810, +11810, +11810, +11810, +11810, +11823, +11838, +11838, +11846, +11852, +11871, +11887, +11905, +11920, +11936, +11968, +11968, +11981, +11981, +11987, +12004, +12004, +12030, +12043, +12059, +12066, +12066, +12066, +12096, +12096, +12096, +12105, +12136, +12159, +12159, +12159, +12174, +12196, +12232, +12237, +12237, +12253, +12269, +12269, +12269, +12282, +12289, +12289, +12306, +12323, +12333, +12333, +12349, +12349, +12384, +12422, +12440, +12455, +12472, +12472, +12472, +12472, +12491, +12505, +12511, +12546, +12569, +12569, +12573, +12573, +12595, +12595, +12605, +12605, +12605, +12612, +12636, +12654, +12691, +12691, +12713, +12728, +12744, +12754, +12772, +12784, +12810, +12849, +12849, +12873, +12887, +12887, +12887, +12887, +12887, +12910, +12930, +12973, +13002, +13015, +13058, +13058, +13069, +13080, +13080, +13080, +13080, +13086, +13086, +13096, +13114, +13138, +13160, +13160, +13160, +13160, +13160, +13160, +13160, +13178, +13188, +13204, +13224, +13224, +13224, +13224, +13234, +13243, +13260, +13260, +13260, +13260, +13266, +13281, +13315, +13315, +13340, +13347, +13347, +13347, +13378, +13378, +13378, +13378, +13404, +13414, +13430, +13450, +13471, +13475, +13479, +13479, +13494, +13494, +13494, +13494, +13494, +13494, +13494, +13494, +13513, +13513, +13513, +13542, +13551, +13551, +13551, +13551, +13551, +13551, +13560, +13569, +13569, +13569, +13569, +13599, +13599, +13610, +13623, +13668, +13676, +13676, +13683, +13702, +13702, +13716, +13716, +13733, +13733, +13744, +13766, +13775, +13775, +13775, +13790, +13815, +13822, +13827, +13827, +13844, +13844, +13859, +13875, +13875, +13919, +13951, +13972, +14006, +14006, +14006, +14015, +14023, +14039, +14051, +14079, +14079, +14092, +14128, +14143, +14153, +14153, +14153, +14153, +14173, +14188, +14198, +14198, +14213, +14246, +14281, +14287, +14304, +14304, +14311, +14321, +14328, +14338, +14338, +14370, +14404, +14448, +14448, +14473, +14495, +14502, +14502, +14539, +14552, +14559, +14559, +14576, +14576, +14576, +14590, +14590, +14590, +14590, +14590, +14590, +14590, +14590, +14623, +14641, +14648, +14655, +14704, +14742, +14742, +14742, +14759, +14780, +14780, +14780, +14798, +14798, +14803, +14821, +14821, +14861, +14861, +14870, +14880, +14880, +14915, +14934, +14951, +14976, +14976, +14976, +14976, +15005, +15042, +15057, +15057, +15057, +15105, +15131, +15138, +15149, +15149, +15173, +15173, +15183, +15225, +15241, +15272, +15278, +15278, +15312, +15333, +15354, +15354, +15354, +15354, +15354, +15354, +15354, +15365, +15365, +15365, +15391, +15391, +15391, +15391, +15391, +15391, +15406, +15414, +15414, +15414, +15414, +15430, +15450, +15501, +15501, +15501, +15501, +15501, +15515, +15520, +15520, +15520, +15520, +15546, +15546, +15546, +15546, +15546, +15576, +15608, +15630, +15650, +15650, +15675, +15675, +15695, +15706, +15716, +15716, +15716, +15716, +15733, +15741, +15752, +15752, +15752, +15752, +15764, +15764, +15778, +15778, +15786, +15817, +15817, +15833, +15833, +15852, +15852, +15867, +15885, +15935, +15941, +15961, +15961, +15977, +15981, +15988, +15994, +16015, +16015, +16054, +16054, +16054, +16087, +16113, +16122, +16122, +16157, +16188, +16188, +16212, +16212, +16212, +16212, +16230, +16230, +16246, +16276, +16287, +16300, +16316, +16334, +16353, +16378, +16401, +16401, +16421, +16421, +16421, +16425, +16450, +16450, +16450, +16456, +16465, +16475, +16491, +16509, +16509, +16518, +16530, +16562, +16562, +16562, +16571, +16571, +16571, +16595, +16595, +16595, +16610, +16610, +16610, +16634, +16661, +16678, +16684, +16684, +16691, +16691, +16706, +16763, +16792, +16807, +16827, +16847, +16847, +16847, +16859, +16859, +16859, +16880, +16902, +16902, +16922, +16922, +16922, +16942, +16949, +16959, +16974, +16974, +16980, +16980, +16993, +17024, +17037, +17037, +17044, +17097, +17097, +17112, +17112, +17135, +17150, +17150, +17155, +17162, +17190, +17190, +17210, +17219, +17219, +17232, +17232, +17241, +17254, +17269, +17292, +17302, +17302, +17314, +17314, +17314, +17314, +17353, +17371, +17400, +17418, +17418, +17444, +17444, +17466, +17466, +17466, +17466, +17466, +17466, +17466, +17466, +17466, +17488, +17488, +17498, +17498, +17506, +17506, +17527, +17552, +17552, +17562, +17569, +17587, +17603, +17603, +17619, +17628, +17667, +17674, +17698, +17706, +17742, +17795, +17813, +17813, +17834, +17844, +17844, +17844, +17844, +17866, +17886, +17917, +17953, +17953, +17953, +17984, +17984, +17984, +17984, +17984, +18024, +18024, +18045, +18077, +18096, +18102, +18114, +18114, +18114, +18136, +18146, +18170, +18170, +18170, +18193, +18193, +18193, +18211, +18246, +18253, +18303, +18303, +18303, +18324, +18324, +18344, +18344, +18344, +18350, +18373, +18393, +18401, +18401, +18421, +18435, +18469, +18491, +18491, +18523, +18546, +18566, +18566, +18589, +18610, +18622, +18646, +18674, +18689, +18697, +18721, +18730, +18730, +18751, +18765, +18789, +18805, +18826, +18842, +18842, +18846, +18846, +18856, +18863, +18881, +18903, +18928, +18947, +18950, +18964, +18967, +18979, +18987, +19007, +19026, +19026, +19029, +19029, +19044, +19077, +19107, +19110, +19131, +19134, +19140, +19156, +19179, +19204, +19222, +19222, +19236, +19239, +19251, +19284, +19299, +19302, +19318, +19328, +19332, +19360, +19389, +19392, +19419, +19432, +19442, +19451, +19463, +19466, +19469, +19480, +19507, +19510, +19543, +19543, +19554, +19557, +19578, +19581, +19584, +19608, +19611, +19623, +19644, +19654, +19673, +19682, +19682, +19682, +19685, +19707, +19710, +19710, +19727, +19727, +19733, +19736, +19736, +19736, +19736, +19749, +19749, +19754, +19777, +19808, +19811, +19814, +19817, +19835, +19860, +19860, +19863, +19863, +19863, +19863, +19872, +19872, +19906, +19906, +19916, +19922, +19936, +19939, +19942, +19958, +19968, +19978, +20000, +20019, +20019, +20049, +20065, +20090, +20090, +20113, +20148, +20158, +20196, +20239, +20255, +20278, +20310, +20322, +20331, +20366, +20369, +20376, +20389, +20392, +20392, +20412, +20438, +20451, +20451, +20511, +20517, +20552, +20570, +20586, +20593, +20593, +20605, +20608, +20621, +20624, +20627, +20663, +20666, +20705, +20720, +20759, +20762, +20762, +20762, +20802, +20809, +20825, +20830, +20830, +20830, +20830, +20854, +20857, +20857, +20864, +20917, +20927, +20930, +20964, +20967, +20974, +21013, +21057, +21057, +21091, +21119, +21122, +21141, +21156, +21176, +21193, +21196, +21196, +21196, +21229, +21245, +21245, +21251, +21265, +21290, +21290, +21290, +21290, +21314, +21314, +21317, +21320, +21326, +21365, +21371, +21384, +21387, +21406, +21409, +21409, +21417, +21425, +21440, +21448, +21451, +21454, +21467, +21482, +21492, +21524, +21530, +21536, +21546, +21560, +21615, +21639, +21639, +21642, +21660, +21669, +21672, +21672, +21689, +21698, +21705, +21752, +21769, +21793, +21793, +21803, +21803, +21824, +21831, +21854, +21857, +21864, +21897, +21918, +21939, +21939, +21939, +21963, +21973, +21976, +21976, +22031, +22031, +22031, +22046, +22070, +22080, +22110, +22139, +22163, +22166, +22198, +22213, +22232, +22240, +22280, +22315, +22315, +22332, +22357, +22357, +22357, +22357, +22357, +22401, +22412, +22424, +22455, +22466, +22466, +22469, +22477, +22485, +22508, +22530, +22537, +22546, +22551, +22562, +22571, +22574, +22599, +22627, +22630, +22643, +22663, +22699, +22699, +22705, +22708, +22721, +22724, +22738, +22768, +22771, +22774, +22789, +22807, +22819, +22870, +22886, +22892, +22903, +22932, +22944, +22973, +22976, +22992, +22995, +23006, +23029, +23042, +23058, +23101, +23121, +23138, +23138, +23141, +23161, +23164, +23188, +23188, +23188, +23201, +23231, +23231, +23231, +23231, +23241, +23241, +23244, +23262, +23320, +23320, +23356, +23402, +23405, +23405, +23440, +23443, +23452, +23462, +23471, +23474, +23474, +23474, +23485, +23485, +23500, +23522, +23546, +23584, +23591, +23591, +23591, +23639, +23639, +23644, +23644, +23683, +23683, +23694, +23712, +23712, +23740, +23752, +23775, +23791, +23791, +23821, +23844, +23849, +23872, +23872, +23879, +23879, +23939, +23945, +23959, +23959, +23959, +24004, +24010, +24026, +24042, +24050, +24067, +24067, +24098, +24108, +24108, +24108, +24108, +24125, +24144, +24144, +24160, +24163, +24163, +24173, +24177, +24177, +24188, +24203, +24203, +24203, +24206, +24224, +24253, +24253, +24253, +24294, +24294, +24326, +24341, +24341, +24354, +24382, +24401, +24401, +24419, +24431, +24442, +24442, +24457, +24473, +24473, +24481, +24512, +24532, +24532, +24543, +24550, +24568, +24607, +24607, +24628, +24628, +24634, +24641, +24662, +24697, +24712, +24735, +24745, +24755, +24769, +24769, +24786, +24786, +24786, +24801, +24809, +24821, +24835, +24835, +24835, +24853, +24872, +24872, +24872, +24883, +24901, +24901, +24905, +24918, +24918, +24949, +24949, +24970, +24970, +24970, +24981, +24981, +24981, +24993, +24993, +24993, +25005, +25043, +25050, +25070, +25099, +25099, +25110, +25110, +25110, +25110, +25115, +25134, +25134, +25134, +25141, +25160, +25167, +25167, +25179, +25179, +25179, +25192, +25238, +25238, +25282, +25306, +25316, +25327, +25339, +25374, +25374, +25384, +25384, +25384, +25384, +25388, +25388, +25388, +25388, +25416, +25453, +25463, +25463, +25480, +25536, +25536, +25536, +25536, +25536, +25551, +25567, +25571, +25591, +25618, +25631, +25631, +25650, +25650, +25650, +25690, +25707, +25718, +25743, +25753, +25753, +25765, +25765, +25778, +25802, +25823, +25823, +25823, +25840, +25840, +25840, +25840, +25870, +25876, +25897, +25897, +25897, +25907, +25907, +25907, +25907, +25928, +25928, +25928, +25961, +25961, +25961, +25965, +25965, +25965, +25975, +26006, +26006, +26006, +26006, +26020, +26020, +26028, +26028, +26043, +26075, +26115, +26124, +26145, +26145, +26145, +26145, +26145, +26145, +26161, +26161, +26215, +26234, +26234, +26234, +26234, +26254, +26254, +26259, +26285, +26299, +26299, +26316, +26328, +26381, +26381, +26381, +26381, +26402, +26420, +26438, +26469, +26469, +26469, +26481, +26494, +26502, +26502, +26502, +26502, +26502, +26522, +26522, +26522, +26535, +26535, +26556, +26563, +26563, +26582, +26604, +26604, +26614, +26614, +26619, +26619, +26619, +26619, +26644, +26644, +26644, +26651, +26667, +26667, +26667, +26675, +26675, +26682, +26682, +26682, +26693, +26693, +26693, +26693, +26699, +26699, +26715, +26763, +26772, +26793, +26793, +26804, +26804, +26813, +26813, +26813, +26840, +26855, +26865, +26865, +26882, +26928, +26938, +26938, +26938, +26979, +26979, +27008, +27008, +27008, +27008, +27021, +27037, +27049, +27060, +27064, +27085, +27121, +27121, +27169, +27169, +27221, +27253, +27276, +27294, +27294, +27342, +27353, +27353, +27353, +27371, +27371, +27375, +27390, +27390, +27390, +27395, +27419, +27426, +27451, +27471, +27493, +27493, +27510, +27510, +27517, +27529, +27529, +27542, +27548, +27548, +27548, +27576, +27581, +27597, +27639, +27653, +27699, +27716, +27716, +27742, +27766, +27785, +27794, +27794, +27812, +27812, +27812, +27812, +27832, +27832, +27832, +27832, +27861, +27861, +27861, +27867, +27922, +27922, +27922, +27922, +27960, +27960, +27985, +28026, +28063, +28063, +28083, +28090, +28090, +28104, +28131, +28177, +28192, +28196, +28196, +28196, +28196, +28228, +28240, +28271, +28305, +28305, +28305, +28322, +28328, +28341, +28349, +28388, +28388, +28388, +28407, +28411, +28411, +28411, +28417, +28427, +28449, +28463, +28475, +28516, +28516, +28525, +28553, +28553, +28553, +28578, +28585, +28626, +28626, +28663, +28663, +28669, +28669, +28690, +28713, +28713, +28728, +28728, +28728, +28734, +28734, +28751, +28761, +28775, +28788, +28794, +28794, +28812, +28812, +28823, +28823, +28834, +28875, +28928, +28928, +28928, +28953, +28983, +28995, +29012, +29012, +29012, +29025, +29056, +29056, +29080, +29080, +29092, +29092, +29092, +29104, +29104, +29104, +29104, +29121, +29121, +29121, +29121, +29157, +29157, +29167, +29186, +29186, +29186, +29186, +29186, +29186, +29195, +29226, +29241, +29241, +29257, +29257, +29270, +29270, +29270, +29276, +29276, +29276, +29276, +29276, +29282, +29327, +29327, +29337, +29349, +29381, +29381, +29388, +29388, +29401, +29401, +29401, +29411, +29444, +29483, +29483, +29529, +29536, +29549, +29549, +29549, +29549, +29549, +29605, +29605, +29622, +29622, +29661, +29661, +29682, +29691, +29691, +29691, +29743, +29743, +29764, +29764, +29764, +29764, +29781, +29796, +29808, +29819, +29850, +29863, +29863, +29876, +29876, +29876, +29876, +29885, +29885, +29897, +29897, +29934, +29942, +29942, +29962, +29976, +29976, +29976, +29994, +29994, +29994, +29994, +29994, +30010, +30010, +30025, +30025, +30025, +30025, +30035, +30035, +30042, +30042, +30055, +30055, +30055, +30065, +30082, +30092, +30101, +30101, +30123, +30123, +30134, +30147, +30147, +30157, +30176, +30176, +30193, +30209, +30217, +30217, +30259, +30271, +30277, +30293, +30328, +30345, +30378, +30399, +30425, +30431, +30431, +30442, +30453, +30463, +30469, +30479, +30493, +30508, +30518, +30518, +30533, +30546, +30546, +30570, +30589, +30627, +30648, +30648, +30673, +30696, +30708, +30708, +30708, +30708, +30708, +30714, +30714, +30726, +30736, +30736, +30754, +30788, +30788, +30788, +30814, +30814, +30814, +30814, +30814, +30814, +30814, +30814, +30820, +30836, +30836, +30836, +30836, +30836, +30836, +30836, +30836, +30836, +30855, +30873, +30886, +30911, +30921, +30932, +30932, +30951, +30957, +31001, +31007, +31007, +31022, +31048, +31055, +31062, +31079, +31079, +31118, +31128, +31128, +31128, +31146, +31146, +31146, +31146, +31162, +31162, +31177, +31177, +31195, +31211, +31282, +31282, +31290, +31300, +31363, +31389, +31406, +31419, +31439, +31439, +31439, +31439, +31443, +31473, +31481, +31481, +31508, +31523, +31569, +31599, +31621, +31671, +31680, +31700, +31741, +31754, +31775, +31804, +31804, +31816, +31825, +31825, +31850, +31850, +31850, +31850, +31866, +31876, +31876, +31901, +31911, +31940, +31950, +31950, +31957, +31957, +31957, +31957, +31976, +31989, +31996, +31996, +32010, +32040, +32061, +32061, +32080, +32080, +32080, +32080, +32093, +32093, +32093, +32093, +32115, +32119, +32119, +32152, +32152, +32152, +32164, +32164, +32174, +32174, +32174, +32174, +32237, +32251, +32287, +32287, +32295, +32295, +32310, +32333, +32342, +32360, +32360, +32387, +32409, +32431, +32431, +32431, +32448, +32473, +32523, +32523, +32541, +32541, +32563, +32563, +32575, +32581, +32581, +32581, +32581, +32602, +32622, +32622, +32676, +32676, +32676, +32676, +32676, +32692, +32711, +32711, +32711, +32711, +32752, +32767, +32797, +32819, +32846, +32864, +32864, +32870, +32887, +32887, +32898, +32898, +32898, +32898, +32898, +32933, +32997, +32997, +33007, +33007, +33007, +33007, +33024, +33035, +33035, +33066, +33090, +33090, +33090, +33110, +33110, +33130, +33150, +33169, +33169, +33169, +33207, +33207, +33207, +33227, +33251, +33258, +33258, +33275, +33285, +33285, +33285, +33294, +33310, +33310, +33323, +33323, +33323, +33354, +33361, +33361, +33361, +33361, +33368, +33380, +33403, +33403, +33419, +33428, +33428, +33428, +33444, +33451, +33451, +33451, +33476, +33476, +33483, +33496, +33496, +33523, +33558, +33567, +33567, +33579, +33592, +33607, +33615, +33615, +33615, +33650, +33650, +33650, +33650, +33650, +33720, +33742, +33742, +33750, +33758, +33758, +33769, +33769, +33779, +33809, +33809, +33823, +33823, +33849, +33857, +33857, +33857, +33857, +33857, +33874, +33874, +33899, +33910, +33916, +33916, +33950, +33957, +33964, +33970, +33970, +33970, +33970, +33993, +34050, +34050, +34050, +34071, +34071, +34108, +34162, +34162, +34162, +34162, +34173, +34173, +34208, +34225, +34233, +34264, +34283, +34291, +34291, +34291, +34298, +34307, +34314, +34338, +34338, +34378, +34384, +34402, +34414, +34414, +34414, +34423, +34459, +34459, +34478, +34494, +34516, +34528, +34544, +34544, +34554, +34566, +34566, +34583, +34632, +34640, +34640, +34654, +34668, +34668, +34674, +34674, +34685, +34685, +34685, +34701, +34711, +34711, +34723, +34734, +34734, +34751, +34751, +34751, +34764, +34786, +34795, +34795, +34795, +34795, +34795, +34826, +34826, +34826, +34826, +34826, +34826, +34826, +34839, +34839, +34884, +34884, +34897, +34897, +34897, +34930, +34939, +34939, +34946, +34989, +35026, +35038, +35038, +35038, +35049, +35049, +35103, +35103, +35103, +35103, +35103, +35103, +35103, +35103, +35118, +35118, +35118, +35135, +35135, +35163, +35163, +35163, +35163, +35191, +35191, +35213, +35228, +35234, +35274, +35284, +35284, +35284, +35284, +35290, +35290, +35300, +35322, +35353, +35353, +35353, +35374, +35387, +35387, +35393, +35393, +35448, +35448, +35460, +35479, +35479, +35479, +35501, +35501, +35531, +35587, +35593, +35615, +35615, +35615, +35615, +35642, +35653, +35661, +35680, +35680, +35680, +35680, +35680, +35680, +35688, +35712, +35712, +35712, +35718, +35718, +35724, +35724, +35724, +35747, +35747, +35747, +35753, +35764, +35764, +35782, +35802, +35812, +35832, +35846, +35867, +35909, +35909, +35925, +35935, +35935, +35935, +35935, +35935, +35935, +35976, +35997, +36014, +36048, +36048, +36073, +36106, +36106, +36112, +36124, +36124, +36124, +36148, +36158, +36158, +36170, +36170, +36190, +36190, +36190, +36194, +36203, +36221, +36244, +36269, +36269, +36285, +36297, +36321, +36328, +36328, +36350, +36378, +36395, +36405, +36405, +36412, +36412, +36425, +36425, +36425, +36425, +36444, +36444, +36444, +36470, +36492, +36524, +36541, +36558, +36558, +36576, +36614, +36614, +36638, +36638, +36660, +36660, +36664, +36670, +36717, +36722, +36741, +36765, +36765, +36783, +36783, +36783, +36783, +36801, +36811, +36811, +36825, +36825, +36856, +36856, +36868, +36868, +36868, +36868, +36868, +36920, +36920, +36920, +36932, +36953, +36953, +36972, +36988, +36995, +37007, +37027, +37033, +37072, +37089, +37089, +37089, +37107, +37137, +37154, +37154, +37161, +37167, +37187, +37187, +37187, +37187, +37193, +37199, +37207, +37231, +37231, +37231, +37241, +37241, +37258, +37280, +37299, +37299, +37324, +37338, +37351, +37351, +37365, +37371, +37414, +37420, +37432, +37451, +37451, +37457, +37457, +37488, +37516, +37516, +37529, +37538, +37558, +37580, +37580, +37614, +37636, +37650, +37650, +37662, +37678, +37710, +37755, +37762, +37762, +37771, +37782, +37816, +37816, +37838, +37851, +37889, +37894, +37894, +37905, +37914, +37921, +37921, +37930, +37957, +37984, +38029, +38045, +38061, +38061, +38061, +38074, +38082, +38101, +38108, +38108, +38115, +38122, +38122, +38187, +38187, +38187, +38210, +38210, +38214, +38214, +38241, +38252, +38274, +38274, +38274, +38274, +38284, +38291, +38291, +38302, +38313, +38333, +38333, +38354, +38354, +38429, +38429, +38429, +38429, +38429, +38464, +38473, +38503, +38516, +38555, +38569, +38569, +38583, +38603, +38610, +38619, +38628, +38638, +38651, +38656, +38656, +38662, +38674, +38704, +38704, +38739, +38739, +38739, +38757, +38757, +38799, +38833, +38833, +38855, +38859, +38893, +38931, +38931, +38959, +38977, +38977, +39000, +39011, +39011, +39025, +39060, +39060, +39070, +39083, +39089, +39089, +39093, +39093, +39100, +39100, +39123, +39123, +39123, +39123, +39123, +39123, +39150, +39150, +39168, +39168, +39168, +39168, +39198, +39198, +39198, +39223, +39246, +39270, +39280, +39292, +39292, +39308, +39308, +39326, +39326, +39341, +39341, +39341, +39341, +39352, +39365, +39365, +39372, +39385, +39405, +39419, +39436, +39436, +39436, +39471, +39489, +39496, +39523, +39530, +39530, +39530, +39544, +39557, +39564, +39564, +39605, +39612, +39629, +39650, +39679, +39679, +39679, +39689, +39699, +39699, +39706, +39715, +39734, +39734, +39734, +39754, +39789, +39789, +39806, +39820, +39879, +39893, +39904, +39945, +39945, +39945, +39945, +39945, +39945, +39957, +40010, +40034, +40074, +40104, +40104, +40104, +40104, +40104, +40111, +40118, +40138, +40152, +40182, +40198, +40198, +40198, +40198, +40232, +40236, +40251, +40251, +40272, +40279, +40296, +40327, +40336, +40336, +40398, +40405, +40423, +40474, +40484, +40501, +40519, +40519, +40580, +40631, +40680, +40720, +40727, +40727, +40727, +40734, +40734, +40734, +40741, +40761, +40805, +40825, +40846, +40864, +40894, +40906, +40906, +40906, +40944, +40951, +40971, +40980, +40999, +40999, +41015, +41029, +41042, +41042, +41059, +41093, +41105, +41125, +41163, +41163, +41172, +41183, +41183, +41183, +41183, +41183, +41192, +41207, +41222, +41222, +41222, +41228, +41235, +41241, +41241, +41260, +41267, +41267, +41287, +41294, +41314, +41319, +41319, +41326, +41332, +41346, +41346, +41346, +41354, +41361, +41361, +41368, +41368, +41387, +41416, +41426, +41433, +41462, +41496, +41496, +41528, +41528, +41553, +41558, +41558, +41565, +41586, +41586, +41586, +41603, +41610, +41610, +41636, +41656, +41656, +41675, +41675, +41728, +41752, +41752, +41760, +41760, +41791, +41791, +41805, +41840, +41852, +41869, +41894, +41894, +41894, +41907, +41917, +41917, +41917, +41926, +41933, +41933, +41946, +41946, +41951, +41951, +41980, +41996, +41996, +42017, +42036, +42052, +42089, +42114, +42114, +42121, +42121, +42145, +42145, +42157, +42157, +42157, +42165, +42183, +42183, +42214, +42235, +42262, +42262, +42276, +42276, +42276, +42296, +42327, +42327, +42327, +42327, +42327, +42327, +42327, +42327, +42327, +42327, +42327, +42327, +42362, +42362, +42369, +42404, +42411, +42435, +42463, +42487, +42513, +42526, +42555, +42583, +42583, +42596, +42612, +42623, +42634, +42639, +42670, +42704, +42704, +42704, +42727, +42727, +42734, +42748, +42772, +42804, +42804, +42808, +42821, +42843, +42892, +42899, +42909, +42916, +42956, +42978, +42987, +42987, +43012, +43030, +43037, +43059, +43075, +43075, +43089, +43096, +43123, +43154, +43168, +43168, +43168, +43181, +43205, +43205, +43212, +43218, +43250, +43250, +43257, +43257, +43264, +43264, +43271, +43284, +43304, +43304, +43318, +43348, +43355, +43373, +43394, +43394, +43419, +43426, +43430, +43430, +43443, +43461, +43478, +43490, +43490, +43490, +43537, +43556, +43556, +43578, +43604, +43640, +43640, +43640, +43645, +43679, +43705, +43747, +43769, +43769, +43769, +43775, +43803, +43803, +43810, +43810, +43844, +43865, +43872, +43880, +43886, +43921, +43921, +43928, +43928, +43935, +43985, +43992, +43992, +44009, +44022, +44022, +44038, +44042, +44049, +44049, +44056, +44100, +44100, +44107, +44121, +44121, +44121, +44137, +44197, +44204, +44236, +44254, +44286, +44286, +44307, +44319, +44329, +44336, +44343, +44361, +44361, +44361, +44377, +44396, +44423, +44423, +44449, +44471, +44471, +44480, +44480, +44500, +44514, +44537, +44560, +44573, +44606, +44619, +44642, +44705, +44705, +44705, +44711, +44746, +44753, +44753, +44765, +44765, +44765, +44787, +44794, +44801, +44851, +44865, +44884, +44891, +44915, +44924, +44924, +44924, +44960, +44960, +44967, +45006, +45013, +45029, +45036, +45042, +45042, +45053, +45060, +45076, +45108, +45108, +45131, +45138, +45161, +45184, +45261, +45275, +45288, +45305, +45352, +45359, +45403, +45429, +45457, +45484, +45497, +45543, +45574, +45598, +45625, +45665, +45679, +45686, +45691, +45691, +45717, +45722, +45737, +45744, +45744, +45770, +45770, +45774, +45774, +45781, +45815, +45832, +45839, +45856, +45863, +45863, +45896, +45915, +45950, +45950, +45967, +45967, +46016, +46016, +46023, +46038, +46038, +46063, +46063, +46074, +46087, +46117, +46117, +46153, +46153, +46163, +46195, +46202, +46275, +46302, +46320, +46327, +46343, +46343, +46360, +46402, +46402, +46430, +46441, +46445, +46445, +46445, +46461, +46461, +46461, +46478, +46478, +46538, +46538, +46538, +46552, +46569, +46569, +46577, +46585, +46585, +46602, +46610, +46649, +46656, +46670, +46715, +46734, +46734, +46760, +46767, +46767, +46781, +46781, +46795, +46813, +46828, +46835, +46858, +46858, +46858, +46884, +46918, +46930, +46973, +46984, +46998, +47009, +47032, +47038, +47038, +47064, +47113, +47133, +47149, +47156, +47163, +47178, +47215, +47224, +47236, +47263, +47263, +47287, +47295, +47333, +47333, +47343, +47343, +47365, +47404, +47433, +47441, +47448, +47469, +47508, +47526, +47532, +47545, +47584, +47610, +47610, +47627, +47627, +47644, +47644, +47644, +47649, +47680, +47699, +47699, +47721, +47721, +47721, +47721, +47749, +47749, +47785, +47785, +47785, +47785, +47785, +47785, +47824, +47824, +47839, +47861, +47906, +47924, +47924, +47942, +47946, +47946, +47980, +47991, +48009, +48014, +48035, +48065, +48075, +48101, +48112, +48126, +48148, +48148, +48148, +48156, +48239, +48239, +48244, +48244, +48281, +48281, +48291, +48291, +48306, +48324, +48340, +48353, +48366, +48366, +48366, +48378, +48378, +48396, +48396, +48414, +48421, +48435, +48435, +48458, +48522, +48522, +48534, +48534, +48548, +48556, +48571, +48585, +48593, +48593, +48611, +48611, +48616, +48616, +48629, +48629, +48629, +48642, +48654, +48692, +48700, +48700, +48700, +48700, +48700, +48713, +48713, +48713, +48730, +48741, +48741, +48760, +48760, +48765, +48765, +48765, +48777, +48777, +48777, +48788, +48809, +48827, +48827, +48827, +48827, +48854, +48888, +48905, +48919, +48935, +48935, +48947, +48960, +48960, +48982, +49004, +49020, +49020, +49043, +49060, +49060, +49060, +49074, +49090, +49096, +49125, +49146, +49166, +49191, +49191, +49191, +49191, +49191, +49203, +49213, +49219, +49245, +49280, +49288, +49300, +49307, +49322, +49329, +49342, +49367, +49384, +49391, +49391, +49414, +49426, +49446, +49460, +49460, +49460, +49489, +49503, +49503, +49532, +49539, +49539, +49539, +49546, +49546, +49567, +49567, +49582, +49589, +49596, +49603, +49609, +49609, +49653, +49660, +49667, +49692, +49710, +49736, +49752, +49777, +49802, +49808, +49819, +49826, +49845, +49861, +49905, +49905, +49916, +49916, +49916, +49938, +49938, +49962, +49962, +49969, +49976, +50026, +50026, +50088, +50088, +50110, +50157, +50191, +50234, +50261, +50261, +50278, +50278, +50285, +50285, +50289, +50314, +50324, +50324, +50324, +50324, +50324, +50337, +50337, +50337, +50351, +50358, +50358, +50358, +50358, +50375, +50375, +50375, +50383, +50383, +50383, +50396, +50432, +50432, +50432, +50432, +50432, +50432, +50439, +50439, +50446, +50519, +50533, +50537, +50548, +50555, +50581, +50588, +50599, +50620, +50647, +50654, +50665, +50672, +50688, +50688, +50699, +50719, +50742, +50742, +50749, +50804, +50810, +50827, +50849, +50849, +50849, +50849, +50887, +50901, +50910, +50910, +50933, +50950, +50950, +50962, +50962, +51006, +51013, +51028, +51028, +51028, +51035, +51068, +51075, +51075, +51082, +51089, +51089, +51109, +51125, +51153, +51160, +51160, +51179, +51204, +51211, +51211, +51228, +51228, +51241, +51241, +51241, +51241, +51248, +51248, +51276, +51288, +51302, +51334, +51342, +51349, +51349, +51364, +51394, +51401, +51426, +51426, +51426, +51446, +51453, +51453, +51479, +51494, +51526, +51526, +51536, +51558, +51567, +51589, +51639, +51646, +51661, +51661, +51678, +51685, +51685, +51693, +51715, +51715, +51722, +51729, +51739, +51747, +51754, +51754, +51777, +51777, +51784, +51791, +51826, +51847, +51868, +51892, +51912, +51937, +51968, +51989, +51989, +51989, +51989, +51989, +51997, +52004, +52020, +52031, +52031, +52031, +52047, +52058, +52066, +52073, +52093, +52093, +52113, +52113, +52113, +52113, +52134, +52153, +52163, +52163, +52178, +52195, +52208, +52215, +52215, +52215, +52227, +52270, +52285, +52302, +52311, +52311, +52362, +52378, +52416, +52433, +52458, +52468, +52468, +52468, +52491, +52491, +52504, +52504, +52513, +52518, +52518, +52518, +52534, +52534, +52542, +52542, +52559, +52581, +52610, +52644, +52657, +52662, +52685, +52685, +52690, +52690, +52708, +52728, +52747, +52774, +52788, +52830, +52837, +52837, +52876, +52883, +52911, +52911, +52921, +52943, +52943, +52943, +52967, +52967, +52981, +53000, +53014, +53050, +53050, +53061, +53061, +53075, +53082, +53129, +53129, +53129, +53145, +53152, +53159, +53159, +53179, +53186, +53192, +53199, +53199, +53199, +53234, +53257, +53262, +53279, +53298, +53317, +53341, +53361, +53361, +53361, +53372, +53372, +53411, +53433, +53444, +53455, +53476, +53490, +53504, +53531, +53531, +53531, +53545, +53552, +53568, +53568, +53568, +53580, +53580, +53613, +53635, +53667, +53677, +53706, +53706, +53706, +53726, +53767, +53774, +53792, +53805, +53816, +53824, +53851, +53869, +53869, +53869, +53869, +53869, +53879, +53893, +53893, +53903, +53903, +53912, +53912, +53912, +53912, +53912, +53912, +53924, +53924, +53931, +53931, +53950, +53960, +53960, +53965, +53986, +53986, +54018, +54028, +54036, +54054, +54061, +54061, +54080, +54090, +54098, +54102, +54106, +54106, +54122, +54143, +54143, +54158, +54165, +54165, +54175, +54175, +54175, +54192, +54204, +54220, +54265, +54265, +54265, +54271, +54271, +54271, +54271, +54276, +54276, +54300, +54306, +54306, +54315, +54324, +54329, +54343, +54365, +54381, +54381, +54381, +54381, +54381, +54381, +54403, +54403, +54403, +54429, +54445, +54445, +54445, +54458, +54458, +54471, +54495, +54495, +54507, +54514, +54519, +54526, +54554, +54571, +54600, +54607, +54622, +54622, +54638, +54656, +54656, +54665, +54682, +54682, +54682, +54703, +54709, +54709, +54725, +54749, +54780, +54780, +54794, +54799, +54799, +54799, +54799, +54804, +54817, +54840, +54858, +54858, +54858, +54858, +54878, +54890, +54896, +54904, +54904, +54911, +54911, +54924, +54924, +54924, +54924, +54924, +54924, +54924, +54938, +54946, +54966, +54984, +54984, +54984, +54984, +54984, +54995, +55002, +55017, +55017, +55026, +55051, +55083, +55083, +55083, +55083, +55083, +55100, +55100, +55100, +55108, +55116, +55126, +55126, +55126, +55126, +55133, +55137, +55137, +55137, +55168, +55168, +55168, +55168, +55173, +55173, +55177, +55177, +55177, +55205, +55217, +55241, +55255, +55287, +55291, +55324, +55328, +55336, +55343, +55361, +55376, +55376, +55381, +55409, +55409, +55409, +55409, +55409, +55424, +55424, +55441, +55441, +55452, +55470, +55470, +55515, +55515, +55533, +55543, +55543, +55543, +55543, +55543, +55543, +55577, +55577, +55588, +55603, +55634, +55634, +55634, +55645, +55665, +55665, +55676, +55693, +55693, +55701, +55716, +55734, +55762, +55772, +55791, +55791, +55795, +55795, +55812, +55812, +55816, +55820, +55837, +55837, +55837, +55837, +55837, +55850, +55850, +55850, +55850, +55878, +55878, +55883, +55887, +55887, +55887, +55908, +55908, +55932, +55932, +55945, +55945, +55958, +55958, +55969, +56008, +56029, +56029, +56045, +56056, +56086, +56086, +56120, +56120, +56149, +56177, +56177, +56188, +56188, +56194, +56194, +56202, +56202, +56222, +56222, +56254, +56254, +56293, +56313, +56338, +56338, +56353, +56378, +56393, +56393, +56410, +56410, +56410, +56410, +56444, +56444, +56490, +56490, +56490, +56511, +56511, +56525, +56525, +56537, +56558, +56578, +56588, +56588, +56596, +56604, +56604, +56604, +56604, +56604, +56604, +56604, +56608, +56634, +56644, +56644, +56644, +56663, +56663, +56671, +56671, +56671, +56671, +56697, +56718, +56718, +56718, +56748, +56752, +56752, +56768, +56810, +56810, +56810, +56836, +56882, +56882, +56882, +56893, +56893, +56917, +56917, +56937, +56967, +56976, +56996, +56996, +57031, +57049, +57071, +57103, +57103, +57103, +57121, +57133, +57151, +57151, +57165, +57165, +57165, +57170, +57185, +57185, +57185, +57204, +57214, +57241, +57286, +57336, +57336, +57377, +57397, +57409, +57439, +57451, +57451, +57472, +57486, +57532, +57556, +57556, +57562, +57575, +57590, +57621, +57654, +57675, +57675, +57675, +57689, +57689, +57695, +57699, +57716, +57739, +57748, +57788, +57806, +57822, +57828, +57828, +57838, +57861, +57894, +57924, +57924, +57930, +57930, +57930, +57941, +57941, +57966, +57997, +58022, +58030, +58050, +58070, +58107, +58115, +58158, +58185, +58217, +58235, +58266, +58272, +58298, +58309, +58349, +58381, +58381, +58418, +58432, +58456, +58468, +58468, +58489, +58517, +58517, +58535, +58561, +58581, +58618, +58655, +58655, +58674, +58680, +58696, +58701, +58701, +58701, +58717, +58717, +58727, +58739, +58753, +58762, +58762, +58762, +58797, +58809, +58832, +58847, +58868, +58868, +58868, +58880, +58880, +58880, +58885, +58885, +58885, +58885, +58885, +58885, +58885, +58912, +58931, +58931, +58931, +58951, +58963, +58985, +58985, +59003, +59008, +59017, +59017, +59027, +59052, +59058, +59058, +59058, +59096, +59130, +59153, +59153, +59153, +59153, +59153, +59153, +59153, +59153, +59162, +59162, +59162, +59162, +59179, +59225, +59242, +59248, +59270, +59318, +59323, +59340, +59346, +59360, +59366, +59382, +59416, +59445, +59471, +59495, +59495, +59513, +59513, +59541, +59547, +59553, +59559, +59583, +59595, +59607, +59631, +59631, +59643, +59649, +59661, +59714, +59737, +59737, +59758, +59758, +59775, +59784, +59796, +59815, +59821, +59821, +59849, +59856, +59868, +59881, +59900, +59907, +59928, +59940, +59940, +59955, +59955, +60014, +60014, +60045, +60057, +60057, +60063, +60075, +60075, +60079, +60079, +60096, +60111, +60111, +60111, +60156, +60171, +60183, +60197, +60223, +60223, +60229, +60253, +60259, +60259, +60274, +60315, +60342, +60342, +60386, +60396, +60406, +60406, +60433, +60433, +60433, +60457, +60474, +60474, +60492, +60502, +60508, +60508, +60514, +60527, +60545, +60551, +60588, +60621, +60645, +60645, +60663, +60685, +60711, +60758, +60758, +60769, +60781, +60823, +60842, +60842, +60842, +60848, +60848, +60860, +60866, +60880, +60880, +60880, +60898, +60949, +60975, +60975, +60997, +60997, +61059, +61083, +61083, +61107, +61107, +61113, +61117, +61123, +61140, +61152, +61174, +61183, +61183, +61183, +61235, +61262, +61268, +61268, +61268, +61276, +61289, +61297, +61297, +61312, +61327, +61336, +61350, +61375, +61383, +61409, +61422, +61422, +61457, +61497, +61497, +61554, +61594, +61606, +61606, +61624, +61624, +61624, +61633, +61633, +61658, +61674, +61682, +61682, +61696, +61696, +61696, +61696, +61706, +61747, +61768, +61768, +61768, +61777, +61777, +61777, +61781, +61787, +61800, +61815, +61820, +61826, +61834, +61865, +61871, +61876, +61889, +61912, +61912, +61912, +61918, +61918, +61946, +61985, +61985, +61985, +62004, +62015, +62015, +62029, +62044, +62050, +62064, +62064, +62087, +62099, +62099, +62110, +62116, +62129, +62142, +62167, +62179, +62191, +62212, +62218, +62218, +62256, +62256, +62283, +62304, +62304, +62329, +62329, +62351, +62351, +62351, +62351, +62368, +62368, +62386, +62404, +62442, +62449, +62449, +62449, +62469, +62473, +62488, +62488, +62502, +62530, +62549, +62569, +62569, +62569, +62600, +62600, +62609, +62622, +62639, +62639, +62639, +62657, +62657, +62681, +62681, +62681, +62688, +62716, +62716, +62724, +62724, +62735, +62743, +62757, +62769, +62789, +62809, +62809, +62815, +62836, +62853, +62853, +62863, +62863, +62863, +62863, +62863, +62872, +62885, +62885, +62914, +62914, +62914, +62952, +62952, +62964, +63000, +63000, +63000, +63010, +63016, +63016, +63016, +63032, +63039, +63049, +63063, +63063, +63099, +63111, +63119, +63125, +63145, +63176, +63188, +63225, +63231, +63244, +63244, +63255, +63255, +63273, +63273, +63285, +63285, +63338, +63352, +63399, +63399, +63423, +63423, +63435, +63449, +63449, +63457, +63491, +63491, +63518, +63518, +63547, +63565, +63576, +63594, +63594, +63594, +63594, +63600, +63600, +63616, +63616, +63642, +63671, +63671, +63671, +63677, +63677, +63691, +63706, +63720, +63733, +63755, +63762, +63779, +63779, +63795, +63795, +63795, +63847, +63879, +63905, +63921, +63927, +63965, +63986, +63986, +64007, +64007, +64052, +64052, +64066, +64079, +64079, +64134, +64134, +64140, +64150, +64150, +64167, +64192, +64192, +64192, +64208, +64224, +64232, +64243, +64243, +64278, +64295, +64314, +64314, +64314, +64314, +64314, +64314, +64314, +64331, +64360, +64377, +64395, +64395, +64395, +64420, +64463, +64470, +64486, +64496, +64509, +64509, +64519, +64531, +64548, +64570, +64597, +64631, +64631, +64661, +64671, +64710, +64710, +64710, +64751, +64751, +64761, +64772, +64772, +64772, +64772, +64772, +64792, +64834, +64846, +64846, +64862, +64881, +64893, +64893, +64911, +64920, +64937, +64937, +64954, +64954, +64954, +64970, +64970, +64980, +64980, +64980, +65004, +65013, +65013, +65022, +65022, +65022, +65047, +65047, +65054, +65054, +65061, +65061, +65061, +65069, +65081, +65127, +65136, +65158, +65158, +65158, +65188, +65188, +65188, +65209, +65227, +65227, +65227, +65242, +65246, +65263, +65289, +65297, +65314, +65314, +65347, +65347, +65347, +65390, +65390, +65405, +65412, +65432, +65432, +65445, +65445, +65460, +65460, +65497, +65497, +65497, +65497, +65517, +65526, +65526, +65547, +65547, +65553, +65553, +65569, +65576, +65576, +65576, +65586, +65586, +65586, +65586, +65603, +65628, +65628, +65647, +65647, +65667, +65677, +65695, +65704, +65715, +65715, +65743, +65743, +65782, +65802, +65809, +65818, +65837, +65837, +65852, +65856, +65871, +65875, +65918, +65918, +65918, +65944, +65944, +65951, +65958, +65980, +65980, +66007, +66007, +66007, +66036, +66059, +66059, +66059, +66082, +66082, +66082, +66082, +66121, +66121, +66128, +66128, +66168, +66168, +66188, +66203, +66218, +66251, +66251, +66270, +66270, +66270, +66270, +66296, +66301, +66328, +66361, +66387, +66387, +66416, +66434, +66448, +66448, +66448, +66467, +66467, +66476, +66476, +66476, +66493, +66505, +66505, +66505, +66513, +66513, +66513, +66513, +66528, +66549, +66549, +66549, +66566, +66571, +66593, +66623, +66623, +66623, +66623, +66623, +66623, +66623, +66623, +66623, +66646, +66657, +66681, +66697, +66727, +66747, +66754, +66773, +66795, +66821, +66833, +66840, +66861, +66861, +66861, +66861, +66861, +66874, +66874, +66874, +66880, +66880, +66880, +66890, +66903, +66903, +66918, +66946, +67028, +67028, +67035, +67050, +67050, +67062, +67077, +67077, +67091, +67091, +67108, +67108, +67136, +67136, +67136, +67152, +67173, +67202, +67221, +67245, +67245, +67251, +67260, +67277, +67277, +67277, +67277, +67284, +67311, +67311, +67311, +67332, +67332, +67332, +67353, +67395, +67421, +67421, +67446, +67497, +67519, +67524, +67549, +67549, +67565, +67575, +67593, +67607, +67612, +67612, +67612, +67625, +67675, +67685, +67694, +67705, +67705, +67705, +67725, +67725, +67772, +67782, +67782, +67782, +67782, +67782, +67811, +67827, +67827, +67827, +67835, +67852, +67857, +67900, +67900, +67900, +67904, +67904, +67904, +67904, +67921, +67941, +67952, +67952, +67969, +67969, +67969, +67983, +67983, +68008, +68008, +68016, +68035, +68035, +68035, +68035, +68035, +68056, +68076, +68083, +68104, +68104, +68104, +68104, +68122, +68143, +68167, +68185, +68185, +68185, +68202, +68229, +68238, +68251, +68274, +68295, +68300, +68300, +68338, +68370, +68392, +68416, +68416, +68416, +68416, +68436, +68458, +68485, +68508, +68542, +68542, +68549, +68549, +68549, +68549, +68555, +68555, +68563, +68575, +68587, +68606, +68606, +68606, +68606, +68606, +68611, +68611, +68611, +68630, +68636, +68673, +68673, +68686, +68686, +68686, +68697, +68706, +68716, +68728, +68749, +68754, +68779, +68784, +68784, +68784, +68784, +68794, +68794, +68799, +68813, +68813, +68840, +68840, +68858, +68858, +68858, +68880, +68880, +68902, +68908, +68908, +68908, +68908, +68908, +68934, +68934, +68941, +68968, +68968, +68984, +68984, +69000, +69000, +69000, +69000, +69000, +69000, +69000, +69018, +69045, +69083, +69083, +69083, +69083, +69100, +69104, +69104, +69104, +69167, +69167, +69181, +69192, +69192, +69192, +69203, +69203, +69203, +69203, +69203, +69203, +69203, +69203, +69203, +69208, +69230, +69242, +69242, +69249, +69249, +69249, +69249, +69259, +69266, +69266, +69266, +69331, +69331, +69331, +69358, +69369, +69408, +69414, +69433, +69433, +69441, +69456, +69482, +69482, +69492, +69527, +69536, +69549, +69549, +69566, +69566, +69570, +69570, +69587, +69592, +69592, +69635, +69642, +69642, +69654, +69654, +69654, +69670, +69677, +69689, +69689, +69689, +69705, +69724, +69724, +69744, +69750, +69762, +69779, +69798, +69806, +69806, +69814, +69814, +69844, +69858, +69868, +69877, +69911, +69925, +69925, +69948, +69955, +69964, +69987, +70016, +70030, +70030, +70047, +70052, +70052, +70052, +70052, +70057, +70070, +70070, +70070, +70070, +70083, +70089, +70089, +70099, +70111, +70125, +70140, +70140, +70144, +70144, +70144, +70170, +70176, +70188, +70200, +70200, +70215, +70233, +70233, +70238, +70270, +70292, +70302, +70302, +70320, +70320, +70328, +70362, +70362, +70379, +70435, +70445, +70476, +70483, +70483, +70483, +70494, +70521, +70533, +70533, +70533, +70533, +70544, +70544, +70582, +70598, +70615, +70615, +70636, +70684, +70684, +70704, +70704, +70704, +70716, +70744, +70772, +70772, +70816, +70831, +70831, +70865, +70865, +70876, +70892, +70907, +70925, +70925, +70925, +70934, +70934, +70934, +70973, +71002, +71044, +71044, +71044, +71044, +71056, +71073, +71073, +71097, +71097, +71108, +71108, +71113, +71113, +71132, +71146, +71146, +71153, +71160, +71160, +71179, +71198, +71212, +71223, +71230, +71230, +71244, +71274, +71286, +71286, +71304, +71304, +71304, +71320, +71320, +71325, +71325, +71325, +71359, +71388, +71388, +71411, +71416, +71416, +71438, +71464, +71464, +71464, +71471, +71485, +71505, +71519, +71526, +71541, +71563, +71563, +71583, +71605, +71612, +71631, +71663, +71682, +71682, +71700, +71714, +71721, +71721, +71749, +71774, +71783, +71790, +71797, +71804, +71830, +71830, +71863, +71882, +71882, +71882, +71917, +71924, +71944, +71985, +71985, +71985, +71985, +72004, +72023, +72037, +72037, +72049, +72090, +72119, +72152, +72152, +72152, +72152, +72177, +72194, +72229, +72229, +72229, +72246, +72253, +72279, +72286, +72291, +72319, +72332, +72339, +72339, +72372, +72379, +72417, +72417, +72442, +72442, +72457, +72466, +72498, +72505, +72529, +72538, +72538, +72555, +72584, +72584, +72603, +72603, +72603, +72635, +72635, +72635, +72635, +72635, +72635, +72652, +72652, +72652, +72652, +72682, +72689, +72696, +72696, +72725, +72732, +72732, +72781, +72781, +72813, +72820, +72847, +72854, +72867, +72867, +72894, +72901, +72918, +72953, +72953, +72995, +73002, +73002, +73014, +73014, +73014, +73048, +73103, +73135, +73142, +73149, +73160, +73160, +73169, +73169, +73169, +73200, +73208, +73262, +73285, +73296, +73309, +73317, +73331, +73331, +73338, +73354, +73354, +73379, +73401, +73421, +73428, +73435, +73469, +73487, +73494, +73494, +73494, +73494, +73522, +73522, +73529, +73545, +73545, +73551, +73604, +73612, +73612, +73619, +73644, +73655, +73655, +73655, +73662, +73684, +73730, +73745, +73769, +73769, +73791, +73798, +73798, +73805, +73823, +73830, +73844, +73844, +73885, +73902, +73937, +73961, +73968, +74012, +74038, +74038, +74038, +74054, +74080, +74095, +74124, +74150, +74174, +74181, +74195, +74202, +74241, +74241, +74264, +74284, +74291, +74298, +74329, +74349, +74387, +74408, +74415, +74422, +74429, +74429, +74451, +74458, +74490, +74490, +74497, +74504, +74504, +74511, +74547, +74566, +74566, +74586, +74586, +74610, +74634, +74634, +74663, +74667, +74691, +74691, +74691, +74706, +74738, +74738, +74745, +74745, +74791, +74791, +74804, +74823, +74830, +74856, +74856, +74875, +74882, +74893, +74902, +74909, +74916, +74976, +74976, +74983, +75010, +75017, +75029, +75036, +75043, +75060, +75067, +75067, +75067, +75106, +75113, +75129, +75129, +75129, +75129, +75129, +75149, +75163, +75195, +75222, +75259, +75259, +75259, +75280, +75280, +75280, +75301, +75319, +75360, +75360, +75367, +75379, +75379, +75397, +75428, +75466, +75486, +75510, +75536, +75552, +75573, +75603, +75620, +75643, +75659, +75694, +75694, +75711, +75718, +75718, +75718, +75734, +75741, +75763, +75805, +75805, +75823, +75837, +75844, +75851, +75858, +75899, +75906, +75931, +75958, +75958, +76002, +76009, +76009, +76016, +76023, +76065, +76092, +76140, +76140, +76147, +76177, +76187, +76187, +76224, +76224, +76230, +76265, +76265, +76291, +76291, +76316, +76354, +76361, +76361, +76375, +76382, +76399, +76399, +76399, +76425, +76425, +76425, +76425, +76435, +76451, +76451, +76490, +76490, +76490, +76506, +76506, +76506, +76516, +76516, +76516, +76540, +76579, +76579, +76586, +76599, +76606, +76606, +76606, +76641, +76641, +76666, +76676, +76676, +76676, +76683, +76683, +76700, +76700, +76700, +76700, +76717, +76717, +76737, +76737, +76737, +76737, +76737, +76737, +76737, +76737, +76771, +76771, +76782, +76789, +76799, +76828, +76845, +76845, +76893, +76893, +76908, +76930, +76930, +76973, +76980, +76980, +76980, +77005, +77005, +77020, +77032, +77051, +77060, +77086, +77086, +77086, +77086, +77150, +77150, +77167, +77172, +77172, +77176, +77176, +77191, +77191, +77218, +77218, +77218, +77218, +77227, +77237, +77253, +77273, +77294, +77321, +77337, +77352, +77380, +77380, +77404, +77422, +77422, +77428, +77428, +77444, +77485, +77485, +77499, +77499, +77520, +77545, +77550, +77560, +77567, +77596, +77615, +77615, +77615, +77653, +77653, +77653, +77674, +77674, +77674, +77686, +77686, +77706, +77719, +77719, +77727, +77736, +77767, +77773, +77802, +77821, +77837, +77847, +77870, +77877, +77877, +77877, +77877, +77888, +77903, +77926, +77946, +77957, +77961, +77967, +77967, +77967, +77983, +78017, +78035, +78035, +78035, +78040, +78040, +78040, +78050, +78063, +78099, +78104, +78110, +78110, +78110, +78138, +78198, +78218, +78231, +78295, +78306, +78335, +78335, +78364, +78364, +78364, +78377, +78417, +78427, +78427, +78459, +78459, +78466, +78466, +78473, +78499, +78499, +78509, +78509, +78536, +78587, +78609, +78609, +78616, +78616, +78640, +78653, +78653, +78653, +78653, +78660, +78679, +78689, +78703, +78703, +78728, +78741, +78756, +78765, +78783, +78814, +78839, +78839, +78839, +78839, +78849, +78854, +78864, +78894, +78894, +78914, +78914, +78914, +78932, +78932, +78971, +78989, +78989, +78989, +78997, +78997, +78997, +78997, +78997, +78997, +78997, +78997, +79009, +79009, +79033, +79033, +79049, +79049, +79049, +79049, +79061, +79066, +79081, +79086, +79093, +79098, +79098, +79098, +79124, +79124, +79124, +79134, +79150, +79163, +79163, +79163, +79193, +79209, +79218, +79224, +79235, +79235, +79247, +79247, +79247, +79247, +79247, +79253, +79274, +79289, +79289, +79320, +79320, +79320, +79337, +79337, +79354, +79360, +79388, +79400, +79400, +79436, +79436, +79444, +79460, +79483, +79483, +79517, +79517, +79535, +79543, +79543, +79543, +79543, +79562, +79562, +79562, +79591, +79591, +79607, +79617, +79617, +79626, +79641, +79641, +79662, +79662, +79678, +79678, +79704, +79717, +79738, +79738, +79756, +79756, +79763, +79770, +79791, +79791, +79798, +79798, +79798, +79815, +79815, +79876, +79876, +79876, +79894, +79919, +79924, +79943, +79943, +79958, +79958, +79979, +79979, +79996, +79996, +79996, +79996, +79996, +79996, +80004, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80023, +80049, +80060, +80060, +80060, +80091, +80091, +80091, +80098, +80123, +80123, +80123, +80163, +80163, +80199, +80199, +80199, +80199, +80199, +80225, +80225, +80240, +80240, +80240, +80268, +80287, +80287, +80298, +80298, +80339, +80387, +80402, +80411, +80422, +80422, +80434, +80458, +80466, +80471, +80481, +80527, +80565, +80571, +80606, +80606, +80618, +80618, +80655, +80669, +80677, +80677, +80723, +80735, +80735, +80757, +80757, +80770, +80800, +80810, +80810, +80810, +80820, +80843, +80843, +80843, +80879, +80879, +80879, +80919, +80919, +80928, +80956, +80973, +80973, +80990, +80990, +80990, +80990, +81000, +81000, +81010, +81028, +81028, +81028, +81028, +81034, +81034, +81034, +81034, +81034, +81034, +81034, +81050, +81070, +81070, +81118, +81135, +81135, +81145, +81158, +81158, +81195, +81222, +81233, +81271, +81284, +81319, +81327, +81327, +81345, +81345, +81345, +81358, +81392, +81392, +81422, +81437, +81471, +81471, +81471, +81471, +81471, +81471, +81494, +81494, +81494, +81494, +81494, +81494, +81521, +81536, +81564, +81564, +81591, +81591, +81612, +81623, +81654, +81654, +81654, +81673, +81673, +81673, +81673, +81716, +81716, +81728, +81757, +81757, +81757, +81757, +81757, +81767, +81784, +81784, +81784, +81803, +81815, +81836, +81836, +81865, +81920, +81929, +81945, +81945, +81945, +81945, +81966, +81966, +81987, +81992, +82010, +82019, +82019, +82088, +82088, +82088, +82123, +82123, +82123, +82134, +82144, +82144, +82164, +82179, +82197, +82248, +82266, +82266, +82266, +82301, +82318, +82352, +82378, +82378, +82384, +82384, +82384, +82402, +82410, +82410, +82426, +82426, +82426, +82426, +82426, +82437, +82471, +82489, +82489, +82515, +82523, +82544, +82544, +82544, +82544, +82544, +82559, +82559, +82576, +82591, +82624, +82634, +82650, +82650, +82668, +82668, +82675, +82703, +82703, +82719, +82730, +82755, +82755, +82755, +82755, +82755, +82755, +82755, +82765, +82765, +82776, +82791, +82807, +82833, +82848, +82848, +82869, +82869, +82884, +82884, +82884, +82927, +82927, +82946, +82964, +82975, +82975, +82975, +82983, +83005, +83045, +83045, +83045, +83045, +83045, +83065, +83065, +83065, +83065, +83089, +83120, +83120, +83120, +83158, +83158, +83187, +83208, +83230, +83243, +83243, +83243, +83243, +83265, +83265, +83265, +83265, +83265, +83284, +83307, +83307, +83307, +83312, +83331, +83331, +83331, +83331, +83354, +83393, +83400, +83400, +83400, +83438, +83448, +83448, +83485, +83485, +83485, +83485, +83485, +83485, +83485, +83485, +83508, +83524, +83536, +83536, +83572, +83572, +83572, +83581, +83581, +83648, +83648, +83663, +83676, +83711, +83722, +83731, +83731, +83731, +83753, +83772, +83772, +83785, +83785, +83795, +83810, +83818, +83845, +83870, +83870, +83870, +83880, +83880, +83904, +83904, +83904, +83916, +83916, +83945, +83996, +83996, +84020, +84020, +84030, +84030, +84030, +84030, +84063, +84063, +84094, +84107, +84130, +84130, +84149, +84149, +84155, +84180, +84215, +84235, +84273, +84273, +84291, +84297, +84307, +84313, +84334, +84350, +84350, +84350, +84392, +84392, +84403, +84403, +84436, +84448, +84470, +84470, +84470, +84470, +84470, +84506, +84534, +84587, +84599, +84617, +84617, +84630, +84646, +84646, +84682, +84682, +84682, +84691, +84714, +84731, +84763, +84763, +84773, +84809, +84818, +84818, +84829, +84874, +84874, +84908, +84928, +84928, +84942, +84959, +84959, +84968, +84968, +84977, +85020, +85040, +85040, +85053, +85085, +85085, +85095, +85100, +85111, +85111, +85119, +85119, +85151, +85173, +85173, +85173, +85186, +85186, +85191, +85219, +85219, +85226, +85245, +85245, +85262, +85269, +85285, +85298, +85298, +85311, +85324, +85341, +85341, +85356, +85356, +85363, +85405, +85452, +85476, +85483, +85483, +85506, +85546, +85562, +85618, +85618, +85618, +85641, +85648, +85668, +85711, +85711, +85731, +85738, +85745, +85776, +85776, +85776, +85781, +85795, +85802, +85802, +85830, +85864, +85911, +85925, +85925, +85925, +85947, +85996, +86032, +86071, +86081, +86088, +86107, +86121, +86121, +86141, +86141, +86163, +86192, +86199, +86199, +86199, +86199, +86224, +86256, +86292, +86292, +86312, +86312, +86341, +86362, +86372, +86372, +86372, +86372, +86381, +86399, +86409, +86428, +86442, +86449, +86487, +86487, +86503, +86515, +86515, +86515, +86515, +86515, +86526, +86545, +86545, +86545, +86545, +86571, +86571, +86571, +86618, +86626, +86673, +86704, +86730, +86748, +86760, +86767, +86767, +86784, +86784, +86807, +86825, +86832, +86856, +86885, +86917, +86936, +86936, +86964, +86971, +86971, +87009, +87031, +87031, +87066, +87096, +87096, +87096, +87116, +87116, +87123, +87150, +87165, +87192, +87198, +87198, +87198, +87224, +87236, +87263, +87263, +87270, +87285, +87297, +87335, +87395, +87395, +87395, +87414, +87423, +87433, +87433, +87443, +87455, +87474, +87490, +87505, +87512, +87523, +87539, +87539, +87539, +87556, +87556, +87613, +87669, +87669, +87676, +87689, +87709, +87709, +87716, +87734, +87771, +87796, +87803, +87826, +87833, +87833, +87861, +87871, +87895, +87929, +87936, +87943, +87980, +87989, +88003, +88003, +88013, +88013, +88020, +88050, +88066, +88066, +88088, +88095, +88152, +88162, +88169, +88169, +88197, +88214, +88237, +88254, +88267, +88267, +88274, +88293, +88326, +88333, +88358, +88379, +88393, +88400, +88414, +88432, +88450, +88489, +88497, +88515, +88521, +88521, +88521, +88560, +88560, +88566, +88574, +88574, +88595, +88595, +88595, +88700, +88700, +88705, +88718, +88718, +88732, +88732, +88745, +88745, +88758, +88773, +88780, +88793, +88822, +88846, +88846, +88846, +88860, +88873, +88873, +88908, +88908, +88918, +88925, +88960, +88998, +89005, +89005, +89014, +89014, +89014, +89038, +89045, +89066, +89080, +89080, +89080, +89080, +89096, +89096, +89107, +89107, +89126, +89143, +89159, +89181, +89192, +89231, +89231, +89248, +89268, +89297, +89331, +89338, +89356, +89363, +89380, +89387, +89394, +89408, +89408, +89426, +89433, +89433, +89433, +89453, +89471, +89477, +89510, +89517, +89517, +89517, +89547, +89573, +89605, +89639, +89676, +89676, +89676, +89683, +89727, +89781, +89799, +89806, +89820, +89853, +89860, +89873, +89896, +89901, +89908, +89908, +89931, +89976, +90001, +90034, +90034, +90056, +90056, +90080, +90109, +90109, +90121, +90131, +90143, +90178, +90197, +90204, +90204, +90214, +90222, +90236, +90291, +90304, +90304, +90321, +90328, +90328, +90328, +90343, +90343, +90358, +90358, +90365, +90383, +90383, +90383, +90389, +90402, +90402, +90402, +90418, +90436, +90436, +90450, +90462, +90462, +90469, +90479, +90488, +90505, +90518, +90525, +90525, +90525, +90543, +90543, +90550, +90550, +90550, +90558, +90570, +90570, +90570, +90605, +90631, +90663, +90680, +90699, +90705, +90718, +90727, +90727, +90727, +90742, +90761, +90768, +90789, +90817, +90837, +90847, +90847, +90862, +90862, +90869, +90869, +90869, +90869, +90875, +90882, +90905, +90945, +90973, +90973, +90973, +90986, +90986, +90991, +91006, +91060, +91060, +91060, +91060, +91060, +91060, +91090, +91107, +91107, +91107, +91107, +91107, +91127, +91160, +91170, +91186, +91186, +91234, +91234, +91245, +91245, +91245, +91289, +91302, +91302, +91302, +91340, +91347, +91347, +91359, +91376, +91384, +91384, +91398, +91412, +91412, +91431, +91431, +91431, +91431, +91431, +91431, +91451, +91464, +91472, +91472, +91490, +91490, +91502, +91517, +91534, +91560, +91569, +91587, +91603, +91623, +91663, +91663, +91681, +91698, +91698, +91708, +91720, +91751, +91751, +91763, +91779, +91786, +91786, +91786, +91786, +91812, +91812, +91834, +91859, +91877, +91886, +91886, +91908, +91922, +91951, +91963, +92005, +92010, +92059, +92069, +92100, +92113, +92132, +92153, +92176, +92176, +92193, +92193, +92211, +92211, +92220, +92220, +92220, +92220, +92220, +92220, +92220, +92220, +92220, +92241, +92283, +92309, +92316, +92329, +92329, +92334, +92350, +92350, +92372, +92379, +92379, +92379, +92398, +92398, +92398, +92398, +92406, +92423, +92436, +92450, +92499, +92508, +92544, +92559, +92571, +92571, +92571, +92571, +92571, +92579, +92579, +92585, +92585, +92602, +92613, +92613, +92637, +92651, +92651, +92657, +92657, +92657, +92657, +92680, +92680, +92680, +92680, +92719, +92734, +92750, +92750, +92786, +92786, +92818, +92828, +92828, +92828, +92838, +92838, +92838, +92838, +92838, +92845, +92854, +92854, +92866, +92875, +92875, +92898, +92924, +92924, +92942, +92942, +92951, +92951, +92970, +93007, +93027, +93027, +93043, +93080, +93080, +93093, +93093, +93093, +93093, +93125, +93125, +93142, +93158, +93180, +93199, +93199, +93216, +93216, +93231, +93241, +93241, +93241, +93250, +93250, +93250, +93278, +93278, +93278, +93302, +93314, +93314, +93314, +93334, +93334, +93334, +93352, +93366, +93389, +93429, +93448, +93448, +93457, +93457, +93457, +93469, +93469, +93469, +93493, +93493, +93570, +93570, +93570, +93570, +93578, +93578, +93606, +93630, +93642, +93649, +93649, +93682, +93710, +93710, +93710, +93717, +93732, +93738, +93738, +93754, +93754, +93771, +93771, +93771, +93787, +93793, +93793, +93801, +93812, +93812, +93812, +93829, +93829, +93829, +93870, +93890, +93890, +93890, +93917, +93926, +93926, +93942, +93960, +93967, +93974, +93998, +93998, +94015, +94021, +94021, +94021, +94027, +94027, +94027, +94027, +94042, +94061, +94061, +94061, +94081, +94081, +94104, +94118, +94135, +94153, +94153, +94171, +94192, +94202, +94218, +94218, +94218, +94218, +94218, +94251, +94257, +94257, +94276, +94276, +94276, +94282, +94300, +94300, +94318, +94318, +94335, +94349, +94349, +94349, +94349, +94361, +94377, +94377, +94377, +94397, +94432, +94432, +94432, +94452, +94460, +94460, +94471, +94471, +94479, +94496, +94496, +94496, +94550, +94612, +94622, +94640, +94670, +94670, +94670, +94682, +94682, +94682, +94700, +94720, +94720, +94735, +94735, +94735, +94746, +94757, +94773, +94773, +94773, +94773, +94773, +94785, +94792, +94792, +94792, +94808, +94859, +94859, +94867, +94883, +94892, +94892, +94928, +94938, +94938, +94938, +94944, +94969, +94975, +95013, +95069, +95069, +95069, +95084, +95118, +95131, +95157, +95169, +95183, +95252, +95268, +95294, +95301, +95317, +95323, +95340, +95340, +95358, +95358, +95364, +95396, +95396, +95413, +95423, +95449, +95449, +95504, +95550, +95550, +95566, +95588, +95588, +95615, +95654, +95667, +95667, +95667, +95667, +95667, +95694, +95707, +95721, +95721, +95764, +95770, +95770, +95775, +95789, +95789, +95789, +95800, +95800, +95800, +95800, +95805, +95811, +95811, +95811, +95833, +95833, +95857, +95889, +95889, +95889, +95889, +95889, +95889, +95895, +95895, +95926, +95946, +95957, +95957, +95974, +95986, +96002, +96002, +96034, +96048, +96066, +96111, +96111, +96135, +96149, +96149, +96149, +96149, +96156, +96179, +96179, +96197, +96197, +96210, +96226, +96231, +96264, +96264, +96281, +96288, +96288, +96288, +96322, +96353, +96368, +96385, +96404, +96404, +96415, +96415, +96415, +96415, +96415, +96424, +96472, +96472, +96472, +96492, +96511, +96518, +96524, +96534, +96549, +96549, +96571, +96571, +96571, +96571, +96571, +96571, +96590, +96605, +96605, +96624, +96624, +96639, +96639, +96639, +96654, +96683, +96683, +96683, +96683, +96692, +96692, +96701, +96701, +96701, +96701, +96701, +96701, +96701, +96711, +96725, +96732, +96785, +96795, +96795, +96832, +96853, +96853, +96853, +96853, +96859, +96888, +96888, +96888, +96888, +96894, +96924, +96931, +96931, +96945, +97025, +97049, +97070, +97070, +97095, +97095, +97095, +97095, +97132, +97132, +97167, +97178, +97178, +97178, +97195, +97195, +97201, +97201, +97212, +97212, +97245, +97254, +97254, +97264, +97308, +97322, +97322, +97322, +97336, +97371, +97371, +97371, +97387, +97399, +97419, +97435, +97435, +97459, +97459, +97459, +97482, +97523, +97523, +97533, +97540, +97540, +97540, +97559, +97597, +97606, +97621, +97627, +97627, +97674, +97674, +97674, +97694, +97694, +97713, +97730, +97730, +97730, +97730, +97737, +97737, +97737, +97737, +97753, +97782, +97782, +97802, +97842, +97861, +97861, +97868, +97878, +97945, +97945, +97961, +97971, +97971, +97971, +97999, +97999, +97999, +98016, +98016, +98029, +98029, +98029, +98044, +98059, +98059, +98077, +98077, +98077, +98077, +98077, +98077, +98077, +98107, +98117, +98122, +98130, +98138, +98138, +98156, +98156, +98165, +98185, +98209, +98249, +98262, +98281, +98281, +98296, +98296, +98309, +98323, +98323, +98323, +98323, +98336, +98336, +98356, +98356, +98356, +98356, +98377, +98389, +98398, +98398, +98404, +98422, +98422, +98422, +98422, +98427, +98433, +98433, +98450, +98450, +98487, +98500, +98558, +98577, +98591, +98603, +98624, +98624, +98624, +98624, +98624, +98641, +98659, +98659, +98669, +98669, +98669, +98669, +98686, +98707, +98707, +98729, +98729, +98745, +98752, +98752, +98786, +98786, +98793, +98793, +98793, +98793, +98793, +98793, +98793, +98803, +98803, +98809, +98816, +98816, +98816, +98816, +98822, +98822, +98828, +98850, +98869, +98869, +98885, +98906, +98913, +98925, +98925, +98935, +98956, +98956, +98973, +98982, +98982, +99001, +99001, +99013, +99013, +99026, +99026, +99045, +99061, +99070, +99092, +99099, +99123, +99134, +99161, +99161, +99161, +99161, +99211, +99242, +99283, +99283, +99302, +99315, +99321, +99328, +99355, +99367, +99390, +99450, +99460, +99460, +99467, +99492, +99509, +99509, +99532, +99548, +99555, +99575, +99591, +99599, +99606, +99613, +99620, +99620, +99620, +99620, +99638, +99645, +99652, +99689, +99689, +99689, +99706, +99713, +99730, +99776, +99796, +99796, +99796, +99803, +99819, +99826, +99826, +99838, +99855, +99884, +99908, +99928, +99947, +99973, +99979, +99988, +99988, +100017, +100017, +100024, +100024, +100031, +100031, +100031, +100072, +100079, +100079, +100079, +100079, +100095, +100095, +100095, +100100, +100107, +100127, +100127, +100138, +100138, +100138, +100148, +100154, +100154, +100154, +100154, +100154, +100154, +100159, +100172, +100211, +100243, +100255, +100281, +100281, +100309, +100316, +100343, +100369, +100374, +100381, +100409, +100424, +100424, +100444, +100444, +100465, +100498, +100545, +100552, +100552, +100552, +100552, +100559, +100559, +100574, +100606, +100611, +100618, +100618, +100618, +100633, +100633, +100652, +100670, +100691, +100731, +100731, +100731, +100744, +100765, +100765, +100800, +100828, +100835, +100835, +100835, +100842, +100842, +100854, +100881, +100898, +100911, +100911, +100911, +100911, +100932, +100948, +100948, +100948, +100948, +100977, +100977, +100977, +100983, +100992, +100992, +101016, +101041, +101063, +101071, +101088, +101088, +101088, +101088, +101113, +101133, +101133, +101148, +101170, +101177, +101206, +101206, +101214, +101251, +101273, +101303, +101345, +101352, +101359, +101359, +101359, +101376, +101387, +101387, +101405, +101412, +101419, +101419, +101426, +101449, +101456, +101456, +101463, +101463, +101470, +101489, +101497, +101504, +101511, +101511, +101516, +101516, +101523, +101543, +101543, +101557, +101586, +101593, +101607, +101625, +101635, +101669, +101689, +101716, +101728, +101739, +101746, +101772, +101772, +101847, +101847, +101847, +101853, +101861, +101888, +101888, +101940, +101980, +101987, +102010, +102021, +102032, +102055, +102062, +102062, +102072, +102079, +102097, +102111, +102118, +102118, +102118, +102146, +102153, +102171, +102178, +102178, +102225, +102244, +102290, +102313, +102320, +102331, +102331, +102331, +102331, +102362, +102367, +102382, +102397, +102438, +102473, +102473, +102499, +102508, +102520, +102538, +102557, +102571, +102602, +102629, +102629, +102629, +102649, +102649, +102649, +102661, +102678, +102717, +102734, +102753, +102778, +102792, +102825, +102832, +102868, +102888, +102899, +102930, +102930, +102930, +102954, +102954, +102988, +102995, +102995, +102995, +103003, +103010, +103017, +103025, +103050, +103050, +103050, +103057, +103072, +103082, +103082, +103095, +103106, +103138, +103171, +103198, +103217, +103265, +103315, +103339, +103345, +103352, +103379, +103379, +103395 +}; + +static const char *tldData[] = { +"samegawa.fukushima.jp\0dupont\0" +"alstom\0" +"mashiki.kumamoto.jp\0neues.museum\0" +"herokussl.com\0" +"karate.museum\0" +"vall\xc3\xa9""e-d-aoste.it\0" +"edu.vc\0" +"nz.eu.org\0" +"edu.ve\0" +"hirokawa.fukuoka.jp\0midsund.no\0" +"bronnoysund.no\0" +"gon.pk\0" +"edu.uy\0" +"ayabe.kyoto.jp\0\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0" +"massacarrara.it\0edu.vn\0virtualuser.de\0" +"bardu.no\0" +"stateofdelaware.museum\0richardli\0" +"k12.va.us\0is-a-blogger.com\0" +"kitakami.iwate.jp\0botany.museum\0l\xc3\xb8renskog.no\0" +"v\xc3\xa5g\xc3\xa5.no\0" +"edu.vu\0" +"chiropractic.museum\0powiat.pl\0" +"kawazu.shizuoka.jp\0" +"gbiz\0" +"cyon.link\0" +"tjmaxx\0a.prod.fastly.net\0" +"mihama.fukui.jp\0myeffect.net\0" +"yasu.shiga.jp\0tran\xc3\xb8y.no\0" +"cc.ms.us\0cc.nc.us\0edu.ws\0" +"australia.museum\0" +"balsan-sudtirol.it\0" +"shinonsen.hyogo.jp\0" +"furukawa.miyagi.jp\0uscountryestate.museum\0" +"k12.co.us\0" +"unj\xc3\xa1rga.no\0" +"seto.aichi.jp\0is-a-hunter.com\0" +"sv.it\0" +"kushiro.hokkaido.jp\0naustdal.no\0" +"egersund.no\0boleslawiec.pl\0h\xc3\xa4kkinen.fi\0" +"comunica\xc3\xa7\xc3\xb5""es.museum\0" +"user.party.eus\0za.net\0" +"vibo-valentia.it\0" +"abr.it\0dvrdns.org\0" +"kasuga.fukuoka.jp\0namegawa.saitama.jp\0spot\0" +"wpdevcloud.com\0jambyl.su\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0mb.it\0kamikoani.akita.jp\0mini\0" +"police.uk\0" +"edu.za\0domains\0" +"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" +"software\0" +"en.it\0" +"wa.au\0\xe9\x9d\x99\xe5\xb2\xa1.jp\0mint\0" +"recht.pro\0" +"opole.pl\0" +"at.it\0" +"mima.tokushima.jp\0" +"takahagi.ibaraki.jp\0bokn.no\0edu.zm\0" +"hiraya.nagano.jp\0eaton.mi.us\0" +"mibu.tochigi.jp\0newspaper.museum\0aaa\0" +"field.museum\0jp.net\0" +"f.bg\0loginline.dev\0" +"pup.gov.pl\0" +"youth.museum\0voagat.no\0" +"mobi.gp\0" +"baghdad.museum\0" +"cc.ua\0" +"abc.br\0" +"honefoss.no\0" +"arboretum.museum\0abb\0" +"nabari.mie.jp\0abc\0diamonds\0simple-url.com\0" +"us-4.evennode.com\0" +"act.edu.au\0" +"ieee\0" +"kyonan.chiba.jp\0" +"mus.br\0asso.re\0" +"yamatsuri.fukushima.jp\0" +"czest.pl\0" +"friuli-vegiulia.it\0lib.ut.us\0" +"katsuura.chiba.jp\0" +"hi.cn\0manchester.museum\0" +"tenei.fukushima.jp\0" +"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0selfip.biz\0" +"lib.oh.us\0" +"politica.bo\0" +"iwaki.fukushima.jp\0" +"akita.jp\0asahikawa.hokkaido.jp\0aco\0fashion\0" +"s3-website.eu-central-1.amazonaws.com\0" +"\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0" +"kiwi.nz\0" +"takanabe.miyazaki.jp\0" +"melbourne\0schwarz\0" +"aoki.nagano.jp\0" +"indian.museum\0travelersinsurance\0" +"kunimi.fukushima.jp\0" +"ads\0\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" +"yura.wakayama.jp\0aeg\0" +"nsw.edu.au\0ciencia.bo\0nishihara.okinawa.jp\0" +"sande.vestfold.no\0" +"misugi.mie.jp\0\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0" +"jaguar\0" +"lublin.pl\0" +"nishiazai.shiga.jp\0\xe7\xbd\x91\xe5\xba\x97\0from-ks.com\0" +"hizen.saga.jp\0risor.no\0" +"vossevangen.no\0us-3.evennode.com\0" +"siracusa.it\0fhs.no\0" +"bergbau.museum\0" +"sandnessjoen.no\0" +"sld.do\0asso.nc\0" +"takikawa.hokkaido.jp\0" +"sodegaura.chiba.jp\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0afl\0" +"dental\0" +"is-a-llama.com\0" +"gda.pl\0" +"deloitte\0" +"inawashiro.fukushima.jp\0" +"savannahga.museum\0kerryproperties\0\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0" +"embaixada.st\0" +"readthedocs.io\0" +"sk\xc3\xa5nland.no\0" +"frana.no\0" +"cc.md.us\0" +"selbu.no\0" +"ollo\0" +"biz.bb\0" +"biz.at\0" +"kinko.kagoshima.jp\0kushima.miyazaki.jp\0southwest.museum\0" +"shiojiri.nagano.jp\0u.se\0" +"ono.fukushima.jp\0ostroda.pl\0" +"ce.gov.br\0orland.no\0snoasa.no\0" +"biz.az\0" +"charter.aero\0bunkyo.tokyo.jp\0" +"shimane.jp\0" +"maceio.br\0lc.it\0umaji.kochi.jp\0budapest\0" +"higashi.okinawa.jp\0shimoda.shizuoka.jp\0aig\0" +"higashi.fukushima.jp\0bd.se\0" +"email\0" +"shibata.niigata.jp\0kusatsu.shiga.jp\0columbia.museum\0vanguard\0" +"trentinsudtirol.it\0" +"and.mom\0" +"pl.ua\0us-2.evennode.com\0" +"nexus\0" +"rennebu.no\0" +"webspace.rocks\0" +"maniwa.okayama.jp\0" +"biz.cy\0" +"taki.mie.jp\0biz.dk\0" +"fujisawa.iwate.jp\0" +"yosemite.museum\0" +"datsun\0cloud66.ws\0" +"half.host\0" +"eniwa.hokkaido.jp\0" +"circle\0worse-than.tv\0" +"talk\0for.men\0" +"cards\0" +"asso.km\0" +"izumi.kagoshima.jp\0kotoura.tottori.jp\0" +"scholarships\0" +"fujimino.saitama.jp\0jeonbuk.kr\0brussels.museum\0" +"biz.et\0" +"compare\0" +"raholt.no\0" +"usa.museum\0ap-southeast-1.elasticbeanstalk.com\0ng.city\0" +"melhus.no\0" +"coupons\0dynu.net\0" +"kashiwa.chiba.jp\0" +"bnpparibas\0" +"moseushi.hokkaido.jp\0" +"padua.it\0" +"asso.mc\0" +"bulsan-suedtirol.it\0rivne.ua\0my-wan.de\0" +"historicalsociety.museum\0is-a-linux-user.org\0" +"biz.gl\0" +"hasuda.saitama.jp\0" +"is-a-chef.org\0" +"courses\0us-1.evennode.com\0" +"shinjo.yamagata.jp\0" +"stadt.museum\0" +"trani-barletta-andria.it\0" +"trader.aero\0cloudapps.digital\0" +"mywire.org\0" +"mashike.hokkaido.jp\0yamagata.ibaraki.jp\0unjarga.no\0" +"sicilia.it\0" +"morimachi.shizuoka.jp\0" +"s3.dualstack.eu-west-2.amazonaws.com\0" +"biz.id\0" +"imageandsound.museum\0anz\0credit\0" +"historical.museum\0jewelry.museum\0" +"aol\0" +"manno.kagawa.jp\0" +"newyork.museum\0pubol.museum\0h\xc3\xa1mm\xc3\xa1rfeasta.no\0" +"seihi.nagasaki.jp\0" +"and.museum\0sdn.gov.pl\0" +"bievat.no\0karasjohka.no\0" +"us-east-2.elasticbeanstalk.com\0" +"home.dyndns.org\0" +"mt.eu.org\0" +"government.aero\0" +"selfip.com\0" +"mitoyo.kagawa.jp\0kameoka.kyoto.jp\0" +"vercelli.it\0" +"geekgalaxy.com\0ptplus.fit\0" +"app\0" +"design\0" +"tickets\0" +"rodoy.no\0sld.pa\0" +"biz.ki\0company\0" +"kunst.museum\0" +"vb.it\0" +"higashimatsuyama.saitama.jp\0" +"bar\0" +"bizen.okayama.jp\0f.se\0bbc\0" +"kirovograd.ua\0" +"kaizuka.osaka.jp\0" +"*.bzz.dapps.earth\0" +"askoy.no\0" +"rollag.no\0" +"hara.nagano.jp\0" +"aostavalley.it\0" +"vinnytsia.ua\0" +"art\0bbt\0" +"j\xc3\xb8rpeland.no\0" +"biz.ls\0bcg\0" +"joinville.br\0dabur\0phone\0is-a-chef.com\0" +"yahaba.iwate.jp\0isahaya.nagasaki.jp\0kitamoto.saitama.jp\0" +"001www.com\0" +"bcn\0" +"tsukuba.ibaraki.jp\0akrehamn.no\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0" +"yasugi.shimane.jp\0" +"ks.ua\0" +"ninomiya.kanagawa.jp\0" +"ulsan.kr\0salon\0" +"wa.us\0" +"from-de.com\0" +"audio\0" +"yoshinogari.saga.jp\0biz.mv\0" +"bulsan.it\0biz.mw\0" +"freiburg.museum\0" +"yusui.kagoshima.jp\0biz.ni\0" +"s3-website.ap-south-1.amazonaws.com\0" +"bofa\0" +"2038.io\0" +"boavista.br\0batsfjord.no\0from-ri.com\0ddns.net\0" +"ks.us\0" +"biz.nr\0marshalls\0" +"crew.aero\0" +"hi.us\0" +"services.aero\0\xe8\xb4\xad\xe7\x89\xa9\0" +"mo.cn\0yamato.kanagawa.jp\0masoy.no\0watch\0" +"financial\0arvo.network\0" +"agency\0" +"myactivedirectory.com\0" +"iide.yamagata.jp\0" +"bet\0netlify.com\0" +"tourism.tn\0" +"cnpy.gdn\0" +"pharmacy.museum\0" +"nedre-eiker.no\0" +"yugawa.fukushima.jp\0" +"coach\0" +"ujiie.tochigi.jp\0\xe4\xbc\x81\xe4\xb8\x9a\0" +"nishinoomote.kagoshima.jp\0biz.pk\0" +"biz.pl\0" +"mobi.tt\0reisen\0" +"tamaki.mie.jp\0" +"okaya.nagano.jp\0" +"okoppe.hokkaido.jp\0arita.saga.jp\0" +"\xe5\xa4\xa7\xe9\x98\xaa.jp\0" +"biz.pr\0" +"living.museum\0mobi.tz\0" +"dattoweb.com\0" +"taxi\0" +"axa\0" +"dscloud.me\0" +"owani.aomori.jp\0setagaya.tokyo.jp\0aws\0" +"kaita.hiroshima.jp\0village.museum\0fuossko.no\0" +"jfk.museum\0" +"toei.aichi.jp\0" +"maintenance.aero\0" +"hatoyama.saitama.jp\0" +"donna.no\0" +"michigan.museum\0" +"hjartdal.no\0" +"bid\0" +"gildeskal.no\0gulen.no\0" +"tonami.toyama.jp\0" +"bio\0" +"sagamihara.kanagawa.jp\0tainai.niigata.jp\0cc.ut.us\0" +"photo\0" +"tokyo.jp\0marugame.kagawa.jp\0servecounterstrike.com\0" +"bitballoon.com\0" +"nishihara.kumamoto.jp\0voting\0my.eu.org\0" +"biz.ss\0" +"biz\0hasura.app\0" +"ullensvang.no\0vard\xc3\xb8.no\0biz.tj\0" +"okinawa.jp\0" +"shimosuwa.nagano.jp\0madrid\0" +"ven.it\0" +"biz.ua\0" +"biz.tr\0" +"shiroishi.saga.jp\0" +"ts.it\0biz.tt\0" +"ricoh\0za.org\0" +"trana.no\0" +"on-aptible.com\0" +"kakegawa.shizuoka.jp\0is-a-landscaper.com\0" +"mobi.na\0lardal.no\0" +"masuda.shimane.jp\0" +"mo.it\0" +"mobi.ng\0hammerfest.no\0stord.no\0" +"database.museum\0" +"aosta-valley.it\0" +"is-a-cpa.com\0" +"sakai.ibaraki.jp\0nakamura.kochi.jp\0" +"tadotsu.kagawa.jp\0ethnology.museum\0ng.school\0" +"aparecida.br\0" +"go.gov.br\0emiliaromagna.it\0plc.ly\0" +"bergen.no\0" +"dyroy.no\0\xc3\xb8vre-eiker.no\0" +"ca.it\0indianapolis.museum\0eidfjord.no\0" +"biz.vn\0bond\0" +"training\0" +"oz.au\0" +"mazowsze.pl\0" +"s.bg\0" +"9.bg\0for.mom\0" +"bms\0scrysec.com\0" +"misconfused.org\0" +"asahi.toyama.jp\0bmw\0from-ga.com\0" +"e164.arpa\0book\0" +"\xc3\xb8ksnes.no\0" +"volkenkunde.museum\0dynathome.net\0" +"bergamo.it\0meeres.museum\0" +"ngo.lk\0" +"medical.museum\0" +"mer\xc3\xa5ker.no\0\xc3\xb8rland.no\0\xe6\x9c\xba\xe6\x9e\x84\0" +"lib.wi.us\0run.app\0" +"tatebayashi.gunma.jp\0hjelmeland.no\0" +"b\xc3\xb8mlo.no\0" +"yabu.hyogo.jp\0gs.fm.no\0lib.sc.us\0trade\0" +"mining.museum\0" +"toride.ibaraki.jp\0" +"bom\0" +"boo\0" +"birdart.museum\0" +"of.work\0zapto.xyz\0" +"bot\0" +"nl.eu.org\0ybo.faith\0" +"notogawa.shiga.jp\0denmark.museum\0bydgoszcz.pl\0box\0" +"otofuke.hokkaido.jp\0dovre.no\0" +"hemne.no\0abogado\0" +"motobu.okinawa.jp\0gol.no\0" +"toki.gifu.jp\0chattanooga.museum\0ca.na\0" +"loseyourip.com\0" +"iwamizawa.hokkaido.jp\0biz.zm\0" +"mobi.ke\0cab\0" +"fineart.museum\0" +"cal\0" +"cam\0" +"samnanger.no\0" +"commune.am\0" +"lombardia.it\0cba\0*.quipelements.com\0" +"car\0" +"kitaaiki.nagano.jp\0nebraska.museum\0tourism.pl\0aetna\0co.com\0" +"cat\0kitahata.saga.jp\0" +"from-nj.com\0" +"kyuragi.saga.jp\0" +"apple\0" +"ancona.it\0" +"glas.museum\0ngo.ph\0cbn\0qc.com\0" +"discount\0" +"trentinos\xc3\xbc""d-tirol.it\0h\xc3\xa1pmir.no\0" +"kokonoe.oita.jp\0amli.no\0cbs\0" +"wada.nagano.jp\0dontexist.net\0" +"versailles.museum\0latrobe\0" +"kafjord.no\0" +"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0" +"horonobe.hokkaido.jp\0lerdal.no\0" +"kumakogen.ehime.jp\0" +"r\xc3\xa5holt.no\0\xd0\xb1\xd0\xb3\0" +"eq.edu.au\0contagem.br\0shimotsuke.tochigi.jp\0" +"takagi.nagano.jp\0" +"k12.de.us\0ar.com\0" +"kitakata.miyazaki.jp\0telekommunikation.museum\0" +"allfinanz\0" +"sekikawa.niigata.jp\0plc.uk\0" +"la-spezia.it\0k12.ak.us\0" +"ceb\0mckinsey\0sling\0" +"qpon\0" +"hazu.aichi.jp\0" +"ceo\0" +"kawanishi.nara.jp\0cfa\0" +"tromsa.no\0" +"cfd\0" +"kyowa.hokkaido.jp\0" +"ng.eu.org\0" +"buy\0" +"ar.it\0" +"mol.it\0" +"leclerc\0skype\0" +"sp.leg.br\0" +"ac.ae\0d.bg\0" +"*.bd\0kanzaki.saga.jp\0" +"software.aero\0" +"kartuzy.pl\0" +"app.banzaicloud.io\0" +"toyotsu.fukuoka.jp\0" +"miyazaki.jp\0lima-city.rocks\0" +"music.museum\0" +"s3-us-gov-west-1.amazonaws.com\0" +"mo.us\0vegas\0" +"router.management\0" +"ac.at\0ikeda.gifu.jp\0shobara.hiroshima.jp\0yamazoe.nara.jp\0" +"ac.be\0naturalsciences.museum\0fairwinds\0" +"ozu.kumamoto.jp\0" +"baths.museum\0" +"*.ck\0" +"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0" +"cymru\0" +"fukagawa.hokkaido.jp\0ca.us\0" +"communications.museum\0berlevag.no\0int.eu.org\0" +"ac.ci\0bolzano.it\0" +"yakage.okayama.jp\0sarpsborg.no\0" +"trentins\xc3\xbc""dtirol.it\0st.no\0" +"ac.cn\0\xd0\xb5\xd1\x8e\0" +"biella.it\0latino\0" +"monster\0is-a-chef.net\0" +"m\xc3\xa1latvuopmi.no\0ubank\0" +"srv.br\0ac.cr\0" +"tama.tokyo.jp\0" +"aramco\0" +"\xe5\xae\xb6\xe9\x9b\xbb\0" +"ac.cy\0g\xc3\xa1ls\xc3\xa1.no\0bzh\0" +"komagane.nagano.jp\0" +"freeboxos.com\0" +"\xe5\x95\x86\xe6\xa5\xad.tw\0" +"sucks\0" +"ybo.review\0" +"*.er\0" +"fujioka.gunma.jp\0" +"leg.br\0" +"algard.no\0" +"suzu.ishikawa.jp\0" +"*.fj\0sado.niigata.jp\0" +"*.fk\0" +"loginline.app\0" +"napoli.it\0" +"norton\0" +"luzern.museum\0" +"kitadaito.okinawa.jp\0ngo.za\0dyndns-office.com\0" +"automotive.museum\0uw.gov.pl\0" +"minowa.nagano.jp\0valer.hedmark.no\0" +"takatsuki.shiga.jp\0" +"casino\0" +"kagoshima.kagoshima.jp\0vindafjord.no\0ntdll.top\0" +"gs.oslo.no\0tvedestrand.no\0ap-south-1.elasticbeanstalk.com\0mein-vigor.de\0" +"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0uonuma.niigata.jp\0" +"k12.mn.us\0" +"oum.gov.pl\0kerrylogistics\0" +"abarth\0" +"education.tas.edu.au\0asahi.chiba.jp\0" +"apigee.io\0" +"uzhgorod.ua\0" +"ac.gn\0enterprises\0sandvik\0health-carereform.com\0" +"dsmynas.com\0" +"from-ny.net\0" +"ehime.jp\0tokoname.aichi.jp\0" +"seiro.niigata.jp\0" +"oksnes.no\0" +"\xe3\x82\xb3\xe3\x83\xa0\0" +"tools\0" +"isa.us\0cloud\0" +"s.se\0raid\0" +"fam.pk\0" +"lanbib.se\0kiwi\0*.dweb.link\0" +"ako.hyogo.jp\0" +"gwangju.kr\0" +"aomori.aomori.jp\0wallonie.museum\0" +"andria-barletta-trani.it\0ass.km\0sorreisa.no\0" +"arna.no\0" +"ac.id\0" +"dagestan.ru\0" +"futtsu.chiba.jp\0shell\0" +"gr.com\0" +"shikokuchuo.ehime.jp\0" +"ac.il\0aibetsu.hokkaido.jp\0" +"ac.im\0eu-west-2.elasticbeanstalk.com\0" +"com\0ac.in\0" +"money.museum\0" +"art.br\0*.jm\0" +"virtuel.museum\0vipsinaapp.com\0" +"ac.ir\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0cpa\0" +"izumisano.osaka.jp\0dagestan.su\0" +"como.it\0" +"pisa.it\0" +"*.kh\0from-fl.com\0" +"trentino-suedtirol.it\0bauern.museum\0leitungsen.de\0*.ex.futurecms.at\0" +"if.ua\0" +"hiranai.aomori.jp\0" +"ac.jp\0omachi.saga.jp\0" +"holtalen.no\0" +"xz.cn\0friuli-vgiulia.it\0mamurogawa.yamagata.jp\0artgallery.museum\0" +"minamiuonuma.niigata.jp\0meguro.tokyo.jp\0ac.ke\0dad\0fund\0" +"nl.ca\0" +"etisalat\0" +"namegata.ibaraki.jp\0star\0" +"ikeda.osaka.jp\0is-an-actor.com\0" +"art.do\0missoula.museum\0larvik.no\0us-east-1.amazonaws.com\0stuff-4-sale.us\0" +"news.hu\0monza-brianza.it\0studio\0eu.com\0" +"udi.br\0ac.kr\0" +"taiji.wakayama.jp\0" +"shimane.shimane.jp\0" +"gent\0" +"marumori.miyagi.jp\0" +"art.dz\0" +"toyoake.aichi.jp\0yokosuka.kanagawa.jp\0" +"ar.us\0aquarelle\0day\0" +"ac.lk\0fundacio.museum\0" +"indiana.museum\0fr\xc3\xb8ya.no\0hiphop\0" +"h\xc3\xa6gebostad.no\0warmia.pl\0" +"*.mm\0" +"trieste.it\0ac.ma\0" +"ac.ls\0" +"crs\0csc\0" +"firenze.it\0ac.me\0" +"misaki.okayama.jp\0" +"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0murmansk.su\0" +"ikeda.hokkaido.jp\0" +"ogawara.miyagi.jp\0koryo.nara.jp\0" +"cloudeity.net\0" +"olbia-tempio.it\0" +"air-surveillance.aero\0" +"koya.wakayama.jp\0" +"kurotaki.nara.jp\0*.np\0" +"\xd1\x80\xd1\x84\0xen.prgmr.com\0" +"macapa.br\0ac.mu\0tjome.no\0" +"now-dns.top\0" +"ac.mw\0spjelkavik.no\0" +"sologne.museum\0" +"tokorozawa.saitama.jp\0ac.ni\0from-ne.com\0" +"ac.mz\0meraker.no\0" +"vagsoy.no\0" +"loans\0" +"yoshioka.gunma.jp\0prochowice.pl\0" +"cafe\0dds\0" +"schoenbrunn.museum\0" +"kongsberg.no\0" +"matsumoto.kagoshima.jp\0" +"gets-it.net\0" +"hioki.kagoshima.jp\0ac.nz\0*.pg\0" +"padova.it\0kawasaki.miyagi.jp\0ohira.miyagi.jp\0" +"mozilla-iot.org\0" +"kita.osaka.jp\0" +"cal.it\0lancia\0" +"s3-website-ap-southeast-2.amazonaws.com\0" +"tohma.hokkaido.jp\0" +"ac.pa\0" +"art.ht\0cyber.museum\0" +"himi.toyama.jp\0" +"s3.dualstack.ca-central-1.amazonaws.com\0" +"unazuki.toyama.jp\0" +"chita.aichi.jp\0dev\0" +"omasvuotna.no\0cc.wa.us\0" +"yuzawa.niigata.jp\0" +"utsira.no\0" +"definima.io\0" +"iwanai.hokkaido.jp\0iwaizumi.iwate.jp\0" +"fujikawa.yamanashi.jp\0koshu.yamanashi.jp\0k12.me.us\0" +"kuokgroup\0from-nv.com\0navoi.su\0" +"ac.pr\0" +"eastcoast.museum\0is-a-republican.com\0" +"cc.ks.us\0" +"kitagawa.miyazaki.jp\0" +"cc.hi.us\0reg.dk\0" +"bozen.it\0" +"hatogaya.saitama.jp\0us-gov-west-1.elasticbeanstalk.com\0" +"d.se\0" +"\xe6\x96\xb0\xe6\xbd\x9f.jp\0" +"helsinki.museum\0" +"saga.saga.jp\0" +"club.tw\0accenture\0" +"crafting.xyz\0" +"\xe7\x86\x8a\xe6\x9c\xac.jp\0dhl\0" +"aeroport.fr\0asago.hyogo.jp\0" +"hofu.yamaguchi.jp\0" +"monmouth.museum\0" +"isernia.it\0glass.museum\0" +"ski.museum\0" +"kids.museum\0ac.rs\0" +"toho.fukuoka.jp\0" +"ac.ru\0ac.se\0certmgr.org\0" +"ac.rw\0afamilycompany\0" +"cn.it\0" +"plaza.museum\0" +"murakami.niigata.jp\0inami.toyama.jp\0fr\xc3\xa6na.no\0yokohama\0" +"mishima.fukushima.jp\0abira.hokkaido.jp\0" +"bod\xc3\xb8.no\0" +"macys\0" +"ichikawa.chiba.jp\0" +"valleaosta.it\0salerno.it\0" +"taishi.hyogo.jp\0" +"iveco\0zuerich\0" +"ac.th\0" +"omigawa.chiba.jp\0" +"ac.sz\0ac.tj\0diy\0" +"tsuwano.shimane.jp\0\xc4\x8d\xc3\xa1hcesuolo.no\0" +"warman\0" +"palmas.br\0ok.us\0" +"gub.uy\0" +"linkitools.space\0" +"la.us\0" +"s3-ap-northeast-2.amazonaws.com\0" +"ac.ug\0" +"uji.kyoto.jp\0ando.nara.jp\0ac.tz\0" +"ac.uk\0call\0" +"bialystok.pl\0" +"test.tj\0google\0" +"for.one\0" +"fi.cr\0" +"shimamoto.osaka.jp\0" +"barsycenter.com\0" +"hyuga.miyazaki.jp\0" +"video.hu\0ac.vn\0" +"floripa.br\0camp\0" +"hirono.iwate.jp\0internet-dns.de\0" +"ino.kochi.jp\0" +"nl.no\0" +"lib.fl.us\0fin.ci\0" +"ohira.tochigi.jp\0tokke.no\0" +"porsanger.no\0" +"kashiba.nara.jp\0" +"art.pl\0" +"leasing.aero\0veneto.it\0olayan\0" +"giske.no\0" +"seljord.no\0dev-myqnapcloud.com\0" +"sport\0azure-mobile.net\0" +"weatherchannel\0" +"\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0booking\0" +"nango.fukushima.jp\0sandnessj\xc3\xb8""en.no\0" +"*.ye\0" +"cadaques.museum\0" +"idv.hk\0pharmacy\0" +"gehirn.ne.jp\0" +"fin.ec\0" +"sykkylven.no\0dnp\0" +"fermo.it\0test.ru\0" +"myftp.org\0" +"valle-daosta.it\0" +"harima.hyogo.jp\0miyoshi.saitama.jp\0" +"recreation.aero\0reggiocalabria.it\0dog\0" +"katsuragi.nara.jp\0" +"judaica.museum\0" +"yuu.yamaguchi.jp\0" +"kunitachi.tokyo.jp\0" +"myravendb.com\0" +"ac.za\0" +"yorkshire.museum\0mel\xc3\xb8y.no\0qa2.com\0" +"hornindal.no\0k12.or.us\0" +"dot\0" +"aviation.museum\0bosch\0" +"um.gov.pl\0" +"art.sn\0" +"tagami.niigata.jp\0ac.zm\0" +"oketo.hokkaido.jp\0" +"yokoshibahikari.chiba.jp\0syncloud.it\0" +"is-a-photographer.com\0" +"filegear-au.me\0" +"bolivia.bo\0open\0" +"care\0team\0" +"eastafrica.museum\0" +"vennesla.no\0" +"k12.az.us\0ac.zw\0analytics\0" +"arts.co\0game-server.cc\0dyndns.ddnss.de\0" +"jetzt\0swidnik.pl\0hk.com\0" +"ueno.gunma.jp\0" +"shari.hokkaido.jp\0casa\0" +"localhistory.museum\0" +"trentino-altoadige.it\0miyazu.kyoto.jp\0cars\0" +"control.aero\0shoo.okayama.jp\0" +"sola.no\0case\0" +"shintoku.hokkaido.jp\0zoological.museum\0eat\0" +"is.it\0cash\0" +"fetsund.no\0" +"fi.it\0" +"rimini.it\0" +"tech\0dyn.ddnss.de\0" +"minamitane.kagoshima.jp\0" +"bo.it\0is-a-soxfan.org\0" +"investments\0lexus\0" +"fuel.aero\0" +"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" +"q.bg\0valledaosta.it\0" +"vacations\0" +"7.bg\0eco\0" +"id.au\0barsy.menu\0" +"cn.ua\0" +"kawaue.gifu.jp\0" +"aland.fi\0app.os.fedoraproject.org\0" +"r\xc3\xb8st.no\0us.gov.pl\0study\0" +"mie.jp\0" +"student.aero\0journalism.museum\0" +"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0ohda.shimane.jp\0" +"to.leg.br\0" +"undersea.museum\0" +"takarazuka.hyogo.jp\0" +"ln.cn\0betainabox.com\0" +"edu\0" +"dtv\0" +"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" +"planetarium.museum\0" +"medio-campidano.it\0lib.ky.us\0" +"forde.no\0" +"partners\0" +"cipriani\0" +"saka.hiroshima.jp\0olayangroup\0" +"donetsk.ua\0" +"dvr\0nodum.co\0" +"furniture.museum\0s3-ap-south-1.amazonaws.com\0" +"time.no\0" +"voyage\0" +"bozen-suedtirol.it\0" +"dontexist.org\0" +"matta-varjjat.no\0" +"volkswagen\0" +"hayakawa.yamanashi.jp\0" +"turen.tn\0" +"arkhangelsk.su\0" +"matsudo.chiba.jp\0kids.us\0" +"kep.tr\0" +"ggee\0" +"toyooka.hyogo.jp\0" +"insurance.aero\0" +"susaki.kochi.jp\0" +"accident-investigation.aero\0dev.static.land\0" +"daegu.kr\0faith\0is-into-cars.com\0" +"kakamigahara.gifu.jp\0" +"steiermark.museum\0fet.no\0airforce\0" +"nodum.io\0" +"hs.zone\0" +"bounty-full.com\0" +"sortland.no\0" +"suzaka.nagano.jp\0bajddar.no\0" +"codes\0garden\0" +"himeshima.oita.jp\0resistance.museum\0" +"withgoogle.com\0" +"k12.ny.us\0" +"minamiboso.chiba.jp\0" +"malatvuopmi.no\0" +"wa.gov.au\0" +"cc.mo.us\0actor\0" +"mincom.tn\0chernivtsi.ua\0bradesco\0" +"fukuchi.fukuoka.jp\0muenster.museum\0" +"ua.rs\0" +"cim.br\0ic.gov.pl\0" +"\xe6\x97\xb6\xe5\xb0\x9a\0" +"k12.dc.us\0" +"mobile\0" +"lur\xc3\xb8y.no\0" +"chizu.tottori.jp\0buyshouses.net\0" +"omuta.fukuoka.jp\0toyama.toyama.jp\0" +"barlettatraniandria.it\0sr.it\0alabama.museum\0" +"kuki.saitama.jp\0cc.ca.us\0" +"sarufutsu.hokkaido.jp\0" +"inf.br\0" +"mizuho.tokyo.jp\0exeter.museum\0idv.tw\0" +"rennes\xc3\xb8y.no\0" +"unicom\0" +"bando.ibaraki.jp\0" +"id.ir\0arts.ve\0" +"s\xc3\xb8r-varanger.no\0barsyonline.com\0" +"miyama.fukuoka.jp\0" +"inf.cu\0" +"nsw.au\0" +"profesional.bo\0ap.it\0imakane.hokkaido.jp\0windows\0" +"wroclaw.pl\0duck\0solutions\0ybo.science\0" +"minamiise.mie.jp\0" +"ogliastra.it\0sula.no\0" +"tonosho.kagawa.jp\0" +"b.bg\0" +"koebenhavn.museum\0" +"kamakura.kanagawa.jp\0kuroiso.tochigi.jp\0" +"zgora.pl\0" +"daplie.me\0" +"narita.chiba.jp\0otake.hiroshima.jp\0" +"katashina.gunma.jp\0" +"hachijo.tokyo.jp\0" +"b.br\0gs.st.no\0harstad.no\0" +"oster\xc3\xb8y.no\0fedorapeople.org\0" +"sc.cn\0friuli-v-giulia.it\0from-sc.com\0" +"gs.svalbard.no\0" +"circus.museum\0dallas.museum\0ballangen.no\0author\0" +"ichikai.tochigi.jp\0realty\0" +"fin.tn\0" +"nesseby.no\0" +"prof.pr\0backplaneapp.io\0" +"\xe5\x8d\x83\xe8\x91\x89.jp\0" +"kaneyama.yamagata.jp\0mysecuritycamera.com\0" +"settlers.museum\0" +"id.lv\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0balashov.su\0" +"he.cn\0" +"laz.it\0yonezawa.yamagata.jp\0id.ly\0" +"sondre-land.no\0movie\0" +"takaharu.miyazaki.jp\0" +"mragowo.pl\0" +"towada.aomori.jp\0uni5.net\0" +"dyn.cosidns.de\0" +"arts.ro\0" +"bellevue.museum\0" +"trentino-a-adige.it\0" +"kumenan.okayama.jp\0coldwar.museum\0ushistory.museum\0" +"ostrowwlkp.pl\0" +"cbre\0" +"forsand.no\0dattolocal.com\0" +"zachpomor.pl\0cherkasy.ua\0surf\0" +"svizzera.museum\0knowsitall.info\0" +"ooshika.nagano.jp\0fan\0" +"uchihara.ibaraki.jp\0" +"tksat.bo\0forli-cesena.it\0" +"chikuhoku.nagano.jp\0" +"consulting\0" +"tr.eu.org\0" +"page\0asso.eu.org\0" +"noip.us\0" +"finn\xc3\xb8y.no\0" +"flesberg.no\0" +"tarui.gifu.jp\0" +"fujitsu\0" +"matsuura.nagasaki.jp\0k12.mt.us\0" +"selje.no\0hs.run\0" +"eating-organic.net\0" +"itami.hyogo.jp\0" +"kumatori.osaka.jp\0" +"kameyama.mie.jp\0mobi\0slattum.no\0eu-4.evennode.com\0" +"toray\0" +"arts.nf\0from-ma.com\0" +"masaki.ehime.jp\0" +"esq\0" +"\xe6\xb8\xb8\xe6\x88\x8f\0" +"drive\0" +"atlanta.museum\0ox.rs\0" +"trentino-s-tirol.it\0mitou.yamaguchi.jp\0" +"ecologia.bo\0firewall-gateway.net\0" +"hokkaido.jp\0fuso.aichi.jp\0" +"cc.ar.us\0" +"es.gov.br\0tsuiki.fukuoka.jp\0\xd5\xb0\xd5\xa1\xd5\xb5\0" +"us-west-1.elasticbeanstalk.com\0" +"management\0freeboxos.fr\0" +"moda\0ddnslive.com\0" +"cesena-forli.it\0" +"teva\0altervista.org\0spdns.org\0" +"mitsubishi\0" +"express.aero\0" +"sc.ke\0twmail.cc\0" +"dyndns-remote.com\0" +"dyndns-at-work.com\0" +"inf.mk\0losangeles.museum\0" +"higashinaruse.akita.jp\0" +"bandai.fukushima.jp\0" +"eus\0" +"chirurgiens-dentistes.fr\0" +"sc.kr\0" +"hotel.tz\0" +"*.lcl.dev\0" +"sayama.osaka.jp\0" +"takayama.gunma.jp\0" +"*.nom.br\0" +"is-leet.com\0" +"azumino.nagano.jp\0torino.museum\0" +"radio.br\0" +"kamiamakusa.kumamoto.jp\0" +"sc.ls\0pictures\0" +"nationalheritage.museum\0" +"\xc3\xb8yer.no\0eu-3.evennode.com\0" +"flynnhosting.net\0" +"id.us\0" +"webcam\0" +"ina.saitama.jp\0" +"tomakomai.hokkaido.jp\0finland.museum\0museumcenter.museum\0" +"murata.miyagi.jp\0jevnaker.no\0" +"groks-the.info\0" +"owariasahi.aichi.jp\0" +"tobetsu.hokkaido.jp\0" +"skierv\xc3\xa1.no\0" +"etne.no\0cloudapp.net\0" +"linz.museum\0averoy.no\0" +"lib.nm.us\0df.leg.br\0" +"contemporary.museum\0" +"teo.br\0" +"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0" +"iida.nagano.jp\0" +"poker\0" +"oppeg\xc3\xa5rd.no\0" +"b\xc3\xa1id\xc3\xa1r.no\0dyndns-at-home.com\0" +"kusu.oita.jp\0" +"tienda\0" +"yazu.tottori.jp\0scienceandindustry.museum\0v\xc3\xa6r\xc3\xb8y.no\0" +"kanna.gunma.jp\0" +"emb.kw\0khmelnitskiy.ua\0" +"nyc.museum\0fit\0" +"dvag\0" +"airtel\0" +"chuo.yamanashi.jp\0evenes.no\0" +"leksvik.no\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" +"lecco.it\0" +"aa.no\0\xe9\x80\x9a\xe8\xb2\xa9\0" +"balat.no\0" +"servep2p.com\0" +"filegear-sg.me\0" +"turystyka.pl\0cyon.site\0" +"flor\xc3\xb8.no\0" +"chungnam.kr\0" +"ashiya.fukuoka.jp\0fujikawa.shizuoka.jp\0" +"naka.hiroshima.jp\0" +"locus\0statefarm\0thruhere.net\0" +"eu-2.evennode.com\0" +"adachi.tokyo.jp\0k12.wy.us\0" +"rieti.it\0godo.gifu.jp\0" +"shimabara.nagasaki.jp\0" +"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0" +"juniper\0" +"omotego.fukushima.jp\0" +"asmatart.museum\0cc.ok.us\0" +"k12.ia.us\0" +"inf.ua\0" +"kosai.shizuoka.jp\0" +"cc.la.us\0viking\0" +"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" +"fjell.no\0" +"hotel.lk\0topology.museum\0tr\xc3\xa6na.no\0fly\0" +"psc.br\0" +"mihama.mie.jp\0aseral.no\0" +"noip.me\0" +"ap-northeast-2.elasticbeanstalk.com\0" +"experts-comptables.fr\0minamiizu.shizuoka.jp\0loten.no\0" +"minakami.gunma.jp\0" +"airguard.museum\0b.se\0" +"fauske.no\0" +"taiwa.miyagi.jp\0seven\0" +"pars\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0" +"inzai.chiba.jp\0mulhouse.museum\0" +"oyamazaki.kyoto.jp\0futurehosting.at\0" +"pordenone.it\0gj\xc3\xb8vik.no\0\xe5\x81\xa5\xe5\xba\xb7\0" +"reggio-emilia.it\0childrensgarden.museum\0" +"niteroi.br\0pulawy.pl\0" +"zama.kanagawa.jp\0jamison.museum\0" +"kawakami.nagano.jp\0" +"cl.it\0" +"uk0.bigv.io\0" +"sciencecenters.museum\0" +"glogow.pl\0" +"sc.ug\0eu-1.evennode.com\0" +"sc.tz\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0foo\0" +"grong.no\0modum.no\0" +"morotsuka.miyazaki.jp\0for-more.biz\0" +"nym.by\0" +"shinto.gunma.jp\0s3-eu-west-2.amazonaws.com\0nym.bz\0" +"gjesdal.no\0sc.us\0fox\0" +"\xe5\x85\xac\xe5\x8f\xb8.cn\0\xe6\xb2\x96\xe7\xb8\x84.jp\0" +"ny.us\0" +"\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"shimizu.hokkaido.jp\0" +"de.cool\0" +"sasaguri.fukuoka.jp\0" +"hawaii.museum\0" +"shiriuchi.hokkaido.jp\0c.cdn77.org\0" +"soni.nara.jp\0gs.nl.no\0" +"\xe5\x85\xac\xe5\x8f\xb8.hk\0toyota.aichi.jp\0gu.us\0" +"trentino-sued-tirol.it\0" +"bungotakada.oita.jp\0" +"england.museum\0x443.pw\0" +"camera\0gal\0iserv.dev\0" +"york.museum\0" +"rochester.museum\0nym.ec\0" +"ashiya.hyogo.jp\0sinaapp.com\0" +"gangwon.kr\0gap\0" +"bestbuy\0" +"americanantiques.museum\0" +"hotel.hu\0" +"uchinada.ishikawa.jp\0" +"dyndns-ip.com\0" +"makurazaki.kagoshima.jp\0" +"scotland.museum\0" +"ogori.fukuoka.jp\0gay\0" +"yoshino.nara.jp\0" +"frl\0" +"lib.id.us\0" +"oracle\0" +"ac\0\xe7\xa7\xbb\xe5\x8a\xa8\0to.work\0" +"ad\0serveminecraft.net\0" +"ae\0hamamatsu.shizuoka.jp\0" +"af\0cesenaforl\xc3\xac.it\0" +"ag\0" +"rsc.cdn77.org\0" +"ai\0" +"williamhill\0" +"berg.no\0" +"al\0racing\0logoip.de\0" +"am\0himeji.hyogo.jp\0" +"ao\0" +"aq\0ba\0romsa.no\0" +"ar\0bb\0satsumasendai.kagoshima.jp\0" +"passenger-association.aero\0as\0" +"at\0" +"au\0be\0phoenix.museum\0" +"bf\0" +"aw\0bg\0" +"ax\0bh\0uk.eu.org\0" +"bi\0cloudcontrolled.com\0" +"az\0bj\0chikujo.fukuoka.jp\0" +"moriya.ibaraki.jp\0" +"bm\0medecin.km\0" +"bn\0" +"bo\0tunk.org\0" +"computer.museum\0microsoft\0nym.gr\0" +"ca\0aero.tt\0gdn\0" +"br\0" +"bs\0cc\0onred.one\0" +"bt\0cd\0gea\0" +"ftr\0" +"bv\0cf\0casadelamoneda.museum\0" +"bw\0cg\0yokawa.hyogo.jp\0nym.gy\0" +"ch\0" +"by\0ci\0panama.museum\0nym.hk\0" +"bz\0k12.vt.us\0" +"dnsfor.me\0" +"cl\0delta\0" +"cm\0valle.no\0" +"cn\0" +"co\0" +"properties\0" +"rakkestad.no\0fun\0enonic.io\0" +"cr\0" +"workinggroup.aero\0aero.mv\0nym.ie\0" +"cu\0de\0moto\0" +"cv\0" +"cw\0sherbrooke.museum\0" +"cx\0" +"cy\0" +"cz\0dj\0hachioji.tokyo.jp\0" +"dk\0" +"bas.it\0read\0" +"dm\0hemsedal.no\0bingo\0" +"k12.il.us\0" +"do\0chosei.chiba.jp\0" +"bykle.no\0" +"ec\0" +"hitachiota.ibaraki.jp\0" +"ee\0" +"eg\0go.dyndns.org\0" +"to.it\0" +"dz\0" +"pu.it\0uwu.ai\0" +"aarp\0" +"lucania.it\0from-wi.com\0" +"!www.ck\0oceanographique.museum\0" +"es\0" +"et\0" +"eu\0" +"usr.cloud.muni.cz\0" +"iraq.museum\0nordreisa.no\0" +"fi\0" +"fm\0fg.it\0" +"fo\0tomi.nagano.jp\0ventures\0nym.la\0" +"ga\0nym.lc\0" +"fr\0gb\0" +"jdevcloud.com\0" +"gd\0" +"ge\0" +"gf\0hyllestad.no\0" +"gg\0nym.li\0" +"gh\0nym.kz\0" +"gi\0narashino.chiba.jp\0" +"kitami.hokkaido.jp\0" +"o.bg\0gl\0molde.no\0r\xc3\xa5""de.no\0fyi\0" +"gm\0tjeldsund.no\0" +"gn\0tondabayashi.osaka.jp\0" +"gp\0tateshina.nagano.jp\0" +"5.bg\0gq\0embetsu.hokkaido.jp\0imamat\0" +"gr\0nym.lt\0" +"gs\0kudoyama.wakayama.jp\0nym.lu\0nym.me\0" +"gt\0showa.fukushima.jp\0botanicgarden.museum\0" +"gu\0amber.museum\0" +"wa.edu.au\0ringerike.no\0" +"gw\0sex.hu\0sakaki.nagano.jp\0gift\0" +"coal.museum\0" +"gy\0nj.us\0" +"misato.wakayama.jp\0muenchen.museum\0" +"hk\0" +"nym.mn\0" +"hm\0marker.no\0" +"hn\0" +"naganohara.gunma.jp\0" +"tamano.okayama.jp\0ivgu.no\0" +"hr\0mosvik.no\0" +"ht\0id\0otoineppu.hokkaido.jp\0nordkapp.no\0slupsk.pl\0rj.leg.br\0" +"hu\0ie\0" +"prd.fr\0mombetsu.hokkaido.jp\0nym.mx\0" +"sannohe.aomori.jp\0" +"*.kitakyushu.jp\0" +"iki.fi\0" +"ogi.saga.jp\0" +"il\0" +"im\0\xe6\x84\x9b\xe7\x9f\xa5.jp\0" +"in\0" +"io\0" +"aip.ee\0ranzan.saitama.jp\0karm\xc3\xb8y.no\0" +"iq\0" +"ir\0jaworzno.pl\0marketing\0mayfirst.info\0" +"is\0kvafjord.no\0" +"it\0kuriyama.hokkaido.jp\0wafflecell.com\0" +"je\0" +"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0shimofusa.chiba.jp\0gle\0nym.nz\0" +"alipay\0" +"lib.gu.us\0black\0" +"visa\0" +"jo\0lib.co.us\0tatamotors\0" +"jp\0" +"select\0" +"ama.shimane.jp\0katsushika.tokyo.jp\0saltdal.no\0nym.pe\0" +"namsos.no\0" +"ke\0" +"swiss\0googlecode.com\0temp-dns.com\0" +"kg\0" +"coffee\0" +"hitachiomiya.ibaraki.jp\0ki\0r\xc3\xb8yrvik.no\0" +"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0tonaki.okinawa.jp\0corvette.museum\0" +"bozen-s\xc3\xbc""dtirol.it\0*.uberspace.de\0" +"km\0naturhistorisches.museum\0" +"kn\0" +"sassari.it\0bentley\0" +"kp\0from-az.net\0" +"iheya.okinawa.jp\0la\0" +"kr\0lb\0gmo\0nym.pt\0" +"lc\0" +"shiksha\0ciscofreak.com\0mypsx.net\0" +"kw\0is-found.org\0" +"ky\0li\0" +"bologna.it\0kz\0" +"kamisu.ibaraki.jp\0lk\0gmx\0" +"minamioguni.kumamoto.jp\0" +"ma\0" +"lr\0" +"ls\0mc\0" +"anpachi.gifu.jp\0lt\0md\0ambulance.museum\0" +"lu\0me\0" +"lv\0beardu.no\0" +"mg\0" +"kosaka.akita.jp\0mh\0" +"ly\0" +"mk\0viva\0" +"ml\0reit\0" +"mail.pl\0nym.ro\0" +"mn\0pccw\0" +"mo\0" +"mp\0" +"prd.km\0mq\0na\0" +"bolt.hu\0mr\0goo\0" +"ms\0nc\0gop\0" +"hakuba.nagano.jp\0mt\0from-oh.com\0" +"mu\0ne\0" +"mv\0nf\0" +"mw\0ng\0got\0" +"barreau.bj\0mx\0" +"gov\0trentinoalto-adige.it\0my\0ni\0folldal.no\0vivo\0nym.sk\0" +"fujishiro.ibaraki.jp\0mz\0" +"nl\0" +"technology.museum\0" +"kyoto.jp\0" +"no\0" +"jefferson.museum\0" +"sp.it\0nr\0" +"nym.su\0" +"naturbruksgymn.se\0app.os.stg.fedoraproject.org\0" +"skaun.no\0nu\0able\0" +"ind.br\0latina.it\0nym.sx\0" +"olecko.pl\0" +"aurskog-holand.no\0nz\0" +"prd.mg\0" +"sakaiminato.tottori.jp\0" +"om\0" +"sex.pl\0" +"kunstunddesign.museum\0gotdns.org\0" +"shizuoka.shizuoka.jp\0" +"motegi.tochigi.jp\0pa\0" +"nationalfirearms.museum\0" +"pe\0nym.tw\0" +"pf\0" +"kariya.aichi.jp\0sasebo.nagasaki.jp\0ph\0fastpanel.direct\0" +"og.ao\0an.it\0pk\0" +"sa.au\0kawai.iwate.jp\0pl\0" +"pm\0report\0" +"iwade.wakayama.jp\0pn\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" +"onion\0direct.quickconnect.to\0" +"urasoe.okinawa.jp\0mk.ua\0" +"qa\0" +"kuzumaki.iwate.jp\0pr\0hbo\0rogers\0" +"ps\0wy.us\0total\0" +"chiryu.aichi.jp\0pt\0" +"bugatti\0" +"nakatombetsu.hokkaido.jp\0toga.toyama.jp\0" +"ishikari.hokkaido.jp\0mup.gov.pl\0pw\0" +"jewish.museum\0py\0" +"piw.gov.pl\0onthewifi.com\0" +"catering.aero\0lorenskog.no\0is-certified.com\0" +"lavagis.no\0" +"cloudns.biz\0" +"preservation.museum\0sunndal.no\0" +"r\xc3\xb8""d\xc3\xb8y.no\0" +"re\0" +"shop.ht\0" +"shop.hu\0" +"minamiminowa.nagano.jp\0" +"sa.cr\0virginia.museum\0" +"sic.it\0" +"lubin.pl\0" +"rent\0" +"mad.museum\0" +"jpmorgan\0" +"ro\0" +"logistics.aero\0kalisz.pl\0" +"kamisunagawa.hokkaido.jp\0sa\0" +"sb\0" +"tmp.br\0rs\0sc\0" +"gs.cn\0stavern.no\0sd\0" +"catanzaro.it\0gotsu.shimane.jp\0ru\0se\0" +"rw\0sg\0" +"sh\0" +"si\0lib.mn.us\0" +"sj\0" +"goiania.br\0sk\0" +"nakano.nagano.jp\0sm\xc3\xb8la.no\0sl\0" +"sm\0" +"sn\0" +"so\0from-mn.com\0" +"midtre-gauldal.no\0" +"kumamoto.jp\0" +"wiki.bo\0sr\0s3-website-ap-northeast-1.amazonaws.com\0" +"ss\0tc\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"st\0td\0" +"wiki.br\0su\0" +"nishiaizu.fukushima.jp\0sv\0tf\0" +"tg\0builders\0" +"ind.gt\0iki.nagasaki.jp\0sx\0th\0" +"sy\0" +"school.na\0sz\0tj\0" +"tk\0" +"tl\0surgery\0" +"shimada.shizuoka.jp\0tm\0" +"\xe4\xb8\x89\xe9\x87\x8d.jp\0tn\0" +"to\0soc.srcf.net\0" +"sweden.museum\0leirfjord.no\0doesntexist.com\0" +"newjersey.museum\0ua\0" +"oxford.museum\0tr\0" +"tt\0" +"kitaura.miyazaki.jp\0" +"tv\0" +"humanities.museum\0tw\0ug\0" +"stokke.no\0tz\0" +"stockholm.museum\0uk\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" +"\xe9\xa6\x99\xe5\xb7\x9d.jp\0" +"va\0" +"medecin.fr\0ind.in\0" +"yugawara.kanagawa.jp\0kamiizumi.saitama.jp\0school.nz\0us\0vc\0" +"sakyo.kyoto.jp\0kanuma.tochigi.jp\0ve\0" +"suwa.nagano.jp\0ogimi.okinawa.jp\0kvam.no\0gifts\0" +"vg\0" +"trentin-s\xc3\xbc""d-tirol.it\0uy\0vi\0gb.net\0" +"uz\0" +"iwate.jp\0" +"k12.tn.us\0" +"business\0" +"vn\0" +"pomorze.pl\0" +"\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0" +"arezzo.it\0narviika.no\0" +"kunitomi.miyazaki.jp\0vu\0" +"toyotomi.hokkaido.jp\0ochi.kochi.jp\0wf\0" +"toyota\0" +"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0is-with-theband.com\0azurewebsites.net\0" +"rest\0" +"shichikashuku.miyagi.jp\0redirectme.net\0" +"ibestad.no\0" +"home-webserver.de\0" +"cc.id.us\0ws\0*.vps.myjino.ru\0" +"from-vt.com\0" +"citadel\0filegear-de.me\0" +"honjyo.akita.jp\0" +"nomi.ishikawa.jp\0haugesund.no\0" +"kitaakita.akita.jp\0hiv\0" +"o.se\0" +"sa.it\0\xe5\xa4\xa7\xe5\x88\x86.jp\0ind.kw\0" +"expert\0" +"tomisato.chiba.jp\0kariwa.niigata.jp\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0logoip.com\0" +"og.it\0" +"chuo.osaka.jp\0" +"yamashina.kyoto.jp\0histoire.museum\0rr.leg.br\0" +"zt.ua\0" +"\xc3\xb8stre-toten.no\0" +"midori.chiba.jp\0" +"16-b.it\0" +"*.ex.ortsinfo.at\0" +"otama.fukushima.jp\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0" +"plc.co.im\0" +"ibaraki.osaka.jp\0" +"museet.museum\0zone\0" +"sumida.tokyo.jp\0" +"yt\0" +"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" +"hkt\0" +"boxfuse.io\0" +"tele.amune.org\0" +"zm\0" +"tatsuno.nagano.jp\0" +"agr.br\0coastaldefence.museum\0" +"ozora.hokkaido.jp\0salat.no\0dontexist.com\0" +"progressive\0rs.leg.br\0sc.leg.br\0" +"ostre-toten.no\0" +"zw\0myftp.biz\0" +"takaishi.osaka.jp\0hareid.no\0" +"hasami.nagasaki.jp\0" +"dyndns-server.com\0" +"badaddja.no\0" +"group.aero\0" +"station.museum\0" +"onga.fukuoka.jp\0" +"auction\0" +"economia.bo\0tachikawa.tokyo.jp\0" +"stpetersburg.museum\0" +"gloppen.no\0" +"hol.no\0" +"iizuka.fukuoka.jp\0" +"geometre-expert.fr\0chijiwa.nagasaki.jp\0" +"name\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" +"gd.cn\0" +"tas.au\0" +"iwakuni.yamaguchi.jp\0" +"s3-website-us-east-1.amazonaws.com\0" +"point2this.com\0" +"cinema.museum\0gs.aa.no\0" +"ba.leg.br\0" +"lenvik.no\0" +"isteingeek.de\0" +"gobo.wakayama.jp\0" +"flekkefjord.no\0" +"country\0" +"agents.aero\0" +"center.museum\0" +"nanao.ishikawa.jp\0" +"is-a-therapist.com\0" +"nationwide\0" +"barsyonline.co.uk\0" +"hot\0" +"shiftedit.io\0" +"desa.id\0kizu.kyoto.jp\0how\0tiaa\0" +"yamagata.yamagata.jp\0" +"mantova.it\0" +"fyresdal.no\0" +"tysfjord.no\0" +"guernsey.museum\0mandal.no\0imdb\0cbg.ru\0" +"direct\0" +"tabuse.yamaguchi.jp\0" +"jewishart.museum\0zhytomyr.ua\0" +"poltava.ua\0" +"cern\0" +"lodi.it\0uklugs.org\0" +"rec.br\0" +"molise.it\0zarow.pl\0" +"br.com\0" +"from-ok.com\0" +"kv\xc3\xa6""fjord.no\0" +"chihayaakasaka.osaka.jp\0alpha-myqnapcloud.com\0" +"shikabe.hokkaido.jp\0mitsue.nara.jp\0cc.sc.us\0" +"higashikagawa.kagawa.jp\0" +"k12.mi.us\0" +"rec.co\0ibm\0" +"indigena.bo\0" +"ind.tn\0cc.ny.us\0is-a-candidate.org\0" +"rn.leg.br\0" +"ice\0" +"bihoro.hokkaido.jp\0cc.gu.us\0" +"s3.dualstack.us-east-2.amazonaws.com\0" +"k12.as.us\0" +"is-a-painter.com\0" +"cremona.it\0kuchinotsu.nagasaki.jp\0h\xc3\xb8ylandet.no\0neustar\0" +"est.pr\0noho.st\0" +"aquarium.museum\0" +"icu\0" +"balsan-s\xc3\xbc""dtirol.it\0" +"nanbu.yamanashi.jp\0limited\0" +"wloclawek.pl\0" +"trentinos-tirol.it\0" +"nachikatsuura.wakayama.jp\0gwiddle.co.uk\0" +"is-a-caterer.com\0" +"loginto.me\0" +"kadoma.osaka.jp\0agric.za\0" +"ro.leg.br\0" +"mydatto.com\0" +"bz.it\0\xe5\x95\x86\xe5\x9f\x8e\0" +"kr\xc3\xa5""anghke.no\0dynv6.net\0" +"kiyokawa.kanagawa.jp\0" +"pagefrontapp.com\0" +"alfaromeo\0cloudcontrolapp.com\0" +"km.ua\0" +"adac\0pantheonsite.io\0" +"homedepot\0" +"qc.ca\0trolley.museum\0" +"tsushima.nagasaki.jp\0satx.museum\0" +"ifm\0" +"am.leg.br\0" +"izena.okinawa.jp\0pilots.museum\0" +"komono.mie.jp\0" +"shop.th\0" +"society.museum\0" +"tm.cy\0miki.hyogo.jp\0glug.org.uk\0" +"kembuchi.hokkaido.jp\0nakagawa.nagano.jp\0" +"goodyear\0" +"is-a-hard-worker.com\0" +"mx.na\0lib.or.us\0" +"minamiyamashiro.kyoto.jp\0aguni.okinawa.jp\0iron.museum\0" +"gokase.miyazaki.jp\0" +"kibichuo.okayama.jp\0" +"navy\0" +"higashikagura.hokkaido.jp\0" +"dyn-berlin.de\0" +"yasaka.nagano.jp\0" +"from-ar.com\0" +"s3-website.ap-northeast-2.amazonaws.com\0ddnsfree.com\0" +"slz.br\0hellas.museum\0" +"aure.no\0lib.az.us\0" +"tsuno.miyazaki.jp\0" +"niikappu.hokkaido.jp\0m\xc4\x81ori.nz\0" +"from-wv.com\0" +"jorpeland.no\0" +"shop.ro\0" +"tm.fr\0wzmiuw.gov.pl\0" +"git-repos.de\0" +"andoy.no\0buzz\0\xe5\x9c\xa8\xe7\xba\xbf\0" +"ecn.br\0" +"mimata.miyazaki.jp\0" +"githubusercontent.com\0" +"ma.gov.br\0" +"immo\0" +"vestnes.no\0style\0ddns.me\0" +"\xe5\xb9\xbf\xe4\xb8\x9c\0" +"dyndns-home.com\0" +"shop.pl\0" +"def.br\0" +"air.museum\0" +"quest\0" +"tm.hu\0\xe7\xa6\x8f\xe5\xb3\xb6.jp\0" +"g12.br\0achi.nagano.jp\0r\xc3\xa1isa.no\0myqnapcloud.com\0" +"cc.nj.us\0" +"louvre.museum\0\xe5\xa8\xb1\xe4\xb9\x90\0" +"newholland\0" +"sauda.no\0" +"shiki.saitama.jp\0ap.leg.br\0" +"cancerresearch\0" +"\xe5\xae\xae\xe5\xb4\x8e.jp\0" +"marche.it\0rec.nf\0" +"oshu.iwate.jp\0hannan.osaka.jp\0bearalv\xc3\xa1hki.no\0" +"\xe6\xbb\x8b\xe8\xb3\x80.jp\0" +"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0kuroishi.aomori.jp\0maori.nz\0" +"aogashima.tokyo.jp\0orkdal.no\0" +"mi.it\0luxury\0" +"misaki.osaka.jp\0" +"from-il.com\0" +"sand\xc3\xb8y.no\0" +"inc\0" +"ee.eu.org\0mypep.link\0" +"rotorcraft.aero\0north-kazakhstan.su\0" +"ing\0eu-west-3.elasticbeanstalk.com\0*.advisor.ws\0" +"fe.it\0bushey.museum\0blogsite.xyz\0enterprisecloud.nu\0" +"sites.static.land\0user.srcf.net\0" +"ink\0is-a-nascarfan.com\0" +"is-very-sweet.org\0" +"ohtawara.tochigi.jp\0tm.km\0\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" +"homeip.net\0" +"maebashi.gunma.jp\0" +"int\0" +"ritto.shiga.jp\0" +"m.bg\0" +"lebesby.no\0randaberg.no\0" +"ntr.br\0" +"nakasatsunai.hokkaido.jp\0" +"taketomi.okinawa.jp\0" +"3.bg\0gosen.niigata.jp\0" +"nankoku.kochi.jp\0" +"grp.lk\0" +"wakayama.jp\0" +"tm.mc\0hughes\0" +"nh.us\0" +"sn.cn\0yatomi.aichi.jp\0tm.mg\0" +"tips\0" +"zaporizhzhia.ua\0" +"copenhagen.museum\0palace.museum\0lpages.co\0" +"vaporcloud.io\0" +"qld.edu.au\0chiyoda.gunma.jp\0erimo.hokkaido.jp\0" +"santacruz.museum\0" +"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0toda.saitama.jp\0" +"cloudera.site\0se.leg.br\0" +"reggio-calabria.it\0" +"feedback\0" +"eu.int\0barsy.mobi\0" +"inashiki.ibaraki.jp\0" +"exchange.aero\0rec.ro\0philips\0" +"tm.no\0" +"kagawa.jp\0hino.tottori.jp\0\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"entertainment.aero\0ujitawara.kyoto.jp\0" +"gyeongnam.kr\0orkanger.no\0" +"shijonawate.osaka.jp\0applicationcloud.io\0" +"takashima.shiga.jp\0verm\xc3\xb6gensberater\0" +"franziskaner.museum\0" +"us.org\0" +"nsupdate.info\0" +"capital\0fuettertdasnetz.de\0" +"sanuki.kagawa.jp\0niigata.niigata.jp\0lib.ak.us\0" +"filegear-jp.me\0" +"jcb\0" +"steam.museum\0kaufen\0chimkent.su\0" +"moskenes.no\0" +"numazu.shizuoka.jp\0engineering\0" +"odate.akita.jp\0kazimierz-dolny.pl\0" +"kimitsu.chiba.jp\0" +"tm.pl\0" +"vevelstad.no\0" +"recipes\0" +"info\0funagata.yamagata.jp\0asnes.no\0jcp\0" +"judygarland.museum\0" +"ist\0" +"tours\0" +"loabat.no\0" +"uwajima.ehime.jp\0kpmg\0" +"usuki.oita.jp\0" +"flakstad.no\0" +"futaba.fukushima.jp\0beeldengeluid.museum\0" +"*.sch.uk\0" +"shirakawa.gifu.jp\0k12.vi.us\0" +"cc.wy.us\0forgot.her.name\0" +"rec.ve\0" +"monzaedellabrianza.it\0mifune.kumamoto.jp\0" +"vibovalentia.it\0soeda.fukuoka.jp\0itv\0" +"nokia\0" +"est-mon-blogueur.com\0" +"nakamichi.yamanashi.jp\0" +"uozu.toyama.jp\0" +"tm.ro\0" +"is-a-teacher.com\0" +"k12.ga.us\0" +"kota.aichi.jp\0" +"ome.tokyo.jp\0" +"tm.se\0" +"kanonji.kagawa.jp\0" +"messina.it\0" +"media.aero\0" +"s3-us-east-2.amazonaws.com\0mein-iserv.de\0" +"beppu.oita.jp\0ito.shizuoka.jp\0portal.museum\0vardo.no\0" +"barrel-of-knowledge.info\0" +"kashiwara.osaka.jp\0royrvik.no\0" +"ot.it\0pd.it\0" +"honjo.saitama.jp\0" +"asahi.mie.jp\0" +"tanabe.wakayama.jp\0rhcloud.com\0" +"\xe5\x85\xb5\xe5\xba\xab.jp\0spreadbetting\0" +"ribeirao.br\0" +"of.football\0" +"m\xc3\xa5s\xc3\xb8y.no\0mi.th\0" +"al.it\0ragusa.it\0nanporo.hokkaido.jp\0" +"\xc3\xb8rsta.no\0" +"numata.hokkaido.jp\0" +"jampa.br\0" +"matsuda.kanagawa.jp\0sandnes.no\0" +"santafe.museum\0" +"toyone.aichi.jp\0" +"mytuleap.com\0" +"nu.ca\0" +"mi.us\0" +"higashiyoshino.nara.jp\0jio\0linkyard-cloud.ch\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0" +"katowice.pl\0" +"hiratsuka.kanagawa.jp\0royken.no\0" +"\xe5\x8f\xb0\xe6\xb9\xbe\0" +"tara.saga.jp\0" +"termez.su\0" +"writesthisblog.com\0barsy.support\0" +"kasai.hyogo.jp\0*.compute.amazonaws.com\0" +"shichinohe.aomori.jp\0sande.more-og-romsdal.no\0" +"insure\0" +"ha.cn\0vgs.no\0" +"varese.it\0incheon.kr\0archaeological.museum\0kinghost.net\0" +"yokkaichi.mie.jp\0" +"nakagyo.kyoto.jp\0skjervoy.no\0fhapp.xyz\0" +"holt\xc3\xa5len.no\0krym.ua\0" +"woodside\0" +"mutsu.aomori.jp\0academy.museum\0farmequipment.museum\0" +"piedmont.it\0movistar\0" +"\xe5\x98\x89\xe9\x87\x8c\0ro.eu.org\0" +"ikata.ehime.jp\0" +"creditunion\0" +"realestate\0" +"lajolla.museum\0ann-arbor.mi.us\0" +"kppsp.gov.pl\0" +"chiba.jp\0jll\0" +"rauma.no\0" +"al.no\0tm.za\0" +"shimodate.ibaraki.jp\0\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0" +"enna.it\0" +"ichinomiya.aichi.jp\0" +"sango.nara.jp\0" +"iwanuma.miyagi.jp\0" +"jmp\0hashbang.sh\0" +"swinoujscie.pl\0" +"siljan.no\0" +"office\0" +"\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0jnj\0" +"suldal.no\0" +"starnberg.museum\0" +"s\xc3\xb8rum.no\0" +"engineer\0" +"sorocaba.br\0k12.nh.us\0" +"skedsmo.no\0" +"\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0" +"k12.in.us\0" +"arakawa.saitama.jp\0" +"nagano.nagano.jp\0" +"divtasvuodna.no\0" +"mex.com\0" +"ginowan.okinawa.jp\0tarnobrzeg.pl\0sochi.su\0" +"piacenza.it\0" +"ro.im\0" +"cologne\0shriram\0" +"vi.it\0sabae.fukui.jp\0g\xc3\xa1ivuotna.no\0" +"childrens.museum\0" +"fujiidera.osaka.jp\0jot\0cn.eu.org\0" +"kharkov.ua\0si.eu.org\0" +"taishin.fukushima.jp\0m.se\0" +"ro.it\0" +"\xd0\xb1\xd0\xb5\xd0\xbb\0joy\0" +"gorizia.it\0" +"9guacu.br\0" +"nu.it\0" +"goldpoint\0" +"crafts.museum\0" +"lillehammer.no\0" +"verran.no\0" +"manaus.br\0chat\0" +"industria.bo\0" +"gratangen.no\0lug.org.uk\0" +"her\xc3\xb8y.nordland.no\0" +"hembygdsforbund.museum\0ushuaia.museum\0" +"omaezaki.shizuoka.jp\0" +"epilepsy.museum\0asker.no\0" +"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0poznan.pl\0" +"blockbuster\0" +"osaka\0" +"dnsdojo.com\0" +"kl\xc3\xa6""bu.no\0" +"kyotamba.kyoto.jp\0" +"school.za\0homelinux.com\0kozow.com\0" +"midori.gunma.jp\0presse.km\0" +"nf.ca\0" +"is-uberleet.com\0" +"okegawa.saitama.jp\0" +"ichikawa.hyogo.jp\0" +"co.financial\0" +"laquila.it\0russia.museum\0" +"odessa.ua\0" +"jolster.no\0" +"yamato.kumamoto.jp\0" +"jl.cn\0" +"interactive.museum\0newport.museum\0sk.eu.org\0" +"al.us\0" +"kanan.osaka.jp\0" +"kazo.saitama.jp\0presse.ml\0" +"co.krd\0" +"ru.com\0" +"a.ssl.fastly.net\0" +"cesenaforli.it\0lib.ma.us\0myasustor.com\0" +"andebu.no\0" +"hemnes.no\0rade.no\0" +"siellak.no\0land\0" +"gmbh\0lancaster\0" +"thingdustdata.com\0" +"instantcloud.cn\0" +"county.museum\0aurskog-h\xc3\xb8land.no\0s3.dualstack.ap-south-1.amazonaws.com\0" +"hamburg\0" +"\xe7\xae\x87\xe4\xba\xba.hk\0" +"otaki.nagano.jp\0praxi\0*.cryptonomic.net\0boldlygoingnowhere.org\0" +"nagato.yamaguchi.jp\0ha.no\0" +"miyota.nagano.jp\0" +"hoylandet.no\0" +"savona.it\0cy.eu.org\0" +"kfh\0" +"kochi.jp\0miyoshi.hiroshima.jp\0" +"conf.au\0" +"kitagata.gifu.jp\0trysil.no\0" +"honai.ehime.jp\0" +"mg.gov.br\0vallee-d-aoste.it\0*.in.futurecms.at\0" +"s3.eu-central-1.amazonaws.com\0" +"nishimera.miyazaki.jp\0" +"hanawa.fukushima.jp\0s3-ca-central-1.amazonaws.com\0" +"kepno.pl\0" +"hisayama.fukuoka.jp\0" +"minamata.kumamoto.jp\0rep.kp\0neat-url.com\0" +"\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0" +"trentinsued-tirol.it\0" +"trentinsuedtirol.it\0volda.no\0" +"film.museum\0" +"vikna.no\0" +"aero\0friuli-ve-giulia.it\0" +"soka.saitama.jp\0" +"furniture\0" +"prato.it\0akashi.hyogo.jp\0" +"cz.eu.org\0" +"baseball\0ru.eu.org\0se.eu.org\0" +"k12.pa.us\0" +"cri.br\0" +"yachiyo.ibaraki.jp\0" +"rich\0myds.me\0" +"eid.no\0" +"pro.az\0sci.eg\0" +"frogn.no\0contact\0kia\0ddnss.de\0" +"norfolk.museum\0rehab\0" +"kounosu.saitama.jp\0" +"pro.br\0dubai\0" +"kawanehon.shizuoka.jp\0" +"kim\0" +"s\xc3\xbc""dtirol.it\0mj\xc3\xb8ndalen.no\0smart\0" +"macerata.it\0" +"dk.eu.org\0" +"chikushino.fukuoka.jp\0inatsuki.fukuoka.jp\0oceanographic.museum\0" +"servepics.com\0" +"certification.aero\0tsuruga.fukui.jp\0" +"d.gv.vc\0" +"map.fastly.net\0" +"pro.cy\0fr.it\0\xc3\xa1lt\xc3\xa1.no\0" +"sampa.br\0" +"dnepropetrovsk.ua\0" +"s3.eu-west-3.amazonaws.com\0" +"ch.it\0nesna.no\0gratis\0" +"nativeamerican.museum\0" +"clothing\0digital\0" +"pro.ec\0eidskog.no\0\xe1\x83\x92\xe1\x83\x94\0" +"nagara.chiba.jp\0ostrowiec.pl\0co.network\0ownip.net\0" +"ternopil.ua\0baidu\0" +"z.bg\0*.cns.joyent.com\0" +"kvalsund.no\0" +"vi.us\0" +"kawaguchi.saitama.jp\0" +"tomika.gifu.jp\0kred\0" +"trentino-sudtirol.it\0nantan.kyoto.jp\0b\xc3\xa1hccavuotna.no\0" +"toyono.osaka.jp\0" +"kotohira.kagawa.jp\0" +"carboniaiglesias.it\0fastly-terrarium.com\0" +"kanie.aichi.jp\0" +"entomology.museum\0rendalen.no\0" +"reggioemilia.it\0xerox\0" +"takamori.nagano.jp\0eng.pro\0" +"nanae.hokkaido.jp\0" +"lupin\0" +"isa.kagoshima.jp\0" +"boomla.net\0" +"itoman.okinawa.jp\0broadcast.museum\0" +"tranibarlettaandria.it\0berlin\0ca-central-1.elasticbeanstalk.com\0" +"de.eu.org\0" +"watari.miyagi.jp\0" +"uber.space\0" +"genova.it\0redumbrella\0\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" +"ninohe.iwate.jp\0govt.nz\0" +"yanagawa.fukuoka.jp\0" +"localhost.daplie.me\0" +"civilization.museum\0" +"campidano-medio.it\0" +"americana.museum\0scjohnson\0technology\0" +"chikuzen.fukuoka.jp\0" +"pro.ht\0frankfurt.museum\0" +"\xe5\x85\xab\xe5\x8d\xa6\0" +"kusatsu.gunma.jp\0" +"mypets.ws\0" +"softbank\0" +"osaki.miyagi.jp\0" +"kani.gifu.jp\0" +"oshino.yamanashi.jp\0varggat.no\0" +"gsm.pl\0" +"gos.pk\0" +"chungbuk.kr\0" +"matsuyama.ehime.jp\0kpn\0" +"salzburg.museum\0" +"froya.no\0" +"eun.eg\0exnet.su\0" +"bir.ru\0" +"r\xc3\xb8mskog.no\0pomorskie.pl\0" +"\xeb\x8b\xb7\xec\xbb\xb4\0" +"fastlylb.net\0" +"championship.aero\0klepp.no\0" +"ina.ibaraki.jp\0takamatsu.kagawa.jp\0" +"wlocl.pl\0" +"v\xc3\xa5gs\xc3\xb8y.no\0" +"chambagri.fr\0" +"pharmaciens.km\0" +"krd\0lat\0" +"shinichi.hiroshima.jp\0cc.nh.us\0law\0" +"wanouchi.gifu.jp\0hanamaki.iwate.jp\0s3-website-us-west-2.amazonaws.com\0" +"feira.br\0siteleaf.net\0" +"moss.no\0" +"hotmail\0" +"gleeze.com\0" +"ooguy.com\0" +"bsb.br\0hita.oita.jp\0in-vpn.de\0" +"toyo.kochi.jp\0" +"sk\xc3\xa1nit.no\0apps.fbsbx.com\0" +"gallery\0" +"toya.hokkaido.jp\0" +"traeumtgerade.de\0tuva.su\0" +"drammen.no\0" +"im.it\0" +"omihachiman.shiga.jp\0for-some.biz\0" +"uk.com\0" +"pro.na\0" +"fc.it\0" +"nasu.tochigi.jp\0pro.mv\0" +"pb.ao\0bi.it\0wodzislaw.pl\0loginline.services\0ddnsking.com\0" +"vald-aosta.it\0cri.nz\0" +"or.at\0toon.ehime.jp\0futuremailing.at\0" +"vall\xc3\xa9""eaoste.it\0arao.kumamoto.jp\0lds\0map.fastlylb.net\0" +"k.bg\0or.bi\0" +"kasahara.gifu.jp\0cartoonart.museum\0" +"eisenbahn.museum\0" +"bodo.no\0" +"ed.ao\0""1.bg\0trentinosudtirol.it\0" +"hosting-cluster.nl\0" +"organic\0" +"yandex\0" +"gs.tm.no\0" +"pro.om\0" +"kobierzyce.pl\0ca.eu.org\0" +"shunan.yamaguchi.jp\0es.kr\0hasura-app.io\0" +"or.ci\0" +"kasama.ibaraki.jp\0" +"getmyip.com\0" +"plumbing\0" +"hidaka.kochi.jp\0br\xc3\xb8nn\xc3\xb8y.no\0\xec\x82\xbc\xec\x84\xb1\0" +"amagasaki.hyogo.jp\0" +"or.cr\0ce.leg.br\0" +"lib.va.us\0mydrobo.com\0" +"skanland.no\0" +"misato.akita.jp\0" +"nombre.bo\0" +"ed.ci\0hn.cn\0" +"halden.no\0pro.pr\0" +"sardegna.it\0oshima.yamaguchi.jp\0myshopblocks.com\0" +"conf.se\0" +"sor-aurdal.no\0" +"tosa.kochi.jp\0" +"ed.cr\0" +"dr\xc3\xb8""bak.no\0" +"\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0" +"lib.hi.us\0" +"webhop.info\0" +"barsy.info\0" +"lib.dc.us\0\xe5\x8f\xb0\xe7\x81\xa3\0" +"andasuolo.no\0" +"vega.no\0homelinux.net\0" +"lomza.pl\0" +"nakama.fukuoka.jp\0langev\xc3\xa5g.no\0" +"trainer.aero\0" +"trentinos\xc3\xbc""dtirol.it\0\xe5\x85\xac\xe5\x8f\xb8\0wpcomstaging.com\0" +"bible.museum\0" +"environmentalconservation.museum\0" +"bargains\0" +"\xe6\xbe\xb3\xe9\x96\x80\0" +"presse.ci\0fukuyama.hiroshima.jp\0muos\xc3\xa1t.no\0" +"higashimurayama.tokyo.jp\0hokksund.no\0" +"j\xc3\xb8lster.no\0" +"cloudns.eu\0" +"seaport.museum\0\xc3\xa5krehamn.no\0*.compute-1.amazonaws.com\0" +"western.museum\0" +"jor.br\0k12.ok.us\0" +"sunagawa.hokkaido.jp\0pro.tt\0" +"mod.gi\0rankoshi.hokkaido.jp\0" +"cc.mi.us\0familyds.com\0" +"hobby-site.com\0" +"or.id\0" +"obihiro.hokkaido.jp\0minato.osaka.jp\0llc\0" +"cd.eu.org\0" +"vv.it\0" +"\xe7\xbe\xa4\xe9\xa6\xac.jp\0" +"obanazawa.yamagata.jp\0" +"z.se\0filegear-gb.me\0in-dsl.org\0" +"namerikawa.toyama.jp\0" +"llp\0verisign\0" +"or.it\0" +"gushikami.okinawa.jp\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0pro.vn\0" +"grimstad.no\0" +"educational.museum\0" +"kaneyama.fukushima.jp\0" +"chikuho.fukuoka.jp\0lolipop.io\0" +"yoshimi.saitama.jp\0sakata.yamagata.jp\0radio\0from-tn.com\0" +"or.jp\0" +"urn.arpa\0house.museum\0" +"takazaki.miyazaki.jp\0or.ke\0" +"cloudns.in\0" +"cruises\0" +"trentinoa-adige.it\0" +"bpl.biz\0" +"ed.jp\0minano.saitama.jp\0" +"or.kr\0" +"za.bz\0" +"\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"ns.ca\0" +"cloudns.cc\0" +"fukaya.saitama.jp\0" +"sakurai.nara.jp\0lol\0" +"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"nagaokakyo.kyoto.jp\0" +"lifeinsurance\0" +"nishiizu.shizuoka.jp\0" +"s3.dualstack.ap-northeast-1.amazonaws.com\0" +"nakano.tokyo.jp\0" +"\xc3\xa5rdal.no\0" +"go.ci\0kamo.kyoto.jp\0lib.tn.us\0basketball\0" +"americanfamily\0dance\0" +"lpl\0dnsalias.net\0" +"kashima.ibaraki.jp\0\xe6\xbe\xb3\xe9\x97\xa8\0avianca\0" +"namie.fukushima.jp\0or.na\0" +"kwpsp.gov.pl\0\xe5\x85\xac\xe7\x9b\x8a\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" +"green\0" +"go.cr\0or.mu\0" +"higashikawa.hokkaido.jp\0" +"habmer.no\0" +"psse.gov.pl\0" +"conf.lv\0lavangen.no\0" +"man\0" +"press.cy\0" +"quebec.museum\0map\0" +"esp.br\0roma.museum\0mba\0" +"ikeda.nagano.jp\0stryn.no\0" +"military.museum\0" +"levanger.no\0" +"\xe7\xb5\x84\xe7\xb9\x94.tw\0accesscam.org\0" +"yachts\0" +"historichouses.museum\0" +"plurinacional.bo\0beskidy.pl\0" +"valer.ostfold.no\0" +"dnsup.net\0" +"pfizer\0" +"meiwa.mie.jp\0" +"association.museum\0" +"kunneppu.hokkaido.jp\0citi\0" +"nakaniikawa.toyama.jp\0" +"skanit.no\0boehringer\0georgia.su\0" +"nisshin.aichi.jp\0" +"is-a-patsfan.org\0" +"asahi.yamagata.jp\0" +"aizubange.fukushima.jp\0project.museum\0" +"columbus.museum\0tana.no\0" +"mallorca.museum\0amfam\0" +"ltd\0" +"or.pw\0" +"yashiro.hyogo.jp\0zoology.museum\0kongsvinger.no\0" +"city\0" +"is.gov.pl\0democrat\0" +"misato.miyagi.jp\0market\0" +"yonago.tottori.jp\0" +"trentinostirol.it\0" +"gitlab.io\0" +"\xed\x95\x9c\xea\xb5\xad\0hermes\0" +"ed.pw\0med\0issmarterthanyou.com\0" +"salvador.br\0" +"miyashiro.saitama.jp\0hokuto.yamanashi.jp\0gliwice.pl\0" +"nysa.pl\0men\0" +"kanazawa.ishikawa.jp\0" +"tsukiyono.gunma.jp\0" +"utazu.kagawa.jp\0" +"sos.pl\0" +"bahn.museum\0" +"go.id\0k.se\0hospital\0" +"rm.it\0" +"assabu.hokkaido.jp\0kakinoki.shimane.jp\0" +"cc.al.us\0audible\0" +"rebun.hokkaido.jp\0" +"modern.museum\0research.museum\0" +"nic.in\0crimea.ua\0" +"virgin\0" +"zp.ua\0" +"seki.gifu.jp\0nowruz\0" +"go.it\0" +"or.th\0" +"netbank\0" +"aizumisato.fukushima.jp\0" +"sigdal.no\0" +"hanno.saitama.jp\0" +"t\xc3\xb8nsberg.no\0everbank\0" +"nishiwaki.hyogo.jp\0" +"go.jp\0sko.gov.pl\0fishing\0" +"act.au\0suzuki\0" +"labor.museum\0" +"or.ug\0markets\0" +"go.ke\0" +"andria-trani-barletta.it\0hirakata.osaka.jp\0" +"or.tz\0" +"bern.museum\0" +"photography.museum\0" +"shoes\0" +"kiwa.mie.jp\0ryokami.saitama.jp\0" +"mil.ac\0trento.it\0moareke.no\0" +"mil.ae\0or.us\0" +"vefsn.no\0" +"go.kr\0*.telebit.xyz\0" +"tires\0diskstation.org\0" +"lom.it\0tomigusuku.okinawa.jp\0news\0" +"nirasaki.yamanashi.jp\0" +"mil.al\0\xd2\x9b\xd0\xb0\xd0\xb7\0" +"wuoz.gov.pl\0" +"taira.toyama.jp\0" +"mil\0s3-external-1.amazonaws.com\0" +"mil.ba\0s3-website.ca-central-1.amazonaws.com\0" +"mil.ar\0" +"hdfcbank\0" +"modalen.no\0" +"noheji.aomori.jp\0isleofman.museum\0" +"stange.no\0exposed\0mit\0" +"dolls.museum\0" +"mil.az\0lombardy.it\0mutsuzawa.chiba.jp\0" +"next\0" +"cloudns.us\0" +"hyogo.jp\0" +"mil.bo\0" +"loppa.no\0" +"mil.br\0ichinomiya.chiba.jp\0" +"hamura.tokyo.jp\0malbork.pl\0" +"frei.no\0krasnodar.su\0mangyshlak.su\0go.leg.br\0" +"usui.fukuoka.jp\0" +"baseball.museum\0" +"mil.by\0reise\0" +"grocery\0" +"toyako.hokkaido.jp\0" +"mil.cl\0" +"mil.cn\0" +"mil.co\0" +"trentinosued-tirol.it\0ainan.ehime.jp\0iizuna.nagano.jp\0wsa.gov.pl\0" +"jeju.kr\0georgia.museum\0" +"mlb\0" +"cultural.museum\0karacol.su\0" +"dnsking.ch\0" +"higashitsuno.kochi.jp\0" +"tj\xc3\xb8me.no\0" +"mil.do\0" +"viterbo.it\0" +"obninsk.su\0" +"mil.ec\0drayddns.com\0" +"mma\0s3.amazonaws.com\0" +"mil.eg\0kikuchi.kumamoto.jp\0mihama.wakayama.jp\0skole.museum\0kirkenes.no\0mls\0" +"kristiansand.no\0\xe5\xa4\xa7\xe6\x8b\xbf\0from-nh.com\0" +"\xc3\xa5mot.no\0" +"warszawa.pl\0servehalflife.com\0" +"sosnowiec.pl\0" +"obuse.nagano.jp\0vote\0cloudycluster.net\0" +"kvinnherad.no\0" +"keymachine.de\0" +"naruto.tokushima.jp\0" +"lom.no\0" +"graphics\0" +"cc.vi.us\0" +"barcelona\0" +"cloudns.club\0" +"voto\0" +"go.pw\0" +"brasilia.me\0" +"kakogawa.hyogo.jp\0podzone.net\0" +"takaoka.toyama.jp\0skjak.no\0lacaixa\0" +"opencraft.hosting\0" +"mil.ge\0sue.fukuoka.jp\0wellbeingzone.co.uk\0" +"trentino.it\0jessheim.no\0leczna.pl\0" +"mil.gh\0matera.it\0gold\0" +"moe\0" +"dlugoleka.pl\0golf\0doesntexist.org\0" +"iz.hr\0toyosato.shiga.jp\0lutsk.ua\0pics\0" +"contractors\0moi\0ravendb.run\0" +"is-a-democrat.com\0" +"nord-fron.no\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" +"mom\0now.sh\0" +"servegame.com\0" +"mil.gt\0matsue.shimane.jp\0rybnik.pl\0" +"byen.site\0" +"\xc3\xb8ygarden.no\0" +"mt.it\0" +"mov\0" +"col.ng\0" +"mil.hn\0nerima.tokyo.jp\0" +"mil.id\0shiraoi.hokkaido.jp\0" +"nab\0kicks-ass.net\0" +"higashihiroshima.hiroshima.jp\0" +"go.th\0nic.tj\0mydatto.net\0" +"mil.in\0heritage.museum\0" +"gob.ar\0go.tj\0dyndns1.de\0" +"dynns.com\0" +"x.bg\0mil.iq\0" +"starachowice.pl\0" +"nba\0game-host.org\0" +"resindevice.io\0" +"goog\0weber\0" +"gob.bo\0go.ug\0" +"nhs.uk\0" +"mil.jo\0go.tz\0" +"gotemba.shizuoka.jp\0" +"rost.no\0tirol\0" +"abu.yamaguchi.jp\0" +"!city.yokohama.jp\0komoro.nagano.jp\0" +"stathelle.no\0java\0" +"mil.kg\0" +"shinjo.nara.jp\0express\0msd\0" +"gob.cl\0" +"santamaria.br\0" +"mil.km\0de.us\0" +"fst.br\0" +"wassamu.hokkaido.jp\0kamikitayama.nara.jp\0" +"\xe8\xb0\xb7\xe6\xad\x8c\0" +"mil.kr\0on-web.fr\0" +"foz.br\0cahcesuolo.no\0" +"fujikawaguchiko.yamanashi.jp\0" +"dd-dns.de\0" +"ch.eu.org\0" +"mil.kz\0" +"greta.fr\0" +"gob.do\0oygarden.no\0" +"ulm.museum\0press.se\0" +"gob.ec\0yorii.saitama.jp\0square7.de\0" +"s\xc3\xb8r-odal.no\0mtn\0" +"viking.museum\0" +"friulivenezia-giulia.it\0taka.hyogo.jp\0browsersafetymark.io\0" +"homelinux.org\0" +"mil.lv\0mtr\0" +"far.br\0mil.mg\0state.museum\0jondal.no\0nec\0" +"nerdpol.ovh\0" +"\xe7\xb5\x84\xe7\xb9\x94.hk\0hitachi.ibaraki.jp\0finearts.museum\0nctu.me\0" +"bibai.hokkaido.jp\0irish\0" +"gob.es\0shirahama.wakayama.jp\0biev\xc3\xa1t.no\0" +"atsuma.hokkaido.jp\0cloudns.pw\0" +"mil.mv\0" +"mil.ng\0" +"aya.miyazaki.jp\0net\0" +"mil.my\0mil.ni\0" +"coloradoplateau.museum\0mil.mz\0" +"new\0does-it.net\0" +"hachinohe.aomori.jp\0mil.no\0church\0" +"nfl\0" +"scientist.aero\0" +"countryestate.museum\0" +"nic.za\0" +"biei.hokkaido.jp\0" +"cn-north-1.eb.amazonaws.com.cn\0" +"floro.no\0" +"oizumi.gunma.jp\0yamanouchi.nagano.jp\0health.museum\0net.eu.org\0" +"mil.nz\0" +"sera.hiroshima.jp\0" +"a\xc3\xa9roport.ci\0shiroishi.miyagi.jp\0mango\0from-ut.com\0" +"vads\xc3\xb8.no\0" +"urayasu.chiba.jp\0" +"isen.kagoshima.jp\0" +"gob.gt\0fuchu.toyama.jp\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0s3.ap-south-1.amazonaws.com\0" +"barueri.br\0murayama.yamagata.jp\0dynamisches-dns.de\0" +"intelligence.museum\0ngo\0square7.ch\0nh-serv.co.uk\0" +"hirado.nagasaki.jp\0kikugawa.shizuoka.jp\0" +"mil.pe\0" +"mil.ph\0" +"gob.hn\0" +"skjerv\xc3\xb8y.no\0mil.pl\0" +"alto-adige.it\0shiogama.miyagi.jp\0in-dsl.net\0" +"aizumi.tokushima.jp\0" +"nhk\0is-very-good.org\0" +"halsa.no\0yombo.me\0" +"campobasso.it\0mil.qa\0lenug.su\0" +"zakopane.pl\0" +"yurihonjo.akita.jp\0tsukui.kanagawa.jp\0" +"ryukyu\0" +"oishida.yamagata.jp\0" +"skien.no\0" +"mil.py\0from-ia.com\0" +"numata.gunma.jp\0" +"po.it\0grue.no\0" +"vegarshei.no\0" +"ping\0potager.org\0" +"onagawa.miyagi.jp\0sweetpepper.org\0" +"lu.it\0me.it\0" +"knightpoint.systems\0" +"haebaru.okinawa.jp\0pink\0*.webhare.dev\0" +"carrd.co\0" +"\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" +"press.ma\0" +"knx-server.net\0" +"chtr.k12.ma.us\0" +"bg.it\0" +"js.org\0" +"me.ke\0" +"tateyama.toyama.jp\0" +"mil.ru\0" +"frosinone.it\0mil.rw\0" +"mil.sh\0" +"trentin-sudtirol.it\0" +"i.bg\0" +"doctor\0" +"tx.us\0" +"namsskogan.no\0" +"systems\0" +"ath.cx\0" +"mil.st\0" +"chikugo.fukuoka.jp\0" +"mt.us\0nd.us\0cloudaccess.host\0" +"at.eu.org\0" +"mil.sy\0" +"tempioolbia.it\0mil.tj\0\xd8\xb9\xd8\xb1\xd8\xa8\0" +"kaas.gg\0cust.testing.thingdust.io\0" +"basel.museum\0lodingen.no\0mil.tm\0" +"brindisi.it\0ws.na\0mil.to\0" +"aigo\0" +"mil.tr\0" +"townnews-staging.com\0" +"kitagata.saga.jp\0" +"mil.tw\0" +"hl.cn\0rishiri.hokkaido.jp\0" +"aki.kochi.jp\0mil.tz\0" +"*.on-rancher.cloud\0" +"noto.ishikawa.jp\0asahi.nagano.jp\0kumagaya.saitama.jp\0" +"uki.kumamoto.jp\0lund.no\0" +"muni.il\0" +"ah.cn\0ris\xc3\xb8r.no\0mil.vc\0frogans\0" +"gob.mx\0mil.ve\0" +"nishitosa.kochi.jp\0gob.ni\0brand.se\0" +"oji.nara.jp\0" +"uryu.hokkaido.jp\0" +"coop.ht\0r\xc3\xb8ros.no\0mil.uy\0" +"stj\xc3\xb8rdal.no\0" +"lib.de.us\0" +"galsa.no\0" +"slg.br\0" +"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" +"lego\0" +"sayo.hyogo.jp\0for-better.biz\0" +"katori.chiba.jp\0" +"trentin-s\xc3\xbc""dtirol.it\0" +"skierva.no\0hosting\0" +"stalowa-wola.pl\0" +"lel.br\0settsu.osaka.jp\0anthro.museum\0" +"tsushima.aichi.jp\0gob.pa\0" +"ltd.cy\0" +"r\xc3\xa1hkker\xc3\xa1vju.no\0gob.pe\0" +"stargard.pl\0" +"coop.br\0" +"gob.pk\0\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" +"kumamoto.kumamoto.jp\0edunet.tn\0" +"satte.saitama.jp\0now\0" +"ip6.arpa\0takahama.fukui.jp\0" +"os.hedmark.no\0" +"historisches.museum\0" +"kanra.gunma.jp\0ownprovider.com\0" +"zhitomir.ua\0press\0fantasyleague.cc\0" +"rocher\0" +"schweiz.museum\0mil.za\0togliatti.su\0" +"org.ac\0" +"nodebalancer.linode.com\0" +"org.ae\0nishinomiya.hyogo.jp\0" +"org.af\0nra\0cloudns.info\0" +"org.ag\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0" +"gujo.gifu.jp\0" +"org.ai\0teshikaga.hokkaido.jp\0" +"hamar.no\0sells-for-less.com\0" +"org.al\0vt.it\0" +"org.am\0barefoot\0" +"mil.zm\0obi\0" +"brescia.it\0" +"x.se\0" +"org.ba\0ltd.gi\0geelvinck.museum\0" +"org.ar\0org.bb\0name.hr\0bale.museum\0" +"org.au\0togane.chiba.jp\0" +"london\0" +"org.bh\0mil.zw\0" +"org.bi\0matsusaka.mie.jp\0" +"org.az\0snasa.no\0vestre-toten.no\0" +"nrw\0" +"org.bm\0me.so\0" +"org.bn\0mitake.gifu.jp\0" +"org.bo\0seiyo.ehime.jp\0minamiashigara.kanagawa.jp\0" +"msk.ru\0" +"shangrila\0" +"org.br\0" +"org.bs\0tadaoka.osaka.jp\0lighting\0ltd.hk\0" +"org.bt\0name.et\0gob.sv\0" +"catholic\0" +"org.bw\0yakumo.shimane.jp\0" +"yusuhara.kochi.jp\0" +"org.ci\0" +"org.bz\0culture.museum\0" +"chonan.chiba.jp\0" +"ouchi.saga.jp\0" +"org.cn\0" +"org.co\0mihara.hiroshima.jp\0" +"philadelphiaarea.museum\0msk.su\0" +"fhv.se\0shouji\0" +"dnsalias.org\0" +"org.cu\0divttasvuotna.no\0" +"org.cw\0" +"me.tz\0" +"org.cy\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0me.uk\0ntt\0" +"alsace\0" +"org.dm\0" +"org.do\0" +"ostroleka.pl\0" +"otsu.shiga.jp\0me.us\0" +"org.ec\0gob.ve\0" +"ozu.ehime.jp\0maison\0ybo.party\0" +"org.ee\0" +"california.museum\0" +"org.eg\0tuxfamily.org\0" +"name.cy\0publishproxy.com\0" +"org.dz\0" +"off\0" +"zgorzelec.pl\0" +"kashihara.nara.jp\0" +"starostwo.gov.pl\0" +"svalbard.no\0" +"org.es\0s3-us-west-2.amazonaws.com\0leadpages.co\0" +"org.et\0grosseto.it\0" +"cosenza.it\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" +"name.eg\0ushiku.ibaraki.jp\0" +"kozaki.chiba.jp\0lib.mt.us\0lib.nd.us\0" +"i.ng\0" +"biratori.hokkaido.jp\0kolobrzeg.pl\0" +"egyptian.museum\0lib.in.us\0" +"s3.dualstack.ap-southeast-2.amazonaws.com\0" +"onomichi.hiroshima.jp\0" +"dr.na\0" +"tahara.aichi.jp\0ltd.lk\0wang\0" +"org.ge\0" +"org.gg\0williamsburg.museum\0piaget\0" +"org.gh\0is-a-guru.com\0" +"org.gi\0" +"name.az\0" +"hl.no\0" +"org.gl\0berkeley.museum\0homeftp.org\0" +"org.gn\0" +"org.gp\0" +"trentinsud-tirol.it\0minobu.yamanashi.jp\0equipment\0" +"org.gr\0" +"org.gt\0szkola.pl\0" +"org.gu\0ah.no\0" +"takino.hyogo.jp\0" +"nyc\0" +"org.gy\0" +"org.hk\0" +"takahashi.okayama.jp\0i.ph\0*.platformsh.site\0" +"org.hn\0" +"fla.no\0ltd.ng\0" +"valleedaoste.it\0" +"mizumaki.fukuoka.jp\0ogaki.gifu.jp\0\xc3\xa5lesund.no\0*.dapps.earth\0" +"org.ht\0" +"org.hu\0tagajo.miyagi.jp\0science\0" +"hakui.ishikawa.jp\0" +"yaese.okinawa.jp\0lincoln.museum\0" +"tochigi.jp\0ask\xc3\xb8y.no\0" +"sandcats.io\0" +"k12.tx.us\0" +"org.il\0" +"org.im\0" +"org.in\0pointto.us\0" +"org.iq\0busan.kr\0" +"org.ir\0podzone.org\0" +"pa.gov.br\0org.is\0barsy.net\0" +"org.je\0\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0" +"kawamata.fukushima.jp\0" +"cc.or.us\0" +"n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"kita.tokyo.jp\0" +"higashikurume.tokyo.jp\0" +"space.museum\0bloomberg\0" +"flynnhub.com\0" +"org.jo\0exhibition.museum\0fusa.no\0" +"ftpaccess.cc\0" +"botanicalgarden.museum\0" +"shingu.hyogo.jp\0eu-central-1.elasticbeanstalk.com\0app.lmpm.com\0" +"ve.it\0" +"doshi.yamanashi.jp\0antiques.museum\0" +"org.kg\0" +"org.ki\0i.se\0" +"kimobetsu.hokkaido.jp\0" +"org.km\0" +"org.kn\0" +"ohkura.yamagata.jp\0us-west-2.elasticbeanstalk.com\0" +"org.kp\0target\0" +"org.la\0notteroy.no\0" +"org.lb\0" +"pb.gov.br\0org.lc\0sakura\0" +"commbank\0" +"kisofukushima.nagano.jp\0org.kw\0hair\0" +"org.ky\0" +"hamada.shimane.jp\0org.kz\0kicks-ass.org\0" +"org.lk\0" +"tv.bb\0gdansk.pl\0" +"sec.ps\0" +"cs.it\0" +"sn\xc3\xa5""ase.no\0" +"org.ma\0" +"org.lr\0brussels\0" +"org.ls\0westfalen.museum\0sund.no\0" +"org.me\0dyndns-pics.com\0" +"org.lv\0" +"tone.ibaraki.jp\0org.mg\0" +"agano.niigata.jp\0kv.ua\0" +"tv.bo\0nishi.osaka.jp\0moroyama.saitama.jp\0org.ly\0odesa.ua\0au.eu.org\0be.eu.org\0" +"one\0\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0" +"org.mk\0vt.us\0" +"tv.br\0org.ml\0ong\0" +"\xe4\xba\xac\xe9\x83\xbd.jp\0castle.museum\0computerhistory.museum\0" +"org.mn\0" +"org.mo\0bielawa.pl\0boutique\0servesarcasm.com\0" +"kumano.mie.jp\0shacknet.nu\0" +"matsuno.ehime.jp\0org.na\0onl\0" +"tsubetsu.hokkaido.jp\0kg.kr\0" +"org.ms\0dr.tr\0" +"yukuhashi.fukuoka.jp\0org.mt\0settlement.museum\0" +"nb.ca\0org.mu\0is-an-actress.com\0" +"goto.nagasaki.jp\0org.mv\0" +"kagoshima.jp\0org.mw\0org.ng\0" +"org.mx\0heroy.nordland.no\0lancome\0soccer\0" +"org.my\0org.ni\0" +"org.mz\0" +"itau\0" +"valleeaoste.it\0iveland.no\0" +"rmit\0" +"chicago.museum\0" +"pvt.ge\0" +"hongo.hiroshima.jp\0org.nr\0" +"ooo\0" +"hof.no\0" +"okuma.fukushima.jp\0farmers.museum\0" +"stuttgart.museum\0" +"ltd.ua\0" +"org.nz\0pramerica\0" +"rel.ht\0" +"org.om\0coop.rw\0virtueeldomein.nl\0" +"academia.bo\0\xc3\xa5l.no\0" +"kamogawa.chiba.jp\0b.ssl.fastly.net\0" +"org.pa\0lib.me.us\0" +"shikatsu.aichi.jp\0nordre-land.no\0ltd.uk\0uconnect\0" +"org.pe\0" +"bari.it\0org.pf\0" +"fujimi.saitama.jp\0org.ph\0" +"q-a.eu.org\0" +"org.pk\0glade\0" +"minamiechizen.fukui.jp\0org.pl\0" +"tabayama.yamanashi.jp\0org.pn\0xihuan\0" +"lib.as.us\0" +"theater.museum\0narvik.no\0org.qa\0" +"org.pr\0" +"kurobe.toyama.jp\0juedisches.museum\0gamvik.no\0org.ps\0\xe5\x95\x86\xe5\xba\x97\0cdn77-ssl.net\0" +"kagamino.okayama.jp\0org.pt\0" +"anan.tokushima.jp\0" +"alt.za\0" +"yawata.kyoto.jp\0" +"org.py\0bg.eu.org\0" +"maringa.br\0coop.tt\0apartments\0vapor.cloud\0" +"aoste.it\0science.museum\0org\0" +"bukhara.su\0" +"pay\0" +"taishi.osaka.jp\0" +"wielun.pl\0health\0" +"basilicata.it\0higashiizumo.shimane.jp\0narusawa.yamanashi.jp\0" +"lebtimnetz.de\0" +"naie.hokkaido.jp\0" +"coop.mv\0" +"coop.mw\0" +"org.ro\0k12.wa.us\0" +"oslo.no\0" +"medicina.bo\0tysv\xc3\xa6r.no\0org.sa\0frontier\0" +"org.sb\0" +"org.rs\0org.sc\0" +"itayanagi.aomori.jp\0wakasa.tottori.jp\0org.sd\0" +"org.se\0club\0org.ru\0" +"org.rw\0org.sg\0bloxcms.com\0" +"org.sh\0" +"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0" +"org.sl\0tkmaxx\0" +"eu.org\0barsy.club\0" +"org.sn\0name.vn\0" +"org.so\0" +"altoadige.it\0dyr\xc3\xb8y.no\0" +"corporation.museum\0org.ss\0" +"oyabe.toyama.jp\0org.st\0dnshome.de\0" +"shizuoka.jp\0" +"takinoue.hokkaido.jp\0org.sv\0googleapis.com\0" +"tv.im\0nico\0" +"on-the-web.tv\0" +"org.sy\0ott\0" +"org.sz\0org.tj\0stcgroup\0" +"amica\0" +"naoshima.kagawa.jp\0org.tm\0" +"tv.it\0org.tn\0ap-northeast-1.elasticbeanstalk.com\0" +"gaivuotna.no\0org.to\0" +"poa.br\0cc.de.us\0" +"org.ua\0" +"org.tr\0" +"emergency.aero\0" +"morena.br\0funahashi.toyama.jp\0org.tt\0" +"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"oristano.it\0" +"eigersund.no\0org.tw\0org.ug\0" +"aichi.jp\0cuisinella\0pet\0" +"name.tj\0" +"shonai.fukuoka.jp\0org.uk\0blogsite.org\0" +"lease\0ovh\0" +"gangaviika.no\0coop.py\0" +"foundation.museum\0tromso.no\0telebit.io\0" +"semboku.akita.jp\0tree.museum\0" +"name.tr\0" +"org.vc\0" +"name.tt\0ddnsgeek.com\0" +"hachirogata.akita.jp\0tcm.museum\0org.ve\0" +"kamaishi.iwate.jp\0" +"bt.it\0" +"karaganda.su\0" +"shikaoi.hokkaido.jp\0org.uy\0org.vi\0town\0" +"okayama.okayama.jp\0org.uz\0" +"iruma.saitama.jp\0" +"org.vn\0barsy.pro\0" +"v.bg\0" +"codespot.com\0git-pages.rit.edu\0" +"gjerstad.no\0rel.pl\0" +"kiyama.saga.jp\0org.vu\0" +"chuo.chiba.jp\0phd\0hr.eu.org\0" +"asuke.aichi.jp\0communication.museum\0" +"nagi.okayama.jp\0athleta\0dnsiskinky.com\0" +"coop.km\0org.ws\0" +"podlasie.pl\0of.london\0" +"club.aero\0uto.kumamoto.jp\0yoshida.saitama.jp\0" +"otobe.hokkaido.jp\0" +"shima.mie.jp\0haus\0" +"pid\0" +"ichihara.chiba.jp\0tv.na\0lib.vt.us\0" +"leirvik.no\0" +"notodden.no\0dc.us\0" +"toys\0" +"kouyama.kagoshima.jp\0" +"vik.no\0akdn\0is-a-designer.com\0" +"barsy.pub\0" +"kitashiobara.fukushima.jp\0" +"pin\0search\0" +"aeroclub.aero\0" +"horokanai.hokkaido.jp\0" +"port.fr\0" +"miyawaka.fukuoka.jp\0yatsushiro.kumamoto.jp\0yamatokoriyama.nara.jp\0koganei.tokyo.jp\0" +"lgbt\0" +"sakuragawa.ibaraki.jp\0usercontent.jp\0" +"lib.il.us\0" +"name.qa\0org.za\0" +"luster.no\0name.pr\0" +"pi.gov.br\0mr.no\0" +"chernigov.ua\0" +"sells-it.net\0" +"from-in.com\0" +"fujisato.akita.jp\0" +"ichinohe.iwate.jp\0" +"org.zm\0" +"davvesiida.no\0" +"horten.no\0kviteseid.no\0" +"broker.aero\0saitama.jp\0kitanakagusuku.okinawa.jp\0name.na\0\xeb\x8b\xb7\xeb\x84\xb7\0" +"troandin.no\0" +"bialowieza.pl\0" +"name.mv\0" +"name.ng\0org.zw\0" +"koka.shiga.jp\0" +"name.my\0" +"tagawa.fukuoka.jp\0" +"nike\0" +"yamanashi.jp\0" +"serveftp.net\0" +"riopreto.br\0" +"tochigi.tochigi.jp\0oregontrail.museum\0" +"intl.tn\0" +"walbrzych.pl\0" +"noshiro.akita.jp\0" +"prvcy.page\0" +"reklam.hu\0cc.tx.us\0" +"play\0" +"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"abbott\0pnc\0" +"nishigo.fukushima.jp\0" +"cc.mt.us\0cc.nd.us\0" +"tosashimizu.kochi.jp\0tv.sd\0" +"saigawa.fukuoka.jp\0detroit.museum\0" +"workisboring.com\0" +"anjo.aichi.jp\0" +"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0" +"sauherad.no\0" +"lindesnes.no\0" +"dynalias.com\0""4lima.de\0" +"shimamaki.hokkaido.jp\0" +"ibigawa.gifu.jp\0" +"aisho.shiga.jp\0name.mk\0" +"botanical.museum\0" +"garden.museum\0" +"nes.akershus.no\0" +"mc.it\0" +"homebuilt.aero\0freesite.host\0" +"yamatotakada.nara.jp\0" +"nagatoro.saitama.jp\0" +"workshop.museum\0radoy.no\0" +"time.museum\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0" +"tv.tr\0" +"verbania.it\0servegame.org\0" +"yoita.niigata.jp\0tamayu.shimane.jp\0" +"name.jo\0" +"dynserv.org\0" +"net.ac\0" +"hamburg.museum\0" +"net.ae\0" +"net.af\0tv.tz\0" +"net.ag\0campidanomedio.it\0" +"free.hr\0""4lima.at\0" +"net.ai\0" +"sakahogi.gifu.jp\0glass\0" +"net.al\0g.bg\0" +"net.am\0salem.museum\0" +"malopolska.pl\0" +"net.ba\0is-a-conservative.com\0" +"net.ar\0net.bb\0" +"on.ca\0kashiwazaki.niigata.jp\0" +"net.au\0" +"net.bh\0" +"net.az\0sydney.museum\0" +"sh.cn\0""4lima.ch\0" +"net.bm\0" +"net.bn\0" +"net.bo\0" +"place\0" +"net.br\0toyonaka.osaka.jp\0members.linode.com\0" +"net.bs\0" +"net.bt\0" +"pe.gov.br\0otaki.chiba.jp\0" +"pro\0likes-pie.com\0" +"hichiso.gifu.jp\0es.leg.br\0" +"industries\0jeep\0" +"net.ci\0toyokawa.aichi.jp\0" +"net.bz\0hidaka.saitama.jp\0" +"gz.cn\0" +"events\0pru\0" +"net.cm\0" +"net.cn\0dray-dns.de\0" +"net.co\0osaka.jp\0" +"chesapeakebay.museum\0consulado.st\0lib.ny.us\0" +"wolomin.pl\0" +"net.cu\0daito.osaka.jp\0" +"net.cw\0tsuga.tochigi.jp\0" +"net.cy\0" +"hk.org\0" +"hinode.tokyo.jp\0kawanishi.yamagata.jp\0homeftp.net\0" +"net.dm\0s3-website.us-east-2.amazonaws.com\0*.hosting.myjino.ru\0" +"net.do\0service.gov.uk\0" +"nichinan.tottori.jp\0naamesjevuemie.no\0samsclub\0" +"kaminoyama.yamagata.jp\0on.fashion\0" +"minami-alps.yamanashi.jp\0sellsyourhome.org\0" +"net.ec\0outsystemscloud.com\0" +"akiruno.tokyo.jp\0" +"net.eg\0" +"pub\0" +"net.dz\0trycloudflare.com\0" +"ladbrokes\0" +"pixolino.com\0" +"austin.museum\0" +"net.et\0" +"daigo.ibaraki.jp\0" +"64-b.it\0" +"mydobiss.com\0" +"hashima.gifu.jp\0homesecuritymac.com\0" +"net.ge\0" +"net.gg\0" +"shinyoshitomi.fukuoka.jp\0k12.ri.us\0dst.mi.us\0locker\0bryansk.su\0barsy.org\0" +"miyama.mie.jp\0" +"pwc\0" +"norddal.no\0" +"net.gl\0" +"k12.mo.us\0lcube-server.de\0" +"net.gn\0" +"qld.gov.au\0" +"net.gp\0gildesk\xc3\xa5l.no\0" +"council.aero\0mo-siemens.io\0" +"net.gr\0" +"extraspace\0" +"net.gt\0" +"net.gu\0cc.me.us\0" +"budejju.no\0" +"kannami.shizuoka.jp\0" +"net.gy\0ascolipiceno.it\0" +"net.hk\0" +"shingu.fukuoka.jp\0k12.ca.us\0*.compute.amazonaws.com.cn\0" +"vr.it\0" +"osasco.br\0net.hn\0" +"pa.gov.pl\0blackfriday\0" +"forum.hu\0hiji.oita.jp\0presidio.museum\0" +"net.ht\0net.id\0" +"\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0" +"kasumigaura.ibaraki.jp\0" +"ookuwa.nagano.jp\0" +"synology.me\0" +"net.il\0mobara.chiba.jp\0koshigaya.saitama.jp\0" +"net.im\0" +"net.in\0""12hp.de\0" +"net.iq\0" +"net.ir\0delaware.museum\0myvnc.com\0" +"net.is\0" +"net.je\0" +"career\0" +"asakuchi.okayama.jp\0" +"miho.ibaraki.jp\0" +"ogawa.ibaraki.jp\0storj.farm\0" +"vix.br\0" +"ashoro.hokkaido.jp\0" +"shingo.aomori.jp\0fitness\0" +"net.jo\0" +"unnan.shimane.jp\0" +"hida.gifu.jp\0" +"net.kg\0" +"trentinosuedtirol.it\0net.ki\0" +"upow.gov.pl\0" +"taifun-dns.de\0" +"yamakita.kanagawa.jp\0pubtls.org\0" +"12hp.at\0" +"net.kn\0" +"media.hu\0gripe\0" +"shinanomachi.nagano.jp\0net.la\0" +"net.lb\0" +"tra.kp\0net.lc\0grajewo.pl\0" +"amakusa.kumamoto.jp\0" +"net.kw\0" +"satosho.okayama.jp\0net.ky\0" +"net.kz\0metlife\0" +"net.lk\0il.eu.org\0basicserver.io\0" +"bedzin.pl\0" +"firm.ht\0valley.museum\0" +"gs.hl.no\0" +"aridagawa.wakayama.jp\0" +"hiroo.hokkaido.jp\0karumai.iwate.jp\0net.ma\0""12hp.ch\0" +"net.lr\0" +"net.ls\0reviews\0" +"pr.gov.br\0net.me\0" +"net.lv\0" +"firm.in\0" +"cq.cn\0net.ly\0gs.ah.no\0" +"net.mk\0" +"net.ml\0" +"lahppi.no\0" +"agro.bo\0" +"net.mo\0" +"miyakonojo.miyazaki.jp\0" +"net.ms\0" +"net.mt\0" +"kozagawa.wakayama.jp\0net.mu\0clinic\0" +"net.mv\0net.nf\0orange\0" +"net.mw\0net.ng\0www.ro\0" +"morioka.iwate.jp\0net.mx\0" +"net.my\0net.ni\0nikon\0" +"net.mz\0office-on-the.net\0" +"r\xc3\xb8yken.no\0hu.eu.org\0ie.eu.org\0" +"coupon\0moonscale.net\0" +"kyiv.ua\0" +"net.nr\0" +"!city.sendai.jp\0" +"lyngdal.no\0" +"nes.buskerud.no\0" +"tsu.mie.jp\0" +"firm.co\0" +"net.nz\0" +"kanoya.kagoshima.jp\0" +"naval.museum\0net.om\0" +"togo.aichi.jp\0net.pa\0" +"civilaviation.aero\0" +"utazas.hu\0" +"net.pe\0firm.dk\0" +"dielddanuorri.no\0" +"blogspot.com\0" +"net.ph\0" +"net.pk\0fage\0" +"jus.br\0net.pl\0africa\0dyn.home-webserver.de\0" +"likescandy.com\0" +"net.pn\0dyndns.tv\0" +"cc.vt.us\0" +"haboro.hokkaido.jp\0saintlouis.museum\0net.qa\0bostik\0" +"uri.arpa\0net.pr\0" +"kawanishi.hyogo.jp\0szczecin.pl\0net.ps\0" +"hvaler.no\0net.pt\0" +"bo.nordland.no\0gov.nc.tr\0" +"k12.nj.us\0" +"joso.ibaraki.jp\0net.py\0" +"gorge.museum\0" +"lesja.no\0" +"plus\0" +"children.museum\0" +"caravan\0" +"yamada.toyama.jp\0" +"vc.it\0lea\xc5\x8bgaviika.no\0" +"ebina.kanagawa.jp\0bus.museum\0" +"itakura.gunma.jp\0mesaverde.museum\0" +"suedtirol.it\0" +"g.se\0" +"ri.it\0education.museum\0" +"ally\0" +"emilia-romagna.it\0" +"no.it\0babia-gora.pl\0" +"net.sa\0static.land\0" +"fudai.iwate.jp\0net.sb\0fail\0" +"net.sc\0secure\0" +"net.sd\0s3-website-sa-east-1.amazonaws.com\0" +"net.ru\0" +"komaki.aichi.jp\0media.pl\0net.rw\0net.sg\0" +"net.sh\0" +"gen.in\0kunstsammlung.museum\0" +"dyndns.ws\0" +"fussa.tokyo.jp\0net.sl\0" +"yaita.tochigi.jp\0net.so\0" +"chernovtsy.ua\0" +"tawaramoto.nara.jp\0" +"net.ss\0taipei\0" +"net.st\0serveblog.net\0api.stdlib.com\0" +"crotone.it\0" +"net.th\0physio\0" +"net.sy\0" +"trentinoaltoadige.it\0eidsvoll.no\0net.tj\0monash\0" +"sorum.no\0net.tm\0" +"net.tn\0" +"net.to\0" +"net.ua\0chernihiv.ua\0" +"net.tr\0" +"dp.ua\0" +"net.tt\0" +"mp.br\0bomlo.no\0net.tw\0my-router.de\0" +"\xc3\xa5""fjord.no\0duckdns.org\0" +"room\0" +"machida.tokyo.jp\0" +"net.uk\0red\0theater\0" +"furano.hokkaido.jp\0" +"design.aero\0silk.museum\0" +"hikari.yamaguchi.jp\0" +"healthcare\0" +"us.na\0lib.wy.us\0net.vc\0dyndns-wiki.com\0" +"szczytno.pl\0krakow.pl\0" +"net.ve\0ren\0" +"erotika.hu\0" +"shintomi.miyazaki.jp\0" +"chuo.tokyo.jp\0" +"net.uy\0net.vi\0" +"kagami.kochi.jp\0net.uz\0qvc\0" +"pyatigorsk.ru\0" +"net.vn\0" +"wildlife.museum\0" +"augustow.pl\0" +"tozawa.yamagata.jp\0boston\0sa.com\0" +"net.vu\0linkyard.cloud\0" +"watarai.mie.jp\0teaches-yoga.com\0" +"lib.ia.us\0" +"farm.museum\0newmexico.museum\0" +"odawara.kanagawa.jp\0" +"takasu.hokkaido.jp\0nakatane.kagoshima.jp\0" +"mat.br\0" +"lpusercontent.com\0" +"stavanger.no\0" +"bjarkoy.no\0" +"saga.jp\0" +"toyota.yamaguchi.jp\0gen.ng\0" +"wif.gov.pl\0net.ws\0" +"gen.mi.us\0" +"belau.pw\0fans\0" +"gr.eu.org\0" +"lecce.it\0" +"from-nm.com\0" +"gen.nz\0" +"shimoji.okinawa.jp\0" +"passagens\0" +"hdfc\0" +"matsumae.hokkaido.jp\0" +"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0here-for-more.info\0" +"miasta.pl\0" +"firm.ve\0" +"fukusaki.hyogo.jp\0" +"net.za\0" +"ontario.museum\0ril\0" +"avocat.fr\0" +"szex.hu\0" +"rio\0" +"rip\0" +"sandiego.museum\0" +"assassination.museum\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0" +"net.zm\0" +"k12.la.us\0" +"in-brb.de\0n4t.co\0" +"autos\0prime\0" +"cuiaba.br\0works\0" +"ebetsu.hokkaido.jp\0minami.tokushima.jp\0world\0" +"tt.im\0" +"amex\0" +"tsurugashima.saitama.jp\0" +"ud.it\0" +"cc.dc.us\0" +"store.nf\0" +"farm\0" +"pz.it\0winners\0" +"iwama.ibaraki.jp\0lidl\0" +"azimuth.network\0" +"\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0khakassia.su\0" +"hammarfeasta.no\0po.gov.pl\0" +"kouhoku.saga.jp\0" +"u2.xnbay.com\0" +"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" +"nishio.aichi.jp\0kitchen\0" +"br.it\0cb.it\0" +"tos.it\0" +"fast\0" +"ng.ink\0" +"akagi.shimane.jp\0edugit.org\0" +"urbino-pesaro.it\0" +"fukuoka.jp\0life\0homelink.one\0" +"pri.ee\0" +"dyndns-web.com\0" +"t.bg\0empresa.bo\0" +"isa-hockeynut.com\0" +"monza.it\0" +"friulivgiulia.it\0" +"repbody.aero\0firm.ro\0" +"ri.us\0" +"bahccavuotna.no\0" +"soo.kagoshima.jp\0gen.tr\0" +"namdalseid.no\0durban\0kurgan.su\0" +"is-a-geek.com\0" +"cool\0" +"coop\0" +"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0" +"gs.mr.no\0aktyubinsk.su\0" +"zushi.kanagawa.jp\0" +"okuizumo.shimane.jp\0" +"karasjok.no\0" +"bc.ca\0" +"jpn.com\0" +"emerck\0" +"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"nose.osaka.jp\0" +"roan.no\0" +"hashikami.aomori.jp\0" +"homeoffice.gov.uk\0" +"ketrzyn.pl\0" +"walter\0" +"olbiatempio.it\0" +"\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0" +"usa.oita.jp\0serveftp.org\0" +"caxias.br\0taxi.br\0imari.saga.jp\0" +"paragliding.aero\0" +"firm.nf\0" +"firm.ng\0" +"firestone\0" +"\xe6\x94\xbf\xe5\x8a\xa1\0" +"sap\0" +"yamagata.gifu.jp\0skj\xc3\xa5k.no\0sas\0" +"like\0" +"sbi\0" +"nakanoto.ishikawa.jp\0viajes\0" +"gyeonggi.kr\0" +"amot.no\0solar\0co.events\0" +"theworkpc.com\0" +"higashisumiyoshi.osaka.jp\0smile\0" +"sca\0" +"shimogo.fukushima.jp\0cpa.pro\0scb\0" +"sbs\0" +"agro.pl\0" +"qsl.br\0" +"kurogi.fukuoka.jp\0" +"shopitsite.com\0" +"weir\0" +"environment.museum\0store.ve\0" +"servequake.com\0" +"fortworth.museum\0" +"alesund.no\0" +"trading\0pony.club\0" +"miyoshi.tokushima.jp\0principe.st\0from-me.org\0" +"is-a-musician.com\0" +"alvdal.no\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0matsushige.tokushima.jp\0" +"te.it\0limo\0" +"cooperativa.bo\0" +"kochi.kochi.jp\0b\xc3\xb8.telemark.no\0" +"ravendb.me\0" +"paleo.museum\0mutual\0" +"kommune.no\0" +"johana.toyama.jp\0" +"jur.pro\0" +"novara.it\0link\0" +"run\0""1337.pictures\0" +"forl\xc3\xac-cesena.it\0sokndal.no\0" +"fujixerox\0" +"toyohashi.aichi.jp\0" +"ses\0" +"takayama.gifu.jp\0" +"sew\0" +"sex\0" +"okutama.tokyo.jp\0" +"omaha.museum\0" +"kodaira.tokyo.jp\0kinder\0sfr\0" +"e.bg\0" +"rwe\0" +"kasuga.hyogo.jp\0erni\0" +"zj.cn\0cheltenham.museum\0" +"gyeongbuk.kr\0" +"polkowice.pl\0" +"dyndns.biz\0" +"mill.museum\0ivano-frankivsk.ua\0network\0" +"kawatana.nagasaki.jp\0" +"store.ro\0nyc.mn\0" +"kvitsoy.no\0" +"omachi.nagano.jp\0isa-geek.org\0" +"makinohara.shizuoka.jp\0hamaroy.no\0" +"tecnologia.bo\0giessen.museum\0" +"izunokuni.shizuoka.jp\0fl.us\0" +"pilot.aero\0" +"stada\0" +"hyundai\0" +"gx.cn\0is-a-geek.org\0" +"shiranuka.hokkaido.jp\0vestby.no\0" +"mito.ibaraki.jp\0theatre\0app.render.com\0" +"aquila.it\0lib.ok.us\0" +"store.st\0ens.tn\0spdns.eu\0" +"missile.museum\0" +"barletta-trani-andria.it\0" +"jobs.tt\0\xe6\x9b\xb8\xe7\xb1\x8d\0" +"misawa.aomori.jp\0" +"ibaraki.ibaraki.jp\0oi.kanagawa.jp\0" +"eti.br\0oirase.aomori.jp\0paroch.k12.ma.us\0guge\0" +"shirosato.ibaraki.jp\0" +"pharmacien.fr\0" +"blogspot.vn\0" +"furubira.hokkaido.jp\0" +"santabarbara.museum\0" +"mielec.pl\0" +"aaa.pro\0" +"jewelry\0" +"ski\0" +"\xe6\x9d\xb1\xe4\xba\xac.jp\0avocat.pro\0safe\0" +"travelers\0" +"kamiichi.toyama.jp\0" +"info.gu\0" +"kitahiroshima.hokkaido.jp\0" +"hakodate.hokkaido.jp\0" +"mw.gov.pl\0nadex\0dnsupdater.de\0" +"sky\0" +"kiyose.tokyo.jp\0" +"seranishi.hiroshima.jp\0freemasonry.museum\0" +"info.ht\0university.museum\0" +"info.hu\0griw.gov.pl\0\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"works.aero\0" +"lib.ee\0k12.ne.us\0kindle\0" +"stor-elvdal.no\0live\0" +"konyvelo.hu\0drobak.no\0beep.pl\0" +"istanbul\0" +"sanfrancisco.museum\0" +"kuji.iwate.jp\0hayashima.okayama.jp\0" +"miura.kanagawa.jp\0" +"suzuka.mie.jp\0mine.nu\0" +"info.et\0koga.fukuoka.jp\0singles\0" +"mattel\0vistaprint\0" +"blogspot.re\0" +"mizusawa.iwate.jp\0" +"vda.it\0bnr.la\0" +"t.se\0" +"alessandria.it\0" +"hotels\0blogspot.ro\0" +"ms.gov.br\0" +"gamo.shiga.jp\0onrender.com\0" +"minamiawaji.hyogo.jp\0*.triton.zone\0pgfog.com\0" +"sor-varanger.no\0is-an-entertainer.com\0blogspot.rs\0" +"maizuru.kyoto.jp\0blogspot.ru\0blogspot.se\0" +"kr.it\0ovre-eiker.no\0" +"blogspot.sg\0" +"trentino-sud-tirol.it\0netflix\0" +"blogspot.si\0" +"blogspot.sk\0spdns.de\0" +"*.transurl.be\0" +"\xe5\xa5\x88\xe8\x89\xaf.jp\0yaotsu.gifu.jp\0flatanger.no\0schmidt\0" +"skiptvet.no\0blogspot.sn\0" +"te.ua\0" +"shell.museum\0" +"help\0kaluga.su\0" +"palermo.it\0portland.museum\0spa\0" +"hirogawa.wakayama.jp\0blogspot.td\0" +"hiroshima.jp\0info.cx\0" +"yk.ca\0web.app\0" +"co.ae\0" +"soy\0" +"co.ag\0aver\xc3\xb8y.no\0" +"higashiizu.shizuoka.jp\0" +"download\0" +"urawa.saitama.jp\0doomdns.org\0krasnik.pl\0" +"mt.gov.br\0info.ec\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0ad.jp\0" +"co.am\0" +"co.ao\0tab\0" +"adm.br\0freedesktop.org\0" +"chigasaki.kanagawa.jp\0cieszyn.pl\0" +"co.bb\0blogspot.tw\0blogspot.ug\0" +"co.at\0" +"ma.us\0sale\0" +"co.bi\0sekigahara.gifu.jp\0" +"info.bb\0fukushima.fukushima.jp\0" +"higashiyodogawa.osaka.jp\0" +"info.at\0" +"info.au\0blogspot.mr\0" +"joyo.kyoto.jp\0co.bn\0" +"nm.cn\0os.hordaland.no\0alwaysdata.net\0" +"temasek\0" +"nrw.museum\0sande.m\xc3\xb8re-og-romsdal.no\0co.ca\0" +"info.az\0moriyoshi.akita.jp\0" +"togitsu.nagasaki.jp\0blogspot.mx\0" +"js.cn\0blogspot.my\0" +"nagoya\0tax\0is-a-celticsfan.org\0" +"as.us\0" +"info.bo\0co.bw\0blogspot.nl\0" +"webhop.biz\0" +"co.ci\0belluno.it\0shiiba.miyazaki.jp\0srl\0" +"kawajima.saitama.jp\0blogspot.no\0" +"co.cl\0agrar.hu\0naturalhistory.museum\0" +"co.cm\0assn.lk\0" +"lib.nh.us\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0" +"from-mo.com\0" +"vall\xc3\xa9""edaoste.it\0srt\0" +"co.cr\0sf.no\0b\xc3\xa1hcavuotna.no\0" +"scrapper-site.net\0" +"kihoku.ehime.jp\0s\xc3\xb8gne.no\0" +"tajiri.osaka.jp\0tci\0" +"info.co\0ol.no\0marriott\0*.transurl.eu\0" +"yuki.ibaraki.jp\0endoftheinternet.org\0" +"drangedal.no\0co.cz\0" +"co.dk\0" +"wakasa.fukui.jp\0" +"pohl\0" +"stc\0blogspot.pe\0" +"us.eu.org\0" +"barclaycard\0" +"herokuapp.com\0" +"hitra.no\0" +"carrier.museum\0tdk\0dyndns-free.com\0" +"axis.museum\0" +"ac.gov.br\0pimienta.org\0" +"kawagoe.mie.jp\0" +"clinique\0blogspot.qa\0" +"blogspot.pt\0" +"here\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0tel\0isa-geek.com\0" +"cam.it\0workers.dev\0" +"groundhandling.aero\0" +"blogspot.is\0" +"wnext.app\0blogspot.it\0" +"marylhurst.museum\0" +"guru\0" +"bjugn.no\0" +"pueblo.bo\0" +"gallery.museum\0k12.pr.us\0" +"co.gg\0" +"yokote.akita.jp\0soundandvision.museum\0" +"blogspot.jp\0cust.dev.thingdust.io\0" +"co.gl\0farmstead.museum\0" +"store.bb\0" +"is-a-student.com\0" +"co.gy\0toyama.jp\0n\xc3\xa1vuotna.no\0nore-og-uvdal.no\0" +"hadsel.no\0supply\0" +"va.it\0" +"culturalcenter.museum\0" +"hatsukaichi.hiroshima.jp\0restaurant\0blogspot.kr\0" +"sarl\0" +"e.se\0from-mi.com\0" +"rg.it\0" +"thd\0fr.eu.org\0" +"ninja\0" +"kristiansund.no\0" +"co.id\0blogspot.li\0development.run\0" +"co.hu\0pagespeedmobilizer.com\0" +"bmd.br\0b\xc3\xa6rum.no\0maserati\0" +"off.ai\0cranbrook.museum\0" +"date.fukushima.jp\0" +"bhz.br\0nishikata.tochigi.jp\0" +"co.il\0" +"co.im\0" +"co.in\0" +"blogspot.lt\0blogspot.md\0" +"blogspot.lu\0" +"bridgestone\0" +"co.ir\0nakanojo.gunma.jp\0" +"co.it\0rv.ua\0" +"co.je\0" +"blogspot.mk\0" +"shinshinotsu.hokkaido.jp\0travel\0\xd0\xba\xd0\xbe\xd0\xbc\0cleverapps.io\0" +"kamifurano.hokkaido.jp\0" +"kamikawa.hokkaido.jp\0" +"pesaro-urbino.it\0" +"store.dk\0" +"it.ao\0kr.ua\0" +"hole.no\0czeladz.pl\0" +"co.jp\0" +"laspezia.it\0sakae.nagano.jp\0" +"tennis\0" +"blogspot.fi\0" +"pol.dz\0co.ke\0" +"shinshiro.aichi.jp\0" +"gru.br\0" +"artdeco.museum\0dn.ua\0" +"oppegard.no\0" +"\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0" +"kurume.fukuoka.jp\0creation.museum\0homeunix.net\0blogspot.fr\0" +"!city.nagoya.jp\0mansion.museum\0" +"uppo.gov.pl\0" +"co.kr\0" +"qh.cn\0co.lc\0" +"tjx\0" +"rzgw.gov.pl\0save\0" +"suita.osaka.jp\0" +"kudamatsu.yamaguchi.jp\0global.ssl.fastly.net\0" +"vestv\xc3\xa5g\xc3\xb8y.no\0" +"blogspot.gr\0" +"*.transurl.nl\0" +"sanjo.niigata.jp\0guardian\0" +"co.ma\0" +"fj.cn\0endofinternet.net\0" +"co.ls\0" +"co.me\0barsy.me\0" +"watch-and-clock.museum\0va.no\0blogspot.hk\0" +"co.mg\0granvin.no\0lib.mi.us\0" +"union.aero\0hakone.kanagawa.jp\0co.technology\0" +"rovigo.it\0" +"hasvik.no\0" +"taito.tokyo.jp\0blogspot.hr\0" +"blogspot.hu\0blogspot.ie\0" +"vic.gov.au\0co.na\0" +"omura.nagasaki.jp\0" +"elblag.pl\0" +"co.mu\0" +"co.mw\0" +"lima-city.de\0" +"co.ni\0blogspot.in\0" +"co.mz\0" +"yamanakako.yamanashi.jp\0in-berlin.de\0" +"saku.nagano.jp\0co.nl\0blogspot.ba\0" +"hattfjelldal.no\0info.ve\0" +"pol.ht\0porn\0co.no\0" +"insurance\0blogspot.be\0" +"research.aero\0saxo\0swatch\0" +"aosta.it\0rifu.miyagi.jp\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0blogspot.bg\0" +"okayama.jp\0" +"blogspot.bj\0" +"transporte.bo\0info.vn\0*.magentosite.cloud\0" +"kawagoe.saitama.jp\0" +"co.nz\0" +"blogspot.ca\0" +"co.om\0" +"vantaa.museum\0" +"weibo\0blogspot.cf\0" +"fujiyoshida.yamanashi.jp\0nishikatsura.yamanashi.jp\0" +"kuwana.mie.jp\0blogspot.ch\0" +"monzaebrianza.it\0post\0" +"rishirifuji.hokkaido.jp\0yufu.oita.jp\0blogspot.cl\0lima-city.at\0" +"monzabrianza.it\0repl.co\0" +"avellino.it\0b\xc3\xa1jddar.no\0" +"co.pl\0" +"top\0" +"co.pn\0" +"shirako.chiba.jp\0" +"blogspot.de\0" +"panasonic\0blogspot.cv\0" +"cc.ri.us\0" +"wakkanai.hokkaido.jp\0omitama.ibaraki.jp\0blogspot.cz\0" +"cng.br\0info.tn\0blogspot.dk\0" +"co.pw\0" +"info.tr\0" +"lima-city.ch\0" +"info.tt\0" +"shiga.jp\0dodge\0" +"konan.aichi.jp\0" +"symantec\0" +"elburg.museum\0" +"nanmoku.gunma.jp\0info.tz\0" +"i234.me\0" +"tr.it\0!city.kitakyushu.jp\0" +"kraanghke.no\0" +"nasushiobara.tochigi.jp\0university\0" +"jinsekikogen.hiroshima.jp\0broadway\0tube\0" +"takatori.nara.jp\0yahiko.niigata.jp\0okinoshima.shimane.jp\0" +"fujisawa.kanagawa.jp\0cloudfunctions.net\0" +"curitiba.br\0" +"mn.it\0filegear.me\0" +"chrysler\0" +"yomitan.okinawa.jp\0co.rs\0" +"sells-for-u.com\0" +"vang.no\0" +"info.ro\0co.rw\0" +"fresenius\0" +"filatelia.museum\0olsztyn.pl\0info.sd\0data\0" +"snaase.no\0nhlfan.net\0" +"date\0ubs\0" +"trv\0" +"co.st\0" +"barsy.online\0" +"inagi.tokyo.jp\0" +"r.bg\0" +"co.th\0" +"dentist\0" +"co.sz\0co.tj\0va.us\0cloud66.zone\0" +"tc.br\0" +"8.bg\0" +"iwi.nz\0co.tm\0" +"mansions.museum\0lefrak\0" +"co.ua\0" +"hobol.no\0info.pk\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" +"mar.it\0info.pl\0co.tt\0nm.us\0pcloud.host\0" +"balsfjord.no\0co.ug\0" +"abruzzo.it\0" +"info.pr\0co.tz\0" +"co.uk\0barsy.uk\0" +"legal\0" +"is-a-geek.net\0" +"maritimo.museum\0living\0" +"blogspot.ae\0" +"protection\0" +"co.us\0" +"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0" +"cci.fr\0co.ve\0" +"yamanobe.yamagata.jp\0tui\0" +"blogspot.al\0" +"blogspot.am\0" +"fot.br\0info.na\0co.vi\0" +"co.uz\0" +"is-a-anarchist.com\0fastvps-server.com\0" +"ddr.museum\0info.mv\0info.nf\0" +"aerodrome.aero\0tr.no\0" +"info.ni\0is-very-nice.org\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0ralingen.no\0" +"ogano.saitama.jp\0" +"dh.bytemark.co.uk\0" +"al.gov.br\0info.nr\0" +"omiya.saitama.jp\0yoshikawa.saitama.jp\0" +"zlg.br\0" +"chichibu.saitama.jp\0" +"tvs\0" +"ae.org\0goip.de\0" +"veg\xc3\xa5rshei.no\0" +"artsandcrafts.museum\0bayern\0" +"vagan.no\0education\0" +"is-a-bookkeeper.com\0" +"friuliveneziagiulia.it\0info.la\0" +"other.nf\0" +"folkebibl.no\0" +"niimi.okayama.jp\0" +"ayase.kanagawa.jp\0" +"minamisanriku.miyagi.jp\0" +"gok.pk\0" +"daejeon.kr\0is-very-evil.org\0" +"xfinity\0" +"gorlice.pl\0" +"info.ls\0" +"mydissent.net\0" +"myphotos.cc\0" +"nakatsugawa.gifu.jp\0" +"\xe7\x8f\xa0\xe5\xae\x9d\0is-slick.com\0" +"co.za\0" +"bolzano-altoadige.it\0" +"gonohe.aomori.jp\0" +"d\xc3\xb8nna.no\0" +"lakas.hu\0" +"ui.nabu.casa\0" +"arte.bo\0gifu.jp\0pol.tr\0co.zm\0" +"kui.hiroshima.jp\0travelchannel\0hu.com\0" +"from-md.com\0" +"yasuda.kochi.jp\0kvanangen.no\0global\0" +"cog.mi.us\0" +"co.zw\0" +"cc.fl.us\0social\0" +"uy.com\0" +"k12.al.us\0" +"ss.it\0info.ke\0" +"furudono.fukushima.jp\0se.net\0ru.net\0" +"rennesoy.no\0" +"info.ki\0" +"pi.it\0" +"yoshida.shizuoka.jp\0" +"boston.museum\0tynset.no\0gallup\0" +"calabria.it\0" +"tokushima.tokushima.jp\0niepce.museum\0" +"lo.it\0" +"clock.museum\0" +"l\xc3\xa6rdal.no\0" +"misato.shimane.jp\0" +"frog.museum\0" +"sakura.tochigi.jp\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0isa-geek.net\0" +"kita.kyoto.jp\0" +"togakushi.nagano.jp\0hamatama.saga.jp\0tranoy.no\0" +"kagamiishi.fukushima.jp\0" +"aq.it\0ba.it\0" +"brunel.museum\0" +"whoswho\0" +"skodje.no\0ipifony.net\0my-vigor.de\0" +"saijo.ehime.jp\0dali.museum\0" +"collection.museum\0gotdns.com\0" +"minami.fukuoka.jp\0" +"gv.ao\0c.bg\0" +"campinas.br\0oy.lc\0" +"gv.at\0" +"tsk.tr\0capetown\0" +"shisui.chiba.jp\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" +"privatizehealthinsurance.net\0" +"mn.us\0" +"usarts.museum\0" +"sd.cn\0*.s5y.io\0" +"servehttp.com\0" +"trading.aero\0" +"l\xc3\xb8ten.no\0*.on-rio.io\0" +"emr.it\0" +"baltimore.museum\0" +"mitaka.tokyo.jp\0" +"asaminami.hiroshima.jp\0lib.vi.us\0u2-local.xnbay.com\0" +"b\xc3\xa5tsfjord.no\0vm.bytemark.co.uk\0" +"ab.ca\0sumita.iwate.jp\0uno\0" +"olkusz.pl\0archi\0" +"yahoo\0" +"sar.it\0haga.tochigi.jp\0castres.museum\0" +"is-into-cartoons.com\0" +"trentins\xc3\xbc""d-tirol.it\0" +"belem.br\0otoyo.kochi.jp\0salangen.no\0hopto.me\0" +"yoka.hyogo.jp\0" +"l\xc3\xb8""dingen.no\0" +"kawahara.tottori.jp\0embroidery.museum\0marnardal.no\0uol\0" +"omega\0" +"lierne.no\0" +"lib.ga.us\0tec.ve\0" +"friuli-venezia-giulia.it\0" +"karatsu.saga.jp\0" +"pesarourbino.it\0" +"isla.pr\0" +"b\xc3\xa1l\xc3\xa1t.no\0" +"otaki.saitama.jp\0elvendrell.museum\0" +"tokai.ibaraki.jp\0" +"wajima.ishikawa.jp\0" +"ups\0co.education\0" +"shimokitayama.nara.jp\0abo.pa\0" +"transport.museum\0" +"est-le-patron.com\0" +"family.museum\0eurovision\0" +"giehtavuoatna.no\0bci.dnstrace.pro\0barsy.bg\0" +"cn.com\0" +"jelenia-gora.pl\0" +"sirdal.no\0" +"ringsaker.no\0" +"\xe5\xae\xae\xe5\x9f\x8e.jp\0" +"abkhazia.su\0" +"ascoli-piceno.it\0" +"rio.br\0\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"pmn.it\0jeonnam.kr\0barsy.ca\0" +"educator.aero\0higashiomi.shiga.jp\0" +"asahi.ibaraki.jp\0ota.tokyo.jp\0" +"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0" +"tempio-olbia.it\0security\0meteorapp.com\0" +"hagi.yamaguchi.jp\0debian.net\0dnsdojo.org\0" +"s\xc3\xa1lat.no\0" +"lezajsk.pl\0" +"k12.ms.us\0k12.nc.us\0" +"higashichichibu.saitama.jp\0bahcavuotna.no\0" +"poivron.org\0" +"sel.no\0barsy.de\0" +"verona.it\0vadso.no\0" +"from-al.com\0" +"roros.no\0cc.ma.us\0" +"herad.no\0" +"parachuting.aero\0" +"semine.miyagi.jp\0" +"tsukumi.oita.jp\0" +"mc.eu.org\0" +"jab.br\0r.se\0blogdns.org\0" +"lukow.pl\0" +"cc.as.us\0" +"yamagata.nagano.jp\0lilly\0" +"web.bo\0" +"\xd0\xbc\xd0\xba\xd0\xb4\0" +"publ.pt\0" +"kiho.mie.jp\0" +"andriabarlettatrani.it\0livorno.it\0scor\0\xe9\xa3\x9f\xe5\x93\x81\0" +"barsy.eu\0" +"scot\0official.academy\0" +"philadelphia.museum\0strand.no\0" +"ong.br\0parliament.nz\0" +"web.co\0askvoll.no\0" +"convent.museum\0" +"vet\0" +"\xe4\xbd\x9b\xe5\xb1\xb1\0lt.eu.org\0" +"serveftp.com\0xs4all.space\0" +"gran.no\0" +"yuza.yamagata.jp\0" +"telefonica\0square7.net\0lima.zone\0" +"association.aero\0tachiarai.fukuoka.jp\0c.la\0" +"tajimi.gifu.jp\0" +"web.do\0" +"*.landing.myjino.ru\0" +"homeunix.org\0" +"adult\0observer\0" +"ukiha.fukuoka.jp\0gs.sf.no\0enebakk.no\0" +"yamato.fukushima.jp\0" +"gs.ol.no\0", + +"is-a-libertarian.com\0" +"boats\0" +"guam.gu\0charity\0" +"ing.pa\0" +"baby\0hgtv\0" +"suifu.ibaraki.jp\0" +"journal.aero\0wiih.gov.pl\0" +"fjaler.no\0tolga.no\0" +"anamizu.ishikawa.jp\0" +"lib.nj.us\0" +"fidelity\0barsy.in\0" +"barsy.io\0" +"froland.no\0" +"juif.museum\0mymailer.com.tw\0" +"nikaho.akita.jp\0kayabe.hokkaido.jp\0vig\0" +"yonabaru.okinawa.jp\0" +"waw.pl\0" +"barclays\0" +"cagliari.it\0\xd0\xbc\xd0\xbe\xd0\xbd\0" +"*.futurecms.at\0" +"vin\0" +"tselinograd.su\0" +"vip\0" +"tanabe.kyoto.jp\0naumburg.museum\0loab\xc3\xa1t.no\0" +"es.eu.org\0servehumour.com\0" +"web.gu\0" +"pub.sa\0" +"santoandre.br\0info.zm\0" +"kanegasaki.iwate.jp\0claims\0" +"takanezawa.tochigi.jp\0uk.net\0" +"sowa.ibaraki.jp\0aid.pl\0" +"higashiyamato.tokyo.jp\0" +"web.id\0fortmissoula.museum\0manx.museum\0" +"sanofi\0" +"saobernardo.br\0casino.hu\0foggia.it\0dclk\0" +"indianmarket.museum\0" +"rahkkeravju.no\0" +"shiwa.iwate.jp\0" +"mochizuki.nagano.jp\0servebbs.net\0" +"nagaoka.niigata.jp\0" +"songdalen.no\0storfjord.no\0" +"rsvp\0" +"s3.us-east-2.amazonaws.com\0" +"decorativearts.museum\0ufcfan.org\0" +"samsung\0is-into-games.com\0" +"astronomy.museum\0dyn-ip24.de\0" +"iwata.shizuoka.jp\0" +"koto.shiga.jp\0" +"cnt.br\0vanylven.no\0" +"slask.pl\0" +"tuscany.it\0build\0" +"sor-odal.no\0" +"ebiz.tw\0" +"handson.museum\0" +"meiwa.gunma.jp\0homes\0" +"ogawa.saitama.jp\0" +"c.se\0" +"re.it\0nogi.tochigi.jp\0" +"honbetsu.hokkaido.jp\0mortgage\0" +"kamo.niigata.jp\0web.lk\0" +"elverum.no\0" +"synology-diskstation.de\0" +"mihara.kochi.jp\0" +"tsubata.ishikawa.jp\0ma.leg.br\0" +"stjohn.museum\0vn.ua\0" +"cruise\0" +"stjordalshalsen.no\0" +"tokuyama.yamaguchi.jp\0" +"nakayama.yamagata.jp\0wien\0" +"nfshost.com\0" +"museum\0" +"sakegawa.yamagata.jp\0" +"valdaosta.it\0" +"re.kr\0" +"sytes.net\0" +"nara.nara.jp\0" +"miniserver.com\0" +"trentin-suedtirol.it\0web.nf\0" +"trentino-s\xc3\xbc""d-tirol.it\0public.museum\0gausdal.no\0sd.us\0endofinternet.org\0github.io\0" +"web.ni\0" +"xj.cn\0gs.va.no\0" +"nowaruda.pl\0" +"pacific.museum\0" +"\xc3\xa1laheadju.no\0" +"mizunami.gifu.jp\0" +"fortal.br\0sugito.saitama.jp\0" +"mazury.pl\0gv.vc\0" +"aukra.no\0from-pa.com\0" +"zao.miyagi.jp\0fuchu.tokyo.jp\0" +"funabashi.chiba.jp\0" +"revista.bo\0lillesand.no\0" +"nowtv\0" +"ngrok.io\0" +"jerusalem.museum\0" +"safety\0" +"and\xc3\xb8y.no\0lib.pa.us\0abbvie\0" +"yamaxun\0familyds.net\0" +"tokamachi.niigata.jp\0" +"chuo.fukuoka.jp\0anan.nagano.jp\0agrinet.tn\0" +"safety.aero\0web.pk\0plo.ps\0" +"shimonoseki.yamaguchi.jp\0" +"motoyama.kochi.jp\0blackbaudcdn.net\0is-a-techie.com\0" +"alaheadju.no\0ipiranga\0" +"band\0" +"konskowola.pl\0vpnplus.to\0" +"figueres.museum\0" +"nesset.no\0" +"lancashire.museum\0" +"mymediapc.net\0" +"bank\0" +"vestvagoy.no\0" +"sjc.br\0chintai\0in-dsl.de\0dvrcam.info\0rackmaze.com\0" +"mus.mi.us\0" +"sanok.pl\0" +"defense.tn\0" +"ishikawa.okinawa.jp\0" +"*.kobe.jp\0otsuchi.iwate.jp\0ishigaki.okinawa.jp\0" +"mk.eu.org\0" +"bieszczady.pl\0hobby-site.org\0" +"kunohe.iwate.jp\0" +"tcp4.me\0" +"dynamic-dns.info\0" +"wiki\0" +"s\xc3\xb8rfold.no\0ugim.gov.pl\0balena-devices.com\0" +"wed\0" +"niki.hokkaido.jp\0" +"fitjar.no\0gotdns.ch\0" +"lelux.site\0" +"kakuda.miyagi.jp\0" +"cc.va.us\0arab\0" +"landes.museum\0associates\0" +"ferrari\0" +"lucca.it\0fi.eu.org\0" +"florence.it\0cc.nm.us\0" +"int.ar\0trust.museum\0" +"web.tj\0" +"iglesias-carbonia.it\0" +"birthplace.museum\0" +"southcarolina.museum\0" +"hanggliding.aero\0int.az\0" +"web.tr\0nflfan.org\0" +"tp.it\0psp.gov.pl\0" +"int.bo\0yabuki.fukushima.jp\0" +"cc.co.us\0" +"riik.ee\0seat\0" +"uslivinghistory.museum\0" +"pv.it\0ericsson\0gallo\0" +"wine\0" +"nagahama.shiga.jp\0austrheim.no\0bbs.tr\0" +"shimoichi.nara.jp\0realestate.pl\0" +"higashine.yamagata.jp\0" +"int.ci\0oarai.ibaraki.jp\0" +"lu.eu.org\0me.eu.org\0" +"web.ve\0blogspot.co.at\0" +"int.co\0lasalle\0ashgabad.su\0" +"shirakawa.fukushima.jp\0" +"kahoku.ishikawa.jp\0synology-ds.de\0" +"ato.br\0" +"bn.it\0" +"vaga.no\0" +"swidnica.pl\0" +"gives\0vodka\0" +"uchinomi.kagawa.jp\0" +"p.bg\0" +"verm\xc3\xb6gensberatung\0" +"lotte\0" +"6.bg\0saitama.saitama.jp\0abudhabi\0win\0" +"l\xc3\xa4ns.museum\0" +"deporte.bo\0" +"gs.tr.no\0" +"lv.eu.org\0" +"evenassi.no\0" +"minoh.osaka.jp\0lotto\0" +"prod\0" +"london.cloudapps.digital\0" +"prof\0" +"idrett.no\0" +"seek\0" +"ggf.br\0juegos\0" +"s3.eu-west-2.amazonaws.com\0" +"tochio.niigata.jp\0" +"lib.sd.us\0*.stolos.io\0" +"journalist.aero\0linde\0" +"honda\0" +"kamioka.akita.jp\0co.place\0" +"web.za\0" +"s3-eu-west-1.amazonaws.com\0" +"fribourg.museum\0" +"ballooning.aero\0" +"yaizu.shizuoka.jp\0" +"natuurwetenschappen.museum\0" +"ishikawa.fukushima.jp\0hikone.shiga.jp\0" +"emp.br\0\xe6\x95\x8e\xe8\x82\xb2.hk\0" +"wme\0" +"rokunohe.aomori.jp\0north.museum\0*.statics.cloud\0loginline.site\0" +"muncie.museum\0" +"potenza.it\0" +"inderoy.no\0" +"ruhr\0" +"parti.se\0\xe5\xb7\xa5\xe8\xa1\x8c\0dy.fi\0" +"dnsdojo.net\0" +"int.is\0" +"hapmir.no\0" +"qld.au\0" +"idf.il\0inami.wakayama.jp\0colonialwilliamsburg.museum\0graz.museum\0" +"wios.gov.pl\0blogspot.co.id\0" +"skoczow.pl\0" +"riobranco.br\0barrell-of-knowledge.info\0" +"trust\0" +"yakumo.hokkaido.jp\0" +"storage\0" +"taketa.oita.jp\0" +"swiftcover\0blogspot.co.il\0" +"\xe7\xa7\x8b\xe7\x94\xb0.jp\0" +"sondrio.it\0isshiki.aichi.jp\0kosher\0" +"cc.mn.us\0" +"overhalla.no\0" +"ham-radio-op.net\0" +"wow\0" +"int.la\0k12.ct.us\0" +"deal\0" +"zaporizhzhe.ua\0giize.com\0flt.cloud.muni.cz\0" +"airbus\0" +"ta.it\0games\0" +"maritime.museum\0" +"int.lk\0" +"pg.it\0group\0" +"is-a-knight.org\0" +"midatlantic.museum\0" +"kutchan.hokkaido.jp\0" +"fh.se\0" +"barsy.co.uk\0" +"nishi.fukuoka.jp\0" +"dazaifu.fukuoka.jp\0" +"from.hr\0" +"lapy.pl\0" +"mosjoen.no\0tysnes.no\0lundbeck\0" +"my-gateway.de\0" +"kr.eu.org\0" +"sport.hu\0" +"takatsuki.osaka.jp\0bananarepublic\0" +"ao.it\0oldnavy\0" +"andriatranibarletta.it\0" +"\xe9\xa4\x90\xe5\x8e\x85\0" +"ustka.pl\0" +"*.elb.amazonaws.com.cn\0" +"parliament.cy\0asti.it\0int.mv\0" +"int.mw\0\xd9\x82\xd8\xb7\xd8\xb1\0" +"naples.it\0int.ni\0" +"a.bg\0" +"army\0" +"h\xc3\xb8yanger.no\0" +"tokushima.jp\0" +"hs.kr\0" +"chieti.it\0" +"from-co.net\0" +"fylkesbibl.no\0" +"saarland\0space\0" +"wtc\0" +"koriyama.fukushima.jp\0wtf\0" +"nx.cn\0" +"now-dns.net\0" +"dyndns.info\0" +"amusement.aero\0" +"pittsburgh.museum\0" +"arpa\0" +"karuizawa.nagano.jp\0porsangu.no\0" +"matsuzaki.shizuoka.jp\0" +"recife.br\0" +"azurecontainer.io\0" +"walmart\0" +"navigation.aero\0lib.mo.us\0politie\0" +"shibuya.tokyo.jp\0" +"nagareyama.chiba.jp\0higashishirakawa.gifu.jp\0kwp.gov.pl\0" +"gaular.no\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0annefrank.museum\0" +"int.pt\0" +"svelvik.no\0" +"aizuwakamatsu.fukushima.jp\0" +"forumz.info\0" +"cargo.aero\0" +"wake.okayama.jp\0railway.museum\0rnu.tn\0" +"minato.tokyo.jp\0" +"wakuya.miyagi.jp\0" +"watchandclock.museum\0" +"kami.miyagi.jp\0f\xc3\xb8rde.no\0karlsoy.no\0merseine.nu\0" +"fukuroi.shizuoka.jp\0" +"tingvoll.no\0" +"oharu.aichi.jp\0mo-i-rana.no\0" +"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0demon.nl\0" +"yono.saitama.jp\0online.museum\0\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0" +"bearalvahki.no\0" +"movimiento.bo\0kumejima.okinawa.jp\0" +"vaksdal.no\0" +"dyndns-work.com\0" +"komae.tokyo.jp\0" +"int.ru\0camdvr.org\0" +"dedyn.io\0" +"tokigawa.saitama.jp\0nyny.museum\0quebec\0" +"imperia.it\0kujukuri.chiba.jp\0" +"noda.iwate.jp\0blogdns.net\0webredirect.org\0" +"accountants\0" +"!city.sapporo.jp\0" +"kamishihoro.hokkaido.jp\0" +"asda\0gucci\0" +"loan\0" +"int.tj\0arte\0flickr\0" +"moscow.museum\0" +"beauty\0" +"online\0" +"takayama.nagano.jp\0" +"kasaoka.okayama.jp\0" +"oyodo.nara.jp\0" +"treviso.it\0" +"int.tt\0" +"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0xin\0" +"noticias.bo\0ilovecollege.info\0" +"kustanai.ru\0" +"taiki.hokkaido.jp\0" +"ppg.br\0clan.rip\0" +"p.se\0" +"umi.fukuoka.jp\0*.sensiosite.cloud\0" +"tendo.yamagata.jp\0in-vpn.org\0" +"soja.okayama.jp\0int.ve\0" +"bbva\0" +"kustanai.su\0mg.leg.br\0" +"kyotanabe.kyoto.jp\0\xd0\xbe\xd1\x80\xd0\xb3\0" +"nom.ad\0" +"gov.ac\0nom.ae\0" +"int.vn\0promo\0nom.af\0" +"gov.ae\0nom.ag\0" +"gov.af\0" +"android\0nom.ai\0" +"usculture.museum\0dell\0" +"fvg.it\0cz.it\0nom.al\0" +"arq.br\0blogspot.co.uk\0" +"gov.al\0" +"okagaki.fukuoka.jp\0" +"airport.aero\0lewismiller.museum\0" +"yatsuka.shimane.jp\0" +"gov.ba\0trapani.it\0" +"gov.ar\0gov.bb\0" +"gov.as\0" +"gov.au\0nakadomari.aomori.jp\0" +"gov.bf\0television.museum\0" +"games.hu\0" +"gov.bh\0" +"\xe6\x96\xb0\xe9\x97\xbb\0" +"gov.az\0" +"koga.ibaraki.jp\0aejrie.no\0" +"gov.bm\0haibara.shizuoka.jp\0tatar\0" +"gov.bn\0from-ct.com\0" +"nesoddtangen.no\0is-a-socialist.com\0" +"gov.br\0" +"airline.aero\0gov.bs\0" +"gov.bt\0gov.cd\0bungoono.oita.jp\0a.run.app\0" +"kommunalforbund.se\0" +"gov.by\0sardinia.it\0" +"gov.bz\0nom.cl\0" +"asia\0gov.cl\0" +"gov.cm\0nom.co\0valled-aosta.it\0sogndal.no\0" +"gov.cn\0sciencehistory.museum\0" +"author.aero\0gov.co\0saiki.oita.jp\0" +"lib.tx.us\0is-a-green.com\0" +"lans.museum\0loft\0" +"gov.cu\0onjuku.chiba.jp\0\xc3\xa5lg\xc3\xa5rd.no\0" +"gov.cx\0lib.pr.us\0" +"gov.cy\0" +"saikai.nagasaki.jp\0\xc3\xa5s.no\0" +"fnd.br\0" +"sexy\0" +"gov.dm\0miners.museum\0za.com\0" +"in-butter.de\0" +"gov.do\0" +"res.in\0paderborn.museum\0scapp.io\0" +"c66.me\0" +"gov.ec\0aga.niigata.jp\0naha.okinawa.jp\0" +"gov.ee\0hakata.fukuoka.jp\0" +"gov.eg\0med.pro\0" +"klabu.no\0" +"!city.kobe.jp\0dominic.ua\0fed.us\0" +"gov.dz\0" +"noboribetsu.hokkaido.jp\0" +"catering\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" +"federation.aero\0servebbs.org\0" +"nom.es\0from-wy.com\0" +"gov.et\0cincinnati.museum\0\xe9\xa6\x99\xe6\xb8\xaf\0" +"oystre-slidre.no\0" +"s3-eu-central-1.amazonaws.com\0" +"villas\0" +"nom.fr\0" +"shirataka.yamagata.jp\0nom.gd\0" +"nom.ge\0" +"gov.ge\0lviv.ua\0blogspot.co.ke\0homesecuritypc.com\0" +"plants.museum\0vlaanderen.museum\0" +"gov.gh\0" +"gov.gi\0securitytactics.com\0" +"nom.gl\0" +"remotewd.com\0" +"brussel.museum\0moma.museum\0" +"gov.gn\0" +"bruxelles.museum\0" +"vicenza.it\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0degree\0" +"gov.gr\0naklo.pl\0customer.enonic.io\0nom.gt\0" +"sydney\0" +"gov.gu\0desi\0" +"badajoz.museum\0cc.sd.us\0no-ip.org\0" +"gov.gy\0oseto.nagasaki.jp\0uruma.okinawa.jp\0nord-odal.no\0" +"k12.md.us\0stackhero-network.com\0" +"gov.hk\0" +"nom.hn\0" +"arendal.no\0" +"services\0" +"huissier-justice.fr\0bronnoy.no\0" +"banamex\0" +"my.id\0akabira.hokkaido.jp\0showa.yamanashi.jp\0merckmsd\0" +"gov.ie\0cloudaccess.net\0" +"kherson.ua\0" +"oita.oita.jp\0" +"auspost\0" +"snillfjord.no\0" +"nom.im\0" +"gov.il\0pavia.it\0" +"gov.in\0a.se\0scrapping.cc\0" +"rc.it\0choshi.chiba.jp\0" +"fukumitsu.toyama.jp\0" +"gov.iq\0" +"gov.ir\0" +"gov.is\0sagae.yamagata.jp\0\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0" +"gov.it\0edu.eu.org\0" +"\xe9\x9b\x86\xe5\x9b\xa2\0" +"higashiyama.kyoto.jp\0mormon\0" +"vic.au\0" +"is-a-doctor.com\0" +"ge.it\0" +"gov.jo\0niihama.ehime.jp\0\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"academy\0" +"\xe4\xb8\xad\xe4\xbf\xa1\0" +"ingatlan.hu\0sb.ua\0nom.ke\0" +"saotome.st\0" +"gov.kg\0" +"honjo.akita.jp\0stream\0" +"koto.tokyo.jp\0musashimurayama.tokyo.jp\0gov.ki\0" +"blogspot.co.nz\0" +"asaka.saitama.jp\0nom.km\0" +"gov.km\0british.museum\0" +"gov.kn\0" +"gov.kp\0" +"gov.la\0vaapste.no\0" +"gov.lb\0" +"gov.lc\0broker\0" +"kamijima.ehime.jp\0sibenik.museum\0agakhan\0" +"tatsuno.hyogo.jp\0" +"gov.kw\0hagebostad.no\0nat.tn\0nom.li\0" +"capitalone\0familyds.org\0" +"gov.ky\0" +"gyokuto.kumamoto.jp\0gov.kz\0oh.us\0syno-ds.de\0" +"gov.lk\0freetls.fastly.net\0" +"konsulat.gov.pl\0" +"harvestcelebration.museum\0" +"sanda.hyogo.jp\0" +"gov.ma\0alpha.bounty-full.com\0" +"itano.tokushima.jp\0gov.lr\0" +"gov.ls\0br\xc3\xb8nn\xc3\xb8ysund.no\0" +"gov.lt\0" +"gov.me\0nom.mg\0" +"gov.lv\0" +"mishima.shizuoka.jp\0gov.mg\0aarborte.no\0" +"gov.ly\0turek.pl\0nom.mk\0" +"urakawa.hokkaido.jp\0" +"gov.mk\0" +"gov.ml\0" +"gifu.gifu.jp\0shioya.tochigi.jp\0" +"gov.mn\0spydeberg.no\0" +"ono.hyogo.jp\0saito.miyazaki.jp\0gov.mo\0" +"museum.tt\0ivanovo.su\0" +"nom.nc\0" +"gov.mr\0" +"gov.ms\0" +"tome.miyagi.jp\0gov.mu\0" +"gov.mv\0" +"gov.mw\0gov.ng\0nom.ni\0nalchik.ru\0" +"gov.my\0" +"gov.mz\0" +"\xe5\x95\x86\xe6\xa0\x87\0" +"otaru.hokkaido.jp\0tomobe.ibaraki.jp\0" +"udine.it\0ybo.trade\0" +"iglesiascarbonia.it\0" +"okawa.fukuoka.jp\0gov.nr\0" +"ube.yamaguchi.jp\0nom.nu\0" +"tarama.okinawa.jp\0draydns.de\0" +"xxx\0" +"nalchik.su\0applinzi.com\0" +"pisz.pl\0dating\0" +"trentinosud-tirol.it\0utwente.io\0" +"gov.om\0" +"skydiving.aero\0berlin.museum\0s\xc3\xb8mna.no\0nom.pa\0" +"rackmaze.net\0" +"fuchu.hiroshima.jp\0" +"nom.pe\0" +"yamamoto.miyagi.jp\0\xe6\x89\x8b\xe8\xa1\xa8\0" +"musashino.tokyo.jp\0" +"eco.br\0" +"gov.ph\0xyz\0" +"milan.it\0" +"nom.pl\0" +"gov.pk\0" +"rome.it\0nishiokoppe.hokkaido.jp\0matsushima.miyagi.jp\0gov.pl\0" +"gov.pn\0" +"isehara.kanagawa.jp\0nom.qa\0" +"dni.us\0" +"gov.qa\0fiat\0" +"gov.pr\0" +"gov.ps\0" +"gov.pt\0k12.wi.us\0" +"nom.pw\0" +"sukagawa.fukushima.jp\0niiza.saitama.jp\0" +"gov.py\0" +"memorial.museum\0" +"stj\xc3\xb8rdalshalsen.no\0" +"magazine.aero\0" +"brasil.museum\0luxembourg.museum\0" +"livinghistory.museum\0kyoto\0" +"newhampshire.museum\0nom.re\0k12.ks.us\0" +"fedorainfracloud.org\0" +"asakawa.fukushima.jp\0" +"zamami.okinawa.jp\0" +"ine.kyoto.jp\0higashimatsushima.miyagi.jp\0" +"nom.ro\0" +"pinb.gov.pl\0" +"sayama.saitama.jp\0" +"fukui.jp\0oyer.no\0gov.sa\0nom.rs\0" +"\xe7\xa6\x8f\xe4\xba\x95.jp\0kinokawa.wakayama.jp\0gov.sb\0" +"tn.it\0gov.rs\0gov.sc\0" +"vao.it\0torino.it\0gov.sd\0" +"ullensaker.no\0gov.ru\0love\0" +"kanmaki.nara.jp\0" +"gov.rw\0gov.sg\0nom.si\0" +"pt.it\0chocolate.museum\0gov.sh\0" +"miyoshi.aichi.jp\0" +"rikuzentakata.iwate.jp\0" +"american.museum\0" +"yoro.gifu.jp\0gov.sl\0fido\0institute\0" +"eiheiji.fukui.jp\0" +"gov.so\0" +"meloy.no\0nom.st\0" +"gov.ss\0" +"gov.st\0readmyblog.org\0" +"nagasaki.nagasaki.jp\0cloud.metacentrum.cz\0" +"\xc3\xb8ystre-slidre.no\0" +"gov.sx\0nom.tj\0" +"gov.sy\0" +"gov.tj\0" +"nom.tm\0" +"ambulance.aero\0bl.it\0mino.gifu.jp\0gov.tl\0" +"gov.tm\0" +"atami.shizuoka.jp\0gov.tn\0" +"hirata.fukushima.jp\0gov.to\0" +"schools.nsw.edu.au\0katagami.akita.jp\0gov.ua\0" +"gov.tr\0" +"gov.tt\0" +"nom.ug\0" +"n.bg\0s3.dualstack.us-east-1.amazonaws.com\0" +"kamisato.saitama.jp\0gov.tw\0" +"hakusan.ishikawa.jp\0naturalhistorymuseum.museum\0" +"tur.ar\0" +"4.bg\0wiw.gov.pl\0gov.uk\0cya.gg\0" +"orskog.no\0" +"pe.ca\0versicherung\0trafficplex.cloud\0" +"ck.ua\0" +"cloudns.asia\0blogspot.co.za\0nom.vc\0" +"kyowa.akita.jp\0gov.vc\0you\0" +"gov.ve\0webhop.org\0nom.vg\0" +"ishinomaki.miyagi.jp\0myhome-server.de\0" +"nom.uy\0" +"*.yokohama.jp\0" +"tur.br\0" +"hekinan.aichi.jp\0" +"shibukawa.gunma.jp\0gov.vn\0" +"museum.mv\0" +"am.br\0museum.mw\0" +"nyuzen.toyama.jp\0estate\0freebox-os.com\0" +"catholic.edu.au\0" +"museum.no\0" +"misato.saitama.jp\0rugby\0" +"kamitonda.wakayama.jp\0community.museum\0" +"pictet\0" +"serveirc.com\0" +"gov.ws\0" +"minami.kyoto.jp\0timekeeping.museum\0" +"carrara-massa.it\0florist\0" +"museum.om\0" +"intuit\0" +"maibara.shiga.jp\0" +"\xe5\xb2\x90\xe9\x98\x9c.jp\0red.sv\0" +"kumano.hiroshima.jp\0" +"paris.museum\0sciencecenter.museum\0" +"can.museum\0" +"nom.za\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0" +"gjovik.no\0gov.za\0from-ca.com\0" +"tomiya.miyagi.jp\0" +"hokuto.hokkaido.jp\0sukumo.kochi.jp\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0" +"kiryu.gunma.jp\0" +"custom.metacentrum.cz\0" +"nago.okinawa.jp\0shinjuku.tokyo.jp\0sopot.pl\0" +"dealer\0" +"k12.ut.us\0gov.zm\0drud.io\0" +"collegefan.org\0" +"tonsberg.no\0" +"navuotna.no\0\xd9\x83\xd9\x88\xd9\x85\0" +"reliance\0" +"capebreton.museum\0alibaba\0" +"hamatonbetsu.hokkaido.jp\0osoyro.no\0k12.oh.us\0gov.zw\0from-ky.com\0" +"nanjo.okinawa.jp\0" +"film\0" +"yun\0" +"trustee.museum\0" +"nt.edu.au\0muika.niigata.jp\0" +"memorial\0" +"homesense\0" +"shiroi.chiba.jp\0" +"yamagata.jp\0brother\0" +"wakayama.wakayama.jp\0" +"ltd.co.im\0myoko.niigata.jp\0" +"dinosaur.museum\0" +"izumi.osaka.jp\0" +"so.it\0nakagawa.tokushima.jp\0" +"kr\xc3\xb8""dsherad.no\0ulvik.no\0" +"vic.edu.au\0bel.tr\0" +"pe.it\0" +"nanto.toyama.jp\0" +"asn.au\0miyako.fukuoka.jp\0sennan.osaka.jp\0" +"tenri.nara.jp\0" +"shibetsu.hokkaido.jp\0" +"volyn.ua\0is-a-player.com\0" +"shaw\0" +"gdynia.pl\0" +"giving\0" +"shitara.aichi.jp\0sor-fron.no\0" +"\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" +"yamaga.kumamoto.jp\0evje-og-hornnes.no\0" +"samukawa.kanagawa.jp\0" +"is-lost.org\0" +"edu.krd\0now-dns.org\0" +"\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0" +"okinawa\0" +"luroy.no\0" +"nobeoka.miyazaki.jp\0armenia.su\0" +"pe.kr\0" +"washtenaw.mi.us\0lplfinancial\0" +"matsubara.osaka.jp\0" +"tn.us\0homegoods\0" +"christmas\0" +"audi\0\xe6\x8b\x9b\xe8\x81\x98\0mmafan.biz\0" +"adv.br\0" +"ferrara.it\0" +"fedje.no\0today\0" +"contemporaryart.museum\0" +"kira.aichi.jp\0tmall\0" +"africa.com\0" +"zip\0" +"of.by\0" +"aogaki.hyogo.jp\0" +"kumiyama.kyoto.jp\0ureshino.mie.jp\0" +"friuliv-giulia.it\0" +"yoga\0" +"\xe9\x9d\x92\xe6\xa3\xae.jp\0" +"poniatowa.pl\0" +"ap-southeast-2.elasticbeanstalk.com\0" +"beer\0" +"hb.cn\0" +"\xe9\x95\xb7\xe5\xb4\x8e.jp\0hikimi.shimane.jp\0" +"akishima.tokyo.jp\0fire\0s3.dualstack.eu-west-3.amazonaws.com\0" +"krodsherad.no\0miami\0" +"porsgrunn.no\0" +"posts-and-telecommunications.museum\0salvadordali.museum\0genting\0" +"h\xc3\xa1""bmer.no\0" +"pasadena.museum\0loginline.io\0" +"mukawa.hokkaido.jp\0solund.no\0" +"h\xc3\xa5.no\0lipsy\0" +"konan.shiga.jp\0force.museum\0wskr.gov.pl\0" +"\xc3\xa5snes.no\0" +"etc.br\0inagawa.hyogo.jp\0sumy.ua\0" +"atm.pl\0" +"rns.tn\0" +"nonoichi.ishikawa.jp\0fish\0" +"bamble.no\0" +"bulsan-s\xc3\xbc""dtirol.it\0inc.hk\0" +"erotica.hu\0trentino-aadige.it\0kadogawa.miyazaki.jp\0" +"kushimoto.wakayama.jp\0" +"de.com\0" +"from-mt.com\0from-nd.com\0" +"kvinesdal.no\0" +"school\0" +"\xe6\x89\x8b\xe6\x9c\xba\0myfritz.net\0" +"hopto.org\0" +"design.museum\0" +"monza-e-della-brianza.it\0" +"ohi.fukui.jp\0" +"dattolocal.net\0" +"redstone\0" +"futsu.nagasaki.jp\0" +"shimizu.shizuoka.jp\0twmail.net\0" +"scienceandhistory.museum\0" +"jp.eu.org\0" +"shia\0" +"no-ip.net\0" +"nayoro.hokkaido.jp\0in-vpn.net\0" +"jogasz.hu\0afjord.no\0" +"sp.gov.br\0rnrt.tn\0" +"tsuchiura.ibaraki.jp\0agdenes.no\0\xd1\x80\xd1\x83\xd1\x81\0" +"spy.museum\0\xe4\xb8\x96\xe7\x95\x8c\0" +"alta.no\0" +"ena.gifu.jp\0" +"gouv.fr\0forl\xc3\xac""cesena.it\0" +"kisosaki.mie.jp\0" +"lamborghini\0" +"jobs\0" +"\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0" +"n.se\0" +"tattoo\0" +"maif\0" +"taranto.it\0abeno.osaka.jp\0" +"finnoy.no\0" +"siena.it\0\xd9\x85\xd8\xb5\xd8\xb1\0" +"ota.gunma.jp\0" +"utsunomiya.tochigi.jp\0drud.us\0" +"imizu.toyama.jp\0" +"askim.no\0" +"gr.it\0" +"rzeszow.pl\0" +"v-info.info\0" +"koeln\0" +"gouv.ht\0mjondalen.no\0" +"s\xc3\xb8r-aurdal.no\0" +"gr.jp\0naka.ibaraki.jp\0fbxos.fr\0" +"date.hokkaido.jp\0" +"asn.lv\0so.gov.pl\0" +"wi.us\0" +"cable-modem.org\0spacekit.io\0" +"kvits\xc3\xb8y.no\0" +"koori.fukushima.jp\0edogawa.tokyo.jp\0" +"farmers\0" +"sakura.chiba.jp\0" +"sanagochi.tokushima.jp\0" +"handa.aichi.jp\0esashi.hokkaido.jp\0" +"torahime.shiga.jp\0" +"gouv.bj\0" +"kimino.wakayama.jp\0" +"gc.ca\0imabari.ehime.jp\0ia.us\0" +"vallee-aoste.it\0" +"health.nz\0" +"delivery\0" +"damnserver.com\0" +"gouv.ci\0ide.kyoto.jp\0" +"daisen.akita.jp\0" +"aerobatic.aero\0adygeya.su\0" +"homeunix.com\0" +"takamori.kumamoto.jp\0" +"plantation.museum\0" +"4u.com\0" +"adv.mz\0" +"kv\xc3\xa6nangen.no\0\xe6\x85\x88\xe5\x96\x84\0" +"kr.com\0" +"flight.aero\0shop\0" +"civilisation.museum\0of.no\0s3-website-eu-west-1.amazonaws.com\0" +"usantiques.museum\0" +"uvic.museum\0apps.lair.io\0" +"show\0" +"hadano.kanagawa.jp\0" +"tinn.no\0\xe8\x87\xba\xe7\x81\xa3\0" +"fukuchiyama.kyoto.jp\0" +"kunisaki.oita.jp\0" +"ferrero\0" +"aikawa.kanagawa.jp\0" +"tado.mie.jp\0london.museum\0" +"adygeya.ru\0" +"s3.cn-north-1.amazonaws.com.cn\0" +"natura\0" +"\xe6\xa0\x83\xe6\x9c\xa8.jp\0oki.fukuoka.jp\0" +"s3.dualstack.eu-central-1.amazonaws.com\0" +"joetsu.niigata.jp\0hinohara.tokyo.jp\0" +"patria.bo\0my-firewall.org\0" +"lucerne.museum\0" +"adult.ht\0cc.oh.us\0yodobashi\0" +"sogne.no\0in.london\0" +"best\0cisco\0" +"akune.kagoshima.jp\0gmina.pl\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"conference.aero\0nozawaonsen.nagano.jp\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" +"dyn-o-saur.com\0" +"hurum.no\0" +"pescara.it\0" +"from-wa.com\0" +"surrey.museum\0statebank\0" +"watches\0" +"auto\0" +"tec.mi.us\0" +"utashinai.hokkaido.jp\0ariake.saga.jp\0is-by.us\0" +"ryugasaki.ibaraki.jp\0fukudomi.saga.jp\0" +"ra.it\0" +"campinagrande.br\0portlligat.museum\0" +"cechire.com\0" +"tanagura.fukushima.jp\0hasama.oita.jp\0" +"madrid.museum\0" +"wroc.pl\0" +"mihama.aichi.jp\0miyake.nara.jp\0clinton.museum\0" +"m\xc3\xa5lselv.no\0" +"muko.kyoto.jp\0hitachi\0" +"feste-ip.net\0" +"uz.ua\0\xd1\x81\xd1\x80\xd0\xb1\0law.za\0landrover\0" +"zp.gov.pl\0" +"health.vn\0" +"ci.it\0echizen.fukui.jp\0" +"air-traffic-control.aero\0toscana.it\0" +"venezia.it\0hidaka.hokkaido.jp\0community\0" +"salud.bo\0" +"civilwar.museum\0trogstad.no\0" +"tomioka.gunma.jp\0" +"philately.museum\0" +"tranby.no\0" +"travel.pl\0" +"sr.gov.pl\0bauhaus\0" +"nv.us\0" +"maryland.museum\0" +"yokaichiba.chiba.jp\0" +"carraramassa.it\0s3-ap-southeast-2.amazonaws.com\0" +"kamimine.saga.jp\0" +"lib.wa.us\0" +"inabe.mie.jp\0" +"komatsu.ishikawa.jp\0discovery.museum\0" +"webhosting.be\0blogsyte.com\0" +"schaeffler\0" +"ekloges.cy\0buzen.fukuoka.jp\0zapto.org\0" +"bremanger.no\0" +"press.aero\0museumvereniging.museum\0" +"staples\0" +"static-access.net\0" +"bjerkreim.no\0" +"bj.cn\0sobetsu.hokkaido.jp\0ismaili\0" +"sumoto.kumamoto.jp\0stordal.no\0" +"fredrikstad.no\0" +"ami.ibaraki.jp\0shingu.wakayama.jp\0" +"oamishirasato.chiba.jp\0" +"kikonai.hokkaido.jp\0repair\0" +"nord-aurdal.no\0" +"okazaki.aichi.jp\0grondar.za\0" +"s3-sa-east-1.amazonaws.com\0" +"couchpotatofries.org\0" +"no-ip.info\0" +"vestre-slidre.no\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0" +"kishiwada.osaka.jp\0" +"airtraffic.aero\0nagano.jp\0inuyama.aichi.jp\0" +"dsmynas.org\0" +"amsterdam.museum\0hoyanger.no\0" +"travel.tt\0" +"ogose.saitama.jp\0" +"higashi.fukuoka.jp\0" +"for-the.biz\0" +"surnadal.no\0bytom.pl\0" +"winb.gov.pl\0wellbeingzone.eu\0" +"zentsuji.kagawa.jp\0minamidaito.okinawa.jp\0trondheim.no\0" +"res.aero\0" +"urbinopesaro.it\0" +"etajima.hiroshima.jp\0" +"gjemnes.no\0glitch.me\0" +"silk\0" +"kisarazu.chiba.jp\0" +"esurance\0" +"austevoll.no\0k12.ky.us\0sa-east-1.elasticbeanstalk.com\0better-than.tv\0" +"higashiagatsuma.gunma.jp\0ug.gov.pl\0" +"fuoisku.no\0" +"fbx-os.fr\0" +"fujieda.shizuoka.jp\0" +"openair.museum\0" +"suginami.tokyo.jp\0" +"kawaba.gunma.jp\0takasaki.gunma.jp\0stage.nodeart.io\0" +"warabi.saitama.jp\0" +"chirurgiens-dentistes-en-france.fr\0" +"virtualserver.io\0" +"sakae.chiba.jp\0kawai.nara.jp\0sina\0" +"oguni.yamagata.jp\0voss.no\0" +"pr.it\0" +"kitagawa.kochi.jp\0" +"odda.no\0" +"site.builder.nu\0" +"webhop.net\0" +"moka.tochigi.jp\0lincoln\0is.eu.org\0" +"pippu.hokkaido.jp\0" +"sciencesnaturelles.museum\0" +"gouv.sn\0" +"shibecha.hokkaido.jp\0" +"college\0url.tw\0" +"massa-carrara.it\0" +"diet\0*.otap.co\0" +"yashio.saitama.jp\0chofu.tokyo.jp\0" +"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" +"miasa.nagano.jp\0" +"l.bg\0servebbs.com\0" +"family\0" +"ichikawamisato.yamanashi.jp\0" +"2.bg\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0" +"komforb.se\0" +"customer.speedpartner.de\0" +"it.eu.org\0" +"caserta.it\0" +"tamba.hyogo.jp\0" +"miyako.iwate.jp\0" +"\xe7\xbd\x91\xe5\x9d\x80\0bmoattachments.org\0" +"kosei.shiga.jp\0" +"shakotan.hokkaido.jp\0" +"larsson.museum\0" +"tel.tr\0cherkassy.ua\0is-a-cubicle-slave.com\0" +"zappos\0lubartow.pl\0" +"oguni.kumamoto.jp\0" +"os\xc3\xb8yro.no\0" +"support\0" +"koshimizu.hokkaido.jp\0" +"film.hu\0assisi.museum\0hockey\0cistron.nl\0" +"nature.museum\0in.na\0" +"ardal.no\0cookingchannel\0" +"consulting.aero\0burghof.museum\0" +"shiraoka.saitama.jp\0in.ni\0vladimir.su\0" +"toba.mie.jp\0minnesota.museum\0" +"tsuruoka.yamagata.jp\0" +"caa.aero\0freight.aero\0" +"freeddns.org\0" +"oga.akita.jp\0no-ip.ca\0" +"umig.gov.pl\0nissan\0" +"\xc3\xb8rskog.no\0bplaced.com\0" +"site\0" +"tottori.tottori.jp\0" +"muroto.kochi.jp\0review\0" +"kamikawa.hyogo.jp\0karmoy.no\0go-vip.net\0" +"nissay\0" +"yawara.ibaraki.jp\0riodejaneiro.museum\0" +"in.eu.org\0" +"uchiko.ehime.jp\0yao.osaka.jp\0auto.pl\0" +"horse\0is-a-liberal.com\0" +"voorloper.cloud\0" +"freeddns.us\0" +"nishinoshima.shimane.jp\0limanowa.pl\0" +"cc.tn.us\0" +"minokamo.gifu.jp\0estate.museum\0k12.nv.us\0\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0vladimir.ru\0" +"bristol.museum\0" +"steinkjer.no\0" +"heimatunduhren.museum\0koeln.museum\0" +"golffan.us\0" +"targi.pl\0" +"fukushima.hokkaido.jp\0" +"fosnes.no\0showtime\0" +"essex.museum\0" +"hicam.net\0" +"ikawa.akita.jp\0" +"gouv.km\0" +"medizinhistorisches.museum\0" +"happou.akita.jp\0ilawa.pl\0" +"to.gov.br\0" +"chippubetsu.hokkaido.jp\0" +"pc.it\0in.rs\0" +"dell-ogliastra.it\0suwalki.pl\0" +"itoigawa.niigata.jp\0toshima.tokyo.jp\0wolterskluwer\0" +"li.it\0namikata.ehime.jp\0" +"ddnss.org\0" +"fukushima.jp\0muroran.hokkaido.jp\0" +"eu-west-1.elasticbeanstalk.com\0" +"ama.aichi.jp\0" +"geek.nz\0quicksytes.com\0" +"agriculture.museum\0" +"citic\0" +"chase\0wales\0dscloud.mobi\0" +"fuefuki.yamanashi.jp\0gouv.ml\0in.th\0" +"iwatsuki.saitama.jp\0" +"chiyoda.tokyo.jp\0is-not-certified.com\0" +"seirou.niigata.jp\0" +"nt.au\0" +"meldal.no\0" +"wv.us\0" +"shizukuishi.iwate.jp\0" +"in.ua\0pa.leg.br\0" +"texas.museum\0univ.sn\0cyou\0virtual-user.de\0" +"vlaanderen\0" +"law.pro\0cust.disrec.thingdust.io\0" +"nt.ca\0pr.us\0" +"nakagusuku.okinawa.jp\0" +"togura.nagano.jp\0okinawa.okinawa.jp\0" +"\xc3\xa1k\xc5\x8boluokta.no\0k\xc3\xa5""fjord.no\0" +"tottori.jp\0ikeda.fukui.jp\0onna.okinawa.jp\0republican\0" +"rightathome\0" +"town.museum\0in.us\0" +"city.hu\0jprs\0" +"flanders.museum\0" +"ditchyourip.com\0firewall-gateway.de\0" +"olawa.pl\0" +"veterinaire.km\0youtube\0" +"sorfold.no\0az.us\0" +"sakai.fukui.jp\0arai.shizuoka.jp\0" +"lib.ri.us\0" +"is-a-financialadvisor.com\0pb.leg.br\0" +"dyn53.io\0" +"troitsk.su\0" +"friulivegiulia.it\0lib.ms.us\0lib.nc.us\0futbol\0" +"\xe9\xab\x98\xe7\x9f\xa5.jp\0frosta.no\0servebeer.com\0" +"suli.hu\0from-pr.com\0" +"ina.nagano.jp\0" +"nosegawa.nara.jp\0" +"genoa.it\0" +"shopping\0" +"parma.it\0misasa.tottori.jp\0firebaseapp.com\0" +"nakagawa.fukuoka.jp\0" +"in-addr.arpa\0" +"lib.ca.us\0twmail.org\0memset.net\0" +"komvux.se\0" +"dish\0" +"legnica.pl\0" +"oita.jp\0" +"perugia.it\0kamoenai.hokkaido.jp\0" +"kobayashi.miyazaki.jp\0" +"wales.museum\0" +"flir\0" +"joboji.iwate.jp\0foodnetwork\0" +"com.ac\0" +"teramo.it\0terni.it\0" +"com.af\0\xe6\x84\x9b\xe5\xaa\x9b.jp\0" +"com.ag\0" +"bato.tochigi.jp\0" +"com.ai\0pc.pl\0" +"paris.eu.org\0" +"com.al\0intel\0" +"com.am\0hurdal.no\0" +"veterinaire.fr\0" +"com.ba\0" +"com.ar\0com.bb\0genkai.saga.jp\0myddns.rocks\0" +"fujinomiya.shizuoka.jp\0lyngen.no\0n\xc3\xb8tter\xc3\xb8y.no\0" +"loyalist.museum\0wedding\0" +"com.au\0" +"com.aw\0forgot.his.name\0" +"com.bh\0piemonte.it\0tokashiki.okinawa.jp\0" +"com.bi\0cc.wi.us\0" +"com.az\0ueda.nagano.jp\0kofu.yamanashi.jp\0building.museum\0" +"com.bm\0\xe5\x9f\xbc\xe7\x8e\x89.jp\0fedex\0" +"com.bn\0" +"com.bo\0taku.saga.jp\0" +"carbonia-iglesias.it\0k12.nm.us\0is-gone.com\0" +"com.br\0soundcast.me\0" +"com.bs\0" +"com.bt\0" +"friulive-giulia.it\0notaires.km\0" +"zara\0" +"com.by\0com.ci\0" +"com.bz\0" +"oguchi.aichi.jp\0wmflabs.org\0" +"com.cm\0cc.ia.us\0\xd1\x83\xd0\xba\xd1\x80\0prudential\0" +"production.aero\0com.cn\0showa.gunma.jp\0iobb.net\0" +"jdf.br\0com.co\0" +"takehara.hiroshima.jp\0" +"tsukigata.hokkaido.jp\0s3-eu-west-3.amazonaws.com\0" +"ishikawa.jp\0urausu.hokkaido.jp\0l.se\0" +"com.cu\0rn.it\0americanart.museum\0com.de\0" +"hisamitsu\0" +"com.cw\0" +"\xce\xb5\xce\xbb\0hb.cldmail.ru\0" +"imb.br\0com.cy\0" +"washingtondc.museum\0" +"com.dm\0mycd.eu\0nid.io\0" +"encyclopedic.museum\0penza.su\0" +"com.do\0" +"com.ec\0hirara.okinawa.jp\0" +"*.sendai.jp\0kosuge.yamanashi.jp\0" +"com.ee\0mikawa.yamagata.jp\0stockholm\0" +"com.eg\0tosu.saga.jp\0" +"izumizaki.fukushima.jp\0sm.ua\0" +"com.dz\0balestrand.no\0" +"avoues.fr\0" +"infiniti\0" +"hikawa.shimane.jp\0" +"aomori.jp\0" +"saroma.hokkaido.jp\0" +"vet.br\0com.es\0" +"com.et\0" +"hokuryu.hokkaido.jp\0staging.onred.one\0" +"nahari.kochi.jp\0" +"londrina.br\0" +"pgafan.net\0" +"is-a-bruinsfan.org\0" +"com.fr\0tobishima.aichi.jp\0" +"com.ge\0otago.museum\0rygge.no\0ky.us\0co.business\0" +"cooking\0" +"sasayama.hyogo.jp\0skedsmokorset.no\0no-ip.co.uk\0" +"com.gh\0valle-aosta.it\0gs.of.no\0" +"com.gi\0tomari.hokkaido.jp\0" +"v\xc3\xa5ler.hedmark.no\0" +"mordovia.su\0" +"com.gl\0" +"com.gn\0lindas.no\0" +"com.gp\0dyndns-blog.com\0" +"trentinoaadige.it\0" +"com.gr\0" +"goshiki.hyogo.jp\0\xe7\xbd\x91\xe7\xab\x99\0" +"com.gt\0ak.us\0americanexpress\0" +"com.gu\0taiki.mie.jp\0productions\0" +"forsale\0*.0emm.com\0" +"ssl.origin.cdn77-secure.org\0" +"com.gy\0" +"com.hk\0agrigento.it\0kamigori.hyogo.jp\0" +"sch.ae\0oe.yamagata.jp\0" +"com.hn\0bjark\xc3\xb8y.no\0dyndns-mail.com\0" +"pistoia.it\0holdings\0*.stg.dev\0" +"com.hr\0nome.pt\0ltda\0" +"com.ht\0" +"nt.no\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0comsec\0" +"kiso.nagano.jp\0" +"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0dynalias.net\0" +"tunes\0" +"r\xc3\xa6lingen.no\0hepforge.org\0" +"tank.museum\0" +"com.im\0wajiki.tokushima.jp\0" +"com.io\0" +"iwate.iwate.jp\0" +"com.iq\0work\0" +"catania.it\0shibata.miyagi.jp\0seoul.kr\0" +"com.is\0kasuya.fukuoka.jp\0gemological.museum\0groks-this.info\0" +"press.museum\0rocks\0" +"orsta.no\0" +"iris.arpa\0" +"malvik.no\0" +"mordovia.ru\0" +"tsuyama.okayama.jp\0" +"s\xc3\xb8ndre-land.no\0" +"schokokeks.net\0" +"com.jo\0" +"lugansk.ua\0" +"kazuno.akita.jp\0" +"eu.meteorapp.com\0" +"ibara.okayama.jp\0sklep.pl\0nis.za\0cloud.fedoraproject.org\0" +"com.kg\0\xd7\xa7\xd7\x95\xd7\x9d\0s3.dualstack.ap-southeast-1.amazonaws.com\0" +"com.ki\0" +"jan-mayen.no\0" +"kunigami.okinawa.jp\0" +"com.km\0" +"tsumagoi.gunma.jp\0" +"usdecorativearts.museum\0leikanger.no\0" +"obira.hokkaido.jp\0com.kp\0" +"com.la\0" +"com.lb\0*.alces.network\0" +"com.lc\0" +"artanddesign.museum\0osen.no\0" +"sn\xc3\xa5sa.no\0" +"com.kw\0dreamhosters.com\0" +"tamakawa.fukushima.jp\0mykolaiv.ua\0" +"com.ky\0" +"com.kz\0" +"com.lk\0freebox-os.fr\0withyoutube.com\0" +"cc.nv.us\0" +"aknoluokta.no\0" +"pi.leg.br\0" +"pvh.br\0" +"tsunan.niigata.jp\0com.lr\0skin\0" +"k12.fl.us\0pizza\0" +"kashima.saga.jp\0nt.ro\0" +"com.lv\0" +"cuneo.it\0kainan.tokushima.jp\0com.mg\0*.kunden.ortsinfo.at\0" +"k12.ar.us\0" +"com.ly\0" +"com.mk\0discover\0from-id.com\0" +"com.ml\0tysvar.no\0" +"n\xc3\xa6r\xc3\xb8y.no\0bplaced.net\0" +"kai.yamanashi.jp\0" +"com.mo\0globo\0" +"com.na\0" +"bifuka.hokkaido.jp\0" +"com.ms\0lunner.no\0qualifioapp.com\0" +"com.mt\0" +"obama.nagasaki.jp\0com.mu\0" +"com.mv\0com.nf\0vuelos\0" +"com.mw\0com.ng\0" +"com.mx\0" +"com.my\0com.ni\0" +"kamagaya.chiba.jp\0" +"df.gov.br\0komatsu\0" +"channelsdvr.net\0global.prod.fastly.net\0" +"nara.jp\0" +"mo\xc3\xa5reke.no\0bible\0" +"ne.jp\0" +"uenohara.yamanashi.jp\0bindal.no\0com.nr\0" +"ne.ke\0" +"tula.su\0" +"costume.museum\0od.ua\0" +"bulsan-sudtirol.it\0soma.fukushima.jp\0osakikamijima.hiroshima.jp\0nishikawa.yamagata.jp\0user.aseinet.ne.jp\0" +"y.bg\0" +"pp.az\0com.om\0" +"bilbao.museum\0" +"ne.kr\0com.pa\0" +"definima.net\0" +"cloudfront.net\0" +"com.pe\0" +"com.pf\0cv.ua\0" +"kitayama.wakayama.jp\0lier.no\0" +"com.ph\0at-band-camp.net\0" +"sch.id\0com.pk\0" +"tj.cn\0com.pl\0" +"shimotsuma.ibaraki.jp\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0" +"ruovat.no\0" +"com.qa\0" +"kamitsue.oita.jp\0com.pr\0mlbfan.org\0" +"\xe4\xbd\x90\xe8\xb3\x80.jp\0bill.museum\0com.ps\0exchange\0" +"com.pt\0" +"jgora.pl\0" +"sch.ir\0com.py\0go-vip.co\0" +"center\0" +"elasticbeanstalk.com\0" +"pvt.k12.ma.us\0" +"otsuki.kochi.jp\0" +"nextdirect\0" +"the.br\0dsmynas.net\0" +"com.re\0lib.la.us\0" +"natal.br\0sch.jo\0" +"karasuyama.tochigi.jp\0" +"ravenna.it\0" +"matsubushi.saitama.jp\0deals\0vpndns.net\0" +"med.br\0meland.no\0" +"perso.ht\0ringebu.no\0" +"ikoma.nara.jp\0sakai.osaka.jp\0" +"anthropology.museum\0durham.museum\0" +"com.ro\0" +"weather\0myjino.ru\0" +"com.sa\0" +"dgca.aero\0com.sb\0" +"com.sc\0" +"com.sd\0" +"com.se\0com.ru\0" +"ibaraki.jp\0com.sg\0" +"com.sh\0" +"matsumoto.nagano.jp\0" +"niigata.jp\0com.sl\0" +"video\0" +"art.museum\0virtual.museum\0com.sn\0" +"com.so\0" +"itako.ibaraki.jp\0sch.lk\0rodeo\0" +"com.ss\0northwesternmutual\0" +"ogata.akita.jp\0com.st\0pt.eu.org\0" +"opoczno.pl\0podhale.pl\0lugs.org.uk\0" +"arteducation.museum\0com.sv\0xnbay.com\0" +"com.sy\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0com.tj\0" +"milano.it\0roma.it\0s3-fips-us-gov-west-1.amazonaws.com\0" +"med.ec\0*.awdev.ca\0" +"com.tm\0" +"med.ee\0com.tn\0" +"com.to\0pe.leg.br\0yandexcloud.net\0" +"sch.ly\0" +"com.ua\0paris\0" +"com.tr\0discourse.group\0" +"host\0" +"com.tt\0" +"francaise.museum\0ne.pw\0" +"com.tw\0com.ug\0us-east-1.elasticbeanstalk.com\0" +"modelling.aero\0k12.sc.us\0" +"katsuragi.wakayama.jp\0klodzko.pl\0" +"rad\xc3\xb8y.no\0from-la.net\0" +"nishiawakura.okayama.jp\0" +"sch.ng\0online.th\0from-ak.com\0" +"utah.museum\0" +"v\xc3\xa5gan.no\0" +"nagasaki.jp\0" +"ogasawara.tokyo.jp\0varoy.no\0com.vc\0" +"v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"com.ve\0" +"k12.gu.us\0" +"priv.hu\0" +"com.uy\0com.vi\0" +"trani-andria-barletta.it\0kawaminami.miyazaki.jp\0com.uz\0" +"tr\xc3\xb8gstad.no\0" +"iijima.nagano.jp\0" +"com.vn\0" +"isumi.chiba.jp\0" +"*.moonscale.io\0" +"com.vu\0" +"tohnosho.chiba.jp\0" +"guide\0" +"yolasite.com\0" +"is-a-lawyer.com\0" +"mugi.tokushima.jp\0" +"democracia.bo\0" +"*.nagoya.jp\0" +"com.ws\0" +"lifestyle\0" +"helsinki\0" +"miyada.nagano.jp\0" +"\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" +"sch.qa\0" +"akaiwa.okayama.jp\0" +"med.ht\0" +"flog.br\0" +"from-tx.com\0" +"s3-website.eu-west-3.amazonaws.com\0" +"j.bg\0okawa.kochi.jp\0we.bs\0" +"brumunddal.no\0pruszkow.pl\0ne.ug\0" +"odo.br\0ponpes.id\0" +"sk.ca\0*.sapporo.jp\0" +"ne.tz\0" +"0.bg\0corsica\0" +"grane.no\0" +"motosu.gifu.jp\0" +"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" +"taa.it\0" +"minamiaiki.nagano.jp\0" +"lowicz.pl\0ne.us\0cloudns.pro\0" +"surgeonshall.museum\0" +"sandoy.no\0" +"textile.museum\0" +"sch.sa\0" +"ga.us\0" +"com.zm\0" +"trd.br\0ogawa.nagano.jp\0" +"trentino-stirol.it\0wegrow.pl\0selfip.net\0" +"vlog.br\0est-a-la-masion.com\0" +"obu.aichi.jp\0" +"meet\0" +"fhsk.se\0sch.so\0" +"kasugai.aichi.jp\0stuff-4-sale.org\0kalmykia.su\0priv.at\0" +"architecture.museum\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" +"nagiso.nagano.jp\0" +"balsan-suedtirol.it\0" +"romskog.no\0grozny.su\0telebit.app\0" +"beiarn.no\0" +"koge.tottori.jp\0" +"takata.fukuoka.jp\0iwafune.tochigi.jp\0aremark.no\0" +"of.fashion\0" +"iiyama.nagano.jp\0cambridge.museum\0lib.al.us\0" +"ouda.nara.jp\0" +"trentin-sud-tirol.it\0kawakami.nara.jp\0" +"med.ly\0" +"wedeploy.sh\0" +"kijo.miyazaki.jp\0" +"fl\xc3\xa5.no\0" +"tono.iwate.jp\0" +"masfjorden.no\0" +"yoichi.hokkaido.jp\0" +"gateway.museum\0bike\0" +"h\xc3\xb8nefoss.no\0" +"rexroth\0" +"kure.hiroshima.jp\0" +"kalmykia.ru\0" +"tsuno.kochi.jp\0" +"nagawa.nagano.jp\0" +"engineer.aero\0notaires.fr\0" +"flora.no\0" +"moriyama.shiga.jp\0" +"izu.shizuoka.jp\0" +"kouzushima.tokyo.jp\0" +"cc.wv.us\0azure\0is-a-nurse.com\0pr.leg.br\0" +"gamagori.aichi.jp\0" +"fuji.shizuoka.jp\0" +"grozny.ru\0" +"engerdal.no\0" +"yame.fukuoka.jp\0med.om\0liaison\0" +"tashkent.su\0" +"cc.pr.us\0\xe6\x94\xbf\xe5\xba\x9c\0" +"med.pa\0" +"s\xc3\xb8rreisa.no\0bashkiria.ru\0" +"shimokawa.hokkaido.jp\0" +"archaeology.museum\0parts\0" +"sveio.no\0cityeats\0" +"cc.in.us\0" +"florida.museum\0med.pl\0" +"canada.museum\0" +"party\0homedns.org\0dyn-vpn.de\0" +"pp.se\0pp.ru\0" +"shimonita.gunma.jp\0kawachinagano.osaka.jp\0" +"y.se\0" +"tsugaru.aomori.jp\0nesodden.no\0is-an-engineer.com\0" +"rj.gov.br\0" +"usgarden.museum\0cc.az.us\0click\0" +"bashkiria.su\0" +"agematsu.nagano.jp\0" +"pa.it\0obama.fukui.jp\0" +"umb.it\0railroad.museum\0" +"nikolaev.ua\0bing\0" +"yokoze.saitama.jp\0" +"repl.run\0" +"firewall-gateway.com\0" +"lg.jp\0holmestrand.no\0bar.pro\0broke-it.net\0" +"kasamatsu.gifu.jp\0channel\0" +"taobao\0" +"sch.zm\0pp.ua\0" +"meme\0" +"b\xc3\xb8.nordland.no\0" +"sumoto.hyogo.jp\0lv.ua\0" +"med.sa\0" +"langevag.no\0med.sd\0" +"careers\0" +"onojo.fukuoka.jp\0" +"crown\0moscow\0" +"alaska.museum\0" +"anani.br\0susono.shizuoka.jp\0mysecuritycamera.net\0" +"radom.pl\0" +"takko.aomori.jp\0matsukawa.nagano.jp\0" +"dattorelay.com\0" +"calvinklein\0" +"aca.pro\0" +"il.us\0" +"oyama.tochigi.jp\0" +"bplaced.de\0" +"lig.it\0condos\0dynvpn.de\0" +"tydal.no\0menu\0" +"jx.cn\0" +"tokai.aichi.jp\0stat.no\0" +"toyoura.hokkaido.jp\0shinagawa.tokyo.jp\0" +"geology.museum\0" +"lib.ne.us\0forex\0" +"kitakata.fukushima.jp\0labour.museum\0" +"oregon.museum\0perso.sn\0supplies\0" +"oppdal.no\0" +"mielno.pl\0" +"photos\0" +"lazio.it\0" +"inder\xc3\xb8y.no\0" +"naroy.no\0" +"nikko.tochigi.jp\0hm.no\0" +"dellogliastra.it\0perso.tn\0" +"ayagawa.kagawa.jp\0" +"barum.no\0" +"nagasu.kumamoto.jp\0" +"nakai.kanagawa.jp\0ikano\0l-o-g-i-n.de\0" +"setouchi.okayama.jp\0" +"tenkawa.nara.jp\0" +"is-a-personaltrainer.com\0wedeploy.me\0" +"uhren.museum\0" +"hitachinaka.ibaraki.jp\0rissa.no\0" +"nieruchomosci.pl\0" +"gs.jan-mayen.no\0" +"trentin-sued-tirol.it\0" +"tsuru.yamanashi.jp\0" +"ofunato.iwate.jp\0" +"oto.fukuoka.jp\0" +"b-data.io\0" +"cleaning\0" +"birkenes.no\0laakesvuemie.no\0" +"war.museum\0appchizi.com\0" +"eidsberg.no\0" +"sevastopol.ua\0house\0" +"tateyama.chiba.jp\0" +"swiebodzin.pl\0" +"shishikui.tokushima.jp\0" +"kanagawa.jp\0palmsprings.museum\0yalta.ua\0" +"mashiko.tochigi.jp\0" +"cc.ky.us\0" +"cloudns.org\0" +"historyofscience.museum\0" +"yanaizu.fukushima.jp\0akkeshi.hokkaido.jp\0ap-northeast-3.elasticbeanstalk.com\0" +"hangout\0" +"izumo.shimane.jp\0farsund.no\0" +"per.la\0cc.ak.us\0flights\0" +"stjordal.no\0" +"its.me\0" +"mitsuke.niigata.jp\0hino.tokyo.jp\0" +"horology.museum\0pokrovsk.su\0" +"vision\0" +"bio.br\0pioneer\0" +"cheap\0" +"annaka.gunma.jp\0" +"vall\xc3\xa9""e-aoste.it\0" +"sandvikcoromant\0" +"ct.it\0" +"website\0" +"uzs.gov.pl\0" +"*.compute.estate\0" +"tsurugi.ishikawa.jp\0minamimaki.nagano.jp\0" +"square.museum\0lg.ua\0" +"abiko.chiba.jp\0kerryhotels\0" +"tychy.pl\0" +"sannan.hyogo.jp\0" +"kurate.fukuoka.jp\0" +"spb.ru\0" +"per.nf\0" +"uda.nara.jp\0arts.museum\0" +"oiso.kanagawa.jp\0" +"pa.us\0" +"tw.cn\0" +"directory\0luxe\0" +"gs.nt.no\0amsterdam\0" +"dynalias.org\0spb.su\0" +"dyndns.org\0from-sd.com\0" +"*.kawasaki.jp\0" +"ojiya.niigata.jp\0" +"sa.gov.au\0priv.pl\0" +"mediocampidano.it\0" +"kawakita.ishikawa.jp\0" +"tozsde.hu\0" +"consultant.aero\0" +"choyo.kumamoto.jp\0lanxess\0hu.net\0" +"vf.no\0" +"kokubunji.tokyo.jp\0" +"rl.no\0" +"halloffame.museum\0" +"ginoza.okinawa.jp\0" +"valle-d-aosta.it\0" +"suisse.museum\0" +"soc.lk\0kddi\0" +"national.museum\0" +"*.elb.amazonaws.com\0" +"hirono.fukushima.jp\0""3utilities.com\0" +"yonaguni.okinawa.jp\0" +"priv.no\0" +"vinnica.ua\0" +"clubmed\0" +"creditcard\0money\0" +"deatnu.no\0\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0is-into-anime.com\0cloud.goog\0" +"s3-us-west-1.amazonaws.com\0s3-website-us-west-1.amazonaws.com\0" +"rr.gov.br\0" +"tamamura.gunma.jp\0" +"s3.ca-central-1.amazonaws.com\0" +"bonn.museum\0" +"keisen.fukuoka.jp\0" +"est-a-la-maison.com\0" +"bo.telemark.no\0" +"ise.mie.jp\0" +"accountant\0" +"\xc3\xa5mli.no\0per.sg\0" +"campania.it\0" +"ski.no\0" +"blogspot.com.cy\0" +"tanohata.iwate.jp\0ashikaga.tochigi.jp\0bounceme.net\0" +"priv.me\0" +"mitane.akita.jp\0" +"sejny.pl\0" +"rs.gov.br\0sc.gov.br\0wazuka.kyoto.jp\0" +"k12.id.us\0" +"volvo\0" +"turin.it\0blogspot.com.ee\0" +"lamer\0" +"tarumizu.kagoshima.jp\0blogspot.com.eg\0" +"s3.dualstack.eu-west-1.amazonaws.com\0east-kazakhstan.su\0" +"awaji.hyogo.jp\0" +"umbria.it\0fujimi.nagano.jp\0nov.ru\0" +"s\xc3\xb8r-fron.no\0" +"ebino.miyazaki.jp\0orx.biz\0" +"wedeploy.io\0" +"school.museum\0" +"onyourside\0s3-website-ap-southeast-1.amazonaws.com\0xenapponazure.com\0" +"blogspot.com.ar\0" +"chikuma.nagano.jp\0toshiba\0" +"us.com\0" +"blogspot.com.au\0" +"ms.it\0" +"elk.pl\0nohost.me\0" +"sakado.saitama.jp\0" +"forum\0" +"shinkamigoto.nagasaki.jp\0nov.su\0" +"guovdageaidnu.no\0" +"ba.gov.br\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0firmdale\0gmail\0" +"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0is-very-bad.org\0blogspot.com.br\0" +"kadena.okinawa.jp\0\xe4\xb8\xad\xe5\x9b\xbd\0*.spectrum.myjino.ru\0" +"ce.it\0rindal.no\0" +"noda.chiba.jp\0hoteles\0" +"kopervik.no\0myfirewall.org\0" +"traniandriabarletta.it\0blogspot.com.by\0" +"cymru.museum\0" +"w.bg\0kh.ua\0blogspot.com.co\0" +"alstahaug.no\0" +"\xe4\xb8\xad\xe5\x9c\x8b\0gb.com\0" +"komatsushima.tokushima.jp\0arakawa.tokyo.jp\0" +"ms.kr\0" +"food\0" +"sandefjord.no\0" +"stranda.no\0" +"sncf\0" +"sx.cn\0" +"kawanabe.kagoshima.jp\0" +"md.ci\0serveexchange.com\0" +"s3.ap-northeast-2.amazonaws.com\0" +"ct.us\0" +"whaling.museum\0rana.no\0game.tw\0" +"yotsukaido.chiba.jp\0" +"osteroy.no\0" +"caltanissetta.it\0" +"schule\0xbox\0" +"blogspot.com.es\0" +"higashiura.aichi.jp\0casacam.net\0" +"iamallama.com\0" +"nagai.yamagata.jp\0" +"kaisei.kanagawa.jp\0lib.ks.us\0stufftoread.com\0" +"website.yandexcloud.net\0" +"aioi.hyogo.jp\0" +"ras.ru\0" +"rn.gov.br\0udono.mie.jp\0" +"\xe7\xb5\x84\xe7\xbb\x87.hk\0origins\0" +"kuju.oita.jp\0" +"football\0lawyer\0" +"ford\0" +"ikaruga.nara.jp\0nanbu.tottori.jp\0" +"modena.it\0\xe8\x81\x94\xe9\x80\x9a\0" +"eng.br\0" +"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" +"otari.nagano.jp\0kin.okinawa.jp\0" +"shiso.hyogo.jp\0" +"bu.no\0cupcake.is\0" +"hirosaki.aomori.jp\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" +"computer\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0liguria.it\0hanamigawa.chiba.jp\0chrome\0" +"is-an-anarchist.com\0" +"tananger.no\0gop.pk\0" +"fie.ee\0" +"canon\0" +"ro.gov.br\0" +"diskstation.me\0" +"aircraft.aero\0realtor\0" +"kahoku.yamagata.jp\0" +"ryuoh.shiga.jp\0" +"gunma.jp\0lebork.pl\0" +"aisai.aichi.jp\0" +"diskstation.eu\0" +"motorcycle.museum\0karpacz.pl\0" +"attorney\0" +"cc.ne.us\0" +"am.gov.br\0" +"international\0" +"2ix.at\0" +"britishcolumbia.museum\0sebastopol.ua\0cc.ga.us\0\xe7\x82\xb9\xe7\x9c\x8b\0" +"frontdoor\0" +"s3.dualstack.sa-east-1.amazonaws.com\0" +"osakasayama.osaka.jp\0" +"pn.it\0" +"yawatahama.ehime.jp\0somna.no\0" +"lt.it\0" +"nanyo.yamagata.jp\0nissedal.no\0" +"dep.no\0" +"*.platform.sh\0" +"forlicesena.it\0donostia.museum\0s3.dualstack.ap-northeast-2.amazonaws.com\0no.com\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0""2ix.ch\0" +"kurashiki.okayama.jp\0" +"rentals\0is-an-artist.com\0" +"minamifurano.hokkaido.jp\0motorcycles\0" +"puglia.it\0av.it\0delmenhorst.museum\0" +"kragero.no\0" +"venice.it\0""2ix.de\0" +"nc.tr\0" +"selfip.org\0" +"h.bg\0from-dc.com\0in-the-band.net\0" +"haram.no\0" +"khplay.nl\0" +"selfip.info\0karelia.su\0mysecuritycamera.org\0" +"test-iserv.de\0" +"pors\xc3\xa1\xc5\x8bgu.no\0" +"takasago.hyogo.jp\0artcenter.museum\0" +"blogspot.com.mt\0" +"ms.us\0nc.us\0" +"chitose.hokkaido.jp\0" +"blogspot.com.ng\0" +"val-d-aosta.it\0raisa.no\0" +"tamatsukuri.ibaraki.jp\0" +"friuli-veneziagiulia.it\0yachiyo.chiba.jp\0" +"musica.ar\0" +"in.net\0" +"nuoro.it\0ms.leg.br\0" +"kuromatsunai.hokkaido.jp\0przeworsk.pl\0" +"smola.no\0" +"equipment.aero\0" +"hk.cn\0" +"itabashi.tokyo.jp\0stalbans.museum\0nannestad.no\0" +"musica.bo\0lib.nv.us\0" +"schokoladen.museum\0" +"esan.hokkaido.jp\0" +"own.pm\0" +"k12.ec\0realm.cz\0" +"chino.nagano.jp\0mayfirst.org\0" +"ichiba.tokushima.jp\0" +"bryne.no\0lib.ct.us\0is-an-accountant.com\0" +"iyo.ehime.jp\0sener\0" +"george\0" +"ap.gov.br\0" +"nishiarita.saga.jp\0takahata.yamagata.jp\0krokstadelva.no\0barsy.shop\0" +"blogspot.com.tr\0" +"mt.leg.br\0" +"hsbc\0icbc\0unusualperson.com\0" +"natori.miyagi.jp\0" +"gose.nara.jp\0" +"bharti\0flowers\0" +"pug.it\0pila.pl\0" +"kyotango.kyoto.jp\0" +"iitate.fukushima.jp\0pl.eu.org\0" +"ap.gov.pl\0" +"zero\0" +"cartier\0" +"cricket\0" +"baidar.no\0tiffany\0" +"konin.pl\0" +"illustration.museum\0" +"brandywinevalley.museum\0" +"munakata.fukuoka.jp\0leka.no\0from-va.com\0" +"touch.museum\0" +"is-a-bulls-fan.com\0" +"leangaviika.no\0" +"t3l3p0rt.net\0" +"tobe.ehime.jp\0" +"berlev\xc3\xa5g.no\0" +"godaddy\0blogdns.com\0" +"miyazaki.miyazaki.jp\0" +"krager\xc3\xb8.no\0" +"cc.il.us\0" +"earth\0" +"vs.it\0playstation\0" +"w.se\0" +"si.it\0" +"se.gov.br\0k12.il\0" +"nakagawa.hokkaido.jp\0edeka\0ac.leg.br\0" +"ono.fukui.jp\0" +"kiyosato.hokkaido.jp\0shika.ishikawa.jp\0atsugi.kanagawa.jp\0" +"mikasa.hokkaido.jp\0" +"tako.chiba.jp\0" +"appspot.com\0" +"le.it\0seika.kyoto.jp\0" +"barcelona.museum\0" +"space-to-rent.com\0" +"verdal.no\0" +"inazawa.aichi.jp\0" +"heguri.nara.jp\0epson\0" +"microlight.aero\0ag.it\0" +"blogspot.com.uy\0" +"\xe7\xbd\x91\xe7\xbb\x9c\0" +"katano.osaka.jp\0mosj\xc3\xb8""en.no\0lt.ua\0" +"e12.ve\0" +"\xe7\xbd\x91\xe7\xbb\x9c.cn\0" +"yn.cn\0" +"not.br\0" +"av.tr\0" +"md.us\0" +"christiansburg.museum\0" +"hiraizumi.iwate.jp\0" +"montreal.museum\0" +"nichinan.miyazaki.jp\0" +"makeup\0" +"doomdns.com\0" +"al.eu.org\0" +"saves-the-whales.com\0" +"hanyu.saitama.jp\0" +"gs.hm.no\0" +"kainan.wakayama.jp\0" +"protonet.io\0" +"construction\0" +"katsuyama.fukui.jp\0" +"kaho.fukuoka.jp\0" +"acct.pro\0" +"\xc3\xa5seral.no\0kaszuby.pl\0" +"edu.ac\0" +"isesaki.gunma.jp\0caseih\0" +"l\xc3\xa1hppi.no\0" +"edu.af\0vana\0operaunite.com\0" +"neyagawa.osaka.jp\0saskatchewan.museum\0photography\0" +"ginan.gifu.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0" +"edu.al\0davvenj\xc3\xa1rga.no\0is-a-rockstar.com\0" +"hidaka.wakayama.jp\0" +"audnedaln.no\0" +"mopar\0" +"edu.ba\0" +"edu.ar\0edu.bb\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"cody.museum\0" +"khmelnytskyi.ua\0\xe5\xbe\xae\xe5\x8d\x9a\0" +"edu.au\0nogata.fukuoka.jp\0ashibetsu.hokkaido.jp\0\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" +"sa.gov.pl\0" +"edu.bh\0" +"gliding.aero\0edu.bi\0sohu\0" +"edu.az\0miyagi.jp\0" +"science-fiction.museum\0" +"edu.bm\0allstate\0" +"edu.bn\0" +"edu.bo\0v\xc3\xa1rgg\xc3\xa1t.no\0" +"yamada.iwate.jp\0" +"wanggou\0" +"edu.br\0" +"edu.bs\0" +"edu.bt\0" +"arida.wakayama.jp\0" +"edu.ci\0" +"edu.bz\0" +"tsubame.niigata.jp\0habikino.osaka.jp\0" +"edu.cn\0\xe7\xbd\x91\xe7\xbb\x9c.hk\0" +"edu.co\0" +"\xe9\x95\xb7\xe9\x87\x8e.jp\0hzc.io\0" +"sa.edu.au\0aso.kumamoto.jp\0kasukabe.saitama.jp\0" +"kamikawa.saitama.jp\0" +"edu.cu\0" +"geisei.kochi.jp\0" +"edu.cw\0" +"saogonca.br\0" +"beauxarts.museum\0" +"izumiotsu.osaka.jp\0no-ip.biz\0" +"karikatur.museum\0anquan\0" +"edu.dm\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" +"k12.ma.us\0grainger\0" +"edu.do\0nakijin.okinawa.jp\0" +"lixil\0" +"cc.pa.us\0" +"edu.ec\0higashiosaka.osaka.jp\0" +"edu.ee\0" +"edu.eg\0" +"edu.dz\0val-daosta.it\0chikusei.ibaraki.jp\0" +"psi.br\0" +"gotpantheon.com\0" +"h.se\0" +"edu.es\0" +"edu.et\0myiphost.com\0" +"istmein.de\0" +"balsan.it\0" +"media\0" +"docs\0" +"ora.gunma.jp\0" +"rockart.museum\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0barsy.site\0" +"s3-ap-southeast-1.amazonaws.com\0" +"witd.gov.pl\0" +"edu.ge\0nemuro.hokkaido.jp\0" +"trentino-s\xc3\xbc""dtirol.it\0cr.it\0" +"edu.gh\0" +"edu.gi\0miharu.fukushima.jp\0" +"cesena-forl\xc3\xac.it\0property\0" +"song\0" +"edu.gl\0" +"sakawa.kochi.jp\0oirm.gov.pl\0" +"edu.gn\0holiday\0" +"edu.gp\0benevento.it\0" +"aju.br\0edu.gr\0k12.tr\0" +"hashimoto.wakayama.jp\0blog\0final\0" +"show.aero\0edu.gt\0trentino-alto-adige.it\0chanel\0" +"edu.gu\0" +"edu.gy\0" +"edu.hk\0""2000.hu\0" +"gs.vf.no\0cust.prod.thingdust.io\0" +"sony\0" +"edu.hn\0" +"gs.rl.no\0hyatt\0" +"yachimata.chiba.jp\0" +"edu.ht\0gniezno.pl\0" +"izumozaki.niigata.jp\0" +"asso.fr\0tsuruta.aomori.jp\0celtic.museum\0" +"fm.br\0k12.vi\0" +"beats\0net-freaks.com\0" +"cn-northwest-1.eb.amazonaws.com.cn\0" +"\xe5\xba\x83\xe5\xb3\xb6.jp\0takahama.aichi.jp\0" +"edu.in\0" +"edu.iq\0" +"edu.is\0game\0" +"asso.gp\0edu.it\0dscloud.biz\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"depot.museum\0" +"natural.bo\0lib.md.us\0" +"sano.tochigi.jp\0" +"edu.jo\0kaminokawa.tochigi.jp\0" +"store\0" +"zagan.pl\0" +"kmpsp.gov.pl\0vologda.su\0" +"accident-prevention.aero\0" +"edu.kg\0land-4-sale.us\0" +"asso.ht\0" +"edu.ki\0lib.ar.us\0" +"unzen.nagasaki.jp\0edu.km\0" +"edu.kn\0is-saved.org\0" +"edu.kp\0comcast\0" +"akita.akita.jp\0edu.la\0" +"edu.lb\0" +"rikubetsu.hokkaido.jp\0edu.lc\0" +"finance\0" +"daiwa.hiroshima.jp\0s\xc3\xa1l\xc3\xa1t.no\0dunlop\0" +"edu.kw\0history.museum\0" +"niyodogawa.kochi.jp\0""1kapp.com\0" +"shonai.yamagata.jp\0edu.ky\0sciences.museum\0" +"edu.kz\0" +"edu.lk\0" +"asso.bj\0for.sale\0" +"aurland.no\0" +"foundation\0otsuka\0" +"edu.lr\0" +"edu.ls\0" +"edu.me\0" +"mihama.chiba.jp\0edu.lv\0" +"edu.mg\0" +"edu.ly\0" +"edu.mk\0" +"edu.ml\0nittedal.no\0" +"asso.ci\0" +"edu.mn\0" +"edu.mo\0" +"blue\0" +"edu.ms\0" +"edu.mt\0dnsalias.com\0" +"edu.mv\0lab.ms\0" +"marburg.museum\0edu.mw\0edu.ng\0" +"edu.mx\0" +"edu.my\0edu.ni\0" +"tas.edu.au\0edu.mz\0" +"muosat.no\0" +"amami.kagoshima.jp\0omi.niigata.jp\0" +"etnedal.no\0kutno.pl\0" +"\xe5\xb2\xa9\xe6\x89\x8b.jp\0energy\0al.leg.br\0" +"from-hi.com\0" +"kharkiv.ua\0" +"crd.co\0" +"\xe9\xb3\xa5\xe5\x8f\x96.jp\0edu.nr\0mytis.ru\0" +"sicily.it\0ichinoseki.iwate.jp\0s3-website.eu-west-2.amazonaws.com\0webhop.me\0" +"sharp\0" +"kiev.ua\0" +"yuasa.wakayama.jp\0cc.ct.us\0" +"schlesisches.museum\0marine.ru\0filegear-ie.me\0caa.li\0" +"!city.kawasaki.jp\0azerbaijan.su\0""32-b.it\0" +"edu.om\0" +"asso.dz\0read-books.org\0" +"troms\xc3\xb8.no\0" +"immobilien\0" +"na.it\0hob\xc3\xb8l.no\0edu.pa\0" +"\xe4\xbf\xa1\xe6\x81\xaf\0" +"no.eu.org\0" +"edu.pe\0" +"steigen.no\0edu.pf\0" +"kautokeino.no\0" +"edu.ph\0" +"fm.it\0edu.pk\0vladikavkaz.ru\0" +"edu.pl\0" +"dnipropetrovsk.ua\0" +"edu.pn\0" +"bs.it\0abashiri.hokkaido.jp\0otsuki.yamanashi.jp\0" +"gjerdrum.no\0edu.qa\0" +"gojome.akita.jp\0yamanashi.yamanashi.jp\0edu.pr\0" +"oshima.tokyo.jp\0edu.ps\0" +"edu.pt\0" +"lind\xc3\xa5s.no\0" +"edu.py\0devices.resinstaging.io\0" +"u.bg\0" +"vladikavkaz.su\0" +"davvenjarga.no\0" +"yamada.fukuoka.jp\0sakuho.nagano.jp\0ut.us\0" +"koza.wakayama.jp\0ravendb.community\0" +"moriguchi.osaka.jp\0nsn.us\0" +"tgory.pl\0" +"engine.aero\0" +"media.museum\0free\0" +"cr.ua\0svn-repos.de\0" +"sosa.chiba.jp\0" +"joburg\0storage.yandexcloud.net\0" +"mb.ca\0beta.bounty-full.com\0" +"omi.nagano.jp\0tushu\0" +"from-or.com\0" +"iwakura.aichi.jp\0" +"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0yasuoka.nagano.jp\0guitars\0" +"oumu.hokkaido.jp\0" +"rawa-maz.pl\0edu.sa\0" +"shinjo.okayama.jp\0edu.sb\0" +"edu.rs\0edu.sc\0" +"fukui.fukui.jp\0torsken.no\0edu.sd\0" +"edu.ru\0" +"ikusaka.nagano.jp\0monticello.museum\0" +"edu.sg\0for-our.info\0" +"tas.gov.au\0" +"historisch.museum\0servemp3.com\0" +"kaga.ishikawa.jp\0edu.sl\0" +"shikama.miyagi.jp\0gs.bu.no\0edu.sn\0" +"edu.so\0" +"blog.bo\0" +"edu.ss\0" +"edu.st\0" +"blog.br\0" +"bozen-sudtirol.it\0edu.sv\0" +"edu.sy\0" +"edu.tj\0mypi.co\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0" +"cc.na\0edu.tm\0" +"bygland.no\0" +"grandrapids.museum\0edu.to\0e4.cz\0" +"yamaguchi.jp\0malselv.no\0rovno.ua\0" +"kami.kochi.jp\0edu.ua\0tokyo\0" +"edu.tr\0r.cdn77.net\0" +"g\xc3\xa1\xc5\x8bgaviika.no\0s3-ap-northeast-1.amazonaws.com\0" +"kawara.fukuoka.jp\0heroy.more-og-romsdal.no\0edu.tt\0" +"from-ms.com\0from-nc.com\0" +"fm.no\0" +"edu.tw\0" +"windmill.museum\0bss.design\0" +"kiyosu.aichi.jp\0" +}; + +static const quint16 tldChunkCount = 2; +static const quint32 tldChunks[] = {65526, 103395}; + +QT_END_NAMESPACE + +#endif // QURLTLD_P_H diff --git a/src/network/kernel/qurltlds_p.h.INFO b/src/network/kernel/qurltlds_p.h.INFO new file mode 100644 index 0000000000..33ccd458bf --- /dev/null +++ b/src/network/kernel/qurltlds_p.h.INFO @@ -0,0 +1,14 @@ +The file qurltlds_p.h is generated from the Public Suffix +List (see [1] and [2]), by the program residing at +util/corelib/qurl-generateTLDs in the Qt source tree. + +That program generates a character array and an index array from the +list to provide fast lookups of elements within C++. + +Those arrays in qurltlds_p.h are derived from the Public +Suffix List ([2]), which was originally provided by +Jo Hermans <jo.hermans@gmail.com>. + +---- +[1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 +[2] homepage: http://publicsuffix.org/ diff --git a/src/network/network.pro b/src/network/network.pro index d8453e879c..d13b3b9248 100644 --- a/src/network/network.pro +++ b/src/network/network.pro @@ -15,7 +15,7 @@ msvc:equals(QT_ARCH, i386): QMAKE_LFLAGS += /BASE:0x64000000 QMAKE_DOCS = $$PWD/doc/qtnetwork.qdocconf include(access/access.pri) -include(bearer/bearer.pri) +qtConfig(bearermanagement): include(bearer/bearer.pri) include(kernel/kernel.pri) include(socket/socket.pri) include(ssl/ssl.pri) @@ -38,6 +38,4 @@ MODULE_WINRT_CAPABILITIES = \ internetClientServer \ privateNetworkClientServer -MODULE_PLUGIN_TYPES = \ - bearer load(qt_module) diff --git a/src/network/socket/qabstractsocketengine.cpp b/src/network/socket/qabstractsocketengine.cpp index 54c7452c66..44139ff81d 100644 --- a/src/network/socket/qabstractsocketengine.cpp +++ b/src/network/socket/qabstractsocketengine.cpp @@ -274,3 +274,5 @@ int QAbstractSocketEngine::outboundStreamCount() const } QT_END_NAMESPACE + +#include "moc_qabstractsocketengine_p.cpp" diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 21f97be29a..b80bdec992 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -865,3 +865,5 @@ QAbstractSocketEngine *QHttpSocketEngineHandler::createSocketEngine(qintptr, QOb QT_END_NAMESPACE #endif // !QT_NO_NETWORKPROXY + +#include "moc_qhttpsocketengine_p.cpp" diff --git a/src/network/socket/qlocalserver_p.h b/src/network/socket/qlocalserver_p.h index 92616e59ce..f331a3f10d 100644 --- a/src/network/socket/qlocalserver_p.h +++ b/src/network/socket/qlocalserver_p.h @@ -99,15 +99,18 @@ public: QMap<quintptr, QTcpSocket*> socketMap; #elif defined(Q_OS_WIN) struct Listener { - HANDLE handle; + Listener() = default; + HANDLE handle = nullptr; OVERLAPPED overlapped; - bool connected; + bool connected = false; + private: + Q_DISABLE_COPY(Listener) }; void setError(const QString &function); bool addListener(); - QList<Listener> listeners; + std::vector<std::unique_ptr<Listener>> listeners; HANDLE eventHandle; QWinEventNotifier *connectionEventNotifier; #else diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp index 2d71a7e730..6d92ebe93a 100644 --- a/src/network/socket/qlocalserver_win.cpp +++ b/src/network/socket/qlocalserver_win.cpp @@ -62,8 +62,8 @@ bool QLocalServerPrivate::addListener() { // The object must not change its address once the // contained OVERLAPPED struct is passed to Windows. - listeners << Listener(); - Listener &listener = listeners.last(); + listeners.push_back(std::make_unique<Listener>()); + auto &listener = listeners.back(); SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); @@ -175,7 +175,7 @@ bool QLocalServerPrivate::addListener() sa.lpSecurityDescriptor = pSD.data(); } - listener.handle = CreateNamedPipe( + listener->handle = CreateNamedPipe( reinterpret_cast<const wchar_t *>(fullServerName.utf16()), // pipe name PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, // read/write access PIPE_TYPE_BYTE | // byte type pipe @@ -187,32 +187,32 @@ bool QLocalServerPrivate::addListener() 3000, // client time-out &sa); - if (listener.handle == INVALID_HANDLE_VALUE) { + if (listener->handle == INVALID_HANDLE_VALUE) { setError(QLatin1String("QLocalServerPrivate::addListener")); - listeners.removeLast(); + listeners.pop_back(); return false; } if (worldSID) FreeSid(worldSID); - memset(&listener.overlapped, 0, sizeof(listener.overlapped)); - listener.overlapped.hEvent = eventHandle; + memset(&listener->overlapped, 0, sizeof(OVERLAPPED)); + listener->overlapped.hEvent = eventHandle; // Beware! ConnectNamedPipe will reset the eventHandle to non-signaled. // Callers of addListener must check all listeners for connections. - if (!ConnectNamedPipe(listener.handle, &listener.overlapped)) { + if (!ConnectNamedPipe(listener->handle, &listener->overlapped)) { switch (GetLastError()) { case ERROR_IO_PENDING: - listener.connected = false; + listener->connected = false; break; case ERROR_PIPE_CONNECTED: - listener.connected = true; + listener->connected = true; break; default: - CloseHandle(listener.handle); + CloseHandle(listener->handle); setError(QLatin1String("QLocalServerPrivate::addListener")); - listeners.removeLast(); + listeners.pop_back(); return false; } } else { @@ -284,12 +284,12 @@ void QLocalServerPrivate::_q_onNewConnection() // Testing shows that there is indeed absolutely no guarantee which listener gets // a client connection first, so there is no way around polling all of them. - for (int i = 0; i < listeners.size(); ) { - HANDLE handle = listeners[i].handle; - if (listeners[i].connected - || GetOverlappedResult(handle, &listeners[i].overlapped, &dummy, FALSE)) + for (size_t i = 0; i < listeners.size(); ) { + HANDLE handle = listeners[i]->handle; + if (listeners[i]->connected + || GetOverlappedResult(handle, &listeners[i]->overlapped, &dummy, FALSE)) { - listeners.removeAt(i); + listeners.erase(listeners.begin() + i); addListener(); @@ -319,8 +319,8 @@ void QLocalServerPrivate::closeServer() connectionEventNotifier->deleteLater(); connectionEventNotifier = 0; CloseHandle(eventHandle); - for (int i = 0; i < listeners.size(); ++i) - CloseHandle(listeners[i].handle); + for (size_t i = 0; i < listeners.size(); ++i) + CloseHandle(listeners[i]->handle); listeners.clear(); } diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 31628846dc..ad625b758e 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -1382,3 +1382,5 @@ void QNativeSocketEngine::setExceptionNotificationEnabled(bool enable) } QT_END_NAMESPACE + +#include "moc_qnativesocketengine_p.cpp" diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index f0ccc9054a..eb5d181134 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1927,3 +1927,5 @@ QAbstractSocketEngine *QSocks5SocketEngineHandler::createSocketEngine(qintptr so } QT_END_NAMESPACE + +#include "moc_qsocks5socketengine_p.cpp" diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index c9fa7f85d9..87b9a1b038 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -102,29 +102,16 @@ Q_LOGGING_CATEGORY(lcSsl, "qt.network.ssl"); \value IpAddressEntry An IP address entry; the entry contains an IP address entry that the certificate is valid for, introduced in Qt 5.13. - \note In Qt 4, this enum was called \c {AlternateNameEntryType}. That name - is deprecated in Qt 5. - \sa QSslCertificate::subjectAlternativeNames() */ /*! - \typedef QSsl::AlternateNameEntryType - \obsolete - - Use QSsl::AlternativeNameEntryType instead. -*/ - -/*! \enum QSsl::SslProtocol Describes the protocol of the cipher. - \value SslV3 SSLv3; not supported by QSslSocket. - \value SslV2 SSLv2; not supported by QSslSocket. \value TlsV1_0 TLSv1.0 \value TlsV1_0OrLater TLSv1.0 and later versions. This option is not available when using the WinRT backend due to platform limitations. - \value TlsV1 Obsolete, means the same as TlsV1_0 \value TlsV1_1 TLSv1.1. When using the WinRT backend this option will also enable TLSv1.0. \value TlsV1_1OrLater TLSv1.1 and later versions. This option is not available when using the WinRT backend due to platform limitations. \value TlsV1_2 TLSv1.2. When using the WinRT backend this option will also enable TLSv1.0 and TLSv1.1. @@ -137,7 +124,6 @@ Q_LOGGING_CATEGORY(lcSsl, "qt.network.ssl"); \value TlsV1_3OrLater TLSv1.3 and later versions. (Since Qt 5.12) \value UnknownProtocol The cipher's protocol cannot be determined. \value AnyProtocol Any supported protocol. This value is used by QSslSocket only. - \value TlsV1SslV3 Same as TlsV1_0. \value SecureProtocols The default option, using protocols known to be secure. */ diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index b28c2a87b9..d0b417f9ed 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -72,25 +72,11 @@ namespace QSsl { IpAddressEntry }; -#if QT_DEPRECATED_SINCE(5,0) - typedef AlternativeNameEntryType AlternateNameEntryType; -#endif - enum SslProtocol { -#if QT_DEPRECATED_SINCE(5, 15) - SslV3, - SslV2, -#endif TlsV1_0 = 2, -#if QT_DEPRECATED_SINCE(5,0) - TlsV1 = TlsV1_0, -#endif TlsV1_1, TlsV1_2, AnyProtocol, -#if QT_DEPRECATED_SINCE(5, 15) - TlsV1SslV3, -#endif SecureProtocols = AnyProtocol + 2, TlsV1_0OrLater, diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index c179cf9c4a..da952f6e6b 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -373,15 +373,6 @@ QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm algorithm) cons \sa subjectInfo() */ -#if QT_DEPRECATED_SINCE(5,0) -/*! - \fn QMultiMap<QSsl::AlternateNameEntryType, QString> QSslCertificate::alternateSubjectNames() const - \obsolete - - Use QSslCertificate::subjectAlternativeNames(); -*/ -#endif - /*! \fn QMultiMap<QSsl::AlternativeNameEntryType, QString> QSslCertificate::subjectAlternativeNames() const diff --git a/src/network/ssl/qsslcertificate.h b/src/network/ssl/qsslcertificate.h index 9993769888..c46065160a 100644 --- a/src/network/ssl/qsslcertificate.h +++ b/src/network/ssl/qsslcertificate.h @@ -130,10 +130,6 @@ public: QList<QByteArray> subjectInfoAttributes() const; QList<QByteArray> issuerInfoAttributes() const; -#if QT_DEPRECATED_SINCE(5,0) - QT_DEPRECATED inline QMultiMap<QSsl::AlternateNameEntryType, QString> - alternateSubjectNames() const { return subjectAlternativeNames(); } -#endif QMultiMap<QSsl::AlternativeNameEntryType, QString> subjectAlternativeNames() const; QDateTime effectiveDate() const; QDateTime expiryDate() const; diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index f5ce02807f..adff0a249f 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -54,7 +54,6 @@ const QSsl::SslOptions QSslConfigurationPrivate::defaultSslOptions = QSsl::SslOp |QSsl::SslOptionDisableSessionPersistence; const char QSslConfiguration::ALPNProtocolHTTP2[] = "h2"; -const char QSslConfiguration::NextProtocolSpdy3_0[] = "spdy/3"; const char QSslConfiguration::NextProtocolHttp1_1[] = "http/1.1"; /*! @@ -134,12 +133,6 @@ const char QSslConfiguration::NextProtocolHttp1_1[] = "http/1.1"; */ /*! - \variable QSslConfiguration::NextProtocolSpdy3_0 - \brief The value used for negotiating SPDY 3.0 during the Next - Protocol Negotiation. -*/ - -/*! \variable QSslConfiguration::NextProtocolHttp1_1 \brief The value used for negotiating HTTP 1.1 during the Next Protocol Negotiation. @@ -229,7 +222,9 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const d->nextNegotiatedProtocol == other.d->nextNegotiatedProtocol && d->nextProtocolNegotiationStatus == other.d->nextProtocolNegotiationStatus && d->dtlsCookieEnabled == other.d->dtlsCookieEnabled && - d->ocspStaplingEnabled == other.d->ocspStaplingEnabled; + d->ocspStaplingEnabled == other.d->ocspStaplingEnabled && + d->reportFromCallback == other.d->reportFromCallback && + d->missingCertIsFatal == other.d->missingCertIsFatal; } /*! @@ -274,7 +269,9 @@ bool QSslConfiguration::isNull() const d->nextAllowedProtocols.isEmpty() && d->nextNegotiatedProtocol.isNull() && d->nextProtocolNegotiationStatus == QSslConfiguration::NextProtocolNegotiationNone && - d->ocspStaplingEnabled == false); + d->ocspStaplingEnabled == false && + d->reportFromCallback == false && + d->missingCertIsFatal == false); } /*! @@ -1035,7 +1032,7 @@ QByteArray QSslConfiguration::nextNegotiatedProtocol() const Whether or not the negotiation succeeded can be queried through nextProtocolNegotiationStatus(). - \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), allowedNextProtocols(), QSslConfiguration::NextProtocolSpdy3_0, QSslConfiguration::NextProtocolHttp1_1 + \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), allowedNextProtocols(), QSslConfiguration::NextProtocolHttp1_1 */ #if QT_VERSION >= QT_VERSION_CHECK(6,0,0) void QSslConfiguration::setAllowedNextProtocols(const QList<QByteArray> &protocols) @@ -1053,7 +1050,7 @@ void QSslConfiguration::setAllowedNextProtocols(QList<QByteArray> protocols) server through the Next Protocol Negotiation (NPN) or Application-Layer Protocol Negotiation (ALPN) TLS extension, as set by setAllowedNextProtocols(). - \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), setAllowedNextProtocols(), QSslConfiguration::NextProtocolSpdy3_0, QSslConfiguration::NextProtocolHttp1_1 + \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), setAllowedNextProtocols(), QSslConfiguration::NextProtocolHttp1_1 */ QList<QByteArray> QSslConfiguration::allowedNextProtocols() const { @@ -1199,6 +1196,91 @@ bool QSslConfiguration::ocspStaplingEnabled() const return d->ocspStaplingEnabled; } +/*! + \since 6.0 + + Returns true if a verification callback will emit QSslSocket::handshakeInterruptedOnError() + early, before concluding the handshake. + + \note This function always returns false for all backends but OpenSSL. + + \sa setHandshakeMustInterruptOnError(), QSslSocket::handshakeInterruptedOnError(), QSslSocket::continueInterruptedHandshake() +*/ +bool QSslConfiguration::handshakeMustInterruptOnError() const +{ + return d->reportFromCallback; +} + +/*! + \since 6.0 + + If \a interrupt is true and the underlying backend supports this option, + errors found during certificate verification are reported immediately + by emitting QSslSocket::handshakeInterruptedOnError(). This allows + to stop the unfinished handshake and send a proper alert message to + a peer. No special action is required from the application in this case. + QSslSocket will close the connection after sending the alert message. + If the application after inspecting the error wants to continue the + handshake, it must call QSslSocket::continueInterruptedHandshake() + from its slot function. The signal-slot connection must be direct. + + \note When interrupting handshake is enabled, errors that would otherwise + be reported by QSslSocket::peerVerifyError() are instead only reported by + QSslSocket::handshakeInterruptedOnError(). + \note Even if the handshake was continued, these errors will be + reported when emitting QSslSocket::sslErrors() signal (and thus must + be ignored in the corresponding function slot). + + \sa handshakeMustInterruptOnError(), QSslSocket::handshakeInterruptedOnError(), QSslSocket::continueInterruptedHandshake() +*/ +void QSslConfiguration::setHandshakeMustInterruptOnError(bool interrupt) +{ +#if QT_CONFIG(openssl) + d->reportFromCallback = interrupt; +#else + Q_UNUSED(interrupt); + qCWarning(lcSsl, "This operation requires OpenSSL as TLS backend"); +#endif +} + +/*! + \since 6.0 + + Returns true if errors with code QSslError::NoPeerCertificate + cannot be ignored. + + \note Always returns false for all TLS backends but OpenSSL. + + \sa QSslSocket::ignoreSslErrors(), setMissingCertificateIsFatal() +*/ +bool QSslConfiguration::missingCertificateIsFatal() const +{ + return d->missingCertIsFatal; +} + +/*! + \since 6.0 + + If \a cannotRecover is true, and verification mode in use is + QSslSocket::VerifyPeer or QSslSocket::AutoVerifyPeer (for a + client-side socket), the missing peer's certificate would be + treated as an unrecoverable error that cannot be ignored. A proper + alert message will be sent to the peer before closing the connection. + + \note Only available if Qt was configured and built with OpenSSL backend. + + \sa QSslSocket::ignoreSslErrors(), QSslSocket::PeerVerifyMode, missingCertificateIsFatal() +*/ +void QSslConfiguration::setMissingCertificateIsFatal(bool cannotRecover) +{ +#if QT_CONFIG(openssl) + d->missingCertIsFatal = cannotRecover; +#else + Q_UNUSED(cannotRecover); + qCWarning(lcSsl, "Handling a missing certificate as a fatal error requires an OpenSSL backend"); +#endif // openssl +} + /*! \internal */ bool QSslConfigurationPrivate::peerSessionWasShared(const QSslConfiguration &configuration) { diff --git a/src/network/ssl/qsslconfiguration.h b/src/network/ssl/qsslconfiguration.h index 09616098a5..5732deaaef 100644 --- a/src/network/ssl/qsslconfiguration.h +++ b/src/network/ssl/qsslconfiguration.h @@ -66,7 +66,6 @@ QT_BEGIN_NAMESPACE -template<typename T> class QList; class QSslCertificate; class QSslCipher; class QSslKey; @@ -173,6 +172,12 @@ public: static void setDefaultDtlsConfiguration(const QSslConfiguration &configuration); #endif // dtls + bool handshakeMustInterruptOnError() const; + void setHandshakeMustInterruptOnError(bool interrupt); + + bool missingCertificateIsFatal() const; + void setMissingCertificateIsFatal(bool cannotRecover); + void setOcspStaplingEnabled(bool enable); bool ocspStaplingEnabled() const; @@ -193,7 +198,6 @@ public: NextProtocolNegotiationStatus nextProtocolNegotiationStatus() const; static const char ALPNProtocolHTTP2[]; - static const char NextProtocolSpdy3_0[]; static const char NextProtocolHttp1_1[]; private: diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h index 83126bb9a0..6ee3490df6 100644 --- a/src/network/ssl/qsslconfiguration_p.h +++ b/src/network/ssl/qsslconfiguration_p.h @@ -149,6 +149,14 @@ public: const bool ocspStaplingEnabled = false; #endif +#if QT_CONFIG(openssl) + bool reportFromCallback = false; + bool missingCertIsFatal = false; +#else + const bool reportFromCallback = false; + const bool missingCertIsFatal = false; +#endif // openssl + // in qsslsocket.cpp: static QSslConfiguration defaultConfiguration(); static void setDefaultConfiguration(const QSslConfiguration &configuration); diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp index 0aa8a4f438..78e37460c8 100644 --- a/src/network/ssl/qsslcontext_openssl.cpp +++ b/src/network/ssl/qsslcontext_openssl.cpp @@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE // defined in qsslsocket_openssl.cpp: extern int q_X509Callback(int ok, X509_STORE_CTX *ctx); +extern "C" int q_X509CallbackDirect(int ok, X509_STORE_CTX *ctx); extern QString getErrorsFromOpenSsl(); #if QT_CONFIG(dtls) @@ -290,42 +291,31 @@ void QSslContext::initSslContext(QSslContext *sslContext, QSslSocket::SslMode mo bool unsupportedProtocol = false; bool isDtls = false; init_context: - if (sslContext->sslConfiguration.protocol() == QSsl::SslV2) { - // SSL 2 is no longer supported, but chosen deliberately -> error - sslContext->ctx = nullptr; - unsupportedProtocol = true; - } else if (sslContext->sslConfiguration.protocol() == QSsl::SslV3) { - // SSL 3 is no longer supported, but chosen deliberately -> error - sslContext->ctx = nullptr; - unsupportedProtocol = true; - } else { - switch (sslContext->sslConfiguration.protocol()) { - case QSsl::DtlsV1_0: - case QSsl::DtlsV1_0OrLater: - case QSsl::DtlsV1_2: - case QSsl::DtlsV1_2OrLater: + switch (sslContext->sslConfiguration.protocol()) { + case QSsl::DtlsV1_0: + case QSsl::DtlsV1_0OrLater: + case QSsl::DtlsV1_2: + case QSsl::DtlsV1_2OrLater: #if QT_CONFIG(dtls) - isDtls = true; - sslContext->ctx = q_SSL_CTX_new(client ? q_DTLS_client_method() : q_DTLS_server_method()); + isDtls = true; + sslContext->ctx = q_SSL_CTX_new(client ? q_DTLS_client_method() : q_DTLS_server_method()); #else // dtls - sslContext->ctx = nullptr; - unsupportedProtocol = true; - qCWarning(lcSsl, "DTLS protocol requested, but feature 'dtls' is disabled"); - + sslContext->ctx = nullptr; + unsupportedProtocol = true; + qCWarning(lcSsl, "DTLS protocol requested, but feature 'dtls' is disabled"); #endif // dtls - break; - case QSsl::TlsV1_3: - case QSsl::TlsV1_3OrLater: + break; + case QSsl::TlsV1_3: + case QSsl::TlsV1_3OrLater: #if !defined(TLS1_3_VERSION) - qCWarning(lcSsl, "TLS 1.3 is not supported"); - sslContext->ctx = nullptr; - unsupportedProtocol = true; - break; + qCWarning(lcSsl, "TLS 1.3 is not supported"); + sslContext->ctx = nullptr; + unsupportedProtocol = true; + break; #endif // TLS1_3_VERSION - default: - // The ssl options will actually control the supported methods - sslContext->ctx = q_SSL_CTX_new(client ? q_TLS_client_method() : q_TLS_server_method()); - } + default: + // The ssl options will actually control the supported methods + sslContext->ctx = q_SSL_CTX_new(client ? q_TLS_client_method() : q_TLS_server_method()); } if (!sslContext->ctx) { @@ -377,7 +367,6 @@ init_context: #endif // TLS1_3_VERSION break; // Ranges: - case QSsl::TlsV1SslV3: case QSsl::AnyProtocol: case QSsl::SecureProtocols: case QSsl::TlsV1_0OrLater: @@ -419,12 +408,6 @@ init_context: Q_UNREACHABLE(); break; #endif // TLS1_3_VERSION - case QSsl::SslV2: - case QSsl::SslV3: - // These protocols are not supported, and we handle - // them as an error (see the code above). - Q_UNREACHABLE(); - break; case QSsl::UnknownProtocol: break; } @@ -594,11 +577,20 @@ init_context: if (sslContext->sslConfiguration.peerVerifyMode() == QSslSocket::VerifyNone) { q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_NONE, nullptr); } else { - q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_PEER, -#if QT_CONFIG(dtls) - isDtls ? dtlscallbacks::q_X509DtlsCallback : -#endif // dtls - q_X509Callback); + auto verificationCallback = + #if QT_CONFIG(dtls) + isDtls ? dtlscallbacks::q_X509DtlsCallback : + #endif // dtls + q_X509Callback; + + if (!isDtls && configuration.handshakeMustInterruptOnError()) + verificationCallback = q_X509CallbackDirect; + + auto verificationMode = SSL_VERIFY_PEER; + if (!isDtls && sslContext->sslConfiguration.missingCertificateIsFatal()) + verificationMode |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; + + q_SSL_CTX_set_verify(sslContext->ctx, verificationMode, verificationCallback); } #ifdef TLS1_3_VERSION diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 4ed1951c7d..64c6629645 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -228,6 +228,74 @@ */ /*! + \enum QAlertLevel + \brief Describes the level of an alert message + \relates QSslSocket + \since 6.0 + + \ingroup network + \ingroup ssl + \inmodule QtNetwork + + This enum describes the level of an alert message that was sent + or received. + + \value Warning Non-fatal alert message + \value Fatal Fatal alert message, the underlying backend will + handle such an alert properly and close the connection. + \value Unknown An alert of unknown level of severity. +*/ + +/*! + \enum QAlertType + \brief Enumerates possible codes that an alert message can have + \relates QSslSocket + \since 6.0 + + \ingroup network + \ingroup ssl + \inmodule QtNetwork + + See \l{https://tools.ietf.org/html/rfc8446#page-85}{RFC 8446, section 6} + for the possible values and their meaning. + + \value CloseNotify, + \value UnexpectedMessage + \value BadRecordMac + \value RecordOverflow + \value DecompressionFailure + \value HandshakeFailure + \value NoCertificate + \value BadCertificate + \value UnsupportedCertificate + \value CertificateRevoked + \value CertificateExpired + \value CertificateUnknown + \value IllegalParameter + \value UnknownCa + \value AccessDenied + \value DecodeError + \value DecryptError + \value ExportRestriction + \value ProtocolVersion + \value InsufficientSecurity + \value InternalError + \value InappropriateFallback + \value UserCancelled + \value NoRenegotiation + \value MissingExtension + \value UnsupportedExtension + \value CertificateUnobtainable + \value UnrecognizedName + \value BadCertificateStatusResponse + \value BadCertificateHashValue + \value UnknownPskIdentity + \value CertificateRequired + \value NoApplicationProtocol + \value UnknownAlertMessage +*/ + +/*! \fn void QSslSocket::encrypted() This signal is emitted when QSslSocket enters encrypted mode. After this @@ -323,6 +391,49 @@ */ /*! + \fn void QSslSocket::alertSent(QAlertLevel level, QAlertType type, const QString &description) + + QSslSocket emits this signal if an alert message was sent to a peer. \a level + describes if it was a warning or a fatal error. \a type gives the code + of the alert message. When a textual description of the alert message is + available, it is supplied in \a description. + + \note This signal is mostly informational and can be used for debugging + purposes, normally it does not require any actions from the application. + \note Not all backends support this functionality. + + \sa alertReceived(), QAlertLevel, QAlertType +*/ + +/*! + \fn void QSslSocket::alertReceived(QAlertLevel level, QAlertType type, const QString &description) + + QSslSocket emits this signal if an alert message was received from a peer. + \a level tells if the alert was fatal or it was a warning. \a type is the + code explaining why the alert was sent. When a textual description of + the alert message is available, it is supplied in \a description. + + \note The signal is mostly for informational and debugging purposes and does not + require any handling in the application. If the alert was fatal, underlying + backend will handle it and close the connection. + \note Not all backends support this functionality. + + \sa alertSent(), QAlertLevel, QAlertType +*/ + +/*! + \fn void QSslSocket::handshakeInterruptedOnError(const QSslError &error) + + QSslSocket emits this signal if a certificate verification error was + found and if early error reporting was enabled in QSslConfiguration. + An application is expected to inspect the \a error and decide if + it wants to continue the handshake, or abort it and send an alert message + to the peer. The signal-slot connection must be direct. + + \sa continueInterruptedHandshake(), sslErrors(), QSslConfiguration::setHandshakeMustInterruptOnError() +*/ + +/*! \fn void QSslSocket::newSessionTicketReceived() \since 5.15 @@ -993,7 +1104,10 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration) #if QT_CONFIG(ocsp) d->configuration.ocspStaplingEnabled = configuration.ocspStaplingEnabled(); #endif - +#if QT_CONFIG(openssl) + d->configuration.reportFromCallback = configuration.handshakeMustInterruptOnError(); + d->configuration.missingCertIsFatal = configuration.missingCertificateIsFatal(); +#endif // openssl // if the CA certificates were set explicitly (either via // QSslConfiguration::setCaCertificates() or QSslSocket::setCaCertificates(), // we cannot load the certificates on demand @@ -2083,6 +2197,23 @@ void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors) d->ignoreErrorsList = errors; } + +/*! + \since 6.0 + + If an application wants to conclude a handshake even after receiving + handshakeInterruptedOnError() signal, it must call this function. + This call must be done from a slot function attached to the signal. + The signal-slot connection must be direct. + + \sa handshakeInterruptedOnError(), QSslConfiguration::setHandshakeMustInterruptOnError() +*/ +void QSslSocket::continueInterruptedHandshake() +{ + Q_D(QSslSocket); + d->handshakeInterrupted = false; +} + /*! \internal */ @@ -2257,13 +2388,24 @@ void QSslSocketPrivate::init() */ bool QSslSocketPrivate::verifyProtocolSupported(const char *where) { - if (configuration.protocol == QSsl::SslV2 || configuration.protocol == QSsl::SslV3) { - qCWarning(lcSsl) << where << "Attempted to use an unsupported protocol."; + QLatin1String protocolName("DTLS"); + switch (configuration.protocol) { + case QSsl::UnknownProtocol: + // UnknownProtocol, according to our docs, is for cipher whose protocol is unknown. + // Should not be used when configuring QSslSocket. + protocolName = QLatin1String("UnknownProtocol"); + Q_FALLTHROUGH(); + case QSsl::DtlsV1_0: + case QSsl::DtlsV1_2: + case QSsl::DtlsV1_0OrLater: + case QSsl::DtlsV1_2OrLater: + qCWarning(lcSsl) << where << "QSslConfiguration with unexpected protocol" << protocolName; setErrorAndEmit(QAbstractSocket::SslInvalidUserDataError, QSslSocket::tr("Attempted to use an unsupported protocol.")); return false; + default: + return true; } - return true; } /*! @@ -2477,6 +2619,10 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri #if QT_CONFIG(ocsp) ptr->ocspStaplingEnabled = global->ocspStaplingEnabled; #endif +#if QT_CONFIG(openssl) + ptr->reportFromCallback = global->reportFromCallback; + ptr->missingCertIsFatal = global->missingCertIsFatal; +#endif } /*! diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h index 298e7aa6c8..e99c79a967 100644 --- a/src/network/ssl/qsslsocket.h +++ b/src/network/ssl/qsslsocket.h @@ -63,6 +63,49 @@ class QSslEllipticCurve; class QSslPreSharedKeyAuthenticator; class QOcspResponse; +enum class QAlertLevel { + Warning, + Fatal, + Unknown +}; + +enum class QAlertType { + CloseNotify, + UnexpectedMessage = 10, + BadRecordMac = 20, + RecordOverflow = 22, + DecompressionFailure = 30, // reserved + HandshakeFailure = 40, + NoCertificate = 41, // reserved + BadCertificate = 42, + UnsupportedCertificate = 43, + CertificateRevoked = 44, + CertificateExpired = 45, + CertificateUnknown = 46, + IllegalParameter = 47, + UnknownCa = 48, + AccessDenied = 49, + DecodeError = 50, + DecryptError = 51, + ExportRestriction = 60, // reserved + ProtocolVersion = 70, + InsufficientSecurity = 71, + InternalError = 80, + InappropriateFallback = 86, + UserCancelled = 90, + NoRenegotiation = 100, + MissingExtension = 109, + UnsupportedExtension = 110, + CertificateUnobtainable = 111, // reserved + UnrecognizedName = 112, + BadCertificateStatusResponse = 113, + BadCertificateHashValue = 114, // reserved + UnknownPskIdentity = 115, + CertificateRequired = 116, + NoApplicationProtocol = 120, + UnknownAlertMessage = 255 +}; + class QSslSocketPrivate; class Q_NETWORK_EXPORT QSslSocket : public QTcpSocket { @@ -204,6 +247,7 @@ public: static QString sslLibraryBuildVersionString(); void ignoreSslErrors(const QList<QSslError> &errors); + void continueInterruptedHandshake(); public Q_SLOTS: void startClientEncryption(); @@ -218,6 +262,9 @@ Q_SIGNALS: void encryptedBytesWritten(qint64 totalBytes); void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); void newSessionTicketReceived(); + void alertSent(QAlertLevel level, QAlertType type, const QString &description); + void alertReceived(QAlertLevel level, QAlertType type, const QString &description); + void handshakeInterruptedOnError(const QSslError &error); protected: qint64 readData(char *data, qint64 maxlen) override; diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp index e0e065679d..fe1c43d992 100644 --- a/src/network/ssl/qsslsocket_mac.cpp +++ b/src/network/ssl/qsslsocket_mac.cpp @@ -496,10 +496,6 @@ QSsl::SslProtocol QSslSocketBackendPrivate::sessionProtocol() const } switch (protocol) { - case kSSLProtocol2: - return QSsl::SslV2; - case kSSLProtocol3: - return QSsl::SslV3; case kTLSProtocol1: return QSsl::TlsV1_0; case kTLSProtocol11: @@ -657,23 +653,6 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSLCipherSuite(SSLCipherSui QSslCipher ciph; switch (cipher) { // Sorted as in CipherSuite.h (and groupped by their RFC) - case SSL_RSA_WITH_NULL_MD5: - ciph.d->name = QLatin1String("NULL-MD5"); - ciph.d->protocol = QSsl::SslV3; - break; - case SSL_RSA_WITH_NULL_SHA: - ciph.d->name = QLatin1String("NULL-SHA"); - ciph.d->protocol = QSsl::SslV3; - break; - case SSL_RSA_WITH_RC4_128_MD5: - ciph.d->name = QLatin1String("RC4-MD5"); - ciph.d->protocol = QSsl::SslV3; - break; - case SSL_RSA_WITH_RC4_128_SHA: - ciph.d->name = QLatin1String("RC4-SHA"); - ciph.d->protocol = QSsl::SslV3; - break; - // TLS addenda using AES, per RFC 3268 case TLS_RSA_WITH_AES_128_CBC_SHA: ciph.d->name = QLatin1String("AES128-SHA"); @@ -822,12 +801,8 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSLCipherSuite(SSLCipherSui ciph.d->isNull = false; // protocol - if (ciph.d->protocol == QSsl::SslV3) { - ciph.d->protocolString = QLatin1String("SSLv3"); - } else { - ciph.d->protocol = QSsl::TlsV1_2; - ciph.d->protocolString = QLatin1String("TLSv1.2"); - } + ciph.d->protocol = QSsl::TlsV1_2; + ciph.d->protocolString = QLatin1String("TLSv1.2"); const auto bits = ciph.d->name.splitRef(QLatin1Char('-')); if (bits.size() >= 2) { @@ -1106,22 +1081,6 @@ bool QSslSocketBackendPrivate::setSessionProtocol() { Q_ASSERT_X(context, Q_FUNC_INFO, "invalid SSL context (null)"); - // QSsl::SslV2 == kSSLProtocol2 is disabled in Secure Transport and - // always fails with errSSLIllegalParam: - // if (version < MINIMUM_STREAM_VERSION || version > MAXIMUM_STREAM_VERSION) - // return errSSLIllegalParam; - // where MINIMUM_STREAM_VERSION is SSL_Version_3_0, MAXIMUM_STREAM_VERSION is TLS_Version_1_2. - if (configuration.protocol == QSsl::SslV2) { - qCDebug(lcSsl) << "protocol QSsl::SslV2 is disabled"; - return false; - } - - // SslV3 is unsupported. - if (configuration.protocol == QSsl::SslV3) { - qCDebug(lcSsl) << "protocol QSsl::SslV3 is disabled"; - return false; - } - // SecureTransport has kTLSProtocol13 constant and also, kTLSProtocolMaxSupported. // Calling SSLSetProtocolVersionMax/Min with any of these two constants results // in errInvalidParam and a failure to set the protocol version. This means @@ -1162,13 +1121,6 @@ bool QSslSocketBackendPrivate::setSessionProtocol() qCDebug(lcSsl) << plainSocket << "requesting : any"; #endif err = SSLSetProtocolVersionMin(context, kTLSProtocol1); - } else if (configuration.protocol == QSsl::TlsV1SslV3) { - #ifdef QSSLSOCKET_DEBUG - qCDebug(lcSsl) << plainSocket << "requesting : SSLv3 - TLSv1.2"; - #endif - err = SSLSetProtocolVersionMin(context, kTLSProtocol1); - if (err == errSecSuccess) - err = SSLSetProtocolVersionMax(context, kTLSProtocol1); } else if (configuration.protocol == QSsl::SecureProtocols) { #ifdef QSSLSOCKET_DEBUG qCDebug(lcSsl) << plainSocket << "requesting : TLSv1 - TLSv1.2"; @@ -1213,8 +1165,6 @@ bool QSslSocketBackendPrivate::verifySessionProtocol() const bool protocolOk = false; if (configuration.protocol == QSsl::AnyProtocol) protocolOk = true; - else if (configuration.protocol == QSsl::TlsV1SslV3) - protocolOk = (sessionProtocol() == QSsl::TlsV1_0); else if (configuration.protocol == QSsl::SecureProtocols) protocolOk = (sessionProtocol() >= QSsl::TlsV1_0); else if (configuration.protocol == QSsl::TlsV1_0OrLater) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 4be27affca..f033d3b298 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -98,6 +98,123 @@ QT_BEGIN_NAMESPACE +namespace { + +QAlertLevel tlsAlertLevel(int value) +{ + if (const char *typeString = q_SSL_alert_type_string(value)) { + // Documented to return 'W' for warning, 'F' for fatal, + // 'U' for unknown. + switch (typeString[0]) { + case 'W': + return QAlertLevel::Warning; + case 'F': + return QAlertLevel::Fatal; + default:; + } + } + + return QAlertLevel::Unknown; +} + +QString tlsAlertDescription(int value) +{ + QString description = QLatin1String(q_SSL_alert_desc_string_long(value)); + if (!description.size()) + description = QLatin1String("no description provided"); + return description; +} + +QAlertType tlsAlertType(int value) +{ + // In case for some reason openssl gives us a value, + // which is not in our enum actually, we leave it to + // an application to handle (supposedly they have + // if or switch-statements). + return QAlertType(value & 0xff); +} + +} // Unnamed namespace + +extern "C" +{ + +void qt_AlertInfoCallback(const SSL *connection, int from, int value) +{ + // Passed to SSL_set_info_callback() + // https://www.openssl.org/docs/man1.1.1/man3/SSL_set_info_callback.html + + if (!connection) { +#ifdef QSSLSOCKET_DEBUG + qCWarning(lcSsl, "Invalid 'connection' parameter (nullptr)"); +#endif // QSSLSOCKET_DEBUG + return; + } + + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::socketOffsetInExData; + auto privateSocket = + static_cast<QSslSocketBackendPrivate *>(q_SSL_get_ex_data(connection, offset)); + if (!privateSocket) { + // SSL_set_ex_data can fail: +#ifdef QSSLSOCKET_DEBUG + qCWarning(lcSsl, "No external data (socket backend) found for parameter 'connection'"); +#endif // QSSLSOCKET_DEBUG + return; + } + + if (!(from & SSL_CB_ALERT)) { + // We only want to know about alerts (at least for now). + return; + } + + if (from & SSL_CB_WRITE) + privateSocket->alertMessageSent(value); + else + privateSocket->alertMessageReceived(value); +} + +int q_X509CallbackDirect(int ok, X509_STORE_CTX *ctx) +{ + // Passed to SSL_CTX_set_verify() + // https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_verify.html + // Returns 0 to abort verification, 1 to continue. + + // This is a new, experimental verification callback, reporting + // errors immediately and returning 0 or 1 depending on an application + // either ignoring or not ignoring verification errors as they come. + if (!ctx) { + qCWarning(lcSsl, "Invalid store context (nullptr)"); + return 0; + } + + if (!ok) { + // "Whenever a X509_STORE_CTX object is created for the verification of the + // peer's certificate during a handshake, a pointer to the SSL object is + // stored into the X509_STORE_CTX object to identify the connection affected. + // To retrieve this pointer the X509_STORE_CTX_get_ex_data() function can be + // used with the correct index." + SSL *ssl = static_cast<SSL *>(q_X509_STORE_CTX_get_ex_data(ctx, q_SSL_get_ex_data_X509_STORE_CTX_idx())); + if (!ssl) { + qCWarning(lcSsl, "No external data (SSL) found in X509 store object"); + return 0; + } + + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::socketOffsetInExData; + auto privateSocket = static_cast<QSslSocketBackendPrivate *>(q_SSL_get_ex_data(ssl, offset)); + if (!privateSocket) { + qCWarning(lcSsl, "No external data (QSslSocketBackendPrivate) found in SSL object"); + return 0; + } + + return privateSocket->emitErrorFromCallback(ctx); + } + return 1; +} + +} // extern "C" + Q_GLOBAL_STATIC(QRecursiveMutex, qt_opensslInitMutex) bool QSslSocketPrivate::s_libraryLoaded = false; @@ -266,11 +383,7 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(const SSL_CIPHER QString protoString = descriptionList.at(1).toString(); ciph.d->protocolString = protoString; ciph.d->protocol = QSsl::UnknownProtocol; - if (protoString == QLatin1String("SSLv3")) - ciph.d->protocol = QSsl::SslV3; - else if (protoString == QLatin1String("SSLv2")) - ciph.d->protocol = QSsl::SslV2; - else if (protoString == QLatin1String("TLSv1")) + if (protoString == QLatin1String("TLSv1")) ciph.d->protocol = QSsl::TlsV1_0; else if (protoString == QLatin1String("TLSv1.1")) ciph.d->protocol = QSsl::TlsV1_1; @@ -425,12 +538,15 @@ int q_X509Callback(int ok, X509_STORE_CTX *ctx) // Not found on store? Try SSL and its external data then. According to the OpenSSL's // documentation: // - // "Whenever a X509_STORE_CTX object is created for the verification of the peers certificate - // during a handshake, a pointer to the SSL object is stored into the X509_STORE_CTX object - // to identify the connection affected. To retrieve this pointer the X509_STORE_CTX_get_ex_data() - // function can be used with the correct index." + // "Whenever a X509_STORE_CTX object is created for the verification of the + // peer's certificate during a handshake, a pointer to the SSL object is + // stored into the X509_STORE_CTX object to identify the connection affected. + // To retrieve this pointer the X509_STORE_CTX_get_ex_data() function can be + // used with the correct index." + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::errorOffsetInExData; if (SSL *ssl = static_cast<SSL *>(q_X509_STORE_CTX_get_ex_data(ctx, q_SSL_get_ex_data_X509_STORE_CTX_idx()))) - errors = ErrorListPtr(q_SSL_get_ex_data(ssl, QSslSocketBackendPrivate::s_indexForSSLExtraData + 1)); + errors = ErrorListPtr(q_SSL_get_ex_data(ssl, offset)); } if (!errors) { @@ -476,20 +592,23 @@ void q_setDefaultDtlsCiphers(const QList<QSslCipher> &ciphers); long QSslSocketBackendPrivate::setupOpenSslOptions(QSsl::SslProtocol protocol, QSsl::SslOptions sslOptions) { long options; - if (protocol == QSsl::TlsV1SslV3) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3; - else if (protocol == QSsl::SecureProtocols) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3; - else if (protocol == QSsl::TlsV1_0OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3; - else if (protocol == QSsl::TlsV1_1OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1; - else if (protocol == QSsl::TlsV1_2OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1; - else if (protocol == QSsl::TlsV1_3OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2; - else + switch (protocol) { + case QSsl::SecureProtocols: + case QSsl::TlsV1_0OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3; + break; + case QSsl::TlsV1_1OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1; + break; + case QSsl::TlsV1_2OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1; + break; + case QSsl::TlsV1_3OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2; + break; + default: options = SSL_OP_ALL; + } // This option is disabled by default, so we need to be able to clear it if (sslOptions & QSsl::SslOptionDisableEmptyFragments) @@ -547,10 +666,7 @@ bool QSslSocketBackendPrivate::initSslContext() return false; } - if (configuration.protocol != QSsl::SslV2 && - configuration.protocol != QSsl::SslV3 && - configuration.protocol != QSsl::UnknownProtocol && - mode == QSslSocket::SslClientMode) { + if (configuration.protocol != QSsl::UnknownProtocol && mode == QSslSocket::SslClientMode) { // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. QString tlsHostName = verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName; if (tlsHostName.isEmpty()) @@ -1216,18 +1332,32 @@ bool QSslSocketBackendPrivate::startHandshake() if (inSetAndEmitError) return false; + pendingFatalAlert = false; + errorsReportedFromCallback = false; QVector<QSslErrorEntry> lastErrors; - q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + 1, &lastErrors); + q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + errorOffsetInExData, &lastErrors); + + // SSL_set_ex_data can fail, but see the callback's code - we handle this there. + q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + socketOffsetInExData, this); + q_SSL_set_info_callback(ssl, qt_AlertInfoCallback); + int result = (mode == QSslSocket::SslClientMode) ? q_SSL_connect(ssl) : q_SSL_accept(ssl); - q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + 1, nullptr); + q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + errorOffsetInExData, nullptr); + // Note, unlike errors as external data on SSL object, we do not unset + // a callback/ex-data if alert notifications are enabled: an alert can + // arrive after the handshake, for example, this happens when the server + // does not find a ClientCert or does not like it. - if (!lastErrors.isEmpty()) + if (!lastErrors.isEmpty() || errorsReportedFromCallback) storePeerCertificates(); - for (const auto ¤tError : qAsConst(lastErrors)) { - emit q->peerVerifyError(_q_OpenSSL_to_QSslError(currentError.code, - configuration.peerCertificateChain.value(currentError.depth))); - if (q->state() != QAbstractSocket::ConnectedState) - break; + + if (!errorsReportedFromCallback) { + for (const auto ¤tError : qAsConst(lastErrors)) { + emit q->peerVerifyError(_q_OpenSSL_to_QSslError(currentError.code, + configuration.peerCertificateChain.value(currentError.depth))); + if (q->state() != QAbstractSocket::ConnectedState) + break; + } } errorList << lastErrors; @@ -1251,6 +1381,10 @@ bool QSslSocketBackendPrivate::startHandshake() { const ScopedBool bg(inSetAndEmitError, true); setErrorAndEmit(QAbstractSocket::SslHandshakeFailedError, errorString); + if (pendingFatalAlert) { + trySendFatalAlert(); + pendingFatalAlert = false; + } } q->abort(); } @@ -1774,6 +1908,88 @@ bool QSslSocketBackendPrivate::checkOcspStatus() #endif // ocsp +void QSslSocketBackendPrivate::alertMessageSent(int value) +{ + Q_Q(QSslSocket); + + const auto level = tlsAlertLevel(value); + if (level == QAlertLevel::Fatal && !connectionEncrypted) { + // Note, this logic is handshake-time only: + pendingFatalAlert = true; + } + + emit q->alertSent(level, tlsAlertType(value), tlsAlertDescription(value)); +} + +void QSslSocketBackendPrivate::alertMessageReceived(int value) +{ + Q_Q(QSslSocket); + + emit q->alertReceived(tlsAlertLevel(value), tlsAlertType(value), tlsAlertDescription(value)); +} + +int QSslSocketBackendPrivate::emitErrorFromCallback(X509_STORE_CTX *ctx) +{ + // Returns 0 to abort verification, 1 to continue despite error (as + // OpenSSL expects from the verification callback). + Q_Q(QSslSocket); + + Q_ASSERT(ctx); + + using ScopedBool = QScopedValueRollback<bool>; + // While we are not setting, we are emitting and in general - + // we want to prevent accidental recursive startHandshake() + // calls: + const ScopedBool bg(inSetAndEmitError, true); + + X509 *x509 = q_X509_STORE_CTX_get_current_cert(ctx); + if (!x509) { + qCWarning(lcSsl, "Could not obtain the certificate (that failed to verify)"); + return 0; + } + const QSslCertificate certificate = QSslCertificatePrivate::QSslCertificate_from_X509(x509); + + const auto errorAndDepth = QSslErrorEntry::fromStoreContext(ctx); + const QSslError tlsError = _q_OpenSSL_to_QSslError(errorAndDepth.code, certificate); + + errorsReportedFromCallback = true; + handshakeInterrupted = true; + emit q->handshakeInterruptedOnError(tlsError); + + // Conveniently so, we also can access 'lastErrors' external data set + // in startHandshake, we store it for the case an application later + // wants to check errors (ignored or not): + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::errorOffsetInExData; + if (auto errorList = static_cast<QVector<QSslErrorEntry>*>(q_SSL_get_ex_data(ssl, offset))) + errorList->append(errorAndDepth); + + // An application is expected to ignore this error (by calling ignoreSslErrors) + // in its directly connected slot: + return !handshakeInterrupted; +} + +void QSslSocketBackendPrivate::trySendFatalAlert() +{ + Q_ASSERT(pendingFatalAlert); + + pendingFatalAlert = false; + QVarLengthArray<char, 4096> data; + int pendingBytes = 0; + while (plainSocket->isValid() && (pendingBytes = q_BIO_pending(writeBio)) > 0 + && plainSocket->openMode() != QIODevice::NotOpen) { + // Read encrypted data from the write BIO into a buffer. + data.resize(pendingBytes); + const int bioReadBytes = q_BIO_read(writeBio, data.data(), pendingBytes); + + // Write encrypted data from the buffer to the socket. + qint64 actualWritten = plainSocket->write(data.constData(), bioReadBytes); + if (actualWritten < 0) + return; + plainSocket->flush(); + } +} + void QSslSocketBackendPrivate::disconnectFromHost() { if (ssl) { @@ -1817,10 +2033,6 @@ QSsl::SslProtocol QSslSocketBackendPrivate::sessionProtocol() const int ver = q_SSL_version(ssl); switch (ver) { - case 0x2: - return QSsl::SslV2; - case 0x300: - return QSsl::SslV3; case 0x301: return QSsl::TlsV1_0; case 0x302: diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index 47ccf06e71..6c1ffb7237 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -131,6 +131,10 @@ public: SSL_SESSION *session; QVector<QSslErrorEntry> errorList; static int s_indexForSSLExtraData; // index used in SSL_get_ex_data to get the matching QSslSocketBackendPrivate + enum ExDataOffset { + errorOffsetInExData = 1, + socketOffsetInExData = 2 + }; bool inSetAndEmitError = false; @@ -158,6 +162,15 @@ public: bool checkOcspStatus(); #endif + void alertMessageSent(int encoded); + void alertMessageReceived(int encoded); + + int emitErrorFromCallback(X509_STORE_CTX *ctx); + void trySendFatalAlert(); + + bool pendingFatalAlert = false; + bool errorsReportedFromCallback = false; + // This decription will go to setErrorAndEmit(SslHandshakeError, ocspErrorDescription) QString ocspErrorDescription; // These will go to sslErrors() diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 71a268ae6e..21f37789ff 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -156,6 +156,10 @@ DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG) DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return) DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return) DEFINEFUNC2(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return) +using info_callback = void (*) (const SSL *ssl, int type, int val); +DEFINEFUNC2(void, SSL_set_info_callback, SSL *ssl, ssl, info_callback cb, cb, return, return) +DEFINEFUNC(const char *, SSL_alert_type_string, int value, value, return nullptr, return) +DEFINEFUNC(const char *, SSL_alert_desc_string_long, int value, value, return nullptr, return) #ifdef TLS1_3_VERSION DEFINEFUNC2(int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx, const char *str, str, return 0, return) DEFINEFUNC2(void, SSL_set_psk_use_session_callback, SSL *ssl, ssl, q_SSL_psk_use_session_cb_func_t callback, callback, return, DUMMYARG) @@ -841,7 +845,9 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(OPENSSL_sk_value) RESOLVEFUNC(DH_get0_pqg) RESOLVEFUNC(SSL_CTX_set_options) - + RESOLVEFUNC(SSL_set_info_callback) + RESOLVEFUNC(SSL_alert_type_string) + RESOLVEFUNC(SSL_alert_desc_string_long) #ifdef TLS1_3_VERSION RESOLVEFUNC(SSL_CTX_set_ciphersuites) RESOLVEFUNC(SSL_set_psk_use_session_callback) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index f35e0ba22b..273a4f359a 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -735,6 +735,10 @@ int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); void *q_CRYPTO_malloc(size_t num, const char *file, int line); #define q_OPENSSL_malloc(num) q_CRYPTO_malloc(num, "", 0) +void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); +const char *q_SSL_alert_type_string(int value); +const char *q_SSL_alert_desc_string_long(int value); + QT_END_NAMESPACE #endif diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 1abd18bb32..4b020b6a73 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -208,6 +208,7 @@ protected: bool paused; bool flushTriggered; QVector<QOcspResponse> ocspResponses; + bool handshakeInterrupted = false; }; #if QT_CONFIG(securetransport) || QT_CONFIG(schannel) diff --git a/src/network/ssl/qsslsocket_schannel.cpp b/src/network/ssl/qsslsocket_schannel.cpp index f9586b7862..ba15a0a65e 100644 --- a/src/network/ssl/qsslsocket_schannel.cpp +++ b/src/network/ssl/qsslsocket_schannel.cpp @@ -226,12 +226,6 @@ DWORD toSchannelProtocol(QSsl::SslProtocol protocol) protocols = SP_PROT_TLS1_0 | SP_PROT_TLS1_1 | SP_PROT_TLS1_2; // @future Add TLS 1.3 when supported by Windows! break; - case QSsl::SslV2: - case QSsl::SslV3: - return DWORD(-1); // Not supported - case QSsl::TlsV1SslV3: - protocols = SP_PROT_TLS1_0; - break; case QSsl::TlsV1_0: protocols = SP_PROT_TLS1_0; break; diff --git a/src/network/ssl/qsslsocket_winrt.cpp b/src/network/ssl/qsslsocket_winrt.cpp index f3ca3dc257..5f5201fc82 100644 --- a/src/network/ssl/qsslsocket_winrt.cpp +++ b/src/network/ssl/qsslsocket_winrt.cpp @@ -230,13 +230,7 @@ void QSslSocketBackendPrivate::startClientEncryption() QSsl::SslProtocol protocol = q->protocol(); switch (q->protocol()) { - case QSsl::SslV2: - case QSsl::SslV3: - setErrorAndEmit(QAbstractSocket::SslInvalidUserDataError, - QStringLiteral("unsupported protocol")); - return; case QSsl::AnyProtocol: - case QSsl::TlsV1SslV3: protectionLevel = SocketProtectionLevel_Tls10; break; case QSsl::TlsV1_0: @@ -270,7 +264,7 @@ void QSslSocketBackendPrivate::startClientEncryption() } // Sync custom certificates - const QSet<QSslCertificate> caCertificates = configuration.caCertificates.toSet(); + const QSet<QSslCertificate> caCertificates(configuration.caCertificates.constBegin(), configuration.caCertificates.constEnd()); const QSet<QSslCertificate> newCertificates = caCertificates - previousCaCertificates; const QSet<QSslCertificate> oldCertificates = previousCaCertificates - caCertificates; g->syncCaCertificates(newCertificates, oldCertificates); @@ -393,7 +387,7 @@ void QSslSocketBackendPrivate::continueHandshake() hr = control2->get_IgnorableServerCertificateErrors(&ignoreList); Q_ASSERT_SUCCEEDED(hr); - QSet<QSslError> ignoreErrors = ignoreErrorsList.toSet(); + QSet<QSslError> ignoreErrors(ignoreErrorsList.constBegin(), ignoreErrorsList.constEnd()); for (int i = ChainValidationResult_Untrusted; i < ChainValidationResult_OtherErrors + 1; ++i) { // Populate the native ignore list - break to add, continue to skip switch (i) { @@ -596,7 +590,7 @@ HRESULT QSslSocketBackendPrivate::onSslUpgrade(IAsyncAction *action, AsyncStatus } } - sslErrors = errors.toList(); + sslErrors = QList<QSslError>(errors.constBegin(), errors.constEnd()); // Peer validation if (!configuration.peerCertificate.isNull()) { |