summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/Qt5Config.cmake.in43
-rw-r--r--src/corelib/animation/qabstractanimation.h4
-rw-r--r--src/corelib/animation/qanimationgroup.h4
-rw-r--r--src/corelib/animation/qparallelanimationgroup.h4
-rw-r--r--src/corelib/animation/qpauseanimation.h4
-rw-r--r--src/corelib/animation/qpropertyanimation.h4
-rw-r--r--src/corelib/animation/qsequentialanimationgroup.h4
-rw-r--r--src/corelib/animation/qvariantanimation.h4
-rw-r--r--src/corelib/arch/qatomic_alpha.h13
-rw-r--r--src/corelib/arch/qatomic_armv5.h15
-rw-r--r--src/corelib/arch/qatomic_armv6.h7
-rw-r--r--src/corelib/arch/qatomic_armv7.h5
-rw-r--r--src/corelib/arch/qatomic_bfin.h13
-rw-r--r--src/corelib/arch/qatomic_bootstrap.h7
-rw-r--r--src/corelib/arch/qatomic_cxx11.h5
-rw-r--r--src/corelib/arch/qatomic_gcc.h6
-rw-r--r--src/corelib/arch/qatomic_ia64.h7
-rw-r--r--src/corelib/arch/qatomic_integrity.h13
-rw-r--r--src/corelib/arch/qatomic_mips.h7
-rw-r--r--src/corelib/arch/qatomic_msvc.h6
-rw-r--r--src/corelib/arch/qatomic_power.h13
-rw-r--r--src/corelib/arch/qatomic_s390.h13
-rw-r--r--src/corelib/arch/qatomic_sh4a.h7
-rw-r--r--src/corelib/arch/qatomic_sparc.h13
-rw-r--r--src/corelib/arch/qatomic_unix.h6
-rw-r--r--src/corelib/arch/qatomic_vxworks.h18
-rw-r--r--src/corelib/arch/qatomic_x86.h7
-rw-r--r--src/corelib/codecs/qicucodec.cpp3
-rw-r--r--src/corelib/codecs/qtextcodec.cpp34
-rw-r--r--src/corelib/codecs/qtextcodec.h4
-rw-r--r--src/corelib/codecs/qtextcodec_p.h2
-rw-r--r--src/corelib/corelib.pro16
-rw-r--r--src/corelib/doc/snippets/code/doc_src_properties.cpp21
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp34
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp7
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp63
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp14
-rw-r--r--src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp62
-rw-r--r--src/corelib/doc/src/objectmodel/properties.qdoc26
-rw-r--r--src/corelib/global/global.pri2
-rw-r--r--src/corelib/global/qcompilerdetection.h8
-rw-r--r--src/corelib/global/qendian.h4
-rw-r--r--src/corelib/global/qfeatures.h3
-rw-r--r--src/corelib/global/qfeatures.txt7
-rw-r--r--src/corelib/global/qflags.h4
-rw-r--r--src/corelib/global/qglobal.cpp42
-rw-r--r--src/corelib/global/qglobal.h139
-rw-r--r--src/corelib/global/qglobalstatic.cpp524
-rw-r--r--src/corelib/global/qglobalstatic.h142
-rw-r--r--src/corelib/global/qisenum.h3
-rw-r--r--src/corelib/global/qlibraryinfo.h4
-rw-r--r--src/corelib/global/qlogging.cpp115
-rw-r--r--src/corelib/global/qlogging.h3
-rw-r--r--src/corelib/global/qnamespace.h18
-rw-r--r--src/corelib/global/qnamespace.qdoc33
-rw-r--r--src/corelib/global/qnumeric.h4
-rw-r--r--src/corelib/global/qprocessordetection.h1
-rw-r--r--src/corelib/global/qsysinfo.h3
-rw-r--r--src/corelib/global/qsystemdetection.h60
-rw-r--r--src/corelib/global/qt_windows.h5
-rw-r--r--src/corelib/global/qtypeinfo.h3
-rw-r--r--src/corelib/global/qtypetraits.h3
-rw-r--r--src/corelib/io/io.pri19
-rw-r--r--src/corelib/io/qabstractfileengine.cpp31
-rw-r--r--src/corelib/io/qabstractfileengine_p.h8
-rw-r--r--src/corelib/io/qbuffer.h4
-rw-r--r--src/corelib/io/qdatastream.cpp3
-rw-r--r--src/corelib/io/qdatastream.h9
-rw-r--r--src/corelib/io/qdebug.cpp73
-rw-r--r--src/corelib/io/qdebug.h16
-rw-r--r--src/corelib/io/qdir.h4
-rw-r--r--src/corelib/io/qdiriterator.h4
-rw-r--r--src/corelib/io/qfile.h4
-rw-r--r--src/corelib/io/qfiledevice.h4
-rw-r--r--src/corelib/io/qfileinfo.h4
-rw-r--r--src/corelib/io/qfilesystemengine.cpp3
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp18
-rw-r--r--src/corelib/io/qfilesystemwatcher.h4
-rw-r--r--src/corelib/io/qfsfileengine.cpp16
-rw-r--r--src/corelib/io/qfsfileengine_p.h3
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp23
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp29
-rw-r--r--src/corelib/io/qiodevice.h4
-rw-r--r--src/corelib/io/qlockfile.cpp346
-rw-r--r--src/corelib/io/qlockfile.h91
-rw-r--r--src/corelib/io/qlockfile_p.h104
-rw-r--r--src/corelib/io/qlockfile_unix.cpp207
-rw-r--r--src/corelib/io/qlockfile_win.cpp138
-rw-r--r--src/corelib/io/qprocess.cpp96
-rw-r--r--src/corelib/io/qprocess.h10
-rw-r--r--src/corelib/io/qprocess_unix.cpp36
-rw-r--r--src/corelib/io/qresource.cpp9
-rw-r--r--src/corelib/io/qresource.h4
-rw-r--r--src/corelib/io/qsavefile.cpp316
-rw-r--r--src/corelib/io/qsavefile.h90
-rw-r--r--src/corelib/io/qsavefile_p.h75
-rw-r--r--src/corelib/io/qsettings.h4
-rw-r--r--src/corelib/io/qstandardpaths.h4
-rw-r--r--src/corelib/io/qtemporarydir.cpp14
-rw-r--r--src/corelib/io/qtemporarydir.h4
-rw-r--r--src/corelib/io/qtemporaryfile.cpp60
-rw-r--r--src/corelib/io/qtemporaryfile.h6
-rw-r--r--src/corelib/io/qtemporaryfile_p.h103
-rw-r--r--src/corelib/io/qtextstream.cpp218
-rw-r--r--src/corelib/io/qtextstream.h5
-rw-r--r--src/corelib/io/qtextstream_p.h185
-rw-r--r--src/corelib/io/qtldurl.cpp18
-rw-r--r--src/corelib/io/qurl.cpp38
-rw-r--r--src/corelib/io/qurl.h7
-rw-r--r--src/corelib/io/qurlidna.cpp29
-rw-r--r--src/corelib/io/qurlquery.h4
-rw-r--r--src/corelib/io/qurltlds_p.h15867
-rw-r--r--src/corelib/io/qwindowspipereader_p.h4
-rw-r--r--src/corelib/io/qwindowspipewriter_p.h4
-rw-r--r--src/corelib/io/qwinoverlappedionotifier_p.h4
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp44
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.h11
-rw-r--r--src/corelib/itemmodels/qabstractproxymodel.cpp9
-rw-r--r--src/corelib/itemmodels/qabstractproxymodel.h7
-rw-r--r--src/corelib/itemmodels/qidentityproxymodel.h4
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.h4
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.h4
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.cpp4
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.h4
-rw-r--r--src/corelib/json/qjsonarray.h4
-rw-r--r--src/corelib/json/qjsondocument.cpp39
-rw-r--r--src/corelib/json/qjsondocument.h17
-rw-r--r--src/corelib/json/qjsonobject.h4
-rw-r--r--src/corelib/json/qjsonvalue.h4
-rw-r--r--src/corelib/kernel/kernel.pri2
-rw-r--r--src/corelib/kernel/qabstracteventdispatcher.h4
-rw-r--r--src/corelib/kernel/qabstractnativeeventfilter.h4
-rw-r--r--src/corelib/kernel/qbasictimer.h4
-rw-r--r--src/corelib/kernel/qcore_mac_p.h12
-rw-r--r--src/corelib/kernel/qcore_unix.cpp21
-rw-r--r--src/corelib/kernel/qcore_unix_p.h54
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp114
-rw-r--r--src/corelib/kernel/qcoreapplication.h25
-rw-r--r--src/corelib/kernel/qcoreevent.h4
-rw-r--r--src/corelib/kernel/qeventdispatcher_blackberry.cpp18
-rw-r--r--src/corelib/kernel/qeventdispatcher_blackberry_p.h2
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib.cpp4
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix.cpp51
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix_p.h11
-rw-r--r--src/corelib/kernel/qeventloop.h4
-rw-r--r--src/corelib/kernel/qeventloop_p.h4
-rw-r--r--src/corelib/kernel/qfunctions_nacl.h4
-rw-r--r--src/corelib/kernel/qfunctions_p.h3
-rw-r--r--src/corelib/kernel/qfunctions_vxworks.cpp10
-rw-r--r--src/corelib/kernel/qfunctions_vxworks.h53
-rw-r--r--src/corelib/kernel/qfunctions_wince.h3
-rw-r--r--src/corelib/kernel/qmath.cpp87
-rw-r--r--src/corelib/kernel/qmath.h28
-rw-r--r--src/corelib/kernel/qmetaobject.h4
-rw-r--r--src/corelib/kernel/qmetatype.cpp8
-rw-r--r--src/corelib/kernel/qmetatype.h37
-rw-r--r--src/corelib/kernel/qmetatype_p.h2
-rw-r--r--src/corelib/kernel/qmimedata.h4
-rw-r--r--src/corelib/kernel/qobject.cpp4
-rw-r--r--src/corelib/kernel/qobject.h8
-rw-r--r--src/corelib/kernel/qobject_impl.h7
-rw-r--r--src/corelib/kernel/qobject_p.h77
-rw-r--r--src/corelib/kernel/qobjectcleanuphandler.h4
-rw-r--r--src/corelib/kernel/qobjectdefs.h4
-rw-r--r--src/corelib/kernel/qobjectdefs_impl.h7
-rw-r--r--src/corelib/kernel/qpointer.h100
-rw-r--r--src/corelib/kernel/qsharedmemory.h4
-rw-r--r--src/corelib/kernel/qsharedmemory_p.h2
-rw-r--r--src/corelib/kernel/qsharedmemory_unix.cpp3
-rw-r--r--src/corelib/kernel/qsignalmapper.h4
-rw-r--r--src/corelib/kernel/qsocketnotifier.h4
-rw-r--r--src/corelib/kernel/qsystemsemaphore.h4
-rw-r--r--src/corelib/kernel/qtimer.h4
-rw-r--r--src/corelib/kernel/qtimerinfo_unix.cpp84
-rw-r--r--src/corelib/kernel/qtimerinfo_unix_p.h14
-rw-r--r--src/corelib/kernel/qtranslator.h4
-rw-r--r--src/corelib/kernel/qvariant.cpp10
-rw-r--r--src/corelib/kernel/qvariant.h30
-rw-r--r--src/corelib/kernel/qwineventnotifier.h4
-rw-r--r--src/corelib/mimetypes/qmimedatabase.h3
-rw-r--r--src/corelib/mimetypes/qmimetype.h3
-rw-r--r--src/corelib/plugin/qfactoryinterface.h4
-rw-r--r--src/corelib/plugin/qlibrary.cpp173
-rw-r--r--src/corelib/plugin/qlibrary.h4
-rw-r--r--src/corelib/plugin/qlibrary_p.h9
-rw-r--r--src/corelib/plugin/qlibrary_unix.cpp2
-rw-r--r--src/corelib/plugin/qplugin.h4
-rw-r--r--src/corelib/plugin/qpluginloader.h4
-rw-r--r--src/corelib/plugin/quuid.h4
-rw-r--r--src/corelib/statemachine/qabstractstate.h4
-rw-r--r--src/corelib/statemachine/qabstracttransition.h4
-rw-r--r--src/corelib/statemachine/qeventtransition.h4
-rw-r--r--src/corelib/statemachine/qfinalstate.h4
-rw-r--r--src/corelib/statemachine/qhistorystate.h4
-rw-r--r--src/corelib/statemachine/qsignaltransition.h4
-rw-r--r--src/corelib/statemachine/qstate.h4
-rw-r--r--src/corelib/statemachine/qstatemachine.h4
-rw-r--r--src/corelib/thread/qatomic.h4
-rw-r--r--src/corelib/thread/qbasicatomic.h6
-rw-r--r--src/corelib/thread/qexception.h2
-rw-r--r--src/corelib/thread/qfuture.h2
-rw-r--r--src/corelib/thread/qfutureinterface.h3
-rw-r--r--src/corelib/thread/qfuturesynchronizer.h3
-rw-r--r--src/corelib/thread/qfuturewatcher.h3
-rw-r--r--src/corelib/thread/qgenericatomic.h6
-rw-r--r--src/corelib/thread/qmutex.h4
-rw-r--r--src/corelib/thread/qmutex_p.h9
-rw-r--r--src/corelib/thread/qmutex_unix.cpp11
-rw-r--r--src/corelib/thread/qoldbasicatomic.h6
-rw-r--r--src/corelib/thread/qreadwritelock.h4
-rw-r--r--src/corelib/thread/qresultstore.h2
-rw-r--r--src/corelib/thread/qrunnable.h2
-rw-r--r--src/corelib/thread/qsemaphore.h4
-rw-r--r--src/corelib/thread/qthread.cpp1
-rw-r--r--src/corelib/thread/qthread.h4
-rw-r--r--src/corelib/thread/qthread_p.h1
-rw-r--r--src/corelib/thread/qthread_unix.cpp36
-rw-r--r--src/corelib/thread/qthread_win.cpp5
-rw-r--r--src/corelib/thread/qthreadpool.h2
-rw-r--r--src/corelib/thread/qthreadstorage.h4
-rw-r--r--src/corelib/thread/qwaitcondition.h4
-rw-r--r--src/corelib/thread/qwaitcondition_unix.cpp46
-rw-r--r--src/corelib/thread/thread.pri2
-rw-r--r--src/corelib/tools/qalgorithms.h4
-rw-r--r--src/corelib/tools/qarraydata.h4
-rw-r--r--src/corelib/tools/qarraydataops.h4
-rw-r--r--src/corelib/tools/qarraydatapointer.h4
-rw-r--r--src/corelib/tools/qbitarray.h4
-rw-r--r--src/corelib/tools/qbytearray.h4
-rw-r--r--src/corelib/tools/qbytearraymatcher.h4
-rw-r--r--src/corelib/tools/qcache.h4
-rw-r--r--src/corelib/tools/qchar.cpp147
-rw-r--r--src/corelib/tools/qchar.h132
-rw-r--r--src/corelib/tools/qcollator_p.h4
-rw-r--r--src/corelib/tools/qcontainerfwd.h4
-rw-r--r--src/corelib/tools/qcontiguouscache.h4
-rw-r--r--src/corelib/tools/qcryptographichash.cpp157
-rw-r--r--src/corelib/tools/qcryptographichash.h11
-rw-r--r--src/corelib/tools/qdatetime.cpp35
-rw-r--r--src/corelib/tools/qdatetime.h4
-rw-r--r--src/corelib/tools/qdatetime_p.h3
-rw-r--r--src/corelib/tools/qeasingcurve.h4
-rw-r--r--src/corelib/tools/qelapsedtimer.h4
-rw-r--r--src/corelib/tools/qelapsedtimer_mac.cpp6
-rw-r--r--src/corelib/tools/qelapsedtimer_unix.cpp10
-rw-r--r--src/corelib/tools/qfreelist_p.h4
-rw-r--r--src/corelib/tools/qharfbuzz_p.h76
-rw-r--r--src/corelib/tools/qhash.cpp20
-rw-r--r--src/corelib/tools/qhash.h23
-rw-r--r--src/corelib/tools/qiterator.h4
-rw-r--r--src/corelib/tools/qline.h4
-rw-r--r--src/corelib/tools/qlinkedlist.h4
-rw-r--r--src/corelib/tools/qlist.h4
-rw-r--r--src/corelib/tools/qlocale.cpp306
-rw-r--r--src/corelib/tools/qlocale.h139
-rw-r--r--src/corelib/tools/qlocale.qdoc149
-rw-r--r--src/corelib/tools/qlocale_data_p.h751
-rw-r--r--src/corelib/tools/qlocale_mac.mm2
-rw-r--r--src/corelib/tools/qlocale_p.h6
-rw-r--r--src/corelib/tools/qmap.cpp20
-rw-r--r--src/corelib/tools/qmap.h21
-rw-r--r--src/corelib/tools/qmargins.cpp234
-rw-r--r--src/corelib/tools/qmargins.h133
-rw-r--r--src/corelib/tools/qmessageauthenticationcode.cpp283
-rw-r--r--src/corelib/tools/qmessageauthenticationcode.h80
-rw-r--r--src/corelib/tools/qpair.h4
-rw-r--r--src/corelib/tools/qpodlist_p.h4
-rw-r--r--src/corelib/tools/qpoint.cpp18
-rw-r--r--src/corelib/tools/qpoint.h10
-rw-r--r--src/corelib/tools/qqueue.h4
-rw-r--r--src/corelib/tools/qrect.h10
-rw-r--r--src/corelib/tools/qrefcount.h4
-rw-r--r--src/corelib/tools/qregexp.h4
-rw-r--r--src/corelib/tools/qregularexpression.cpp149
-rw-r--r--src/corelib/tools/qregularexpression.h16
-rw-r--r--src/corelib/tools/qscopedpointer.h3
-rw-r--r--src/corelib/tools/qscopedpointer_p.h2
-rw-r--r--src/corelib/tools/qscopedvaluerollback.h2
-rw-r--r--src/corelib/tools/qset.h15
-rw-r--r--src/corelib/tools/qset.qdoc10
-rw-r--r--src/corelib/tools/qshareddata.h4
-rw-r--r--src/corelib/tools/qsharedpointer.cpp86
-rw-r--r--src/corelib/tools/qsharedpointer.h7
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h38
-rw-r--r--src/corelib/tools/qsimd_p.h4
-rw-r--r--src/corelib/tools/qsize.h4
-rw-r--r--src/corelib/tools/qstack.h4
-rw-r--r--src/corelib/tools/qstring.cpp418
-rw-r--r--src/corelib/tools/qstring.h34
-rw-r--r--src/corelib/tools/qstringbuilder.h4
-rw-r--r--src/corelib/tools/qstringlist.cpp12
-rw-r--r--src/corelib/tools/qstringlist.h16
-rw-r--r--src/corelib/tools/qstringmatcher.h4
-rw-r--r--src/corelib/tools/qtextboundaryfinder.cpp11
-rw-r--r--src/corelib/tools/qtextboundaryfinder.h4
-rw-r--r--src/corelib/tools/qtimeline.h4
-rw-r--r--src/corelib/tools/qunicodetables.cpp11948
-rw-r--r--src/corelib/tools/qunicodetables_p.h113
-rw-r--r--src/corelib/tools/qunicodetools.cpp7
-rw-r--r--src/corelib/tools/qvarlengtharray.h9
-rw-r--r--src/corelib/tools/qvarlengtharray.qdoc20
-rw-r--r--src/corelib/tools/qvector.h4
-rw-r--r--src/corelib/tools/tools.pri5
-rw-r--r--src/corelib/xml/qxmlstream.h4
304 files changed, 23502 insertions, 13928 deletions
diff --git a/src/corelib/Qt5Config.cmake.in b/src/corelib/Qt5Config.cmake.in
new file mode 100644
index 0000000000..408dd64496
--- /dev/null
+++ b/src/corelib/Qt5Config.cmake.in
@@ -0,0 +1,43 @@
+
+if (CMAKE_VERSION VERSION_LESS 2.8.9)
+ message(FATAL_ERROR \"Qt5 requires at least CMake version 2.8.9\")
+endif()
+
+if (NOT Qt5_FIND_COMPONENTS)
+ set(Qt5_NOT_FOUND_MESSAGE \"The Qt5 package requires at least one component\")
+ set(Qt5_FOUND False)
+ return()
+endif()
+
+set(_Qt5_FIND_PARTS_REQUIRED)
+if (Qt5_FIND_REQUIRED)
+ set(_Qt5_FIND_PARTS_REQUIRED REQUIRED)
+endif()
+set(_Qt5_FIND_PARTS_QUIET)
+if (Qt5_FIND_QUIETLY)
+ set(_Qt5_FIND_PARTS_QUIET QUIET)
+endif()
+
+get_filename_component(_qt5_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
+
+set(_Qt5_NOTFOUND_MESSAGE)
+
+foreach(module ${Qt5_FIND_COMPONENTS})
+ find_package(Qt5${module}
+ ${_Qt5_FIND_PARTS_QUIET}
+ ${_Qt5_FIND_PARTS_REQUIRED}
+ PATHS \"${_qt5_install_prefix}\" NO_DEFAULT_PATH
+ )
+ if (NOT Qt5${module}_FOUND)
+ if (Qt5_FIND_REQUIRED_${module})
+ set(_Qt5_NOTFOUND_MESSAGE \"${_Qt5_NOTFOUND_MESSAGE}Failed to find Qt5 component \\\"${module}\\\" config file at \\\"${_qt5_install_prefix}/lib/cmake/Qt5${module}/Qt5${module}Config.cmake\\\"\\n\")
+ elseif(NOT Qt5_FIND_QUIETLY)
+ message(WARNING \"Failed to find Qt5 component \\\"${module}\\\" config file at \\\"${_qt5_install_prefix}/lib/cmake/Qt5${module}/Qt5${module}Config.cmake\\\"\")
+ endif()
+ endif()
+endforeach()
+
+if (_Qt5_NOTFOUND_MESSAGE)
+ set(Qt5_NOT_FOUND_MESSAGE \"${_Qt5_NOTFOUND_MESSAGE}\")
+ set(Qt5_FOUND False)
+endif()
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index e1884aa533..f1aa6c0d78 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -44,8 +44,6 @@
#include <QtCore/qobject.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -177,6 +175,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QABSTRACTANIMATION_H
diff --git a/src/corelib/animation/qanimationgroup.h b/src/corelib/animation/qanimationgroup.h
index 987efa0f94..cf32f844d3 100644
--- a/src/corelib/animation/qanimationgroup.h
+++ b/src/corelib/animation/qanimationgroup.h
@@ -44,8 +44,6 @@
#include <QtCore/qabstractanimation.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -82,6 +80,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif //QANIMATIONGROUP_H
diff --git a/src/corelib/animation/qparallelanimationgroup.h b/src/corelib/animation/qparallelanimationgroup.h
index ad9c0ccae7..31810cfca2 100644
--- a/src/corelib/animation/qparallelanimationgroup.h
+++ b/src/corelib/animation/qparallelanimationgroup.h
@@ -44,8 +44,6 @@
#include <QtCore/qanimationgroup.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -80,6 +78,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QPARALLELANIMATIONGROUP
diff --git a/src/corelib/animation/qpauseanimation.h b/src/corelib/animation/qpauseanimation.h
index 49abad4e5f..5c770015ef 100644
--- a/src/corelib/animation/qpauseanimation.h
+++ b/src/corelib/animation/qpauseanimation.h
@@ -44,8 +44,6 @@
#include <QtCore/qanimationgroup.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -78,6 +76,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QPAUSEANIMATION_H
diff --git a/src/corelib/animation/qpropertyanimation.h b/src/corelib/animation/qpropertyanimation.h
index 7b53eb3d96..f6b92cb515 100644
--- a/src/corelib/animation/qpropertyanimation.h
+++ b/src/corelib/animation/qpropertyanimation.h
@@ -44,8 +44,6 @@
#include <QtCore/qvariantanimation.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -83,6 +81,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QPROPERTYANIMATION_H
diff --git a/src/corelib/animation/qsequentialanimationgroup.h b/src/corelib/animation/qsequentialanimationgroup.h
index 9070720669..51b4227599 100644
--- a/src/corelib/animation/qsequentialanimationgroup.h
+++ b/src/corelib/animation/qsequentialanimationgroup.h
@@ -44,8 +44,6 @@
#include <QtCore/qanimationgroup.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -90,6 +88,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif //QSEQUENTIALANIMATIONGROUP_H
diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h
index b5ebbd235a..83018c30ae 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
@@ -48,8 +48,6 @@
#include <QtCore/qvariant.h>
#include <QtCore/qpair.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -124,6 +122,4 @@ void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to,
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif //QVARIANTANIMATION_H
diff --git a/src/corelib/arch/qatomic_alpha.h b/src/corelib/arch/qatomic_alpha.h
index b842859336..71cb112d47 100644
--- a/src/corelib/arch/qatomic_alpha.h
+++ b/src/corelib/arch/qatomic_alpha.h
@@ -44,10 +44,17 @@
#include <QtCore/qoldbasicatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
inline bool QBasicAtomicInt::isReferenceCountingNative()
@@ -517,6 +524,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_ALPHA_H
diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h
index cdb9c8f979..e0a50b3c24 100644
--- a/src/corelib/arch/qatomic_armv5.h
+++ b/src/corelib/arch/qatomic_armv5.h
@@ -45,15 +45,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -167,12 +164,20 @@ __asm T QBasicAtomicOps<4>::fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL
template<> template <typename T> inline
T QBasicAtomicOps<4>::fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW
{
+#if defined(__thumb__)
+ register T originalValue;
+ do {
+ originalValue = _q_value;
+ } while (_q_cmpxchg(originalValue, newValue, &_q_value) != 0);
+ return originalValue;
+#else
T originalValue;
asm volatile("swp %0,%2,[%3]"
: "=&r"(originalValue), "=m" (_q_value)
: "r"(newValue), "r"(&_q_value)
: "cc", "memory");
return originalValue;
+#endif
}
#endif // Q_CC_RVCT
@@ -190,6 +195,4 @@ T QBasicAtomicOps<4>::fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveTy
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_ARMV5_H
diff --git a/src/corelib/arch/qatomic_armv6.h b/src/corelib/arch/qatomic_armv6.h
index 38ab1983d6..7f5939e391 100644
--- a/src/corelib/arch/qatomic_armv6.h
+++ b/src/corelib/arch/qatomic_armv6.h
@@ -45,15 +45,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -729,6 +726,4 @@ void QBasicAtomicOps<size>::orderedMemoryFence(const T &) Q_DECL_NOTHROW
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_ARMV6_H
diff --git a/src/corelib/arch/qatomic_armv7.h b/src/corelib/arch/qatomic_armv7.h
index fc5dbc9175..1929ae0ab3 100644
--- a/src/corelib/arch/qatomic_armv7.h
+++ b/src/corelib/arch/qatomic_armv7.h
@@ -54,11 +54,12 @@
#if 0
// silence syncqt warnings
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_END_NAMESPACE
-QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
#endif
#endif // QATOMIC_ARMV7_H
diff --git a/src/corelib/arch/qatomic_bfin.h b/src/corelib/arch/qatomic_bfin.h
index 24c9ea77e1..79519308a4 100644
--- a/src/corelib/arch/qatomic_bfin.h
+++ b/src/corelib/arch/qatomic_bfin.h
@@ -44,10 +44,17 @@
#include <QtCore/qoldbasicatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_NOT_NATIVE
inline bool QBasicAtomicInt::isReferenceCountingNative()
@@ -340,6 +347,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_BFIN_H
diff --git a/src/corelib/arch/qatomic_bootstrap.h b/src/corelib/arch/qatomic_bootstrap.h
index 5b2a2f86fd..160e0abdf3 100644
--- a/src/corelib/arch/qatomic_bootstrap.h
+++ b/src/corelib/arch/qatomic_bootstrap.h
@@ -45,15 +45,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -98,6 +95,4 @@ template <typename T> struct QAtomicOps: QGenericAtomicOps<QAtomicOps<T> >
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_BOOTSTRAP_H
diff --git a/src/corelib/arch/qatomic_cxx11.h b/src/corelib/arch/qatomic_cxx11.h
index f7a7ba4295..3119edaf45 100644
--- a/src/corelib/arch/qatomic_cxx11.h
+++ b/src/corelib/arch/qatomic_cxx11.h
@@ -45,14 +45,12 @@
#include <QtCore/qgenericatomic.h>
#include <atomic>
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -247,6 +245,5 @@ template <typename T> struct QAtomicOps
#endif
QT_END_NAMESPACE
-QT_END_HEADER
#endif // QATOMIC_CXX0X_H
diff --git a/src/corelib/arch/qatomic_gcc.h b/src/corelib/arch/qatomic_gcc.h
index 0940ed082f..bd296053e5 100644
--- a/src/corelib/arch/qatomic_gcc.h
+++ b/src/corelib/arch/qatomic_gcc.h
@@ -44,14 +44,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -132,6 +130,4 @@ template <typename T> struct QAtomicOps: QGenericAtomicOps<QAtomicOps<T> >
};
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_GCC_H
diff --git a/src/corelib/arch/qatomic_ia64.h b/src/corelib/arch/qatomic_ia64.h
index 1a5259aa09..d4b187ffea 100644
--- a/src/corelib/arch/qatomic_ia64.h
+++ b/src/corelib/arch/qatomic_ia64.h
@@ -45,15 +45,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -1089,6 +1086,4 @@ T QBasicAtomicOps<size>::fetchAndAddOrdered(T &_q_value, typename QAtomicAdditiv
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_IA64_H
diff --git a/src/corelib/arch/qatomic_integrity.h b/src/corelib/arch/qatomic_integrity.h
index 50654e6713..f8cfc8ce5b 100644
--- a/src/corelib/arch/qatomic_integrity.h
+++ b/src/corelib/arch/qatomic_integrity.h
@@ -45,10 +45,17 @@
#include <QtCore/qoldbasicatomic.h>
#include <INTEGRITY.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#define qt_i2addr(a) reinterpret_cast<Address *>(const_cast<int *>(a))
#define qt_p2addr(a) reinterpret_cast<Address *>(const_cast<void *>(a))
#define qt_addr(a) reinterpret_cast<Address>(a)
@@ -284,7 +291,5 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_INTEGRITY_H
diff --git a/src/corelib/arch/qatomic_mips.h b/src/corelib/arch/qatomic_mips.h
index 98ac928184..7716750332 100644
--- a/src/corelib/arch/qatomic_mips.h
+++ b/src/corelib/arch/qatomic_mips.h
@@ -45,15 +45,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -362,6 +359,4 @@ T QBasicAtomicOps<8>::fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveTy
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_MIPS_H
diff --git a/src/corelib/arch/qatomic_msvc.h b/src/corelib/arch/qatomic_msvc.h
index 58b2f30bb7..4f91e3d9da 100644
--- a/src/corelib/arch/qatomic_msvc.h
+++ b/src/corelib/arch/qatomic_msvc.h
@@ -214,14 +214,12 @@ extern "C" {
////////////////////////////////////////////////////////////////////////////////////////////////////
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -383,6 +381,4 @@ inline T *QAtomicOps<T *>::fetchAndAddRelaxed(T *&_q_value, qptrdiff valueToAdd)
#undef QT_INTERLOCKED_EXCHANGE_ADD_POINTER
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_MSVC_H
diff --git a/src/corelib/arch/qatomic_power.h b/src/corelib/arch/qatomic_power.h
index 5e4de3f9fd..ad1c619d56 100644
--- a/src/corelib/arch/qatomic_power.h
+++ b/src/corelib/arch/qatomic_power.h
@@ -44,10 +44,17 @@
#include <QtCore/qoldbasicatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
inline bool QBasicAtomicInt::isReferenceCountingNative()
@@ -511,6 +518,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_POWER_H
diff --git a/src/corelib/arch/qatomic_s390.h b/src/corelib/arch/qatomic_s390.h
index c24c243c03..0469f44e5f 100644
--- a/src/corelib/arch/qatomic_s390.h
+++ b/src/corelib/arch/qatomic_s390.h
@@ -44,10 +44,17 @@
#include <QtCore/qoldbasicatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
inline bool QBasicAtomicInt::isReferenceCountingNative()
@@ -423,6 +430,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_S390_H
diff --git a/src/corelib/arch/qatomic_sh4a.h b/src/corelib/arch/qatomic_sh4a.h
index 0fd96d1f0f..08f75e44f2 100644
--- a/src/corelib/arch/qatomic_sh4a.h
+++ b/src/corelib/arch/qatomic_sh4a.h
@@ -44,14 +44,15 @@
#include <QtCore/qoldbasicatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
QT_END_NAMESPACE
-QT_END_HEADER
+#if 0
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
diff --git a/src/corelib/arch/qatomic_sparc.h b/src/corelib/arch/qatomic_sparc.h
index 1bf625fbb1..8aea33ce85 100644
--- a/src/corelib/arch/qatomic_sparc.h
+++ b/src/corelib/arch/qatomic_sparc.h
@@ -44,10 +44,17 @@
#include <QtCore/qoldbasicatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#if defined(_LP64)
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
@@ -522,6 +529,4 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueTo
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_SPARC_H
diff --git a/src/corelib/arch/qatomic_unix.h b/src/corelib/arch/qatomic_unix.h
index 0e9c105d57..03c7d2eee8 100644
--- a/src/corelib/arch/qatomic_unix.h
+++ b/src/corelib/arch/qatomic_unix.h
@@ -44,14 +44,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -112,6 +110,4 @@ struct QAtomicOps<T *> : QGenericAtomicOps<QAtomicOps<T *> >
};
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_UNIX_H
diff --git a/src/corelib/arch/qatomic_vxworks.h b/src/corelib/arch/qatomic_vxworks.h
index a8664cf752..57e3b6a32b 100644
--- a/src/corelib/arch/qatomic_vxworks.h
+++ b/src/corelib/arch/qatomic_vxworks.h
@@ -42,8 +42,6 @@
#ifndef QATOMIC_VXWORKS_H
#define QATOMIC_VXWORKS_H
-QT_BEGIN_HEADER
-
#if defined(__ppc)
# include <QtCore/qatomic_power.h>
#else // generic implementation with taskLock()
@@ -56,14 +54,28 @@ QT_BEGIN_HEADER
# include <vxWorksCommon.h>
# include <taskLib.h>
#else
+#if defined(_WRS_KERNEL)
extern "C" int taskLock();
extern "C" int taskUnlock();
+#else
+inline int taskLock() { return 0; }
+inline int taskUnlock() { return 0; }
+#endif
#endif
QT_BEGIN_NAMESPACE
+#if 0
+// silence syncqt warnings
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_NOT_NATIVE
inline bool QBasicAtomicInt::isReferenceCountingNative()
@@ -315,6 +327,4 @@ QT_END_NAMESPACE
#endif // generic implementation with taskLock()
-QT_END_HEADER
-
#endif // QATOMIC_VXWORKS_H
diff --git a/src/corelib/arch/qatomic_x86.h b/src/corelib/arch/qatomic_x86.h
index 077cfd1336..f8180ad9d6 100644
--- a/src/corelib/arch/qatomic_x86.h
+++ b/src/corelib/arch/qatomic_x86.h
@@ -45,15 +45,12 @@
#include <QtCore/qgenericatomic.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#if 0
// silence syncqt warnings
QT_END_NAMESPACE
-QT_END_HEADER
-
+#pragma qt_sync_skip_header_check
#pragma qt_sync_stop_processing
#endif
@@ -423,6 +420,4 @@ template <> struct QBasicAtomicOps<8>: QGenericAtomicOps<QBasicAtomicOps<8> >
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QATOMIC_X86_H
diff --git a/src/corelib/codecs/qicucodec.cpp b/src/corelib/codecs/qicucodec.cpp
index 000f6872b5..9afae8c0ee 100644
--- a/src/corelib/codecs/qicucodec.cpp
+++ b/src/corelib/codecs/qicucodec.cpp
@@ -457,7 +457,8 @@ QTextCodec *QIcuCodec::codecForNameUnlocked(const char *name)
if (!qstrcmp(name, "windows-874-2000")
|| !qstrcmp(name, "windows-874")
|| !qstrcmp(name, "MS874")
- || !qstrcmp(name, "x-windows-874"))
+ || !qstrcmp(name, "x-windows-874")
+ || !qstrcmp(name, "ISO 8859-11"))
name = "TIS-620";
UErrorCode error = U_ZERO_ERROR;
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index 0e671518ef..1a5c9f6766 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -89,7 +89,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <locale.h>
-#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) && !defined(Q_OS_LINUX_ANDROID)
+#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) && !defined(Q_OS_ANDROID)
# include <langinfo.h>
#endif
@@ -1043,28 +1043,30 @@ QString QTextDecoder::toUnicode(const QByteArray &ba)
QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec)
{
// determine charset
- int pos;
- QTextCodec *c = 0;
-
- c = QTextCodec::codecForUtfText(ba, c);
+ QTextCodec *c = QTextCodec::codecForUtfText(ba, 0);
if (!c) {
QByteArray header = ba.left(512).toLower();
- if ((pos = header.indexOf("http-equiv=")) != -1) {
- if ((pos = header.lastIndexOf("meta ", pos)) != -1) {
- pos = header.indexOf("charset=", pos) + int(strlen("charset="));
- if (pos != -1) {
- int pos2 = header.indexOf('\"', pos+1);
- QByteArray cs = header.mid(pos, pos2-pos);
- // qDebug("found charset: %s", cs.data());
- c = QTextCodec::codecForName(cs);
+ int pos = header.indexOf("meta ");
+ if (pos != -1) {
+ pos = header.indexOf("charset=", pos);
+ if (pos != -1) {
+ pos += qstrlen("charset=");
+
+ int pos2 = pos;
+ // The attribute can be closed with either """, "'", ">" or "/",
+ // none of which are valid charset characters.
+ while (++pos2 < header.size()) {
+ char ch = header.at(pos2);
+ if (ch == '\"' || ch == '\'' || ch == '>') {
+ c = QTextCodec::codecForName(header.mid(pos, pos2 - pos));
+ return c ? c : defaultCodec;
+ }
}
}
}
}
- if (!c)
- c = defaultCodec;
- return c;
+ return defaultCodec;
}
/*!
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index ac0bc77ea5..35ff83a27a 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -45,8 +45,6 @@
#include <QtCore/qstring.h>
#include <QtCore/qlist.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -166,6 +164,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QTEXTCODEC_H
diff --git a/src/corelib/codecs/qtextcodec_p.h b/src/corelib/codecs/qtextcodec_p.h
index 18629f4bf3..0fec1e80c7 100644
--- a/src/corelib/codecs/qtextcodec_p.h
+++ b/src/corelib/codecs/qtextcodec_p.h
@@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_TEXTCODEC
-#if defined(Q_OS_MAC) || defined(Q_OS_IOS) || defined(Q_OS_LINUX_ANDROID) || defined(Q_OS_QNX)
+#if defined(Q_OS_MAC) || defined(Q_OS_IOS) || defined(Q_OS_ANDROID) || defined(Q_OS_QNX)
#define QT_LOCALE_IS_UTF8
#endif
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index 4462203a11..b1f1a60b6c 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -16,6 +16,12 @@ win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
QMAKE_DOCS = $$PWD/doc/qtcore.qdocconf
+ANDROID_JAR_DEPENDENCIES = \
+ jar/QtAndroid.jar
+ANDROID_LIB_DEPENDENCIES = \
+ plugins/platforms/android/libqtforandroid.so \
+ libs/libgnustl_shared.so
+
load(qt_module)
include(animation/animation.pri)
@@ -63,10 +69,16 @@ ctest_macros_file.input = $$PWD/Qt5CTestMacros.cmake
ctest_macros_file.output = $$DESTDIR/cmake/Qt5Core/Qt5CTestMacros.cmake
ctest_macros_file.CONFIG = verbatim
-QMAKE_SUBSTITUTES += ctest_macros_file
+cmake_umbrella_config_file.input = $$PWD/Qt5Config.cmake.in
+cmake_umbrella_config_file.output = $$DESTDIR/cmake/Qt5/Qt5Config.cmake
+
+cmake_qt5_umbrella_module_files.files = $$cmake_umbrella_config_file.output
+cmake_qt5_umbrella_module_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5
+
+QMAKE_SUBSTITUTES += ctest_macros_file cmake_umbrella_config_file
ctest_qt5_module_files.files += $$ctest_macros_file.output
ctest_qt5_module_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5Core
-INSTALLS += ctest_qt5_module_files
+INSTALLS += ctest_qt5_module_files cmake_qt5_umbrella_module_files
diff --git a/src/corelib/doc/snippets/code/doc_src_properties.cpp b/src/corelib/doc/snippets/code/doc_src_properties.cpp
index 9a25918d47..7a70200cce 100644
--- a/src/corelib/doc/snippets/code/doc_src_properties.cpp
+++ b/src/corelib/doc/snippets/code/doc_src_properties.cpp
@@ -40,8 +40,8 @@
//! [0]
Q_PROPERTY(type name
- READ getFunction
- [WRITE setFunction]
+ (READ getFunction [WRITE setFunction] |
+ MEMBER memberName [(READ getFunction | WRITE setFunction)])
[RESET resetFunction]
[NOTIFY notifySignal]
[REVISION int]
@@ -130,3 +130,20 @@ object->setProperty("priority", "VeryHigh");
//! [7]
Q_CLASSINFO("Version", "3.0.0")
//! [7]
+
+//! [8]
+ Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged)
+ Q_PROPERTY(qreal spacing MEMBER m_spacing NOTIFY spacingChanged)
+ Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)
+ ...
+signals:
+ void colorChanged();
+ void spacingChanged();
+ void textChanged(const QString &newText);
+
+private:
+ QColor m_color;
+ qreal m_spacing;
+ QString m_text;
+//! [8]
+
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
index 2f81b15752..c448c75206 100644
--- a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
@@ -97,3 +97,37 @@ beginResetModel();
myData.clear();
endResetModel();
//! [11]
+
+//! [12]
+class CustomDataProxy : public QSortFilterProxyModel
+{
+ Q_OBJECT
+public:
+ CustomDataProxy(QObject *parent)
+ : QSortFilterProxyModel(parent)
+ {
+ }
+
+ ...
+
+ QVariant data(const QModelIndex &index, int role)
+ {
+ if (role != Qt::BackgroundRole)
+ return QSortFilterProxyModel::data(index, role);
+
+ if (m_customData.contains(index.row()))
+ return m_customData.value(index.row());
+ return QSortFilterProxyModel::data(index, role);
+ }
+
+private slots:
+ void resetInternalData()
+ {
+ m_customData.clear();
+ }
+
+private:
+ QHash<int, QVariant> m_customData;
+};
+//! [12]
+
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp
index cbb5a9db5d..c349a6dbba 100644
--- a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp
@@ -57,7 +57,14 @@ foreach (const QString &path, app.libraryPaths())
//! [3]
+// Called once QCoreApplication exists
+static void preRoutineMyDebugTool()
+{
+ MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance());
+ QCoreApplication::instance()->installEventFilter(tool);
+}
+Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)
//! [3]
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp
new file mode 100644
index 0000000000..71a2a09a7d
--- /dev/null
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qmath.cpp
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Laszlo Papp <lpapp@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//! [0]
+float degrees = 180.0f
+float radians = qDegreesToRadians(degrees)
+//! [0]
+
+
+//! [1]
+double degrees = 180.0
+double radians = qDegreesToRadians(degrees)
+//! [1]
+
+
+//! [2]
+float radians = float(M_PI)
+float degrees = qRadiansToDegrees(radians)
+//! [2]
+
+
+//! [3]
+double radians = M_PI
+double degrees = qRadiansToDegrees(radians)
+//! [3]
+
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp
index a83fd9a71f..8c6751cbaa 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qpoint.cpp
@@ -79,6 +79,13 @@ p *= 2.5; // p becomes (-3, 10)
//! [5]
+//! [16]
+QPoint p( 3, 7);
+QPoint q(-1, 4);
+int lengthSquared = QPoint::dotProduct(p, q); // lengthSquared becomes 25
+//! [16]
+
+
//! [6]
QPoint p(-3, 10);
p /= 2.5; // p becomes (-1, 4)
@@ -147,3 +154,10 @@ p *= 2.5; // p becomes (-2.75, 10.25)
QPointF p(-2.75, 10.25);
p /= 2.5; // p becomes (-1.1, 4.1)
//! [15]
+
+
+//! [17]
+QPointF p( 3.1, 7.1);
+QPointF q(-1.0, 4.1);
+int lengthSquared = QPointF::dotProduct(p, q); // lengthSquared becomes 26.01
+//! [17]
diff --git a/src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp b/src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp
new file mode 100644
index 0000000000..4441fbd9a1
--- /dev/null
+++ b/src/corelib/doc/snippets/qmessageauthenticationcode/main.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+
+//! [0]
+ QByteArray key = "key";
+ QByteArray message = "The quick brown fox jumps over the lazy dog";
+//! [0]
+
+//! [1]
+ QMessageAuthenticationCode code(QCryptographicHash::Sha1);
+ code.setKey(key);
+ code.addData(message);
+ code.result().toHex(); // returns "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"
+//! [1]
+
+//! [2]
+ QMessageAuthenticationCode::hash(message, key, QCryptographicHash::Sha1).toHex();
+//! [2]
+}
diff --git a/src/corelib/doc/src/objectmodel/properties.qdoc b/src/corelib/doc/src/objectmodel/properties.qdoc
index 66325ca6c0..37f54621a1 100644
--- a/src/corelib/doc/src/objectmodel/properties.qdoc
+++ b/src/corelib/doc/src/objectmodel/properties.qdoc
@@ -53,16 +53,22 @@
\snippet code/doc_src_properties.cpp 1
+ Here is an example showing how to export member variables as Qt
+ properties using the \c MEMBER keyword.
+ Note that a \c NOTIFY signal must be specified to allow QML property bindings.
+
+ \snippet code/doc_src_properties.cpp 8
+
A property behaves like a class data member, but it has additional
features accessible through the \l {Meta-Object System}.
\list
- \li A \c READ accessor function is required. It is for reading the
- property value. Ideally, a const function is used for this purpose,
- and it must return either the property's type or a pointer or
- reference to that type. e.g., QWidget::focus is a read-only property
- with \c READ function, QWidget::hasFocus().
+ \li A \c READ accessor function is required if no \c MEMBER variable was
+ specified. It is for reading the property value. Ideally, a const function
+ is used for this purpose, and it must return either the property's type or a
+ pointer or reference to that type. e.g., QWidget::focus is a read-only
+ property with \c READ function, QWidget::hasFocus().
\li A \c WRITE accessor function is optional. It is for setting the
property value. It must return void and must take exactly one
@@ -71,6 +77,13 @@
QWidget::setEnabled(). Read-only properties do not need \c WRITE
functions. e.g., QWidget::focus has no \c WRITE function.
+ \li A \c MEMBER variable association is required if no \c READ accessor
+ function is specified. This makes the given member variable
+ readable and writable without the need of creating \c READ and \c WRITE accessor
+ functions. It's still possible to use \c READ or \c WRITE accessor functions in
+ addition to \c MEMBER variable association (but not both), if you need to
+ control the variable access.
+
\li A \c RESET function is optional. It is for setting the property
back to its context specific default value. e.g., QWidget::cursor
has the typical \c READ and \c WRITE functions, QWidget::cursor()
@@ -82,6 +95,9 @@
\li A \c NOTIFY signal is optional. If defined, it should specify one
existing signal in that class that is emitted whenever the value
of the property changes.
+ \c NOTIFY signals for \c MEMBER variables must take zero or one parameter,
+ which must be of the same type as the property. The parameter will take the
+ new value of the property.
\li A \c REVISION number is optional. If included, it defines
the property and its notifier signal to be used in a particular
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 01756c8419..6ac32cd35d 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -9,6 +9,7 @@ HEADERS += \
global/qendian.h \
global/qnumeric_p.h \
global/qnumeric.h \
+ global/qglobalstatic.h \
global/qlibraryinfo.h \
global/qlogging.h \
global/qtypeinfo.h \
@@ -19,6 +20,7 @@ HEADERS += \
SOURCES += \
global/qglobal.cpp \
+ global/qglobalstatic.cpp \
global/qlibraryinfo.cpp \
global/qmalloc.cpp \
global/qnumeric.cpp \
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index 15229e03a0..e547d58c2e 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -157,6 +157,10 @@
# define Q_CC_CLANG
# define Q_ASSUME_IMPL(expr) if (expr){} else __builtin_unreachable()
# define Q_UNREACHABLE_IMPL() __builtin_unreachable()
+# if !defined(__has_extension)
+# /* Compatibility with older Clang versions */
+# define __has_extension __has_feature
+# endif
# else
/* Plain GCC */
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
@@ -179,6 +183,7 @@
# define Q_TYPEOF(expr) __typeof__(expr)
# define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n)))
+# define Q_DECL_UNUSED __attribute__((__unused__))
# define Q_LIKELY(expr) __builtin_expect(!!(expr), true)
# define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false)
# define Q_NORETURN __attribute__((__noreturn__))
@@ -816,6 +821,9 @@
#ifndef Q_DECL_HIDDEN
# define Q_DECL_HIDDEN
#endif
+#ifndef Q_DECL_UNUSED
+# define Q_DECL_UNUSED
+#endif
#ifndef Q_FUNC_INFO
# if defined(Q_OS_SOLARIS) || defined(Q_CC_XLC)
# define Q_FUNC_INFO __FILE__ "(line number unavailable)"
diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h
index cdffb10d5a..c9c4d23aab 100644
--- a/src/corelib/global/qendian.h
+++ b/src/corelib/global/qendian.h
@@ -52,8 +52,6 @@
#include <byteswap.h>
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -386,6 +384,4 @@ template <> inline qint8 qbswap<qint8>(qint8 source)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QENDIAN_H
diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h
index 7ae4863da3..a751f9af56 100644
--- a/src/corelib/global/qfeatures.h
+++ b/src/corelib/global/qfeatures.h
@@ -154,6 +154,9 @@
// Properties
//#define QT_NO_PROPERTIES
+// QRegularExpression
+//#define QT_NO_REGULAREXPRESSION
+
// Resize Handler
//#define QT_NO_RESIZEHANDLER
diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt
index a97309b876..c27463897f 100644
--- a/src/corelib/global/qfeatures.txt
+++ b/src/corelib/global/qfeatures.txt
@@ -28,6 +28,13 @@ Requires:
Name: CssParser
SeeAlso: ???
+Feature: REGULAREXPRESSION
+Description: Perl-compatible regular expression APIs
+Section: Kernel
+Requires:
+Name: QRegularExpression
+SeeAlso: ???
+
Feature: CONCURRENT
Description: Provides a high-level multi-threaded APIs
Section: Kernel
diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h
index 4b75383213..4722fe2282 100644
--- a/src/corelib/global/qflags.h
+++ b/src/corelib/global/qflags.h
@@ -47,8 +47,6 @@
#include <QtCore/qtypeinfo.h>
#include <QtCore/qtypetraits.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
class QFlag
@@ -152,6 +150,4 @@ typedef uint Flags;
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QFLAGS_H
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index f0fb9c1a02..c591cc5b49 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -68,7 +68,7 @@
# endif
#endif
-#if defined(Q_OS_VXWORKS)
+#if defined(Q_OS_VXWORKS) && defined(_WRS_KERNEL)
# include <envLib.h>
#endif
@@ -2193,6 +2193,10 @@ bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT
\a varName. It will create the variable if it does not exist. It
returns 0 if the variable could not be set.
+ Calling qputenv with an empty value removes the environment variable on
+ Windows, and makes it set (but empty) on Unix. Prefer using qunsetenv()
+ for fully portable behavior.
+
\note qputenv() was introduced because putenv() from the standard
C library was deprecated in VC2005 (and later versions). qputenv()
uses the replacement function in VC, and calls the standard C
@@ -2219,6 +2223,39 @@ bool qputenv(const char *varName, const QByteArray& value)
#endif
}
+/*!
+ \relates <QtGlobal>
+
+ This function deletes the variable \a varName from the environment.
+
+ Returns true on success.
+
+ \since 5.1
+
+ \sa qputenv(), qgetenv()
+*/
+bool qunsetenv(const char *varName)
+{
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+ return _putenv_s(varName, "") == 0;
+#elif (defined(_POSIX_VERSION) && (_POSIX_VERSION-0) >= 200112L) || defined(Q_OS_BSD4)
+ // POSIX.1-2001 and BSD have unsetenv
+ return unsetenv(varName) == 0;
+#elif defined(Q_CC_MINGW)
+ // On mingw, putenv("var=") removes "var" from the environment
+ QByteArray buffer(varName);
+ buffer += '=';
+ return putenv(buffer.constData()) == 0;
+#else
+ // Fallback to putenv("var=") which will insert an empty var into the
+ // environment and leak it
+ QByteArray buffer(varName);
+ buffer += '=';
+ char *envVar = qstrdup(buffer.constData());
+ return putenv(envVar) == 0;
+#endif
+}
+
#if defined(Q_OS_UNIX) && !defined(QT_NO_THREAD)
# if defined(Q_OS_INTEGRITY) && defined(__GHS_VERSION_NUMBER) && (__GHS_VERSION_NUMBER < 500)
@@ -2814,8 +2851,7 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
As a rule of thumb, \c QT_BEGIN_NAMESPACE should appear in all Qt header
and Qt source files after the last \c{#include} line and before the first
- declaration. In Qt headers using \c QT_BEGIN_HEADER, \c QT_BEGIN_NAMESPACE
- follows \c QT_BEGIN_HEADER immediately.
+ declaration.
If that rule can't be followed because, e.g., \c{#include} lines and
declarations are wildly mixed, place \c QT_BEGIN_NAMESPACE before
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 13bdc7553f..233743f3ce 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -45,11 +45,11 @@
#include <stddef.h>
-#define QT_VERSION_STR "5.0.2"
+#define QT_VERSION_STR "5.1.0"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/
-#define QT_VERSION 0x050002
+#define QT_VERSION 0x050100
/*
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
@@ -151,6 +151,7 @@ namespace QT_NAMESPACE {}
#endif /* __cplusplus */
+// ### Qt6: remove me.
#define QT_BEGIN_HEADER
#define QT_END_HEADER
@@ -158,7 +159,6 @@ namespace QT_NAMESPACE {}
# define QT_LARGEFILE_SUPPORT 64
#endif
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
/*
@@ -512,6 +512,16 @@ template <typename T>
Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max)
{ return qMax(min, qMin(max, val)); }
+#ifdef Q_OS_DARWIN
+# define QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) \
+ (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= osx) || \
+ (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= ios)
+
+# define QT_MAC_DEPLOYMENT_TARGET_BELOW(osx, ios) \
+ (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && osx != __MAC_NA && __MAC_OS_X_VERSION_MIN_REQUIRED < osx) || \
+ (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && ios != __IPHONE_NA && __IPHONE_OS_VERSION_MIN_REQUIRED < ios)
+#endif
+
/*
Data stream functions are provided by many classes (defined in qdatastream.h)
*/
@@ -664,125 +674,6 @@ typedef void (*QFunctionPointer)();
# define Q_UNIMPLEMENTED() qWarning("%s:%d: %s: Unimplemented code.", __FILE__, __LINE__, Q_FUNC_INFO)
#endif
-#if defined(QT_NO_THREAD)
-
-template <typename T>
-class QGlobalStatic
-{
-public:
- T *pointer;
- inline QGlobalStatic(T *p) : pointer(p) { }
- inline ~QGlobalStatic() { pointer = 0; }
-};
-
-#define Q_GLOBAL_STATIC(TYPE, NAME) \
- static TYPE *NAME() \
- { \
- static TYPE thisVariable; \
- static QGlobalStatic<TYPE > thisGlobalStatic(&thisVariable); \
- return thisGlobalStatic.pointer; \
- }
-
-#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \
- static TYPE *NAME() \
- { \
- static TYPE thisVariable ARGS; \
- static QGlobalStatic<TYPE > thisGlobalStatic(&thisVariable); \
- return thisGlobalStatic.pointer; \
- }
-
-#define Q_GLOBAL_STATIC_WITH_INITIALIZER(TYPE, NAME, INITIALIZER) \
- static TYPE *NAME() \
- { \
- static TYPE thisVariable; \
- static QGlobalStatic<TYPE > thisGlobalStatic(0); \
- if (!thisGlobalStatic.pointer) { \
- TYPE *x = thisGlobalStatic.pointer = &thisVariable; \
- INITIALIZER; \
- } \
- return thisGlobalStatic.pointer; \
- }
-
-#else
-
-// forward declaration, since qatomic.h needs qglobal.h
-template <typename T> class QBasicAtomicPointer;
-
-// POD for Q_GLOBAL_STATIC
-template <typename T>
-class QGlobalStatic
-{
-public:
- QBasicAtomicPointer<T> pointer;
- bool destroyed;
-};
-
-// Created as a function-local static to delete a QGlobalStatic<T>
-template <typename T>
-class QGlobalStaticDeleter
-{
-public:
- QGlobalStatic<T> &globalStatic;
- QGlobalStaticDeleter(QGlobalStatic<T> &_globalStatic)
- : globalStatic(_globalStatic)
- { }
-
- inline ~QGlobalStaticDeleter()
- {
- delete globalStatic.pointer.load();
- globalStatic.pointer.store(0);
- globalStatic.destroyed = true;
- }
-};
-
-#define Q_GLOBAL_STATIC(TYPE, NAME) \
- static TYPE *NAME() \
- { \
- static QGlobalStatic<TYPE > thisGlobalStatic \
- = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \
- if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { \
- TYPE *x = new TYPE; \
- if (!thisGlobalStatic.pointer.testAndSetOrdered(0, x)) \
- delete x; \
- else \
- static QGlobalStaticDeleter<TYPE > cleanup(thisGlobalStatic); \
- } \
- return thisGlobalStatic.pointer.load(); \
- }
-
-#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \
- static TYPE *NAME() \
- { \
- static QGlobalStatic<TYPE > thisGlobalStatic \
- = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \
- if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { \
- TYPE *x = new TYPE ARGS; \
- if (!thisGlobalStatic.pointer.testAndSetOrdered(0, x)) \
- delete x; \
- else \
- static QGlobalStaticDeleter<TYPE > cleanup(thisGlobalStatic); \
- } \
- return thisGlobalStatic.pointer.load(); \
- }
-
-#define Q_GLOBAL_STATIC_WITH_INITIALIZER(TYPE, NAME, INITIALIZER) \
- static TYPE *NAME() \
- { \
- static QGlobalStatic<TYPE > thisGlobalStatic \
- = { Q_BASIC_ATOMIC_INITIALIZER(0), false }; \
- if (!thisGlobalStatic.pointer.load() && !thisGlobalStatic.destroyed) { \
- QScopedPointer<TYPE > x(new TYPE); \
- INITIALIZER; \
- if (thisGlobalStatic.pointer.testAndSetOrdered(0, x.data())) { \
- static QGlobalStaticDeleter<TYPE > cleanup(thisGlobalStatic); \
- x.take(); \
- } \
- } \
- return thisGlobalStatic.pointer.load(); \
- }
-
-#endif
-
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2)
{
return (qAbs(p1 - p2) <= 0.000000000001 * qMin(qAbs(p1), qAbs(p2)));
@@ -1053,6 +944,7 @@ Q_CORE_EXPORT QString qtTrId(const char *id, int n = -1);
class QByteArray;
Q_CORE_EXPORT QByteArray qgetenv(const char *varName);
Q_CORE_EXPORT bool qputenv(const char *varName, const QByteArray& value);
+Q_CORE_EXPORT bool qunsetenv(const char *varName);
Q_CORE_EXPORT bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT;
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT;
@@ -1087,7 +979,8 @@ template <typename T> struct QEnableIf<true, T> { typedef T Type; };
}
QT_END_NAMESPACE
-QT_END_HEADER
+// Q_GLOBAL_STATIC
+#include <QtCore/qglobalstatic.h>
// qDebug and friends
#include <QtCore/qlogging.h>
diff --git a/src/corelib/global/qglobalstatic.cpp b/src/corelib/global/qglobalstatic.cpp
new file mode 100644
index 0000000000..8474d132b4
--- /dev/null
+++ b/src/corelib/global/qglobalstatic.cpp
@@ -0,0 +1,524 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Intel Corporation.
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qglobalstatic.h"
+
+/*!
+ \macro Q_GLOBAL_STATIC(Type, VariableName)
+ \since 5.1
+ \relates QGlobalStatic
+
+ Creates a global and static object of type \l QGlobalStatic, of name \a
+ VariableName and that behaves as a pointer to \a Type. The object created
+ by Q_GLOBAL_STATIC initializes itself on the first use, which means that it
+ will not increase the application or the library's load time. Additionally,
+ the object is initialized in a thread-safe manner on all platforms.
+
+ The typical use of this macro is as follows, in a global context (that is,
+ outside of any function bodies):
+
+ \code
+ Q_GLOBAL_STATIC(MyType, staticType)
+ \endcode
+
+ This macro is intended to replace global static objects that are not POD
+ (Plain Old Data, or in C++11 terms, not made of a trivial type), hence the
+ name. For example, the following C++ code creates a global static:
+
+ \code
+ static MyType staticType;
+ \endcode
+
+ Compared to Q_GLOBAL_STATIC, and assuming that \c MyType is a class or
+ struct that has a constructor, a destructor, or is otherwise non-POD, the
+ above has the following drawbacks:
+
+ \list
+ \li it requires load-time initialization of \c MyType (that is, the
+ default constructor for \c MyType is called when the library or
+ application is loaded);
+
+ \li the type will be initialized even if it is never used;
+
+ \li the order of initialization and destruction among different
+ translation units is not determined, leading to possible uses before
+ initialization or after destruction;
+
+ \li if it is found inside a function (that is, not global), it will be
+ initialized on first use, but many current compilers (as of 2013) do
+ not guarantee that the initialization will be thread-safe;
+ \endlist
+
+ The Q_GLOBAL_STATIC macro solves all of the above problems by guaranteeing
+ thread-safe initialization on first use and allowing the user to query for
+ whether the type has already been destroyed, to avoid the
+ use-after-destruction problem (see QGlobalStatic::isDestroyed()).
+
+ \section1 Constructor and destructor
+
+ For Q_GLOBAL_STATIC, the type \c Type must be publicly
+ default-constructible and publicly destructible. For
+ Q_GLOBAL_STATIC_WITH_ARGS(), there must be a public constructor that
+ matches the arguments passed.
+
+ It is not possible to use Q_GLOBAL_STATIC with types that have protected or
+ private default constructors or destructors (for Q_GLOBAL_STATIC_WITH_ARGS(),
+ a protected or private constructor matching the arguments). If the type in
+ question has those members as protected, it is possible to overcome the
+ issue by deriving from the type and creating public a constructor and
+ destructor. If the type has them as private, a friend declaration is
+ necessary before deriving.
+
+ For example, the following is enough to create \c MyType based on a
+ previously-defined \c MyOtherType which has a protected default constructor
+ and/or a protected destructor (or has them as private, but that defines \c
+ MyType as a friend).
+
+ \code
+ class MyType : public MyOtherType { };
+ Q_GLOBAL_STATIC(MyType, staticType)
+ \endcode
+
+ No body for \c MyType is required since the destructor is an implicit
+ member and so is the default constructor if no other constructors are
+ defined. For use with Q_GLOBAL_STATIC_WITH_ARGS(), however, a suitable
+ constructor body is necessary:
+
+ \code
+ class MyType : public MyOtherType
+ {
+ public:
+ MyType(int i) : MyOtherType(i) {}
+ };
+ Q_GLOBAL_STATIC_WITH_ARGS(MyType, staticType, (42))
+ \endcode
+
+ Alternatively, if the compiler supports C++11 inheriting constructors, one could write:
+
+ \code
+ class MyType : public MyOtherType
+ {
+ public:
+ using MyOtherType::MyOtherType;
+ };
+ Q_GLOBAL_STATIC_WITH_ARGS(MyType, staticType, (42))
+ \endcode
+
+ \section1 Placement
+
+ The Q_GLOBAL_STATIC macro creates a type that is necessarily static, at the
+ global scope. It is not possible to place the Q_GLOBAL_STATIC macro inside
+ a function (doing so will result in compilation errors).
+
+ More importantly, this macro should be placed in source files, never in
+ headers. Since the resulting object is has static linkage, if the macro is
+ placed in a header and included by multiple source files, the object will
+ be defined multiple times and will not cause linking errors. Instead, each
+ translation unit will refer to a different object, which could lead to
+ subtle and hard-to-track errors.
+
+ \section1 Non-recommended uses
+
+ Note that the macro is not recommended for use with types that are POD or
+ that have C++11 constexpr constructors (trivially constructible and
+ destructible). For those types, it is still recommended to use regular
+ static, whether global or function-local.
+
+ This macro will work, but it will add unnecessary overhead.
+
+ \section1 Reentrancy, thread-safety, deadlocks, and exception-safety on construction
+
+ The Q_GLOBAL_STATIC macro creates an object that initializes itself on
+ first use in a thread-safe manner: if multiple threads attempt to
+ initialize the object at the same time, only one thread will proceed to
+ initialize, while all other threads wait for completion.
+
+ If the initialization process throws an exception, the initialization is
+ deemed not complete and will be attempted again when control reaches any
+ use of the object. If there are any threads waiting for initialization, one
+ of them will be woken up to attempt to initialize.
+
+ The macro makes no guarantee about reentrancy from the same thread. If the
+ global static object is accessed directly or indirectly from inside the
+ constructor, a deadlock will surely happen.
+
+ In addition, if two Q_GLOBAL_STATIC objects are being initialized on two
+ different threads and each one's initialization sequence accesses the
+ other, a deadlock might happen. For that reason, it is recommended to keep
+ global static constructors simple or, failing that, to ensure that there's
+ no cross-dependency of uses of global static during construction.
+
+ \section1 Destruction
+
+ If the object is never used during the lifetime of the program, aside from
+ the QGlobalStatic::exists() and QGlobalStatic::isDestroyed() functions, the
+ contents of type \a Type will not be created and there will not be any
+ exit-time operation.
+
+ If the object is created, it will be destroyed at exit-time, similar to the
+ C \c atexit function. On most systems, in fact, the destructor will also be
+ called if the library or plugin is unloaded from memory before exit.
+
+ Since the destruction is meant to happen at program exit, no thread-safety
+ is provided. This includes the case of plugin or library unload. In
+ addition, since destructors are not supposed to throw exceptions, no
+ exception safety is provided either.
+
+ However, reentrancy is permitted: during destruction, it is possible to
+ access the global static object and the pointer returned will be the same
+ as it was before destruction began. After the destruction has completed,
+ accessing the global static object is not permitted, except as noted in the
+ \l QGlobalStatic API.
+
+ \omit
+ \section1 Compatibility with Qt 4 and Qt 5.0
+
+ This macro, in its current form and behavior, was introduced in Qt 5.1.
+ Prior to that version, Qt had another macro with the same name that was
+ private API. This section is not meant to document how to use
+ Q_GLOBAL_STATIC in those versions, but instead to serve as a porting guide
+ for Qt code that used those macros.
+
+ The Qt 4 Q_GLOBAL_STATIC macro differed in behavior in the following ways:
+
+ \list
+ \li the object created was not of type \l QGlobalStatic, but instead
+ it was a function that returned a pointer to \a Type; that means the
+ \l QGlobalStatic API was not present;
+
+ \li the initialization was thread-safe, but not guaranteed to be
+ unique: instead, if N threads tried to initialize the object at the
+ same time, N objects would be created on the heap and N-1 would be
+ destroyed;
+
+ \li the object was always created on the heap.
+ \endlist
+
+ \section1 Implementation details
+
+ Q_GLOBAL_STATIC is implemented by creating a QBasicAtomicInt called the \c
+ guard and a free, inline function called \c innerFunction. The guard
+ variable is initialized to value 0 (chosen so that the guard can be placed
+ in the .bss section of the binary file), which denotes that construction
+ has not yet taken place (uninitialized). The inner function is implemented
+ by the helper macro Q_GLOBAL_STATIC_INTERNAL.
+
+ Both the guard variable and the inner function are passed as template
+ parameters to QGlobalStatic, along with the type \a Type. Both should also
+ have static linkage or be placed inside an anonymous namespace, so that the
+ visibility of Q_GLOBAL_STATIC is that of a global static. To permit
+ multiple Q_GLOBAL_STATIC per translation unit, the guard variable and the
+ inner function must have unique names, which can be accomplished by
+ concatenating with \a VariableName or by placing them in a namespace that
+ has \a VariableName as part of the name. To simplify and improve
+ readability on Q_GLOBAL_STATIC_INTERNAL, we chose the namespace solution.
+ It's also required for C++98 builds, since static symbols cannot be used as
+ template parameters.
+
+ The guard variable can assume the following values:
+
+ \list
+ \li -2: object was once initialized but has been destroyed already;
+ \li -1: object was initialized and is still valid;
+ \li 0: object was not initialized yet;
+ \li +1: object is being initialized and any threads encountering this
+ value must wait for completion (not used in the current implementation).
+ \endlist
+
+ Collectively, all positive values indicate that the initialization is
+ progressing and must be waited on, whereas all negative values indicate
+ that the initialization has terminated and must not be attempted again.
+ Positive values are not used in the current implementation, but were in
+ earlier versions. They could be used again in the future.
+
+ The QGlobalStatic::exists() and QGlobalStatic::isDestroyed() functions
+ operate solely on the guard variable: the former returns true if the guard
+ is negative, whereas the latter returns true only if it is -2.
+
+ The Q_GLOBAL_STATIC_INTERNAL macro implements the actual construction and
+ destruction. There are two implementations of it: one for compilers that
+ support thread-safe initialization of function-local statics and one for
+ compilers that don't. Thread-safe initialization is required by C++11 in
+ [stmt.decl], but as of the time of this writing, only compilers based on
+ the IA-64 C++ ABI implemented it properly. The implementation requiring
+ thread-safe initialization is also used on the Qt bootstrapped tools, which
+ define QT_NO_THREAD.
+
+ The implementation requiring thread-safe initialization from the compiler
+ is the simplest: it creates the \a Type object as a function-local static
+ and returns its address. The actual object is actually inside a holder
+ structure so holder's destructor can set the guard variable to the value -2
+ (destroyed) when the type has finished destruction. Since we need to set
+ the guard \b after the destruction has finished, this code needs to be in a
+ base struct's destructor. And it only sets to -2 (destroyed) if it finds
+ the guard at -1 (initialized): this is done to ensure that the guard isn't
+ set to -2 in the event the type's constructor threw an exception. A holder
+ structure is used to avoid creating two statics, which the ABI might
+ require duplicating the thread-safe control structures for.
+
+ The other implementation is similar to Qt 4's Q_GLOBAL_STATIC, but unlike
+ that one, it uses a \l QBasicMutex to provide locking. It is also more
+ efficient memory-wise. It use a simple double-checked locking of the mutex
+ and then creates the contents on the heap. After that, it creates a
+ function-local structure called "Cleanup", whose destructor will be run at
+ program exit and will actually destroy the contents.
+
+ \endomit
+
+ \sa Q_GLOBAL_STATIC_WITH_ARGS(), QGlobalStatic
+*/
+
+/*!
+ \macro Q_GLOBAL_STATIC_WITH_ARGS(Type, VariableName, Arguments)
+ \since 5.1
+ \relates QGlobalStatic
+
+ Creates a global and static object of type \l QGlobalStatic, of name \a
+ VariableName, initialized by the arguments \a Arguments and that behaves as
+ a pointer to \a Type. The object created by Q_GLOBAL_STATIC_WITH_ARGS
+ initializes itself on the first use, which means that it will not increase
+ the application or the library's load time. Additionally, the object is
+ initialized in a thread-safe manner on all platforms.
+
+ The typical use of this macro is as follows, in a global context (that is,
+ outside of any function bodies):
+
+ \code
+ Q_GLOBAL_STATIC_WITH_ARGS(MyType, staticType, (42, "Hello", "World"))
+ \endcode
+
+ The \a Arguments macro parameter must always include the parentheses or, if
+ C++11 uniform initialization is allowed, the braces.
+
+ Aside from the actual initialization of the contents with the supplied
+ arguments, this macro behaves identically to Q_GLOBAL_STATIC(). Please
+ see that macro's documentation for more information.
+
+ \sa Q_GLOBAL_STATIC(), QGlobalStatic
+*/
+
+/*!
+ \class QGlobalStatic
+ \threadsafe
+ \inmodule QtCore
+ \since 5.1
+ \brief The QGlobalStatic class is used to implement a global static object
+
+ The QGlobalStatic class is the front-end API exported when
+ Q_GLOBAL_STATIC() is used. See the documentation for the macro for a
+ discussion on when to use it and its requirements.
+
+ Normally, you will never use this class directly, but instead you will use
+ the Q_GLOBAL_STATIC() or Q_GLOBAL_STATIC_WITH_ARGS() macros, as
+ follows:
+
+ \code
+ Q_GLOBAL_STATIC(MyType, staticType)
+ \endcode
+
+ The above example creates an object of type QGlobalStatic called \c
+ staticType. After the above declaration, the \c staticType object may be
+ used as if it were a pointer, guaranteed to be initialized exactly once. In
+ addition to the use as a pointer, the object offers two methods to
+ determine the current status of the global: exists() and isDestroyed().
+
+ \sa Q_GLOBAL_STATIC(), Q_GLOBAL_STATIC_WITH_ARGS()
+*/
+
+/*!
+ \typedef QGlobalStatic::Type
+
+ This type is equivalent to the \c Type parameter passed to the
+ Q_GLOBAL_STATIC() or Q_GLOBAL_STATIC_WITH_ARGS() macros. It is used in the
+ return types of some functions.
+*/
+
+/*!
+ \fn bool QGlobalStatic::isDestroyed() const
+
+ This function returns true if the global static object has already
+ completed destruction (that is, if the destructor for the type has already
+ returned). In specific, note that this function returns false if
+ the destruction is still in progress.
+
+ Once this function has returned true once, it will never return
+ false again until either the program is restarted or the plugin or library
+ containing the global static is unloaded and reloaded.
+
+ This function is safe to call at any point in the program execution: it
+ cannot fail and cannot cause a deadlock. Additionally, it will not cause
+ the contents to be created if they have not yet been created.
+
+ This function is useful in code that may be executed at program shutdown,
+ to determine whether the contents may still be accessed or not.
+
+ \omit
+ Due to the non-atomic nature of destruction, it's possible that
+ QGlobalStatic::isDestroyed might return false for a short time after the
+ destructor has finished. However, since the destructor is only run in an
+ environment where concurrent multithreaded access is impossible, no one can
+ see that state. (omitted because it's useless information)
+ \endomit
+
+ \sa exists()
+*/
+
+/*!
+ \fn bool QGlobalStatic::exists() const
+
+ This function returns true if the global static object has already
+ completed initialization (that is, if the constructor for the type has
+ already returned). In specific, note that this function returns false if
+ the initialization is still in progress.
+
+ Once this function has returned true once, it will never return false again
+ until either the program is restarted or the plugin or library containing
+ the global static is unloaded and reloaded.
+
+ This function is safe to call at any point in the program execution: it
+ cannot fail and cannot cause a deadlock. Additionally, it will not cause
+ the contents to be created if they have not yet been created.
+
+ This function is useful if one can determine the initial conditions of the
+ global static object and would prefer to avoid a possibly expensive
+ construction operation.
+
+ For example, in the following code sample, this function is used to
+ short-circuit the creation of the global static called \c globalState and
+ returns a default value:
+
+ \code
+ Q_GLOBAL_STATIC(MyType, globalState)
+ QString someState()
+ {
+ if (globalState.exists())
+ return globalState->someState;
+ return QString();
+ }
+ \endcode
+
+ \b{Thread-safety notice:} this function is thread-safe in the sense that it
+ may be called from any thread at any time and will always return a valid
+ reply. But due to the non-atomic nature of construction, this function may
+ return false for a short time after the construction has completed.
+
+ \b{Memory ordering notice:} this function does not impose any memory
+ ordering guarantees. That is instead provided by the accessor functions
+ that return the pointer or reference to the contents. If you bypass the
+ accessor functions and attempt to access some global state set by the
+ constructor, be sure to use the correct memory ordering semantics provided
+ by \l QAtomicInt or \l QAtomicPointer.
+
+ \sa isDestroyed()
+*/
+
+/*!
+ \fn QGlobalStatic::operator Type*()
+
+ This function returns the address of the contents of this global static. If
+ the contents have not yet been created, they will be created thread-safely
+ by this function. If the contents have already been destroyed, this
+ function will return a null pointer.
+
+ This function can be used, for example, to store the pointer to the
+ contents of the global static in a local variable, thus avoiding multiple
+ calls to the function. The implementation of Q_GLOBAL_STATIC() is quite
+ efficient already, but in performance-critical sections it might be useful
+ to help the compiler a little. For example:
+
+ \code
+ Q_GLOBAL_STATIC(MyType, globalState)
+ QString someState()
+ {
+ MyType *state = globalState;
+ if (!state) {
+ // we're in a post-destruction state
+ return QString();
+ }
+ if (state->condition)
+ return state->value1;
+ else
+ return state->value2;
+ }
+ \endcode
+
+ \sa operator->(), operator*()
+*/
+
+/*!
+ \fn Type *QGlobalStatic::operator()()
+ \deprecated
+
+ This function returns the address of the contents of this global static. If
+ the contents have not yet been created, they will be created thread-safely
+ by this function. If the contents have already been destroyed, this
+ function will return a null pointer.
+
+ This function is equivalent to \l {operator Type *()}. It is provided for
+ compatibility with the private Q_GLOBAL_STATIC implementation that existed
+ in Qt 4.x and 5.0. New code should avoid using it and should instead treat
+ the object as a smart pointer.
+*/
+
+/*!
+ \fn Type *QGlobalStatic::operator->()
+
+ This function returns the address of the contents of this global static. If
+ the contents have not yet been created, they will be created thread-safely
+ by this function.
+
+ This function does not check if the contents have already been destroyed and
+ will never return null. If this function is called after the object has
+ been destroyed, it will return a dangling pointer that should not be
+ dereferenced.
+*/
+
+/*!
+ \fn Type &QGlobalStatic::operator*()
+
+ This function returns a reference to the contents of this global static. If
+ the contents have not yet been created, they will be created thread-safely
+ by this function.
+
+ This function does not check if the contents have already been destroyed.
+ If this function is called after the object has been destroyed, it will
+ return an invalid reference that must not be used.
+*/
diff --git a/src/corelib/global/qglobalstatic.h b/src/corelib/global/qglobalstatic.h
new file mode 100644
index 0000000000..a6268e057e
--- /dev/null
+++ b/src/corelib/global/qglobalstatic.h
@@ -0,0 +1,142 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Intel Corporation
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qglobal.h>
+
+#ifndef QGLOBALSTATIC_H
+#define QGLOBALSTATIC_H
+
+#include <QtCore/qatomic.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QtGlobalStatic {
+enum GuardValues {
+ Destroyed = -2,
+ Initialized = -1,
+ Uninitialized = 0,
+ Initializing = 1
+};
+}
+
+#if defined(QT_NO_THREAD) || defined(Q_CC_GNU)
+// some compilers support thread-safe statics
+// The IA-64 C++ ABI requires this, so we know that all GCC versions since 3.4
+// support it. C++11 also requires this behavior.
+// Clang and Intel CC masquerade as GCC when compiling on Linux and Mac OS X.
+
+#define Q_GLOBAL_STATIC_INTERNAL(ARGS) \
+ Q_DECL_HIDDEN inline Type *innerFunction() \
+ { \
+ struct HolderBase { \
+ ~HolderBase() Q_DECL_NOTHROW \
+ { if (guard.load() == QtGlobalStatic::Initialized) \
+ guard.store(QtGlobalStatic::Destroyed); } \
+ }; \
+ static struct Holder : public HolderBase { \
+ Type value; \
+ Holder() \
+ Q_DECL_NOEXCEPT_EXPR(noexcept(Type ARGS)) \
+ : value ARGS \
+ { guard.store(QtGlobalStatic::Initialized); } \
+ } holder; \
+ return &holder.value; \
+ }
+#else
+// We don't know if this compiler supports thread-safe global statics
+// so use our own locked implementation
+
+QT_END_NAMESPACE
+#include <QtCore/qmutex.h>
+QT_BEGIN_NAMESPACE
+
+#define Q_GLOBAL_STATIC_INTERNAL(ARGS) \
+ Q_DECL_HIDDEN inline Type *innerFunction() \
+ { \
+ static Type *d; \
+ static QBasicMutex mutex; \
+ int x = guard.loadAcquire(); \
+ if (Q_UNLIKELY(x >= QtGlobalStatic::Uninitialized)) { \
+ QMutexLocker locker(&mutex); \
+ if (guard.load() == QtGlobalStatic::Uninitialized) { \
+ d = new Type ARGS; \
+ static struct Cleanup { \
+ ~Cleanup() { \
+ delete d; \
+ guard.store(QtGlobalStatic::Destroyed); \
+ } \
+ } cleanup; \
+ guard.store(QtGlobalStatic::Initialized); \
+ } \
+ } \
+ return d; \
+ }
+#endif
+
+// this class must be POD, unless the compiler supports thread-safe statics
+template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard>
+struct QGlobalStatic
+{
+ typedef T Type;
+
+ bool isDestroyed() const { return guard.load() <= QtGlobalStatic::Destroyed; }
+ bool exists() const { return guard.load() == QtGlobalStatic::Initialized; }
+ operator Type *() { if (isDestroyed()) return 0; return innerFunction(); }
+ Type *operator()() { if (isDestroyed()) return 0; return innerFunction(); }
+ Type *operator->() { return innerFunction(); }
+ Type &operator*() { return *innerFunction(); }
+};
+
+#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \
+ namespace { namespace Q_QGS_ ## NAME { \
+ typedef TYPE Type; \
+ QBasicAtomicInt guard = Q_BASIC_ATOMIC_INITIALIZER(QtGlobalStatic::Uninitialized); \
+ Q_GLOBAL_STATIC_INTERNAL(ARGS) \
+ } } \
+ static QGlobalStatic<TYPE, \
+ Q_QGS_ ## NAME::innerFunction, \
+ Q_QGS_ ## NAME::guard> NAME;
+
+#define Q_GLOBAL_STATIC(TYPE, NAME) \
+ Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ())
+
+QT_END_NAMESPACE
+#endif // QGLOBALSTATIC_H
diff --git a/src/corelib/global/qisenum.h b/src/corelib/global/qisenum.h
index 073d5a591f..577007b455 100644
--- a/src/corelib/global/qisenum.h
+++ b/src/corelib/global/qisenum.h
@@ -62,9 +62,6 @@
#endif
// shut up syncqt
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QISENUM_H
diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h
index 054231b084..1a00a14caf 100644
--- a/src/corelib/global/qlibraryinfo.h
+++ b/src/corelib/global/qlibraryinfo.h
@@ -45,8 +45,6 @@
#include <QtCore/qstring.h>
#include <QtCore/qdatetime.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QLibraryInfo
@@ -103,6 +101,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QLIBRARYINFO_H
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index 60ba19e625..6a127e1786 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -57,6 +57,10 @@
#include <slog2.h>
#endif
+#ifdef Q_OS_ANDROID
+#include <android/log.h>
+#endif
+
#include <stdio.h>
QT_BEGIN_NAMESPACE
@@ -73,7 +77,7 @@ static bool isFatal(QtMsgType msgType)
return true;
if (msgType == QtWarningMsg) {
- static bool fatalWarnings = qEnvironmentVariableIsSet("QT_FATAL_WARNINGS");
+ static bool fatalWarnings = !qEnvironmentVariableIsEmpty("QT_FATAL_WARNINGS");
return fatalWarnings;
}
@@ -115,6 +119,7 @@ static bool isFatal(QtMsgType msgType)
extern bool usingWinMain;
#endif
+#ifdef Q_OS_WIN
static inline void convert_to_wchar_t_elided(wchar_t *d, size_t space, const char *s) Q_DECL_NOEXCEPT
{
size_t len = qstrlen(s);
@@ -128,6 +133,7 @@ static inline void convert_to_wchar_t_elided(wchar_t *d, size_t space, const cha
*d++ = *s++;
*d++ = 0;
}
+#endif
#if !defined(QT_NO_EXCEPTIONS)
/*!
@@ -521,6 +527,11 @@ static const char functionTokenC[] = "%{function}";
static const char pidTokenC[] = "%{pid}";
static const char appnameTokenC[] = "%{appname}";
static const char threadidTokenC[] = "%{threadid}";
+static const char ifDebugTokenC[] = "%{if-debug}";
+static const char ifWarningTokenC[] = "%{if-warning}";
+static const char ifCriticalTokenC[] = "%{if-critical}";
+static const char ifFatalTokenC[] = "%{if-fatal}";
+static const char endifTokenC[] = "%{endif}";
static const char emptyTokenC[] = "";
static const char defaultPattern[] = "%{message}";
@@ -607,6 +618,10 @@ void QMessagePattern::setPattern(const QString &pattern)
tokens = new const char*[lexemes.size() + 1];
tokens[lexemes.size()] = 0;
+ bool nestedIfError = false;
+ bool inIf = false;
+ QString error;
+
for (int i = 0; i < lexemes.size(); ++i) {
const QString lexeme = lexemes.at(i);
if (lexeme.startsWith(QLatin1String("%{"))
@@ -630,23 +645,28 @@ void QMessagePattern::setPattern(const QString &pattern)
tokens[i] = appnameTokenC;
else if (lexeme == QLatin1String(threadidTokenC))
tokens[i] = threadidTokenC;
- else {
- tokens[i] = emptyTokenC;
- QString error = QStringLiteral("QT_MESSAGE_PATTERN: Unknown placeholder %1\n")
+#define IF_TOKEN(LEVEL) \
+ else if (lexeme == QLatin1String(LEVEL)) { \
+ if (inIf) \
+ nestedIfError = true; \
+ tokens[i] = LEVEL; \
+ inIf = true; \
+ }
+ IF_TOKEN(ifDebugTokenC)
+ IF_TOKEN(ifWarningTokenC)
+ IF_TOKEN(ifCriticalTokenC)
+ IF_TOKEN(ifFatalTokenC)
+#undef IF_TOKEN
+ else if (lexeme == QLatin1String(endifTokenC)) {
+ tokens[i] = endifTokenC;
+ if (!inIf && !nestedIfError)
+ error += QStringLiteral("QT_MESSAGE_PATTERN: %{endif} without an %{if-*}\n");
+ inIf = false;
+ } else {
+ tokens[i] = emptyTokenC;
+ error += QStringLiteral("QT_MESSAGE_PATTERN: Unknown placeholder %1\n")
.arg(lexeme);
-
-#if defined(Q_OS_WINCE)
- OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16()));
- continue;
-#elif defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
- if (usingWinMain) {
- OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16()));
- continue;
- }
-#endif
- fprintf(stderr, "%s", error.toLocal8Bit().constData());
- fflush(stderr);
}
} else {
char *literal = new char[lexeme.size() + 1];
@@ -656,6 +676,24 @@ void QMessagePattern::setPattern(const QString &pattern)
tokens[i] = literal;
}
}
+ if (nestedIfError)
+ error += QStringLiteral("QT_MESSAGE_PATTERN: %{if-*} cannot be nested\n");
+ else if (inIf)
+ error += QStringLiteral("QT_MESSAGE_PATTERN: missing %{endif}\n");
+ if (!error.isEmpty()) {
+#if defined(Q_OS_WINCE)
+ OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16()));
+ if (0)
+#elif defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
+ if (usingWinMain) {
+ OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16()));
+ } else
+#endif
+ {
+ fprintf(stderr, "%s", error.toLocal8Bit().constData());
+ fflush(stderr);
+ }
+ }
literals = new const char*[literalsVar.size() + 1];
literals[literalsVar.size()] = 0;
memcpy(literals, literalsVar.constData(), literalsVar.size() * sizeof(const char*));
@@ -735,10 +773,16 @@ Q_CORE_EXPORT QString qMessageFormatString(QtMsgType type, const QMessageLogCont
if (pattern->tokens[0] == 0)
return message;
+ bool skip = false;
+
// we do not convert file, function, line literals to local encoding due to overhead
for (int i = 0; pattern->tokens[i] != 0; ++i) {
const char *token = pattern->tokens[i];
- if (token == messageTokenC) {
+ if (token == endifTokenC) {
+ skip = false;
+ } else if (skip) {
+ // do nothing
+ } else if (token == messageTokenC) {
message.append(str);
} else if (token == categoryTokenC) {
message.append(QLatin1String(context.category));
@@ -770,6 +814,14 @@ Q_CORE_EXPORT QString qMessageFormatString(QtMsgType type, const QMessageLogCont
message.append(QLatin1String("0x"));
message.append(QString::number(qlonglong(QThread::currentThread()->currentThread()), 16));
#endif
+#define HANDLE_IF_TOKEN(LEVEL) \
+ } else if (token == if##LEVEL##TokenC) { \
+ skip = type != Qt##LEVEL##Msg;
+ HANDLE_IF_TOKEN(Debug)
+ HANDLE_IF_TOKEN(Warning)
+ HANDLE_IF_TOKEN(Critical)
+ HANDLE_IF_TOKEN(Fatal)
+#undef HANDLE_IF_TOKEN
} else {
message.append(QLatin1String(token));
}
@@ -787,6 +839,24 @@ Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
static QtMsgHandler msgHandler = 0; // pointer to debug handler (without context)
static QtMessageHandler messageHandler = 0; // pointer to debug handler (with context)
+#ifdef Q_OS_ANDROID
+static void android_default_message_handler(QtMsgType type,
+ const QMessageLogContext &context,
+ const QString &message)
+{
+ android_LogPriority priority;
+ switch (type) {
+ case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break;
+ case QtWarningMsg: priority = ANDROID_LOG_WARN; break;
+ case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break;
+ case QtFatalMsg: priority = ANDROID_LOG_FATAL; break;
+ };
+
+ __android_log_print(priority, "Qt", "%s:%d (%s): %s", qPrintable(context.file), context.line,
+ qPrintable(context.function), qPrintable(message));
+}
+#endif //Q_OS_ANDROID
+
/*!
\internal
*/
@@ -807,6 +877,8 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con
#if defined(QT_USE_SLOG2)
slog2_default_handler(type, logMessage.toLocal8Bit().constData());
+#elif defined(Q_OS_ANDROID)
+ android_default_message_handler(type, context, logMessage);
#else
fprintf(stderr, "%s", logMessage.toLocal8Bit().constData());
fflush(stderr);
@@ -1009,6 +1081,15 @@ void qErrnoWarning(int code, const char *msg, ...)
\row \li \c %{type} \li "debug", "warning", "critical" or "fatal"
\endtable
+ You can also use conditionals on the type of the message using \c %{if-debug},
+ \c %{if-warning}, \c %{if-critical} or \c %{if-fatal} followed by an \c %{endif}.
+ What is inside the \c %{if-*} and \c %{endif} will only be printed if the type matches.
+
+ Example:
+ \code
+ QT_MESSAGE_PATTERN="[%{if-debug}D%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}"
+ \endcode
+
The default \a pattern is "%{message}".
The \a pattern can also be changed at runtime by setting the QT_MESSAGE_PATTERN
diff --git a/src/corelib/global/qlogging.h b/src/corelib/global/qlogging.h
index 7d8f7313c8..a6f244698d 100644
--- a/src/corelib/global/qlogging.h
+++ b/src/corelib/global/qlogging.h
@@ -49,7 +49,6 @@
#pragma qt_no_master_include
#endif
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
/*
@@ -172,6 +171,4 @@ Q_CORE_EXPORT QtMessageHandler qInstallMessageHandler(QtMessageHandler);
Q_CORE_EXPORT void qSetMessagePattern(const QString &messagePattern);
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QLOGGING_H
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index e6cd166832..41bca2a443 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -44,8 +44,6 @@
#include <QtCore/qglobal.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -327,6 +325,15 @@ public:
Q_DECLARE_FLAGS(WindowStates, WindowState)
+ enum ApplicationState {
+ ApplicationSuspended = 0x00000000,
+ ApplicationHidden = 0x00000001,
+ ApplicationInactive = 0x00000002,
+ ApplicationActive = 0x00000004
+ };
+
+ Q_DECLARE_FLAGS(ApplicationStates, ApplicationState)
+
enum ScreenOrientation {
PrimaryOrientation = 0x00000000,
PortraitOrientation = 0x00000001,
@@ -1300,6 +1307,8 @@ public:
ImhPreferLatin = 0x200,
+ ImhMultiLine = 0x400,
+
ImhDigitsOnly = 0x10000,
ImhFormattedNumbersOnly = 0x20000,
ImhUppercaseOnly = 0x40000,
@@ -1397,7 +1406,8 @@ public:
ItemIsDropEnabled = 8,
ItemIsUserCheckable = 16,
ItemIsEnabled = 32,
- ItemIsTristate = 64
+ ItemIsTristate = 64,
+ ItemNeverHasChildren = 128
};
Q_DECLARE_FLAGS(ItemFlags, ItemFlag)
@@ -1603,6 +1613,4 @@ public:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QNAMESPACE_H
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index cb18dde724..8ec206a572 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -1783,6 +1783,36 @@
*/
/*!
+ \enum Qt::ApplicationState
+
+ \keyword application state
+
+ This enum type is used to specify the current state of the application.
+
+ The states are
+
+ \value ApplicationSuspended The application is about to suspend. When entering this state, the
+ application should save its state, cease all activities, and be
+ prepared for code execution to stop. While suspended, the
+ application can be killed at any time without further warnings
+ (e.g. when low memory forces the OS to purge suspended applications).
+ \value ApplicationHidden The application is hidden and runs in the background. This
+ is the normal state for applications that need to do background
+ processing, like playing music, while the user interacts with
+ other applications. The application should free up all graphical
+ resources when entering this state.
+ \value ApplicationInactive The application is visible, but not selected to be in front.
+ On desktop platforms, this typically means that the user
+ activated another application. On mobile platforms, it is
+ more common to enter this state when the OS is interrupting
+ the user with e.g. incoming calls or SMS-messages.
+ While in this state, consider reducing CPU-intensive tasks.
+ \value ApplicationActive The application is visible and selected to be in front.
+
+ \since 5.1
+*/
+
+/*!
\enum Qt::ScreenOrientation
This enum type specifies the various orientations a screen might have.
@@ -2315,6 +2345,8 @@
\value ImhTime The text editor functions as a time field.
\value ImhPreferLatin Latin characters are preferred (but not required).
+ \value ImhMultiLine Multiple lines can be entered into the text field.
+
Flags that restrict input (exclusive flags):
\value ImhDigitsOnly Only digits are allowed.
@@ -2441,6 +2473,7 @@
\value ItemIsUserCheckable It can be checked or unchecked by the user.
\value ItemIsEnabled The user can interact with the item.
\value ItemIsTristate The item is checkable with three separate states.
+ \value ItemNeverHasChildren The item never has child items.
Note that checkable items need to be given both a suitable set of flags
and an initial state, indicating whether the item is checked or not.
diff --git a/src/corelib/global/qnumeric.h b/src/corelib/global/qnumeric.h
index f8e84825c0..25db5443eb 100644
--- a/src/corelib/global/qnumeric.h
+++ b/src/corelib/global/qnumeric.h
@@ -44,8 +44,6 @@
#include <QtCore/qglobal.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -65,6 +63,4 @@ Q_CORE_EXPORT double qInf();
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QNUMERIC_H
diff --git a/src/corelib/global/qprocessordetection.h b/src/corelib/global/qprocessordetection.h
index c005c5446e..86023d1703 100644
--- a/src/corelib/global/qprocessordetection.h
+++ b/src/corelib/global/qprocessordetection.h
@@ -118,6 +118,7 @@
# define Q_PROCESSOR_ARM_V6
# define Q_PROCESSOR_ARM_V5
# elif defined(__ARM_ARCH_5TEJ__) \
+ || defined(__ARM_ARCH_5TE__) \
|| (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 5) \
|| (defined(_M_ARM) && _M_ARM-0 >= 5)
# define Q_PROCESSOR_ARM_V5
diff --git a/src/corelib/global/qsysinfo.h b/src/corelib/global/qsysinfo.h
index c95c1674eb..edeef3c461 100644
--- a/src/corelib/global/qsysinfo.h
+++ b/src/corelib/global/qsysinfo.h
@@ -44,7 +44,6 @@
#ifndef QSYSINFO_H
#define QSYSINFO_H
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
/*
@@ -151,6 +150,4 @@ public:
};
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QSYSINFO_H
diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h
index 5f9671932f..0caac3d797 100644
--- a/src/corelib/global/qsystemdetection.h
+++ b/src/corelib/global/qsystemdetection.h
@@ -50,6 +50,8 @@
The operating system, must be one of: (Q_OS_x)
DARWIN - Darwin OS (synonym for Q_OS_MAC)
+ MAC - Mac OS X or iOS (iPhoneOS)
+ IOS - iOS (treated as a variant of Mac OS)
MSDOS - MS-DOS and Windows
OS2 - OS/2
OS2EMX - XFree86 on OS/2 (not PM)
@@ -78,6 +80,7 @@
LYNX - LynxOS
BSD4 - Any BSD 4.4 system
UNIX - Any UNIX BSD/SYSV system
+ ANDROID - Android platform
*/
#if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
@@ -88,6 +91,9 @@
# else
# define Q_OS_DARWIN32
# endif
+#elif defined(ANDROID)
+# define Q_OS_ANDROID
+# define Q_OS_LINUX
#elif defined(__CYGWIN__)
# define Q_OS_CYGWIN
#elif !defined(SAG_COM) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))
@@ -166,6 +172,10 @@
# elif defined(Q_OS_DARWIN32)
# define Q_OS_MAC32
# endif
+# include <TargetConditionals.h>
+# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
+# define Q_OS_IOS
+# endif
#endif
#if defined(Q_OS_WIN)
@@ -175,30 +185,50 @@
#endif
#ifdef Q_OS_DARWIN
-# ifdef MAC_OS_X_VERSION_MIN_REQUIRED
-# undef MAC_OS_X_VERSION_MIN_REQUIRED
+# include <Availability.h>
+# if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
+# undef __MAC_OS_X_VERSION_MIN_REQUIRED
+# define __MAC_OS_X_VERSION_MIN_REQUIRED __MAC_10_6
# endif
-# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_4
# include <AvailabilityMacros.h>
-# if !defined(MAC_OS_X_VERSION_10_3)
-# define MAC_OS_X_VERSION_10_3 MAC_OS_X_VERSION_10_2 + 1
+# if !defined(MAC_OS_X_VERSION_MIN_REQUIRED) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6
+# undef MAC_OS_X_VERSION_MIN_REQUIRED
+# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_6
# endif
-# if !defined(MAC_OS_X_VERSION_10_4)
-# define MAC_OS_X_VERSION_10_4 MAC_OS_X_VERSION_10_3 + 1
+#
+# // Numerical checks are preferred to named checks, but to be safe
+# // we define the missing version names in case Qt uses them.
+#
+# if !defined(__MAC_10_7)
+# define __MAC_10_7 1070
# endif
-# if !defined(MAC_OS_X_VERSION_10_5)
-# define MAC_OS_X_VERSION_10_5 MAC_OS_X_VERSION_10_4 + 1
-# endif
-# if !defined(MAC_OS_X_VERSION_10_6)
-# define MAC_OS_X_VERSION_10_6 MAC_OS_X_VERSION_10_5 + 1
+# if !defined(__MAC_10_8)
+# define __MAC_10_8 1080
# endif
# if !defined(MAC_OS_X_VERSION_10_7)
-# define MAC_OS_X_VERSION_10_7 MAC_OS_X_VERSION_10_6 + 1
+# define MAC_OS_X_VERSION_10_7 1070
# endif
# if !defined(MAC_OS_X_VERSION_10_8)
-# define MAC_OS_X_VERSION_10_8 MAC_OS_X_VERSION_10_7 + 1
+# define MAC_OS_X_VERSION_10_8 1080
+# endif
+#
+# if !defined(__IPHONE_4_3)
+# define __IPHONE_4_3 40300
+# endif
+# if !defined(__IPHONE_5_0)
+# define __IPHONE_5_0 50000
+# endif
+# if !defined(__IPHONE_5_1)
+# define __IPHONE_5_1 50100
+# endif
+# if !defined(__IPHONE_6_0)
+# define __IPHONE_6_0 60000
+# endif
+# if !defined(__IPHONE_6_1)
+# define __IPHONE_6_1 60100
# endif
-# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_8)
+#
+# if (__MAC_OS_X_VERSION_MAX_ALLOWED > __MAC_10_8)
# warning "This version of Mac OS X is unsupported"
# endif
#endif
diff --git a/src/corelib/global/qt_windows.h b/src/corelib/global/qt_windows.h
index 26b55336ed..c3266c5487 100644
--- a/src/corelib/global/qt_windows.h
+++ b/src/corelib/global/qt_windows.h
@@ -42,6 +42,11 @@
#ifndef QT_WINDOWS_H
#define QT_WINDOWS_H
+#if 0
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#if defined(Q_CC_BOR)
// Borland's windows.h does not set these correctly, resulting in
// unusable WinSDK standard dialogs
diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h
index 754aa6712b..8e34c9792d 100644
--- a/src/corelib/global/qtypeinfo.h
+++ b/src/corelib/global/qtypeinfo.h
@@ -44,7 +44,6 @@
#ifndef QTYPEINFO_H
#define QTYPEINFO_H
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
/*
@@ -241,6 +240,4 @@ Q_DECLARE_TYPEINFO(long double, Q_PRIMITIVE_TYPE);
#endif
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QTYPEINFO_H
diff --git a/src/corelib/global/qtypetraits.h b/src/corelib/global/qtypetraits.h
index 54b48667b4..7ccad067d0 100644
--- a/src/corelib/global/qtypetraits.h
+++ b/src/corelib/global/qtypetraits.h
@@ -109,7 +109,6 @@
#include <utility> // For pair
-QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
namespace QtPrivate {
@@ -505,6 +504,4 @@ Q_STATIC_ASSERT(( is_signed<qint64>::value));
} // namespace QtPrivate
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QTYPETRAITS_H
diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri
index f57dcebe33..3f100593bb 100644
--- a/src/corelib/io/io.pri
+++ b/src/corelib/io/io.pri
@@ -18,14 +18,19 @@ HEADERS += \
io/qipaddress_p.h \
io/qiodevice.h \
io/qiodevice_p.h \
+ io/qlockfile.h \
+ io/qlockfile_p.h \
io/qnoncontiguousbytedevice_p.h \
io/qprocess.h \
io/qprocess_p.h \
io/qtextstream.h \
+ io/qtextstream_p.h \
io/qtemporarydir.h \
io/qtemporaryfile.h \
+ io/qtemporaryfile_p.h \
io/qresource_p.h \
io/qresource_iterator_p.h \
+ io/qsavefile.h \
io/qstandardpaths.h \
io/qurl.h \
io/qurl_p.h \
@@ -58,6 +63,7 @@ SOURCES += \
io/qfileinfo.cpp \
io/qipaddress.cpp \
io/qiodevice.cpp \
+ io/qlockfile.cpp \
io/qnoncontiguousbytedevice.cpp \
io/qprocess.cpp \
io/qtextstream.cpp \
@@ -65,6 +71,7 @@ SOURCES += \
io/qtemporaryfile.cpp \
io/qresource.cpp \
io/qresource_iterator.cpp \
+ io/qsavefile.cpp \
io/qstandardpaths.cpp \
io/qurl.cpp \
io/qurlidna.cpp \
@@ -81,6 +88,7 @@ SOURCES += \
win32 {
SOURCES += io/qsettings_win.cpp
SOURCES += io/qfsfileengine_win.cpp
+ SOURCES += io/qlockfile_win.cpp
SOURCES += io/qfilesystemwatcher_win.cpp
HEADERS += io/qfilesystemwatcher_win_p.h
@@ -105,15 +113,16 @@ win32 {
SOURCES += \
io/qfsfileengine_unix.cpp \
io/qfilesystemengine_unix.cpp \
+ io/qlockfile_unix.cpp \
io/qprocess_unix.cpp \
io/qfilesystemiterator_unix.cpp \
- !nacl:macx-*: {
+ !nacl:mac: {
SOURCES += io/qfilesystemengine_mac.cpp
SOURCES += io/qsettings_mac.cpp
}
- macx-*: {
- !ios {
+ mac {
+ macx {
SOURCES += io/qstandardpaths_mac.cpp
} else {
SOURCES += io/qstandardpaths_unix.cpp
@@ -124,13 +133,13 @@ win32 {
SOURCES += io/qstandardpaths_unix.cpp
}
- linux-*|if(qnx:contains(QT_CONFIG, inotify)) {
+ linux|if(qnx:contains(QT_CONFIG, inotify)) {
SOURCES += io/qfilesystemwatcher_inotify.cpp
HEADERS += io/qfilesystemwatcher_inotify_p.h
}
!nacl {
- freebsd-*|macx-*|darwin-*|openbsd-*:{
+ freebsd-*|mac|darwin-*|openbsd-*:{
SOURCES += io/qfilesystemwatcher_kqueue.cpp
HEADERS += io/qfilesystemwatcher_kqueue_p.h
}
diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp
index 2d9cb85d9f..9cdbbbbb25 100644
--- a/src/corelib/io/qabstractfileengine.cpp
+++ b/src/corelib/io/qabstractfileengine.cpp
@@ -400,6 +400,19 @@ bool QAbstractFileEngine::close()
}
/*!
+ \since 5.1
+
+ Flushes and syncs the file to disk.
+
+ Returns true if successful; otherwise returns false.
+ The default implementation always returns false.
+*/
+bool QAbstractFileEngine::syncToDisk()
+{
+ return false;
+}
+
+/*!
Flushes the open file, returning true if successful; otherwise returns
false.
@@ -496,6 +509,24 @@ bool QAbstractFileEngine::rename(const QString &newName)
}
/*!
+ \since 5.1
+
+ Requests that the file be renamed to \a newName in the file
+ system. If the new name already exists, it must be overwritten.
+ If the operation succeeds, returns true; otherwise returns
+ false.
+
+ This virtual function must be reimplemented by all subclasses.
+
+ \sa setFileName()
+ */
+bool QAbstractFileEngine::renameOverwrite(const QString &newName)
+{
+ Q_UNUSED(newName);
+ return false;
+}
+
+/*!
Creates a link from the file currently specified by fileName() to
\a newName. What a link is depends on the underlying filesystem
(be it a shortcut on Windows or a symbolic link on Unix). Returns
diff --git a/src/corelib/io/qabstractfileengine_p.h b/src/corelib/io/qabstractfileengine_p.h
index 868b086b57..dd64e3d71f 100644
--- a/src/corelib/io/qabstractfileengine_p.h
+++ b/src/corelib/io/qabstractfileengine_p.h
@@ -66,7 +66,7 @@ class QVariant;
class QAbstractFileEngineIterator;
class QAbstractFileEnginePrivate;
-class Q_AUTOTEST_EXPORT QAbstractFileEngine
+class Q_CORE_EXPORT QAbstractFileEngine
{
public:
enum FileFlag {
@@ -124,6 +124,7 @@ public:
virtual bool open(QIODevice::OpenMode openMode);
virtual bool close();
virtual bool flush();
+ virtual bool syncToDisk();
virtual qint64 size() const;
virtual qint64 pos() const;
virtual bool seek(qint64 pos);
@@ -131,6 +132,7 @@ public:
virtual bool remove();
virtual bool copy(const QString &newName);
virtual bool rename(const QString &newName);
+ virtual bool renameOverwrite(const QString &newName);
virtual bool link(const QString &newName);
virtual bool mkdir(const QString &dirName, bool createParentDirectories) const;
virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const;
@@ -208,7 +210,7 @@ private:
Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractFileEngine::FileFlags)
-class Q_AUTOTEST_EXPORT QAbstractFileEngineHandler
+class Q_CORE_EXPORT QAbstractFileEngineHandler
{
public:
QAbstractFileEngineHandler();
@@ -217,7 +219,7 @@ public:
};
class QAbstractFileEngineIteratorPrivate;
-class Q_AUTOTEST_EXPORT QAbstractFileEngineIterator
+class Q_CORE_EXPORT QAbstractFileEngineIterator
{
public:
QAbstractFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters);
diff --git a/src/corelib/io/qbuffer.h b/src/corelib/io/qbuffer.h
index f246f1375f..de0fe9f36a 100644
--- a/src/corelib/io/qbuffer.h
+++ b/src/corelib/io/qbuffer.h
@@ -45,8 +45,6 @@
#include <QtCore/qiodevice.h>
#include <QtCore/qbytearray.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -106,6 +104,4 @@ inline void QBuffer::setData(const char *adata, int alen)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QBUFFER_H
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index 544e9e8592..8f788ac355 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -251,7 +251,7 @@ QT_BEGIN_NAMESPACE
return retVal;
enum {
- DefaultStreamVersion = QDataStream::Qt_5_0
+ DefaultStreamVersion = QDataStream::Qt_5_1
};
/*!
@@ -539,6 +539,7 @@ void QDataStream::setByteOrder(ByteOrder bo)
\value Qt_4_8 Same as Qt_4_6.
\value Qt_4_9 Same as Qt_4_6.
\value Qt_5_0 Version 13 (Qt 5.0)
+ \value Qt_5_1 Same as Qt_5_0.
\sa setVersion(), version()
*/
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h
index 092f3a15b3..6017ba5e7d 100644
--- a/src/corelib/io/qdatastream.h
+++ b/src/corelib/io/qdatastream.h
@@ -50,8 +50,6 @@
#error qdatastream.h must be included before any header file that defines Status
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -87,8 +85,9 @@ public:
Qt_4_7 = Qt_4_6,
Qt_4_8 = Qt_4_7,
Qt_4_9 = Qt_4_8,
- Qt_5_0 = 13
-#if QT_VERSION >= 0x050100
+ Qt_5_0 = 13,
+ Qt_5_1 = Qt_5_0
+#if QT_VERSION >= 0x050200
#error Add the datastream version for this Qt version
#endif
};
@@ -434,6 +433,4 @@ inline QDataStream& operator<<(QDataStream& s, const QPair<T1, T2>& p)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QDATASTREAM_H
diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp
index bd43963139..9cb5609dac 100644
--- a/src/corelib/io/qdebug.cpp
+++ b/src/corelib/io/qdebug.cpp
@@ -47,6 +47,9 @@
#endif
#include "qdebug.h"
+#include <private/qtextstream_p.h>
+
+QT_BEGIN_NAMESPACE
// This file is needed to force compilation of QDebug into the kernel library.
@@ -170,6 +173,8 @@
between writes.
\since 5.0
+
+ \sa QDebugStateSaver
*/
/*!
@@ -179,6 +184,8 @@
automatic insertion of spaces is disabled.
\since 5.0
+
+ \sa QDebugStateSaver
*/
/*!
@@ -321,3 +328,69 @@
\fn QDebug &QDebug::operator<<(QTextStreamManipulator m)
\internal
*/
+
+/*!
+ \class QDebugStateSaver
+
+ \brief Convenience class for custom QDebug operators
+
+ Saves the settings used by QDebug, and restores them upon destruction.
+
+ The automatic insertion of spaces between writes is one of the settings
+ that QDebugStateSaver stores for the duration of the current block.
+
+ The settings of the internal QTextStream are also saved and restored,
+ so that using << hex in a QDebug operator doesn't affect other QDebug
+ operators.
+
+ \since 5.1
+*/
+
+class QDebugStateSaverPrivate
+{
+public:
+ QDebugStateSaverPrivate(QDebug &dbg)
+ : m_dbg(dbg),
+ m_spaces(dbg.autoInsertSpaces()),
+ m_streamParams(dbg.stream->ts.d_ptr->params)
+ {
+ }
+ void restoreState()
+ {
+ m_dbg.setAutoInsertSpaces(m_spaces);
+ m_dbg.stream->ts.d_ptr->params = m_streamParams;
+ }
+
+ QDebug &m_dbg;
+
+ // QDebug state
+ const bool m_spaces;
+
+ // QTextStream state
+ const QTextStreamPrivate::Params m_streamParams;
+};
+
+
+/*!
+ Creates a QDebugStateSaver instance, which saves the settings
+ currently used by \a dbg.
+
+ \sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces()
+*/
+QDebugStateSaver::QDebugStateSaver(QDebug &dbg)
+ : d(new QDebugStateSaverPrivate(dbg))
+{
+}
+
+/*!
+ Destroyes a QDebugStateSaver instance, which restores the settings
+ used by \a dbg when the QDebugStateSaver instance was created.
+
+ \sa QDebug::setAutoInsertSpaces(), QDebug::autoInsertSpaces()
+*/
+QDebugStateSaver::~QDebugStateSaver()
+{
+ d->restoreState();
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h
index be8252fbb2..ce72fcd26d 100644
--- a/src/corelib/io/qdebug.h
+++ b/src/corelib/io/qdebug.h
@@ -53,14 +53,13 @@
#include <QtCore/qset.h>
#include <QtCore/qcontiguouscache.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QDebug
{
friend class QMessageLogger;
+ friend class QDebugStateSaverPrivate;
struct Stream {
Stream(QIODevice *device) : ts(device), ref(1), type(QtDebugMsg), space(true), message_output(false) {}
Stream(QString *string) : ts(string, QIODevice::WriteOnly), ref(1), type(QtDebugMsg), space(true), message_output(false) {}
@@ -132,6 +131,17 @@ public:
Q_DECLARE_SHARED(QDebug)
+class QDebugStateSaverPrivate;
+class Q_CORE_EXPORT QDebugStateSaver
+{
+public:
+ QDebugStateSaver(QDebug &dbg);
+ ~QDebugStateSaver();
+private:
+ Q_DISABLE_COPY(QDebugStateSaver)
+ QScopedPointer<QDebugStateSaverPrivate> d;
+};
+
class QNoDebug
{
public:
@@ -279,6 +289,4 @@ inline QDebug operator<<(QDebug debug, const QFlags<T> &flags)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QDEBUG_H
diff --git a/src/corelib/io/qdir.h b/src/corelib/io/qdir.h
index 00091bb0d1..dbb6d93d2e 100644
--- a/src/corelib/io/qdir.h
+++ b/src/corelib/io/qdir.h
@@ -47,8 +47,6 @@
#include <QtCore/qstringlist.h>
#include <QtCore/qshareddata.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -236,6 +234,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QDir &dir);
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QDIR_H
diff --git a/src/corelib/io/qdiriterator.h b/src/corelib/io/qdiriterator.h
index f0601e602e..4a96005570 100644
--- a/src/corelib/io/qdiriterator.h
+++ b/src/corelib/io/qdiriterator.h
@@ -44,8 +44,6 @@
#include <QtCore/qdir.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -91,6 +89,4 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QDirIterator::IteratorFlags)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif
diff --git a/src/corelib/io/qfile.h b/src/corelib/io/qfile.h
index 2e86af3703..2e75e29995 100644
--- a/src/corelib/io/qfile.h
+++ b/src/corelib/io/qfile.h
@@ -50,8 +50,6 @@
#error qfile.h must be included before any header file that defines open
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
class QTemporaryFile;
@@ -154,6 +152,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QFILE_H
diff --git a/src/corelib/io/qfiledevice.h b/src/corelib/io/qfiledevice.h
index fc07097b1c..fc2779086a 100644
--- a/src/corelib/io/qfiledevice.h
+++ b/src/corelib/io/qfiledevice.h
@@ -45,8 +45,6 @@
#include <QtCore/qiodevice.h>
#include <QtCore/qstring.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
class QFileDevicePrivate;
@@ -142,6 +140,4 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDevice::Permissions)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QFILEDEVICE_H
diff --git a/src/corelib/io/qfileinfo.h b/src/corelib/io/qfileinfo.h
index 938114f9d1..211c18d0a0 100644
--- a/src/corelib/io/qfileinfo.h
+++ b/src/corelib/io/qfileinfo.h
@@ -47,8 +47,6 @@
#include <QtCore/qshareddata.h>
#include <QtCore/qmetatype.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -159,6 +157,4 @@ QT_END_NAMESPACE
Q_DECLARE_METATYPE(QFileInfo)
-QT_END_HEADER
-
#endif // QFILEINFO_H
diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp
index 0fd77fbeb5..71ecc4a0a0 100644
--- a/src/corelib/io/qfilesystemengine.cpp
+++ b/src/corelib/io/qfilesystemengine.cpp
@@ -272,8 +272,7 @@ void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer)
// Attributes
entryFlags |= QFileSystemMetaData::ExistsAttribute;
size_ = statBuffer.st_size;
-#if defined (Q_OS_MAC) && !defined(Q_OS_IOS) \
- && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
+#if defined (Q_OS_MAC) && !defined(Q_OS_IOS)
if (statBuffer.st_flags & UF_HIDDEN) {
entryFlags |= QFileSystemMetaData::HiddenAttribute;
knownFlagsMask |= QFileSystemMetaData::HiddenAttribute;
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 4af01f6730..4bfb03a41e 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -169,7 +169,7 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
if (entry.isEmpty() || entry.isRoot())
return entry;
-#if !defined(Q_OS_MAC) && !defined(Q_OS_QNX) && _POSIX_VERSION < 200809L
+#if !defined(Q_OS_MAC) && !defined(Q_OS_QNX) && !defined(Q_OS_ANDROID) && _POSIX_VERSION < 200809L
// realpath(X,0) is not supported
Q_UNUSED(data);
return QFileSystemEntry(slowCanonicalized(absoluteName(entry).filePath()));
@@ -286,7 +286,7 @@ QString QFileSystemEngine::resolveUserName(uint userId)
struct passwd *pw = 0;
#if !defined(Q_OS_INTEGRITY)
-#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) && !defined(Q_OS_VXWORKS)
struct passwd entry;
getpwuid_r(userId, &entry, buf.data(), buf.size(), &pw);
#else
@@ -310,7 +310,7 @@ QString QFileSystemEngine::resolveGroupName(uint groupId)
struct group *gr = 0;
#if !defined(Q_OS_INTEGRITY)
-#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) && !defined(Q_OS_VXWORKS)
size_max = sysconf(_SC_GETGR_R_SIZE_MAX);
if (size_max == -1)
size_max = 1024;
@@ -360,12 +360,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
if (!data.hasFlags(QFileSystemMetaData::DirectoryType))
what |= QFileSystemMetaData::DirectoryType;
}
-# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (what & QFileSystemMetaData::HiddenAttribute) {
// Mac OS >= 10.5: st_flags & UF_HIDDEN
what |= QFileSystemMetaData::PosixStatFlags;
}
-# endif // MAC_OS_X_VERSION_MAX_ALLOWED...
#endif // defined(Q_OS_MAC) && !defined(Q_OS_IOS)
if (what & QFileSystemMetaData::PosixStatFlags)
@@ -685,8 +683,16 @@ QFileSystemEntry QFileSystemEngine::currentPath()
}
#else
char currentName[PATH_MAX+1];
- if (::getcwd(currentName, PATH_MAX))
+ if (::getcwd(currentName, PATH_MAX)) {
+#if defined(Q_OS_VXWORKS) && defined(VXWORKS_VXSIM)
+ QByteArray dir(currentName);
+ if (dir.indexOf(':') < dir.indexOf('/'))
+ dir.remove(0, dir.indexOf(':')+1);
+
+ qstrncpy(currentName, dir.constData(), PATH_MAX);
+#endif
result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
+ }
# if defined(QT_DEBUG)
if (result.isEmpty())
qWarning("QFileSystemEngine::currentPath: getcwd() failed");
diff --git a/src/corelib/io/qfilesystemwatcher.h b/src/corelib/io/qfilesystemwatcher.h
index e2f48ce0bf..5a326075ba 100644
--- a/src/corelib/io/qfilesystemwatcher.h
+++ b/src/corelib/io/qfilesystemwatcher.h
@@ -46,8 +46,6 @@
#ifndef QT_NO_FILESYSTEMWATCHER
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -90,7 +88,5 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QT_NO_FILESYSTEMWATCHER
#endif // QFILESYSTEMWATCHER_H
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 3963416084..f0f3c935e6 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -419,6 +419,17 @@ bool QFSFileEngine::flush()
}
/*!
+ \reimp
+*/
+bool QFSFileEngine::syncToDisk()
+{
+ Q_D(QFSFileEngine);
+ if ((d->openMode & QIODevice::WriteOnly) == 0)
+ return true;
+ return d->nativeSyncToDisk();
+}
+
+/*!
\internal
*/
bool QFSFileEnginePrivate::flushFh()
@@ -908,6 +919,11 @@ bool QFSFileEngine::supportsExtension(Extension extension) const
\reimp
*/
+
+/*! \fn bool QFSFileEngine::renameOverwrite(const QString &newName)
+ \reimp
+*/
+
/*! \fn bool QFSFileEngine::rmdir(const QString &name, bool recurseParentDirectories) const
\reimp
*/
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index d19310b6b6..21f38fea1d 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -81,6 +81,7 @@ public:
bool open(QIODevice::OpenMode flags, FILE *fh);
bool close();
bool flush();
+ bool syncToDisk();
qint64 size() const;
qint64 pos() const;
bool seek(qint64);
@@ -88,6 +89,7 @@ public:
bool remove();
bool copy(const QString &newName);
bool rename(const QString &newName);
+ bool renameOverwrite(const QString &newName);
bool link(const QString &newName);
bool mkdir(const QString &dirName, bool createParentDirectories) const;
bool rmdir(const QString &dirName, bool recurseParentDirectories) const;
@@ -149,6 +151,7 @@ public:
bool nativeClose();
bool closeFdFh();
bool nativeFlush();
+ bool nativeSyncToDisk();
bool flushFh();
qint64 nativeSize() const;
#ifndef Q_OS_WIN
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 482f65e7f6..a5f077bd0b 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -258,6 +258,23 @@ bool QFSFileEnginePrivate::nativeFlush()
/*!
\internal
+ \since 5.1
+*/
+bool QFSFileEnginePrivate::nativeSyncToDisk()
+{
+ Q_Q(QFSFileEngine);
+#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
+ const int ret = fdatasync(nativeHandle());
+#else
+ const int ret = fsync(nativeHandle());
+#endif
+ if (ret != 0)
+ q->setError(QFile::WriteError, qt_error_string(errno));
+ return ret == 0;
+}
+
+/*!
+ \internal
*/
qint64 QFSFileEnginePrivate::nativeRead(char *data, qint64 len)
{
@@ -388,6 +405,12 @@ bool QFSFileEngine::copy(const QString &newName)
return ret;
}
+bool QFSFileEngine::renameOverwrite(const QString &newName)
+{
+ // On Unix, rename() overwrites.
+ return rename(newName);
+}
+
bool QFSFileEngine::rename(const QString &newName)
{
Q_D(QFSFileEngine);
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index 24631f11c7..23ab507dad 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -198,15 +198,25 @@ bool QFSFileEnginePrivate::nativeFlush()
return true;
}
- // Windows native mode; flushing is
- // unnecessary. FlushFileBuffers(), the equivalent of sync() or
- // fsync() on Unix, does a low-level flush to the disk, and we
- // don't expose an API for this.
+ // Windows native mode; flushing is unnecessary.
return true;
}
/*
\internal
+ \since 5.1
+*/
+bool QFSFileEnginePrivate::nativeSyncToDisk()
+{
+ if (fh || fd != -1) {
+ // stdlib / stdio mode. No API available.
+ return false;
+ }
+ return FlushFileBuffers(fileHandle);
+}
+
+/*
+ \internal
*/
qint64 QFSFileEnginePrivate::nativeSize() const
{
@@ -507,6 +517,17 @@ bool QFSFileEngine::rename(const QString &newName)
return ret;
}
+bool QFSFileEngine::renameOverwrite(const QString &newName)
+{
+ Q_D(QFSFileEngine);
+ bool ret = ::MoveFileEx((wchar_t*)d->fileEntry.nativeFilePath().utf16(),
+ (wchar_t*)QFileSystemEntry(newName).nativeFilePath().utf16(),
+ MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED) != 0;
+ if (!ret)
+ setError(QFile::RenameError, QSystemError(::GetLastError(), QSystemError::NativeError).toString());
+ return ret;
+}
+
bool QFSFileEngine::mkdir(const QString &name, bool createParentDirectories) const
{
return QFileSystemEngine::createDirectory(QFileSystemEntry(name), createParentDirectories);
diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h
index 96a8971639..39c2d70492 100644
--- a/src/corelib/io/qiodevice.h
+++ b/src/corelib/io/qiodevice.h
@@ -54,8 +54,6 @@
#error qiodevice.h must be included before any header file that defines open
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -177,6 +175,4 @@ Q_CORE_EXPORT QDebug operator<<(QDebug debug, QIODevice::OpenMode modes);
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QIODEVICE_H
diff --git a/src/corelib/io/qlockfile.cpp b/src/corelib/io/qlockfile.cpp
new file mode 100644
index 0000000000..5d56a67f48
--- /dev/null
+++ b/src/corelib/io/qlockfile.cpp
@@ -0,0 +1,346 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qlockfile.h"
+#include "qlockfile_p.h"
+
+#include <QtCore/qthread.h>
+#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qdatetime.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QLockFile
+ \inmodule QtCore
+ \brief The QLockFile class provides locking between processes using a file.
+ \since 5.1
+
+ A lock file can be used to prevent multiple processes from accessing concurrently
+ the same resource. For instance, a configuration file on disk, or a socket, a port,
+ a region of shared memory...
+
+ Serialization is only guaranteed if all processes that access the shared resource
+ use QLockFile, with the same file path.
+
+ QLockFile supports two use cases:
+ to protect a resource for a short-term operation (e.g. verifying if a configuration
+ file has changed before saving new settings), and for long-lived protection of a
+ resource (e.g. a document opened by a user in an editor) for an indefinite amount of time.
+
+ When protecting for a short-term operation, it is acceptable to call lock() and wait
+ until any running operation finishes.
+ When protecting a resource over a long time, however, the application should always
+ call setStaleLockTime(0) and then tryLock() with a short timeout, in order to
+ warn the user that the resource is locked.
+
+ If the process holding the lock crashes, the lock file stays on disk and can prevent
+ any other process from accessing the shared resource, ever. For this reason, QLockFile
+ tries to detect such a "stale" lock file, based on the process ID written into the file,
+ and (in case that process ID got reused meanwhile), on the last modification time of
+ the lock file (30s by default, for the use case of a short-lived operation).
+ If the lock file is found to be stale, it will be deleted.
+
+ For the use case of protecting a resource over a long time, you should therefore call
+ setStaleLockTime(0), and when tryLock() returns LockFailedError, inform the user
+ that the document is locked, possibly using getLockInfo() for more details.
+*/
+
+/*!
+ \enum QLockFile::LockError
+
+ This enum describes the result of the last call to lock() or tryLock().
+
+ \value NoError The lock was acquired successfully.
+ \value LockFailedError The lock could not be acquired because another process holds it.
+ \value PermissionError The lock file could not be created, for lack of permissions
+ in the parent directory.
+ \value UnknownError Another error happened, for instance a full partition
+ prevented writing out the lock file.
+*/
+
+/*!
+ Constructs a new lock file object.
+ The object is created in an unlocked state.
+ When calling lock() or tryLock(), a lock file named \a fileName will be created,
+ if it doesn't already exist.
+
+ \sa lock(), unlock()
+*/
+QLockFile::QLockFile(const QString &fileName)
+ : d_ptr(new QLockFilePrivate(fileName))
+{
+}
+
+/*!
+ Destroys the lock file object.
+ If the lock was acquired, this will release the lock, by deleting the lock file.
+*/
+QLockFile::~QLockFile()
+{
+ unlock();
+}
+
+/*!
+ Sets \a staleLockTime to be the time in milliseconds after which
+ a lock file is considered stale.
+ The default value is 30000, i.e. 30 seconds.
+ If your application typically keeps the file locked for more than 30 seconds
+ (for instance while saving megabytes of data for 2 minutes), you should set
+ a bigger value using setStaleLockTime().
+
+ The value of \a staleLockTime is used by lock() and tryLock() in order
+ to determine when an existing lock file is considered stale, i.e. left over
+ by a crashed process. This is useful for the case where the PID got reused
+ meanwhile, so the only way to detect a stale lock file is by the fact that
+ it has been around for a long time.
+
+ \sa staleLockTime()
+*/
+void QLockFile::setStaleLockTime(int staleLockTime)
+{
+ Q_D(QLockFile);
+ d->staleLockTime = staleLockTime;
+}
+
+/*!
+ Returns the time in milliseconds after which
+ a lock file is considered stale.
+
+ \sa setStaleLockTime()
+*/
+int QLockFile::staleLockTime() const
+{
+ Q_D(const QLockFile);
+ return d->staleLockTime;
+}
+
+/*!
+ Returns true if the lock was acquired by this QLockFile instance,
+ otherwise returns false.
+
+ \sa lock(), unlock(), tryLock()
+*/
+bool QLockFile::isLocked() const
+{
+ Q_D(const QLockFile);
+ return d->isLocked;
+}
+
+/*!
+ Creates the lock file.
+
+ If another process (or another thread) has created the lock file already,
+ this function will block until that process (or thread) releases it.
+
+ Calling this function multiple times on the same lock from the same
+ thread without unlocking first is not allowed. This function will
+ \e dead-lock when the file is locked recursively.
+
+ Returns true if the lock was acquired, false if it could not be acquired
+ due to an unrecoverable error, such as no permissions in the parent directory.
+
+ \sa unlock(), tryLock()
+*/
+bool QLockFile::lock()
+{
+ return tryLock(-1);
+}
+
+/*!
+ Attempts to create the lock file. This function returns true if the
+ lock was obtained; otherwise it returns false. If another process (or
+ another thread) has created the lock file already, this function will
+ wait for at most \a timeout milliseconds for the lock file to become
+ available.
+
+ Note: Passing a negative number as the \a timeout is equivalent to
+ calling lock(), i.e. this function will wait forever until the lock
+ file can be locked if \a timeout is negative.
+
+ If the lock was obtained, it must be released with unlock()
+ before another process (or thread) can successfully lock it.
+
+ Calling this function multiple times on the same lock from the same
+ thread without unlocking first is not allowed, this function will
+ \e always return false when attempting to lock the file recursively.
+
+ \sa lock(), unlock()
+*/
+bool QLockFile::tryLock(int timeout)
+{
+ Q_D(QLockFile);
+ QElapsedTimer timer;
+ if (timeout > 0)
+ timer.start();
+ int sleepTime = 100;
+ forever {
+ d->lockError = d->tryLock_sys();
+ switch (d->lockError) {
+ case NoError:
+ d->isLocked = true;
+ return true;
+ case PermissionError:
+ case UnknownError:
+ return false;
+ case LockFailedError:
+ if (!d->isLocked && d->isApparentlyStale()) {
+ // Stale lock from another thread/process
+ // Ensure two processes don't remove it at the same time
+ QLockFile rmlock(d->fileName + QStringLiteral(".rmlock"));
+ if (rmlock.tryLock()) {
+ if (d->isApparentlyStale() && d->removeStaleLock())
+ continue;
+ }
+ }
+ break;
+ }
+ if (timeout == 0 || (timeout > 0 && timer.hasExpired(timeout)))
+ return false;
+ QThread::msleep(sleepTime);
+ if (sleepTime < 5 * 1000)
+ sleepTime *= 2;
+ }
+ // not reached
+ return false;
+}
+
+/*!
+ \fn void QLockFile::unlock()
+ Releases the lock, by deleting the lock file.
+
+ Calling unlock() without locking the file first, does nothing.
+
+ \sa lock(), tryLock()
+*/
+
+/*!
+ Retrieves information about the current owner of the lock file.
+
+ If tryLock() returns false, and error() returns LockFailedError,
+ this function can be called to find out more information about the existing
+ lock file:
+ \list
+ \li the PID of the application (returned in \a pid)
+ \li the \a hostname it's running on (useful in case of networked filesystems),
+ \li the name of the application which created it (returned in \a appname),
+ \endlist
+
+ Note that tryLock() automatically deleted the file if there is no
+ running application with this PID, so LockFailedError can only happen if there is
+ an application with this PID (it could be unrelated though).
+
+ This can be used to inform users about the existing lock file and give them
+ the choice to delete it. After removing the file using removeStaleLockFile(),
+ the application can call tryLock() again.
+
+ This function returns true if the information could be successfully retrieved, false
+ if the lock file doesn't exist or doesn't contain the expected data.
+ This can happen if the lock file was deleted between the time where tryLock() failed
+ and the call to this function. Simply call tryLock() again if this happens.
+*/
+bool QLockFile::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const
+{
+ Q_D(const QLockFile);
+ return d->getLockInfo(pid, hostname, appname);
+}
+
+bool QLockFilePrivate::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const
+{
+ QFile reader(fileName);
+ if (!reader.open(QIODevice::ReadOnly))
+ return false;
+
+ QByteArray pidLine = reader.readLine();
+ pidLine.chop(1);
+ QByteArray appNameLine = reader.readLine();
+ appNameLine.chop(1);
+ QByteArray hostNameLine = reader.readLine();
+ hostNameLine.chop(1);
+ if (pidLine.isEmpty() || appNameLine.isEmpty())
+ return false;
+
+ qint64 thePid = pidLine.toLongLong();
+ if (pid)
+ *pid = thePid;
+ if (appname)
+ *appname = QString::fromUtf8(appNameLine);
+ if (hostname)
+ *hostname = QString::fromUtf8(hostNameLine);
+ return thePid > 0;
+}
+
+/*!
+ Attempts to forcefully remove an existing lock file.
+
+ Calling this is not recommended when protecting a short-lived operation: QLockFile
+ already takes care of removing lock files after they are older than staleLockTime().
+
+ This method should only be called when protecting a resource for a long time, i.e.
+ with staleLockTime(0), and after tryLock() returned LockFailedError, and the user
+ agreed on removing the lock file.
+
+ Returns true on success, false if the lock file couldn't be removed. This happens
+ on Windows, when the application owning the lock is still running.
+*/
+bool QLockFile::removeStaleLockFile()
+{
+ Q_D(QLockFile);
+ if (d->isLocked) {
+ qWarning("removeStaleLockFile can only be called when not holding the lock");
+ return false;
+ }
+ return d->removeStaleLock();
+}
+
+/*!
+ Returns the lock file error status.
+
+ If tryLock() returns false, this function can be called to find out
+ the reason why the locking failed.
+*/
+QLockFile::LockError QLockFile::error() const
+{
+ Q_D(const QLockFile);
+ return d->lockError;
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/io/qlockfile.h b/src/corelib/io/qlockfile.h
new file mode 100644
index 0000000000..4c8b6bf31a
--- /dev/null
+++ b/src/corelib/io/qlockfile.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLOCKFILE_H
+#define QLOCKFILE_H
+
+#include <QtCore/qstring.h>
+#include <QtCore/qscopedpointer.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QLockFilePrivate;
+
+class Q_CORE_EXPORT QLockFile
+{
+public:
+ QLockFile(const QString &fileName);
+ ~QLockFile();
+
+ bool lock();
+ bool tryLock(int timeout = 0);
+ void unlock();
+
+ void setStaleLockTime(int);
+ int staleLockTime() const;
+
+ bool isLocked() const;
+ bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const;
+ bool removeStaleLockFile();
+
+ enum LockError {
+ NoError = 0,
+ LockFailedError = 1,
+ PermissionError = 2,
+ UnknownError = 3
+ };
+ LockError error() const;
+
+protected:
+ QScopedPointer<QLockFilePrivate> d_ptr;
+
+private:
+ Q_DECLARE_PRIVATE(QLockFile)
+ Q_DISABLE_COPY(QLockFile)
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QLOCKFILE_H
diff --git a/src/corelib/io/qlockfile_p.h b/src/corelib/io/qlockfile_p.h
new file mode 100644
index 0000000000..e046e87cf4
--- /dev/null
+++ b/src/corelib/io/qlockfile_p.h
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLOCKFILE_P_H
+#define QLOCKFILE_P_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 <QtCore/qlockfile.h>
+#include <QtCore/qfile.h>
+
+#ifdef Q_OS_WIN
+#include <qt_windows.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QLockFilePrivate
+{
+public:
+ QLockFilePrivate(const QString &fn)
+ : fileName(fn),
+#ifdef Q_OS_WIN
+ fileHandle(INVALID_HANDLE_VALUE),
+#else
+ fileHandle(-1),
+#endif
+ staleLockTime(30 * 1000), // 30 seconds
+ lockError(QLockFile::NoError),
+ isLocked(false)
+ {
+ }
+ QLockFile::LockError tryLock_sys();
+ bool removeStaleLock();
+ bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const;
+ // Returns true if the lock belongs to dead PID, or is old.
+ // The attempt to delete it will tell us if it was really stale or not, though.
+ bool isApparentlyStale() const;
+
+#ifdef Q_OS_UNIX
+ static int checkFcntlWorksAfterFlock();
+#endif
+
+ QString fileName;
+#ifdef Q_OS_WIN
+ Qt::HANDLE fileHandle;
+#else
+ int fileHandle;
+#endif
+ int staleLockTime; // "int milliseconds" is big enough for 24 days
+ QLockFile::LockError lockError;
+ bool isLocked;
+};
+
+QT_END_NAMESPACE
+
+#endif /* QLOCKFILE_P_H */
diff --git a/src/corelib/io/qlockfile_unix.cpp b/src/corelib/io/qlockfile_unix.cpp
new file mode 100644
index 0000000000..ed3b399fbf
--- /dev/null
+++ b/src/corelib/io/qlockfile_unix.cpp
@@ -0,0 +1,207 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qlockfile_p.h"
+
+#include "QtCore/qtemporaryfile.h"
+#include "QtCore/qcoreapplication.h"
+#include "QtCore/qfileinfo.h"
+#include "QtCore/qdebug.h"
+
+#include "private/qcore_unix_p.h" // qt_safe_open
+#include "private/qabstractfileengine_p.h"
+#include "private/qtemporaryfile_p.h"
+
+#include <sys/file.h> // flock
+#include <sys/types.h> // kill
+#include <signal.h> // kill
+
+QT_BEGIN_NAMESPACE
+
+static QString localHostName() // from QHostInfo::localHostName()
+{
+ char hostName[512];
+ if (gethostname(hostName, sizeof(hostName)) == -1)
+ return QString();
+ hostName[sizeof(hostName) - 1] = '\0';
+ return QString::fromLocal8Bit(hostName);
+}
+
+// ### merge into qt_safe_write?
+static qint64 qt_write_loop(int fd, const char *data, qint64 len)
+{
+ qint64 pos = 0;
+ while (pos < len) {
+ const qint64 ret = qt_safe_write(fd, data + pos, len - pos);
+ if (ret == -1) // e.g. partition full
+ return pos;
+ pos += ret;
+ }
+ return pos;
+}
+
+int QLockFilePrivate::checkFcntlWorksAfterFlock()
+{
+ QTemporaryFile file;
+ if (!file.open())
+ return -2;
+ const int fd = file.d_func()->engine()->handle();
+ if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs
+ return -3;
+ struct flock flockData;
+ flockData.l_type = F_WRLCK;
+ flockData.l_whence = SEEK_SET;
+ flockData.l_start = 0;
+ flockData.l_len = 0; // 0 = entire file
+ flockData.l_pid = getpid();
+ if (fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems
+ return 0;
+ return 1;
+}
+
+static QBasicAtomicInt fcntlOK = Q_BASIC_ATOMIC_INITIALIZER(-1);
+
+/*!
+ \internal
+ Checks that the OS isn't using POSIX locks to emulate flock().
+ Mac OS X is one of those.
+*/
+static bool fcntlWorksAfterFlock()
+{
+ int value = fcntlOK.load();
+ if (Q_UNLIKELY(value == -1)) {
+ value = QLockFilePrivate::checkFcntlWorksAfterFlock();
+ fcntlOK.store(value);
+ }
+ return value == 1;
+}
+
+static bool setNativeLocks(int fd)
+{
+ if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs
+ return false;
+ struct flock flockData;
+ flockData.l_type = F_WRLCK;
+ flockData.l_whence = SEEK_SET;
+ flockData.l_start = 0;
+ flockData.l_len = 0; // 0 = entire file
+ flockData.l_pid = getpid();
+ if (fcntlWorksAfterFlock() && fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems
+ return false;
+ return true;
+}
+
+QLockFile::LockError QLockFilePrivate::tryLock_sys()
+{
+ const QByteArray lockFileName = QFile::encodeName(fileName);
+ const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY | O_CREAT | O_EXCL, 0644);
+ if (fd < 0) {
+ switch (errno) {
+ case EEXIST:
+ return QLockFile::LockFailedError;
+ case EACCES:
+ case EROFS:
+ return QLockFile::PermissionError;
+ default:
+ return QLockFile::UnknownError;
+ }
+ }
+ // Ensure nobody else can delete the file while we have it
+ if (!setNativeLocks(fd))
+ qWarning() << "setNativeLocks failed:" << strerror(errno);
+
+ // We hold the lock, continue.
+ fileHandle = fd;
+
+ // Assemble data, to write in a single call to write
+ // (otherwise we'd have to check every write call)
+ QByteArray fileData;
+ fileData += QByteArray::number(QCoreApplication::applicationPid());
+ fileData += '\n';
+ fileData += qAppName().toUtf8();
+ fileData += '\n';
+ fileData += localHostName().toUtf8();
+ fileData += '\n';
+
+ QLockFile::LockError error = QLockFile::NoError;
+ if (qt_write_loop(fd, fileData.constData(), fileData.size()) < fileData.size())
+ error = QLockFile::UnknownError; // partition full
+ return error;
+}
+
+bool QLockFilePrivate::removeStaleLock()
+{
+ const QByteArray lockFileName = QFile::encodeName(fileName);
+ const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY, 0644);
+ if (fd < 0) // gone already?
+ return false;
+ bool success = setNativeLocks(fd) && (::unlink(lockFileName) == 0);
+ close(fd);
+ return success;
+}
+
+bool QLockFilePrivate::isApparentlyStale() const
+{
+ qint64 pid;
+ QString hostname, appname;
+ if (!getLockInfo(&pid, &hostname, &appname))
+ return false;
+ if (hostname == localHostName()) {
+ if (::kill(pid, 0) == -1 && errno == ESRCH)
+ return true; // PID doesn't exist anymore
+ }
+ const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime());
+ return staleLockTime > 0 && age > staleLockTime;
+}
+
+void QLockFile::unlock()
+{
+ Q_D(QLockFile);
+ if (!d->isLocked)
+ return;
+ close(d->fileHandle);
+ d->fileHandle = -1;
+ QFile::remove(d->fileName);
+ d->lockError = QLockFile::NoError;
+ d->isLocked = false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/io/qlockfile_win.cpp b/src/corelib/io/qlockfile_win.cpp
new file mode 100644
index 0000000000..b5f6d9f3da
--- /dev/null
+++ b/src/corelib/io/qlockfile_win.cpp
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qlockfile_p.h"
+#include "private/qfilesystementry_p.h"
+#include <qt_windows.h>
+
+#include "QtCore/qcoreapplication.h"
+#include "QtCore/qfileinfo.h"
+#include "QtCore/qdatetime.h"
+#include "QtCore/qdebug.h"
+
+QT_BEGIN_NAMESPACE
+
+QLockFile::LockError QLockFilePrivate::tryLock_sys()
+{
+ SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE };
+ const QFileSystemEntry fileEntry(fileName);
+ // When writing, allow others to read.
+ // When reading, QFile will allow others to read and write, all good.
+ // Adding FILE_SHARE_DELETE would allow forceful deletion of stale files,
+ // but Windows doesn't allow recreating it while this handle is open anyway,
+ // so this would only create confusion (can't lock, but no lock file to read from).
+ const DWORD dwShareMode = FILE_SHARE_READ;
+ HANDLE fh = CreateFile((const wchar_t*)fileEntry.nativeFilePath().utf16(),
+ GENERIC_WRITE,
+ dwShareMode,
+ &securityAtts,
+ CREATE_NEW, // error if already exists
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
+ if (fh == INVALID_HANDLE_VALUE) {
+ const DWORD lastError = GetLastError();
+ switch (lastError) {
+ case ERROR_SHARING_VIOLATION:
+ case ERROR_ALREADY_EXISTS:
+ case ERROR_FILE_EXISTS:
+ case ERROR_ACCESS_DENIED: // readonly file, or file still in use by another process. Assume the latter, since we don't create it readonly.
+ return QLockFile::LockFailedError;
+ default:
+ qWarning() << "Got unexpected locking error" << lastError;
+ return QLockFile::UnknownError;
+ }
+ }
+
+ // We hold the lock, continue.
+ fileHandle = fh;
+ // Assemble data, to write in a single call to write
+ // (otherwise we'd have to check every write call)
+ QByteArray fileData;
+ fileData += QByteArray::number(QCoreApplication::applicationPid());
+ fileData += '\n';
+ fileData += qAppName().toUtf8();
+ fileData += '\n';
+ //fileData += localHostname(); // gethostname requires winsock init, see QHostInfo...
+ fileData += '\n';
+ DWORD bytesWritten = 0;
+ QLockFile::LockError error = QLockFile::NoError;
+ if (!WriteFile(fh, fileData.constData(), fileData.size(), &bytesWritten, NULL) || !FlushFileBuffers(fh))
+ error = QLockFile::UnknownError; // partition full
+ return error;
+}
+
+bool QLockFilePrivate::removeStaleLock()
+{
+ // QFile::remove fails on Windows if the other process is still using the file, so it's not stale.
+ return QFile::remove(fileName);
+}
+
+bool QLockFilePrivate::isApparentlyStale() const
+{
+ qint64 pid;
+ QString hostname, appname;
+ if (!getLockInfo(&pid, &hostname, &appname))
+ return false;
+
+ HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
+ if (!procHandle)
+ return true;
+ // We got a handle but check if process is still alive
+ DWORD dwR = ::WaitForSingleObject(procHandle, 0);
+ ::CloseHandle(procHandle);
+ if (dwR == WAIT_TIMEOUT)
+ return true;
+ const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime());
+ return staleLockTime > 0 && age > staleLockTime;
+}
+
+void QLockFile::unlock()
+{
+ Q_D(QLockFile);
+ if (!d->isLocked)
+ return;
+ CloseHandle(d->fileHandle);
+ QFile::remove(d->fileName);
+ d->lockError = QLockFile::NoError;
+ d->isLocked = false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index 8409e7e479..3993cf5002 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -458,6 +458,9 @@ void QProcessPrivate::Channel::clear()
the program you want to run as arguments to start(). Arguments
are supplied as individual strings in a QStringList.
+ Alternatively, you can set the program to run with setProgram()
+ and setArguments(), and then call start() or open().
+
For example, the following code snippet runs the analog clock
example in the Fusion style on X11 platforms by passing strings
containing "-style" and "fusion" as two items in the list of
@@ -1946,6 +1949,58 @@ void QProcess::start(const QString &program, const QStringList &arguments, OpenM
return;
}
+ d->program = program;
+ d->arguments = arguments;
+
+ open(mode);
+}
+
+/*!
+ \since 5.1
+ \overload
+
+ Starts the program set by setProgram() with arguments set by setArguments().
+ The OpenMode is set to \a mode.
+
+ This method is a convenient alias to open().
+
+ \sa open(), setProgram(), setArguments()
+ */
+void QProcess::start(OpenMode mode)
+{
+ open(mode);
+}
+
+/*!
+ Starts the program set by setProgram() in a new process, if none is already
+ running, passing the command line arguments set by setArguments(). The OpenMode
+ is set to \a mode.
+
+ The QProcess object will immediately enter the Starting state. If the
+ process starts successfully, QProcess will emit started(); otherwise,
+ error() will be emitted. If the QProcess object is already running a
+ process, a warning may be printed at the console, the function will return false,
+ and the existing process will continue running.
+
+ \note Processes are started asynchronously, which means the started()
+ and error() signals may be delayed. Call waitForStarted() to make
+ sure the process has started (or has failed to start) and those signals
+ have been emitted. In this regard, a true return value merly means the process
+ was correcty initialized, not that the program was actually started.
+
+*/
+bool QProcess::open(OpenMode mode)
+{
+ Q_D(QProcess);
+ if (d->processState != NotRunning) {
+ qWarning("QProcess::start: Process is already running");
+ return false;
+ }
+ if (d->program.isEmpty()) {
+ qWarning("QProcess::start: program not set");
+ return false;
+ }
+
#if defined QPROCESS_DEBUG
qDebug() << "QProcess::start(" << program << ',' << arguments << ',' << mode << ')';
#endif
@@ -1967,14 +2022,13 @@ void QProcess::start(const QString &program, const QStringList &arguments, OpenM
d->stdoutChannel.closed = false;
d->stderrChannel.closed = false;
- d->program = program;
- d->arguments = arguments;
-
d->exitCode = 0;
d->exitStatus = NormalExit;
d->processError = QProcess::UnknownError;
d->errorString.clear();
d->startProcess();
+
+ return true;
}
@@ -2074,6 +2128,24 @@ QString QProcess::program() const
}
/*!
+ \since 5.1
+
+ Set the \a program to use when starting the process.
+ That function must be call before open()
+
+ \sa start(), setArguments(), program()
+*/
+void QProcess::setProgram(const QString &program)
+{
+ Q_D(QProcess);
+ if (d->processState != NotRunning) {
+ qWarning("QProcess::setProgram: Process is already running");
+ return;
+ }
+ d->program = program;
+}
+
+/*!
Returns the command line arguments the process was last started with.
\sa start()
@@ -2085,6 +2157,24 @@ QStringList QProcess::arguments() const
}
/*!
+ \since 5.1
+
+ Set the \a arguments to pass to the called program when starting the process.
+ That function must be call before open()
+
+ \sa start(), setProgram(), arguments()
+*/
+void QProcess::setArguments(const QStringList &arguments)
+{
+ Q_D(QProcess);
+ if (d->processState != NotRunning) {
+ qWarning("QProcess::setProgram: Process is already running");
+ return;
+ }
+ d->arguments = arguments;
+}
+
+/*!
Attempts to terminate the process.
The process may not exit as a result of calling this function (it is given
diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h
index 2c6746b0ab..29adf37f74 100644
--- a/src/corelib/io/qprocess.h
+++ b/src/corelib/io/qprocess.h
@@ -46,8 +46,6 @@
#include <QtCore/qstringlist.h>
#include <QtCore/qshareddata.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -138,8 +136,14 @@ public:
void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite);
void start(const QString &command, OpenMode mode = ReadWrite);
+ void start(OpenMode mode = ReadWrite);
+ bool open(OpenMode mode = ReadWrite) Q_DECL_OVERRIDE;
+
QString program() const;
+ void setProgram(const QString &program);
+
QStringList arguments() const;
+ void setArguments(const QStringList & arguments);
ProcessChannelMode readChannelMode() const;
void setReadChannelMode(ProcessChannelMode mode);
@@ -261,6 +265,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QPROCESS_H
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index e159bf8f30..997848851d 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -328,16 +328,18 @@ void QProcessManager::unlock()
mutex.unlock();
}
-static void qt_create_pipe(int *pipe)
+static int qt_create_pipe(int *pipe)
{
if (pipe[0] != -1)
qt_safe_close(pipe[0]);
if (pipe[1] != -1)
qt_safe_close(pipe[1]);
- if (qt_safe_pipe(pipe) != 0) {
+ int pipe_ret = qt_safe_pipe(pipe);
+ if (pipe_ret != 0) {
qWarning("QProcessPrivate::createPipe: Cannot create pipe %p: %s",
pipe, qPrintable(qt_error_string(errno)));
}
+ return pipe_ret;
}
void QProcessPrivate::destroyPipe(int *pipe)
@@ -374,7 +376,8 @@ bool QProcessPrivate::createChannel(Channel &channel)
if (channel.type == Channel::Normal) {
// we're piping this channel to our own process
- qt_create_pipe(channel.pipe);
+ if (qt_create_pipe(channel.pipe) != 0)
+ return false;
// create the socket notifiers
if (threadData->eventDispatcher) {
@@ -458,7 +461,8 @@ bool QProcessPrivate::createChannel(Channel &channel)
Q_ASSERT(sink->pipe[0] == INVALID_Q_PIPE && sink->pipe[1] == INVALID_Q_PIPE);
Q_PIPE pipe[2] = { -1, -1 };
- qt_create_pipe(pipe);
+ if (qt_create_pipe(pipe) != 0)
+ return false;
sink->pipe[0] = pipe[0];
source->pipe[1] = pipe[1];
@@ -548,10 +552,15 @@ void QProcessPrivate::startProcess()
// Initialize pipes
if (!createChannel(stdinChannel) ||
!createChannel(stdoutChannel) ||
- !createChannel(stderrChannel))
+ !createChannel(stderrChannel) ||
+ qt_create_pipe(childStartedPipe) != 0 ||
+ qt_create_pipe(deathPipe) != 0) {
+ processError = QProcess::FailedToStart;
+ q->setErrorString(qt_error_string(errno));
+ emit q->error(processError);
+ cleanup();
return;
- qt_create_pipe(childStartedPipe);
- qt_create_pipe(deathPipe);
+ }
if (threadData->eventDispatcher) {
startupSocketNotifier = new QSocketNotifier(childStartedPipe[0],
@@ -1001,9 +1010,9 @@ static int select_msecs(int nfds, fd_set *fdread, fd_set *fdwrite, int timeout)
if (timeout < 0)
return qt_safe_select(nfds, fdread, fdwrite, 0, 0);
- struct timeval tv;
+ struct timespec tv;
tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
+ tv.tv_nsec = (timeout % 1000) * 1000 * 1000;
return qt_safe_select(nfds, fdread, fdwrite, 0, &tv);
}
@@ -1339,10 +1348,15 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a
// To catch the startup of the child
int startedPipe[2];
- qt_safe_pipe(startedPipe);
+ if (qt_safe_pipe(startedPipe) != 0)
+ return false;
// To communicate the pid of the child
int pidPipe[2];
- qt_safe_pipe(pidPipe);
+ if (qt_safe_pipe(pidPipe) != 0) {
+ qt_safe_close(startedPipe[0]);
+ qt_safe_close(startedPipe[1]);
+ return false;
+ }
pid_t childPid = fork();
if (childPid == 0) {
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index 0ce3ce3611..7dfc9b977c 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -62,15 +62,6 @@
//#define DEBUG_RESOURCE_MATCH
-#if defined(Q_OS_VXWORKS)
-# if defined(m_data)
-# undef m_data
-# endif
-# if defined(m_len)
-# undef m_len
-# endif
-#endif
-
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/io/qresource.h b/src/corelib/io/qresource.h
index 1623792e0b..88467bd53b 100644
--- a/src/corelib/io/qresource.h
+++ b/src/corelib/io/qresource.h
@@ -47,8 +47,6 @@
#include <QtCore/qstringlist.h>
#include <QtCore/qlist.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -98,6 +96,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QRESOURCE_H
diff --git a/src/corelib/io/qsavefile.cpp b/src/corelib/io/qsavefile.cpp
new file mode 100644
index 0000000000..fee6a4c4d8
--- /dev/null
+++ b/src/corelib/io/qsavefile.cpp
@@ -0,0 +1,316 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 David Faure <faure@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformdefs.h"
+#include "qsavefile.h"
+#include "private/qsavefile_p.h"
+#include "qfileinfo.h"
+#include "qabstractfileengine_p.h"
+#include "qdebug.h"
+#include "qtemporaryfile.h"
+#include "private/qiodevice_p.h"
+#include "private/qtemporaryfile_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QSaveFilePrivate::QSaveFilePrivate()
+ : writeError(QFileDevice::NoError)
+{
+}
+
+QSaveFilePrivate::~QSaveFilePrivate()
+{
+}
+
+/*!
+ \class QSaveFile
+ \inmodule QtCore
+ \brief The QSaveFile class provides an interface for safely writing to files.
+
+ \ingroup io
+
+ \reentrant
+
+ \since 5.1
+
+ QSaveFile is an I/O device for writing text and binary files, without losing
+ existing data if the writing operation fails.
+
+ While writing, the contents will be written to a temporary file, and if
+ no error happened, commit() will move it to the final file. This ensures that
+ no data at the final file is lost in case an error happens while writing,
+ and no partially-written file is ever present at the final location. Always
+ use QSaveFile when saving entire documents to disk.
+
+ QSaveFile automatically detects errors while writing, such as the full partition
+ situation, where write() cannot write all the bytes. It will remember that
+ an error happened, and will discard the temporary file in commit().
+
+ Much like with QFile, the file is opened with open(). Data is usually read
+ and written using QDataStream or QTextStream, but you can also call the
+ QIODevice-inherited functions read(), readLine(), readAll(), write().
+
+ Unlike QFile, calling close() is not allowed. commit() replaces it. If commit()
+ was not called and the QSaveFile instance is destroyed, the temporary file is
+ discarded.
+
+ To abort saving due to an application error, call cancelWriting(), so that
+ even a call to commit() later on will not save.
+
+ \sa QTextStream, QDataStream, QFileInfo, QDir, QFile, QTemporaryFile
+*/
+
+/*!
+ Constructs a new file object with the given \a parent.
+*/
+QSaveFile::QSaveFile(QObject *parent)
+ : QFileDevice(*new QSaveFilePrivate, parent)
+{
+}
+/*!
+ Constructs a new file object to represent the file with the given \a name.
+*/
+QSaveFile::QSaveFile(const QString &name)
+ : QFileDevice(*new QSaveFilePrivate, 0)
+{
+ Q_D(QSaveFile);
+ d->fileName = name;
+}
+/*!
+ Constructs a new file object with the given \a parent to represent the
+ file with the specified \a name.
+*/
+QSaveFile::QSaveFile(const QString &name, QObject *parent)
+ : QFileDevice(*new QSaveFilePrivate, parent)
+{
+ Q_D(QSaveFile);
+ d->fileName = name;
+}
+
+/*!
+ Destroys the file object, discarding the saved contents unless commit() was called.
+*/
+QSaveFile::~QSaveFile()
+{
+ Q_D(QSaveFile);
+ QFileDevice::close();
+ if (d->fileEngine) {
+ d->fileEngine->remove();
+ delete d->fileEngine;
+ d->fileEngine = 0;
+ }
+}
+
+/*!
+ Returns the name set by setFileName() or to the QSaveFile
+ constructor.
+
+ \sa setFileName()
+*/
+QString QSaveFile::fileName() const
+{
+ return d_func()->fileName;
+}
+
+/*!
+ Sets the \a name of the file. The name can have no path, a
+ relative path, or an absolute path.
+
+ \sa QFile::setFileName(), fileName()
+*/
+void QSaveFile::setFileName(const QString &name)
+{
+ d_func()->fileName = name;
+}
+
+/*!
+ Opens the file using OpenMode \a mode, returning true if successful;
+ otherwise false.
+
+ Important: the \a mode must include QIODevice::WriteOnly.
+ It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.
+
+ QIODevice::ReadWrite and QIODevice::Append are not supported at the moment.
+
+ \sa QIODevice::OpenMode, setFileName()
+*/
+bool QSaveFile::open(OpenMode mode)
+{
+ Q_D(QSaveFile);
+ if (isOpen()) {
+ qWarning("QSaveFile::open: File (%s) already open", qPrintable(fileName()));
+ return false;
+ }
+ unsetError();
+ if ((mode & (ReadOnly | WriteOnly)) == 0) {
+ qWarning("QSaveFile::open: Open mode not specified");
+ return false;
+ }
+ // In the future we could implement ReadWrite by copying from the existing file to the temp file...
+ if ((mode & ReadOnly) || (mode & Append)) {
+ qWarning("QSaveFile::open: Unsupported open mode 0x%x", int(mode));
+ return false;
+ }
+
+ // check if existing file is writable
+ QFileInfo existingFile(d->fileName);
+ if (existingFile.exists() && !existingFile.isWritable()) {
+ d->setError(QFileDevice::WriteError, QSaveFile::tr("Existing file %1 is not writable").arg(d->fileName));
+ d->writeError = QFileDevice::WriteError;
+ return false;
+ }
+ d->fileEngine = new QTemporaryFileEngine(d->fileName);
+ // Same as in QFile: QIODevice provides the buffering, so there's no need to request it from the file engine.
+ if (!d->fileEngine->open(mode | QIODevice::Unbuffered)) {
+ QFileDevice::FileError err = d->fileEngine->error();
+ if (err == QFileDevice::UnspecifiedError)
+ err = QFileDevice::OpenError;
+ d->setError(err, d->fileEngine->errorString());
+ delete d->fileEngine;
+ d->fileEngine = 0;
+ return false;
+ }
+
+ QFileDevice::open(mode);
+ if (existingFile.exists())
+ setPermissions(existingFile.permissions());
+ return true;
+}
+
+/*!
+ \reimp
+ This method has been made private so that it cannot be called, in order to prevent mistakes.
+ In order to finish writing the file, call commit().
+ If instead you want to abort writing, call cancelWriting().
+*/
+void QSaveFile::close()
+{
+ qFatal("QSaveFile::close called");
+}
+
+/*!
+ Commits the changes to disk, if all previous writes were successful.
+
+ It is mandatory to call this at the end of the saving operation, otherwise the file will be
+ discarded.
+
+ If an error happened during writing, deletes the temporary file and returns false.
+ Otherwise, renames it to the final fileName and returns true on success.
+ Finally, closes the device.
+
+ \sa cancelWriting()
+*/
+bool QSaveFile::commit()
+{
+ Q_D(QSaveFile);
+ if (!d->fileEngine)
+ return false;
+
+ if (!isOpen()) {
+ qWarning("QSaveFile::commit: File (%s) is not open", qPrintable(fileName()));
+ return false;
+ }
+ QFileDevice::close(); // calls flush()
+
+ // Sync to disk if possible. Ignore errors (e.g. not supported).
+ d->fileEngine->syncToDisk();
+
+ if (d->writeError != QFileDevice::NoError) {
+ d->fileEngine->remove();
+ d->writeError = QFileDevice::NoError;
+ delete d->fileEngine;
+ d->fileEngine = 0;
+ return false;
+ }
+ // atomically replace old file with new file
+ // Can't use QFile::rename for that, must use the file engine directly
+ Q_ASSERT(d->fileEngine);
+ if (!d->fileEngine->renameOverwrite(d->fileName)) {
+ d->setError(d->fileEngine->error(), d->fileEngine->errorString());
+ d->fileEngine->remove();
+ delete d->fileEngine;
+ d->fileEngine = 0;
+ return false;
+ }
+ delete d->fileEngine;
+ d->fileEngine = 0;
+ return true;
+}
+
+/*!
+ Cancels writing the new file.
+
+ If the application changes its mind while saving, it can call cancelWriting(),
+ which sets an error code so that commit() will discard the temporary file.
+
+ Alternatively, it can simply make sure not to call commit().
+
+ Further write operations are possible after calling this method, but none
+ of it will have any effect, the written file will be discarded.
+
+ \sa commit()
+*/
+void QSaveFile::cancelWriting()
+{
+ Q_D(QSaveFile);
+ if (!isOpen())
+ return;
+ d->setError(QFileDevice::WriteError, QSaveFile::tr("Writing canceled by application"));
+ d->writeError = QFileDevice::WriteError;
+}
+
+/*!
+ \reimp
+*/
+qint64 QSaveFile::writeData(const char *data, qint64 len)
+{
+ Q_D(QSaveFile);
+ if (d->writeError != QFileDevice::NoError)
+ return -1;
+
+ const qint64 ret = QFileDevice::writeData(data, len);
+
+ if (d->error != QFileDevice::NoError)
+ d->writeError = d->error;
+ return ret;
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/io/qsavefile.h b/src/corelib/io/qsavefile.h
new file mode 100644
index 0000000000..32af4a708e
--- /dev/null
+++ b/src/corelib/io/qsavefile.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 David Faure <faure@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSAVEFILE_H
+#define QSAVEFILE_H
+
+#include <QtCore/qfiledevice.h>
+#include <QtCore/qstring.h>
+
+#ifdef open
+#error qsavefile.h must be included before any header file that defines open
+#endif
+
+QT_BEGIN_NAMESPACE
+
+
+class QAbstractFileEngine;
+class QSaveFilePrivate;
+
+class Q_CORE_EXPORT QSaveFile : public QFileDevice
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QSaveFile)
+
+public:
+
+ explicit QSaveFile(const QString &name);
+ explicit QSaveFile(QObject *parent = 0);
+ explicit QSaveFile(const QString &name, QObject *parent);
+ ~QSaveFile();
+
+ QString fileName() const Q_DECL_OVERRIDE;
+ void setFileName(const QString &name);
+
+ bool open(OpenMode flags) Q_DECL_OVERRIDE;
+ bool commit();
+
+ void cancelWriting();
+
+protected:
+ qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+
+private:
+ void close() Q_DECL_OVERRIDE;
+
+private:
+ Q_DISABLE_COPY(QSaveFile)
+};
+
+QT_END_NAMESPACE
+
+#endif // QSAVEFILE_H
diff --git a/src/corelib/io/qsavefile_p.h b/src/corelib/io/qsavefile_p.h
new file mode 100644
index 0000000000..27e687835b
--- /dev/null
+++ b/src/corelib/io/qsavefile_p.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 David Faure <faure@kde.org>
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSAVEFILE_P_H
+#define QSAVEFILE_P_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 "private/qfiledevice_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QSaveFilePrivate : public QFileDevicePrivate
+{
+ Q_DECLARE_PUBLIC(QSaveFile)
+
+protected:
+ QSaveFilePrivate();
+ ~QSaveFilePrivate();
+
+ QString fileName;
+
+ QFileDevice::FileError writeError;
+};
+
+QT_END_NAMESPACE
+
+#endif // QSAVEFILE_P_H
diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h
index 99b8ac108f..a720b3d709 100644
--- a/src/corelib/io/qsettings.h
+++ b/src/corelib/io/qsettings.h
@@ -47,8 +47,6 @@
#include <QtCore/qstring.h>
#include <QtCore/qscopedpointer.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
QT_END_NAMESPACE
@@ -198,6 +196,4 @@ QT_END_NAMESPACE
#endif // QT_NO_SETTINGS
-QT_END_HEADER
-
#endif // QSETTINGS_H
diff --git a/src/corelib/io/qstandardpaths.h b/src/corelib/io/qstandardpaths.h
index 9b95d26ce1..2376b7d6c8 100644
--- a/src/corelib/io/qstandardpaths.h
+++ b/src/corelib/io/qstandardpaths.h
@@ -44,8 +44,6 @@
#include <QtCore/qstringlist.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -102,6 +100,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QSTANDARDPATHS_H
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index 6782fcb986..755c31f371 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -52,7 +52,7 @@
#endif
#include <stdlib.h> // mkdtemp
-#if defined(Q_OS_QNX) || defined(Q_OS_WIN)
+#if defined(Q_OS_QNX) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
#include <private/qfilesystemengine_p.h>
#endif
@@ -94,9 +94,9 @@ static QString defaultTemplateName()
return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX");
}
-#if defined(Q_OS_QNX ) || defined(Q_OS_WIN)
-static char *mkdtemp(char *templateName)
+static char *q_mkdtemp(char *templateName)
{
+#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
const size_t length = strlen(templateName);
@@ -137,17 +137,17 @@ static char *mkdtemp(char *templateName)
}
}
return 0;
-}
-#elif defined(Q_OS_LINUX_ANDROID)
-extern char *mkdtemp(char *);
+#else
+ return mkdtemp(templateName);
#endif
+}
void QTemporaryDirPrivate::create(const QString &templateName)
{
QByteArray buffer = QFile::encodeName(templateName);
if (!buffer.endsWith("XXXXXX"))
buffer += "XXXXXX";
- if (mkdtemp(buffer.data())) { // modifies buffer
+ if (q_mkdtemp(buffer.data())) { // modifies buffer
success = true;
path = QFile::decodeName(buffer.constData());
}
diff --git a/src/corelib/io/qtemporarydir.h b/src/corelib/io/qtemporarydir.h
index b22c8f9329..47252cb5e5 100644
--- a/src/corelib/io/qtemporarydir.h
+++ b/src/corelib/io/qtemporarydir.h
@@ -45,8 +45,6 @@
#include <QtCore/qdir.h>
#include <QtCore/QScopedPointer>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -79,6 +77,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QTEMPORARYDIR_H
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp
index 9408727d25..d3a6e3c238 100644
--- a/src/corelib/io/qtemporaryfile.cpp
+++ b/src/corelib/io/qtemporaryfile.cpp
@@ -44,10 +44,9 @@
#ifndef QT_NO_TEMPORARYFILE
#include "qplatformdefs.h"
+#include "private/qtemporaryfile_p.h"
#include "private/qfile_p.h"
-#include "private/qfsfileengine_p.h"
#include "private/qsystemerror_p.h"
-#include "private/qfilesystemengine_p.h"
#if !defined(Q_OS_WIN)
#include "private/qcore_unix_p.h" // overrides QT_OPEN
@@ -218,36 +217,6 @@ static bool createFileFromTemplate(NativeFileHandle &file,
}
//************* QTemporaryFileEngine
-class QTemporaryFileEngine : public QFSFileEngine
-{
- Q_DECLARE_PRIVATE(QFSFileEngine)
-public:
- QTemporaryFileEngine(const QString &file, bool fileIsTemplate = true)
- : QFSFileEngine(), filePathIsTemplate(fileIsTemplate),
- filePathWasTemplate(fileIsTemplate)
- {
- Q_D(QFSFileEngine);
- d->fileEntry = QFileSystemEntry(file);
-
- if (!filePathIsTemplate)
- QFSFileEngine::setFileName(file);
- }
-
- ~QTemporaryFileEngine();
-
- bool isReallyOpen();
- void setFileName(const QString &file);
- void setFileTemplate(const QString &fileTemplate);
-
- bool open(QIODevice::OpenMode flags);
- bool remove();
- bool rename(const QString &newName);
- bool close();
-
- bool filePathIsTemplate;
- bool filePathWasTemplate;
-};
-
QTemporaryFileEngine::~QTemporaryFileEngine()
{
QFSFileEngine::close();
@@ -398,6 +367,12 @@ bool QTemporaryFileEngine::rename(const QString &newName)
return QFSFileEngine::rename(newName);
}
+bool QTemporaryFileEngine::renameOverwrite(const QString &newName)
+{
+ QFSFileEngine::close();
+ return QFSFileEngine::renameOverwrite(newName);
+}
+
bool QTemporaryFileEngine::close()
{
// Don't close the file, just seek to the front.
@@ -407,19 +382,6 @@ bool QTemporaryFileEngine::close()
}
//************* QTemporaryFilePrivate
-class QTemporaryFilePrivate : public QFilePrivate
-{
- Q_DECLARE_PUBLIC(QTemporaryFile)
-
-protected:
- QTemporaryFilePrivate();
- ~QTemporaryFilePrivate();
-
- QAbstractFileEngine *engine() const;
-
- bool autoRemove;
- QString templateName;
-};
QTemporaryFilePrivate::QTemporaryFilePrivate() : autoRemove(true)
{
@@ -440,7 +402,7 @@ QAbstractFileEngine *QTemporaryFilePrivate::engine() const
return fileEngine;
}
-static QString defaultTemplateName()
+QString QTemporaryFilePrivate::defaultTemplateName()
{
QString baseName;
#if defined(QT_BUILD_CORE_LIB)
@@ -506,7 +468,7 @@ QTemporaryFile::QTemporaryFile()
: QFile(*new QTemporaryFilePrivate)
{
Q_D(QTemporaryFile);
- d->templateName = defaultTemplateName();
+ d->templateName = QTemporaryFilePrivate::defaultTemplateName();
}
QTemporaryFile::QTemporaryFile(const QString &templateName)
@@ -529,7 +491,7 @@ QTemporaryFile::QTemporaryFile()
: QFile(*new QTemporaryFilePrivate, 0)
{
Q_D(QTemporaryFile);
- d->templateName = defaultTemplateName();
+ d->templateName = QTemporaryFilePrivate::defaultTemplateName();
}
/*!
@@ -565,7 +527,7 @@ QTemporaryFile::QTemporaryFile(QObject *parent)
: QFile(*new QTemporaryFilePrivate, parent)
{
Q_D(QTemporaryFile);
- d->templateName = defaultTemplateName();
+ d->templateName = QTemporaryFilePrivate::defaultTemplateName();
}
/*!
diff --git a/src/corelib/io/qtemporaryfile.h b/src/corelib/io/qtemporaryfile.h
index b497d9de93..09aa53c33b 100644
--- a/src/corelib/io/qtemporaryfile.h
+++ b/src/corelib/io/qtemporaryfile.h
@@ -49,14 +49,13 @@
#error qtemporaryfile.h must be included before any header file that defines open
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
#ifndef QT_NO_TEMPORARYFILE
class QTemporaryFilePrivate;
+class QLockFilePrivate;
class Q_CORE_EXPORT QTemporaryFile : public QFile
{
@@ -98,6 +97,7 @@ protected:
private:
friend class QFile;
+ friend class QLockFilePrivate;
Q_DISABLE_COPY(QTemporaryFile)
};
@@ -105,6 +105,4 @@ private:
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QTEMPORARYFILE_H
diff --git a/src/corelib/io/qtemporaryfile_p.h b/src/corelib/io/qtemporaryfile_p.h
new file mode 100644
index 0000000000..d274f60ecc
--- /dev/null
+++ b/src/corelib/io/qtemporaryfile_p.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTEMPORARYFILE_P_H
+#define QTEMPORARYFILE_P_H
+
+#include "private/qfsfileengine_p.h"
+#include "private/qfilesystemengine_p.h"
+#include "private/qfile_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QTemporaryFilePrivate : public QFilePrivate
+{
+ Q_DECLARE_PUBLIC(QTemporaryFile)
+
+protected:
+ QTemporaryFilePrivate();
+ ~QTemporaryFilePrivate();
+
+ QAbstractFileEngine *engine() const;
+
+ bool autoRemove;
+ QString templateName;
+
+ static QString defaultTemplateName();
+
+ friend class QLockFilePrivate;
+};
+
+class QTemporaryFileEngine : public QFSFileEngine
+{
+ Q_DECLARE_PRIVATE(QFSFileEngine)
+public:
+ QTemporaryFileEngine(const QString &file, bool fileIsTemplate = true)
+ : QFSFileEngine(), filePathIsTemplate(fileIsTemplate),
+ filePathWasTemplate(fileIsTemplate)
+ {
+ Q_D(QFSFileEngine);
+ d->fileEntry = QFileSystemEntry(file);
+
+ if (!filePathIsTemplate)
+ QFSFileEngine::setFileName(file);
+ }
+
+ ~QTemporaryFileEngine();
+
+ bool isReallyOpen();
+ void setFileName(const QString &file);
+ void setFileTemplate(const QString &fileTemplate);
+
+ bool open(QIODevice::OpenMode flags);
+ bool remove();
+ bool rename(const QString &newName);
+ bool renameOverwrite(const QString &newName);
+ bool close();
+
+ bool filePathIsTemplate;
+ bool filePathWasTemplate;
+};
+
+QT_END_NAMESPACE
+
+#endif /* QTEMPORARYFILE_P_H */
+
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp
index 70c6eed9da..8459cdd158 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/io/qtextstream.cpp
@@ -226,12 +226,10 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384;
*/
#include "qtextstream.h"
+#include "private/qtextstream_p.h"
#include "qbuffer.h"
#include "qfile.h"
#include "qnumeric.h"
-#ifndef QT_NO_TEXTCODEC
-#include "qtextcodec.h"
-#endif
#ifndef Q_OS_WINCE
#include <locale.h>
#endif
@@ -315,119 +313,7 @@ QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_QOBJECT
-class QDeviceClosedNotifier : public QObject
-{
- Q_OBJECT
-public:
- inline QDeviceClosedNotifier()
- { }
-
- inline void setupDevice(QTextStream *stream, QIODevice *device)
- {
- disconnect();
- if (device)
- connect(device, SIGNAL(aboutToClose()), this, SLOT(flushStream()));
- this->stream = stream;
- }
-
-public Q_SLOTS:
- inline void flushStream() { stream->flush(); }
-
-private:
- QTextStream *stream;
-};
-#endif
-
//-------------------------------------------------------------------
-class QTextStreamPrivate
-{
- Q_DECLARE_PUBLIC(QTextStream)
-public:
- QTextStreamPrivate(QTextStream *q_ptr);
- ~QTextStreamPrivate();
- void reset();
-
- // device
- QIODevice *device;
-#ifndef QT_NO_QOBJECT
- QDeviceClosedNotifier deviceClosedNotifier;
-#endif
- bool deleteDevice;
-
- // string
- QString *string;
- int stringOffset;
- QIODevice::OpenMode stringOpenMode;
-
-#ifndef QT_NO_TEXTCODEC
- // codec
- QTextCodec *codec;
- QTextCodec::ConverterState readConverterState;
- QTextCodec::ConverterState writeConverterState;
- QTextCodec::ConverterState *readConverterSavedState;
- bool autoDetectUnicode;
-#endif
-
- // i/o
- enum TokenDelimiter {
- Space,
- NotSpace,
- EndOfLine
- };
-
- QString read(int maxlen);
- bool scan(const QChar **ptr, int *tokenLength,
- int maxlen, TokenDelimiter delimiter);
- inline const QChar *readPtr() const;
- inline void consumeLastToken();
- inline void consume(int nchars);
- void saveConverterState(qint64 newPos);
- void restoreToSavedConverterState();
- int lastTokenSize;
-
- // Return value type for getNumber()
- enum NumberParsingStatus {
- npsOk,
- npsMissingDigit,
- npsInvalidPrefix
- };
-
- inline bool getChar(QChar *ch);
- inline void ungetChar(QChar ch);
- NumberParsingStatus getNumber(qulonglong *l);
- bool getReal(double *f);
-
- inline void write(const QString &data);
- inline void putString(const QString &ch, bool number = false);
- void putNumber(qulonglong number, bool negative);
-
- // buffers
- bool fillReadBuffer(qint64 maxBytes = -1);
- void resetReadBuffer();
- void flushWriteBuffer();
- QString writeBuffer;
- QString readBuffer;
- int readBufferOffset;
- int readConverterSavedStateOffset; //the offset between readBufferStartDevicePos and that start of the buffer
- qint64 readBufferStartDevicePos;
-
- // streaming parameters
- int realNumberPrecision;
- int integerBase;
- int fieldWidth;
- QChar padChar;
- QTextStream::FieldAlignment fieldAlignment;
- QTextStream::RealNumberNotation realNumberNotation;
- QTextStream::NumberFlags numberFlags;
-
- // status
- QTextStream::Status status;
-
- QLocale locale;
-
- QTextStream *q_ptr;
-};
/*!
\internal
@@ -481,10 +367,7 @@ static void copyConverterStateHelper(QTextCodec::ConverterState *dest,
}
#endif
-/*!
- \internal
-*/
-void QTextStreamPrivate::reset()
+void QTextStreamPrivate::Params::reset()
{
realNumberPrecision = 6;
integerBase = 0;
@@ -493,6 +376,14 @@ void QTextStreamPrivate::reset()
fieldAlignment = QTextStream::AlignRight;
realNumberNotation = QTextStream::SmartNotation;
numberFlags = 0;
+}
+
+/*!
+ \internal
+*/
+void QTextStreamPrivate::reset()
+{
+ params.reset();
device = 0;
deleteDevice = false;
@@ -985,15 +876,17 @@ inline void QTextStreamPrivate::putString(const QString &s, bool number)
QString tmp = s;
// handle padding
- int padSize = fieldWidth - s.size();
+ int padSize = params.fieldWidth - s.size();
if (padSize > 0) {
- QString pad(padSize, padChar);
- if (fieldAlignment == QTextStream::AlignLeft) {
- tmp.append(QString(padSize, padChar));
- } else if (fieldAlignment == QTextStream::AlignRight
- || fieldAlignment == QTextStream::AlignAccountingStyle) {
- tmp.prepend(QString(padSize, padChar));
- if (fieldAlignment == QTextStream::AlignAccountingStyle && number) {
+ QString pad(padSize, params.padChar);
+ switch (params.fieldAlignment) {
+ case QTextStream::AlignLeft:
+ tmp.append(pad);
+ break;
+ case QTextStream::AlignRight:
+ case QTextStream::AlignAccountingStyle:
+ tmp.prepend(pad);
+ if (params.fieldAlignment == QTextStream::AlignAccountingStyle && number) {
const QChar sign = s.size() > 0 ? s.at(0) : QChar();
if (sign == locale.negativeSign() || sign == locale.positiveSign()) {
QChar *data = tmp.data();
@@ -1001,9 +894,11 @@ inline void QTextStreamPrivate::putString(const QString &s, bool number)
data[0] = sign;
}
}
- } else if (fieldAlignment == QTextStream::AlignCenter) {
- tmp.prepend(QString(padSize/2, padChar));
- tmp.append(QString(padSize - padSize/2, padChar));
+ break;
+ case QTextStream::AlignCenter:
+ tmp.prepend(QString(padSize/2, params.padChar));
+ tmp.append(QString(padSize - padSize/2, params.padChar));
+ break;
}
}
@@ -1175,13 +1070,7 @@ void QTextStream::reset()
{
Q_D(QTextStream);
- d->realNumberPrecision = 6;
- d->integerBase = 0;
- d->fieldWidth = 0;
- d->padChar = QLatin1Char(' ');
- d->fieldAlignment = QTextStream::AlignRight;
- d->realNumberNotation = QTextStream::SmartNotation;
- d->numberFlags = 0;
+ d->params.reset();
}
/*!
@@ -1400,7 +1289,7 @@ QString *QTextStream::string() const
void QTextStream::setFieldAlignment(FieldAlignment mode)
{
Q_D(QTextStream);
- d->fieldAlignment = mode;
+ d->params.fieldAlignment = mode;
}
/*!
@@ -1411,7 +1300,7 @@ void QTextStream::setFieldAlignment(FieldAlignment mode)
QTextStream::FieldAlignment QTextStream::fieldAlignment() const
{
Q_D(const QTextStream);
- return d->fieldAlignment;
+ return d->params.fieldAlignment;
}
/*!
@@ -1432,7 +1321,7 @@ QTextStream::FieldAlignment QTextStream::fieldAlignment() const
void QTextStream::setPadChar(QChar ch)
{
Q_D(QTextStream);
- d->padChar = ch;
+ d->params.padChar = ch;
}
/*!
@@ -1443,7 +1332,7 @@ void QTextStream::setPadChar(QChar ch)
QChar QTextStream::padChar() const
{
Q_D(const QTextStream);
- return d->padChar;
+ return d->params.padChar;
}
/*!
@@ -1461,7 +1350,7 @@ QChar QTextStream::padChar() const
void QTextStream::setFieldWidth(int width)
{
Q_D(QTextStream);
- d->fieldWidth = width;
+ d->params.fieldWidth = width;
}
/*!
@@ -1472,7 +1361,7 @@ void QTextStream::setFieldWidth(int width)
int QTextStream::fieldWidth() const
{
Q_D(const QTextStream);
- return d->fieldWidth;
+ return d->params.fieldWidth;
}
/*!
@@ -1486,7 +1375,7 @@ int QTextStream::fieldWidth() const
void QTextStream::setNumberFlags(NumberFlags flags)
{
Q_D(QTextStream);
- d->numberFlags = flags;
+ d->params.numberFlags = flags;
}
/*!
@@ -1497,7 +1386,7 @@ void QTextStream::setNumberFlags(NumberFlags flags)
QTextStream::NumberFlags QTextStream::numberFlags() const
{
Q_D(const QTextStream);
- return d->numberFlags;
+ return d->params.numberFlags;
}
/*!
@@ -1513,7 +1402,7 @@ QTextStream::NumberFlags QTextStream::numberFlags() const
void QTextStream::setIntegerBase(int base)
{
Q_D(QTextStream);
- d->integerBase = base;
+ d->params.integerBase = base;
}
/*!
@@ -1525,7 +1414,7 @@ void QTextStream::setIntegerBase(int base)
int QTextStream::integerBase() const
{
Q_D(const QTextStream);
- return d->integerBase;
+ return d->params.integerBase;
}
/*!
@@ -1539,7 +1428,7 @@ int QTextStream::integerBase() const
void QTextStream::setRealNumberNotation(RealNumberNotation notation)
{
Q_D(QTextStream);
- d->realNumberNotation = notation;
+ d->params.realNumberNotation = notation;
}
/*!
@@ -1550,7 +1439,7 @@ void QTextStream::setRealNumberNotation(RealNumberNotation notation)
QTextStream::RealNumberNotation QTextStream::realNumberNotation() const
{
Q_D(const QTextStream);
- return d->realNumberNotation;
+ return d->params.realNumberNotation;
}
/*!
@@ -1567,10 +1456,10 @@ void QTextStream::setRealNumberPrecision(int precision)
Q_D(QTextStream);
if (precision < 0) {
qWarning("QTextStream::setRealNumberPrecision: Invalid precision (%d)", precision);
- d->realNumberPrecision = 6;
+ d->params.realNumberPrecision = 6;
return;
}
- d->realNumberPrecision = precision;
+ d->params.realNumberPrecision = precision;
}
/*!
@@ -1582,7 +1471,7 @@ void QTextStream::setRealNumberPrecision(int precision)
int QTextStream::realNumberPrecision() const
{
Q_D(const QTextStream);
- return d->realNumberPrecision;
+ return d->params.realNumberPrecision;
}
/*!
@@ -1722,7 +1611,7 @@ QTextStreamPrivate::NumberParsingStatus QTextStreamPrivate::getNumber(qulonglong
consumeLastToken();
// detect int encoding
- int base = integerBase;
+ int base = params.integerBase;
if (base == 0) {
QChar ch;
if (!getChar(&ch))
@@ -2300,6 +2189,7 @@ void QTextStreamPrivate::putNumber(qulonglong number, bool negative)
QString result;
unsigned flags = 0;
+ const QTextStream::NumberFlags numberFlags = params.numberFlags;
if (numberFlags & QTextStream::ShowBase)
flags |= QLocalePrivate::ShowBase;
if (numberFlags & QTextStream::ForceSign)
@@ -2315,7 +2205,7 @@ void QTextStreamPrivate::putNumber(qulonglong number, bool negative)
flags |= QLocalePrivate::ThousandsGroup;
const QLocalePrivate *dd = locale.d;
- int base = integerBase ? integerBase : 10;
+ int base = params.integerBase ? params.integerBase : 10;
if (negative && base == 10) {
result = dd->longLongToString(-static_cast<qlonglong>(number), -1,
base, -1, flags);
@@ -2330,7 +2220,7 @@ void QTextStreamPrivate::putNumber(qulonglong number, bool negative)
result = dd->unsLongLongToString(number, -1, base, -1, flags);
// workaround for backward compatibility - in octal form with
// ShowBase flag set zero should be written as '00'
- if (number == 0 && base == 8 && numberFlags & QTextStream::ShowBase
+ if (number == 0 && base == 8 && params.numberFlags & QTextStream::ShowBase
&& result == QLatin1String("0")) {
result.prepend(QLatin1Char('0'));
}
@@ -2524,7 +2414,7 @@ QTextStream &QTextStream::operator<<(double f)
flags |= QLocalePrivate::Alternate;
const QLocalePrivate *dd = d->locale.d;
- QString num = dd->doubleToString(f, d->realNumberPrecision, form, -1, flags);
+ QString num = dd->doubleToString(f, d->params.realNumberPrecision, form, -1, flags);
d->putString(num, true);
return *this;
}
@@ -2605,13 +2495,13 @@ QTextStream &QTextStream::operator<<(const void *ptr)
{
Q_D(QTextStream);
CHECK_VALID_STREAM(*this);
- int oldBase = d->integerBase;
- NumberFlags oldFlags = d->numberFlags;
- d->integerBase = 16;
- d->numberFlags |= ShowBase;
+ const int oldBase = d->params.integerBase;
+ const NumberFlags oldFlags = d->params.numberFlags;
+ d->params.integerBase = 16;
+ d->params.numberFlags |= ShowBase;
d->putNumber(reinterpret_cast<quintptr>(ptr), false);
- d->integerBase = oldBase;
- d->numberFlags = oldFlags;
+ d->params.integerBase = oldBase;
+ d->params.numberFlags = oldFlags;
return *this;
}
@@ -3130,7 +3020,3 @@ QLocale QTextStream::locale() const
QT_END_NAMESPACE
-#ifndef QT_NO_QOBJECT
-#include "qtextstream.moc"
-#endif
-
diff --git a/src/corelib/io/qtextstream.h b/src/corelib/io/qtextstream.h
index 3c25e0587a..6d143bdca7 100644
--- a/src/corelib/io/qtextstream.h
+++ b/src/corelib/io/qtextstream.h
@@ -54,8 +54,6 @@
#error qtextstream.h must be included before any header file that defines Status
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -194,6 +192,7 @@ public:
private:
Q_DISABLE_COPY(QTextStream)
+ friend class QDebugStateSaverPrivate;
QScopedPointer<QTextStreamPrivate> d_ptr;
};
@@ -284,6 +283,4 @@ inline QTextStreamManipulator qSetRealNumberPrecision(int precision)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QTEXTSTREAM_H
diff --git a/src/corelib/io/qtextstream_p.h b/src/corelib/io/qtextstream_p.h
new file mode 100644
index 0000000000..d5d5288426
--- /dev/null
+++ b/src/corelib/io/qtextstream_p.h
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTEXTSTREAM_P_H
+#define QTEXTSTREAM_P_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 "qtextstream.h"
+#ifndef QT_NO_TEXTCODEC
+#include "qtextcodec.h"
+#endif
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_NO_QOBJECT
+class QDeviceClosedNotifier : public QObject
+{
+ Q_OBJECT
+public:
+ inline QDeviceClosedNotifier()
+ { }
+
+ inline void setupDevice(QTextStream *stream, QIODevice *device)
+ {
+ disconnect();
+ if (device)
+ connect(device, SIGNAL(aboutToClose()), this, SLOT(flushStream()));
+ this->stream = stream;
+ }
+
+public Q_SLOTS:
+ inline void flushStream() { stream->flush(); }
+
+private:
+ QTextStream *stream;
+};
+#endif
+
+class QTextStreamPrivate
+{
+ Q_DECLARE_PUBLIC(QTextStream)
+public:
+ QTextStreamPrivate(QTextStream *q_ptr);
+ ~QTextStreamPrivate();
+ void reset();
+
+ // device
+ QIODevice *device;
+#ifndef QT_NO_QOBJECT
+ QDeviceClosedNotifier deviceClosedNotifier;
+#endif
+ bool deleteDevice;
+
+ // string
+ QString *string;
+ int stringOffset;
+ QIODevice::OpenMode stringOpenMode;
+
+#ifndef QT_NO_TEXTCODEC
+ // codec
+ QTextCodec *codec;
+ QTextCodec::ConverterState readConverterState;
+ QTextCodec::ConverterState writeConverterState;
+ QTextCodec::ConverterState *readConverterSavedState;
+ bool autoDetectUnicode;
+#endif
+
+ // i/o
+ enum TokenDelimiter {
+ Space,
+ NotSpace,
+ EndOfLine
+ };
+
+ QString read(int maxlen);
+ bool scan(const QChar **ptr, int *tokenLength,
+ int maxlen, TokenDelimiter delimiter);
+ inline const QChar *readPtr() const;
+ inline void consumeLastToken();
+ inline void consume(int nchars);
+ void saveConverterState(qint64 newPos);
+ void restoreToSavedConverterState();
+ int lastTokenSize;
+
+ // Return value type for getNumber()
+ enum NumberParsingStatus {
+ npsOk,
+ npsMissingDigit,
+ npsInvalidPrefix
+ };
+
+ inline bool getChar(QChar *ch);
+ inline void ungetChar(QChar ch);
+ NumberParsingStatus getNumber(qulonglong *l);
+ bool getReal(double *f);
+
+ inline void write(const QString &data);
+ inline void putString(const QString &ch, bool number = false);
+ void putNumber(qulonglong number, bool negative);
+
+ // buffers
+ bool fillReadBuffer(qint64 maxBytes = -1);
+ void resetReadBuffer();
+ void flushWriteBuffer();
+ QString writeBuffer;
+ QString readBuffer;
+ int readBufferOffset;
+ int readConverterSavedStateOffset; //the offset between readBufferStartDevicePos and that start of the buffer
+ qint64 readBufferStartDevicePos;
+
+ // streaming parameters
+ class Params
+ {
+ public:
+ void reset();
+
+ int realNumberPrecision;
+ int integerBase;
+ int fieldWidth;
+ QChar padChar;
+ QTextStream::FieldAlignment fieldAlignment;
+ QTextStream::RealNumberNotation realNumberNotation;
+ QTextStream::NumberFlags numberFlags;
+ };
+ Params params;
+
+ // status
+ QTextStream::Status status;
+
+ QLocale locale;
+
+ QTextStream *q_ptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QTEXTSTREAM_P_H
diff --git a/src/corelib/io/qtldurl.cpp b/src/corelib/io/qtldurl.cpp
index 436e6a4568..dd4301e9f1 100644
--- a/src/corelib/io/qtldurl.cpp
+++ b/src/corelib/io/qtldurl.cpp
@@ -51,12 +51,22 @@ QT_BEGIN_NAMESPACE
static bool containsTLDEntry(const QString &entry)
{
int index = qt_hash(entry) % tldCount;
- int currentDomainIndex = tldIndices[index];
- while (currentDomainIndex < tldIndices[index+1]) {
- QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex);
+
+ // select the right chunk from the big table
+ short chunk = 0;
+ uint chunkIndex = tldIndices[index], offset = 0;
+ while (tldIndices[index] >= tldChunks[chunk] && chunk < tldChunkCount) {
+ chunkIndex -= tldChunks[chunk];
+ offset += tldChunks[chunk];
+ chunk++;
+ }
+
+ // check all the entries from the given index
+ while (chunkIndex < tldIndices[index+1] - offset) {
+ QString currentEntry = QString::fromUtf8(tldData[chunk] + chunkIndex);
if (currentEntry == entry)
return true;
- currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0
+ chunkIndex += qstrlen(tldData[chunk] + chunkIndex) + 1; // +1 for the ending \0
}
return false;
}
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 7ff23d931c..c71bb3afac 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -333,11 +333,6 @@ static inline QString ftpScheme()
return QStringLiteral("ftp");
}
-static inline QString httpScheme()
-{
- return QStringLiteral("http");
-}
-
static inline QString fileScheme()
{
return QStringLiteral("file");
@@ -660,7 +655,7 @@ static const ushort encodedFragmentActions[] = {
encode(']'), // 6
0
};
-static const ushort * const decodedFragmentInUrlActions = 0;
+//static const ushort * const decodedFragmentInUrlActions = 0;
static const ushort * const decodedFragmentInIsolationActions = 0;
// the query is handled specially: the decodedQueryXXX tables are run with
@@ -3765,6 +3760,37 @@ QString QUrl::errorString() const
}
/*!
+ \since 5.1
+
+ Converts a list of \a urls into a list of QStrings, using toString(\a options).
+*/
+QStringList QUrl::toStringList(const QList<QUrl> &urls, FormattingOptions options)
+{
+ QStringList lst;
+ lst.reserve(urls.size());
+ foreach (const QUrl &url, urls)
+ lst.append(url.toString(options));
+ return lst;
+
+}
+
+/*!
+ \since 5.1
+
+ Converts a list of strings representing \a urls into a list of urls, using QUrl(str, \a mode).
+ Note that this means all strings must be urls, not for instance local paths.
+*/
+QList<QUrl> QUrl::fromStringList(const QStringList &urls, ParsingMode mode)
+{
+ QList<QUrl> lst;
+ lst.reserve(urls.size());
+ foreach (const QString &str, urls) {
+ lst.append(QUrl(str, mode));
+ }
+ return lst;
+}
+
+/*!
\typedef QUrl::DataPtr
\internal
*/
diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h
index bd35b44f17..de4ce754fb 100644
--- a/src/corelib/io/qurl.h
+++ b/src/corelib/io/qurl.h
@@ -50,8 +50,6 @@
#include <QtCore/qpair.h>
#include <QtCore/qglobal.h>
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
@@ -322,6 +320,9 @@ public:
static QString fromAce(const QByteArray &);
static QByteArray toAce(const QString &);
static QStringList idnWhitelist();
+ static QStringList toStringList(const QList<QUrl> &uris, FormattingOptions options = FormattingOptions(PrettyDecoded));
+ static QList<QUrl> fromStringList(const QStringList &uris, ParsingMode mode = TolerantMode);
+
static void setIdnWhitelist(const QStringList &);
friend Q_CORE_EXPORT uint qHash(const QUrl &url, uint seed = 0) Q_DECL_NOTHROW;
@@ -381,6 +382,4 @@ QT_END_NAMESPACE
# include <QtCore/qurlquery.h>
#endif
-QT_END_HEADER
-
#endif // QURL_H
diff --git a/src/corelib/io/qurlidna.cpp b/src/corelib/io/qurlidna.cpp
index e2cd481035..fac1703da8 100644
--- a/src/corelib/io/qurlidna.cpp
+++ b/src/corelib/io/qurlidna.cpp
@@ -2336,27 +2336,42 @@ Q_AUTOTEST_EXPORT QString qt_punycodeDecoder(const QString &pc)
}
static const char * const idn_whitelist[] = {
- "ac", "ar", "at",
+ "ac", "ar", "asia", "at",
"biz", "br",
- "cat", "ch", "cl", "cn",
+ "cat", "ch", "cl", "cn", "com",
"de", "dk",
"es",
"fi",
"gr",
"hu",
- "info", "io", "is",
+ "il", "info", "io", "is", "ir",
"jp",
"kr",
- "li", "lt",
+ "li", "lt", "lu", "lv",
"museum",
- "no",
+ "name", "net", "no", "nu", "nz",
"org",
+ "pl", "pr",
"se", "sh",
- "th", "tm", "tw",
+ "tel", "th", "tm", "tw",
+ "ua",
"vn",
+ "xn--fiqs8s", // China
+ "xn--fiqz9s", // China
+ "xn--fzc2c9e2c", // Sri Lanka
+ "xn--j6w193g", // Hong Kong
+ "xn--kprw13d", // Taiwan
+ "xn--kpry57d", // Taiwan
+ "xn--mgba3a4f16a", // Iran
+ "xn--mgba3a4fra", // Iran
"xn--mgbaam7a8h", // UAE
+ "xn--mgbayh7gpa", // Jordan
"xn--mgberp4a5d4ar", // Saudi Arabia
- "xn--wgbh1c" // Egypt
+ "xn--ogbpf8fl", // Syria
+ "xn--p1ai", // Russian Federation
+ "xn--wgbh1c", // Egypt
+ "xn--wgbl6a", // Qatar
+ "xn--xkc2al3hye2a" // Sri Lanka
};
static const size_t idn_whitelist_size = sizeof idn_whitelist / sizeof *idn_whitelist;
diff --git a/src/corelib/io/qurlquery.h b/src/corelib/io/qurlquery.h
index 319fe3cf22..c515bf78c7 100644
--- a/src/corelib/io/qurlquery.h
+++ b/src/corelib/io/qurlquery.h
@@ -50,8 +50,6 @@
#include <QtCore/qstringlist.h>
#endif
-QT_BEGIN_HEADER
-
QT_BEGIN_NAMESPACE
class QUrlQueryPrivate;
@@ -173,6 +171,4 @@ inline QList<QByteArray> QUrl::allEncodedQueryItemValues(const QByteArray &key)
QT_END_NAMESPACE
-QT_END_HEADER
-
#endif // QURLQUERY_H
diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h
index f4f525ced7..dfc69f500b 100644
--- a/src/corelib/io/qurltlds_p.h
+++ b/src/corelib/io/qurltlds_p.h
@@ -59,6423 +59,9898 @@ QT_BEGIN_NAMESPACE
// for instructions see the program at
// util/corelib/qurl-generateTLDs
-static const quint16 tldCount = 3949;
-static const quint16 tldIndices[] = {
+static const quint16 tldCount = 6063;
+static const quint32 tldIndices[] = {
0,
-7,
-14,
-14,
-20,
-51,
-61,
-93,
-100,
-100,
-116,
-159,
-167,
-180,
-180,
-193,
-234,
-234,
-234,
-255,
-255,
-255,
-280,
-280,
+13,
+19,
+36,
+66,
+90,
+90,
+113,
+130,
+151,
+151,
+151,
+168,
+179,
+196,
+203,
+222,
+222,
+237,
+237,
+251,
+258,
287,
287,
-295,
-303,
-313,
-326,
-326,
-380,
-393,
-413,
-419,
-419,
-419,
-424,
-438,
-438,
-469,
-515,
-515,
-515,
-534,
-534,
-557,
-557,
-557,
-557,
-572,
-572,
-572,
-579,
-587,
-597,
-612,
-612,
-624,
-636,
-648,
-662,
-687,
-709,
-714,
-740,
-766,
-789,
-789,
-805,
-805,
-810,
-815,
-815,
-824,
-824,
-831,
-857,
-869,
-891,
-891,
-916,
-916,
-916,
-927,
-934,
-964,
-971,
+287,
+287,
+287,
+314,
+336,
+352,
+352,
+352,
+369,
+369,
+377,
+396,
+396,
+396,
+405,
+405,
+431,
+431,
+442,
+451,
+485,
+495,
+509,
+509,
+509,
+524,
+524,
+533,
+533,
+552,
+552,
+552,
+552,
+577,
+577,
+593,
+593,
+593,
+593,
+593,
+593,
+622,
+643,
+643,
+658,
+691,
+703,
+715,
+731,
+731,
+747,
+781,
+793,
+793,
+814,
+826,
+851,
+851,
+866,
+885,
+914,
+929,
+929,
+929,
+941,
+947,
+947,
987,
987,
987,
-1008,
-1008,
-1016,
-1016,
-1030,
-1030,
-1052,
-1075,
-1075,
-1082,
-1087,
-1115,
-1135,
-1135,
-1135,
-1172,
-1178,
-1178,
-1178,
-1202,
-1207,
-1220,
-1220,
-1266,
-1266,
-1266,
-1266,
-1272,
-1290,
-1316,
-1316,
-1332,
-1332,
-1339,
-1339,
-1352,
-1352,
-1389,
-1389,
-1408,
-1415,
-1437,
-1444,
-1489,
-1489,
-1502,
-1502,
-1512,
-1518,
-1539,
-1555,
-1562,
+1003,
+1061,
+1080,
+1080,
+1080,
+1104,
+1104,
+1138,
+1148,
+1148,
+1148,
+1148,
+1160,
+1179,
+1179,
+1208,
+1208,
+1225,
+1225,
+1273,
+1273,
+1291,
+1291,
+1304,
+1304,
+1304,
+1304,
+1318,
+1335,
+1335,
+1335,
+1349,
+1349,
+1364,
+1364,
+1364,
+1364,
+1402,
+1402,
+1402,
+1402,
+1430,
+1455,
+1506,
+1537,
+1537,
+1559,
+1573,
+1578,
+1578,
+1578,
+1578,
1584,
-1598,
-1607,
-1607,
-1607,
-1632,
-1652,
-1652,
-1658,
-1658,
-1675,
+1592,
+1599,
+1599,
+1599,
+1606,
+1641,
+1641,
+1663,
+1663,
+1663,
+1663,
+1663,
1682,
-1709,
-1733,
-1748,
-1776,
-1783,
-1783,
-1790,
-1797,
-1826,
-1850,
-1850,
-1856,
-1880,
-1887,
-1901,
-1921,
-1947,
-1961,
-1967,
-1967,
-1967,
-1972,
-1986,
-1986,
-1986,
-2009,
-2029,
-2029,
-2047,
-2061,
-2075,
-2075,
-2075,
-2075,
-2075,
-2075,
-2082,
-2082,
-2124,
-2124,
-2129,
-2162,
-2162,
-2162,
-2236,
-2256,
-2263,
-2276,
-2283,
-2313,
-2313,
-2347,
-2380,
-2387,
-2387,
-2387,
-2431,
-2438,
-2445,
-2452,
-2459,
-2459,
-2469,
-2490,
-2516,
-2527,
-2540,
-2540,
-2586,
-2610,
-2630,
-2630,
-2653,
-2660,
-2669,
-2693,
-2693,
-2710,
-2710,
-2719,
-2719,
-2734,
-2740,
-2740,
-2753,
-2753,
-2763,
-2770,
-2775,
-2782,
-2789,
-2802,
-2820,
-2827,
-2827,
-2841,
-2855,
-2855,
-2865,
-2872,
-2884,
-2884,
-2919,
-2937,
-2955,
-2962,
-3012,
-3042,
-3073,
-3083,
-3083,
-3100,
-3105,
-3112,
-3131,
-3131,
-3166,
-3180,
-3187,
-3194,
-3211,
-3218,
-3223,
-3233,
-3249,
-3259,
-3268,
-3314,
-3314,
-3324,
-3324,
-3336,
-3336,
-3336,
+1682,
+1689,
+1689,
+1689,
+1715,
+1731,
+1731,
+1741,
+1761,
+1777,
+1777,
+1777,
+1777,
+1777,
+1796,
+1796,
+1824,
+1847,
+1847,
+1854,
+1876,
+1876,
+1876,
+1908,
+1908,
+1925,
+1952,
+1974,
+1991,
+2010,
+2010,
+2010,
+2010,
+2028,
+2048,
+2066,
+2066,
+2091,
+2119,
+2151,
+2151,
+2151,
+2175,
+2175,
+2175,
+2205,
+2219,
+2232,
+2281,
+2281,
+2281,
+2302,
+2311,
+2327,
+2327,
+2327,
+2340,
+2340,
+2340,
+2368,
+2386,
+2404,
+2414,
+2423,
+2423,
+2423,
+2423,
+2443,
+2443,
+2450,
+2487,
+2487,
+2487,
+2487,
+2494,
+2509,
+2509,
+2509,
+2535,
+2545,
+2615,
+2615,
+2615,
+2633,
+2633,
+2641,
+2688,
+2688,
+2688,
+2702,
+2708,
+2730,
+2748,
+2748,
+2748,
+2748,
+2764,
+2798,
+2807,
+2815,
+2826,
+2826,
+2835,
+2864,
+2864,
+2898,
+2898,
+2905,
+2915,
+2922,
+2922,
+2938,
+2938,
+2967,
+2967,
+2967,
+2986,
+2986,
+3002,
+3008,
+3018,
+3052,
+3066,
+3099,
+3099,
+3115,
+3115,
+3115,
+3159,
+3159,
+3172,
+3186,
+3186,
+3262,
+3262,
+3262,
+3305,
3336,
3350,
-3363,
-3376,
-3398,
-3416,
-3445,
-3464,
-3488,
-3488,
-3497,
-3545,
-3552,
-3552,
-3552,
-3566,
-3573,
-3573,
-3573,
-3581,
-3581,
-3603,
-3603,
-3615,
-3621,
-3621,
-3683,
-3683,
-3710,
-3710,
-3716,
-3716,
-3748,
-3770,
-3791,
-3803,
-3810,
-3817,
-3833,
-3846,
-3846,
-3852,
-3876,
-3876,
-3882,
-3903,
-3910,
-3939,
-3939,
-3939,
-3947,
-3962,
-3962,
-3981,
-3994,
-4021,
-4030,
-4042,
-4085,
-4085,
-4096,
-4096,
-4104,
-4123,
-4123,
-4123,
-4143,
-4154,
-4164,
-4194,
-4194,
-4194,
-4205,
-4205,
-4222,
-4238,
-4301,
-4309,
-4322,
-4331,
-4331,
-4331,
-4331,
-4331,
-4347,
-4365,
-4375,
-4375,
-4385,
-4398,
-4412,
-4430,
-4430,
-4437,
-4447,
-4463,
-4472,
-4472,
-4472,
-4484,
-4484,
-4484,
-4484,
-4484,
-4490,
-4490,
-4511,
-4511,
-4522,
-4522,
-4522,
-4522,
-4528,
-4528,
+3394,
+3411,
+3411,
+3424,
+3483,
+3505,
+3532,
+3532,
+3532,
+3538,
+3538,
+3561,
+3575,
+3580,
+3601,
+3601,
+3601,
+3601,
+3601,
+3601,
+3601,
+3601,
+3635,
+3635,
+3635,
+3686,
+3704,
+3704,
+3736,
+3749,
+3783,
+3783,
+3816,
+3840,
+3877,
+3885,
+3885,
+3885,
+3885,
+3907,
+3944,
+3944,
+3956,
+3963,
+3963,
+3963,
+3963,
+3975,
+3975,
+3975,
+3993,
+4038,
+4062,
+4062,
+4062,
+4071,
+4071,
+4084,
+4097,
+4119,
+4119,
+4119,
+4135,
+4135,
+4166,
+4178,
+4178,
+4208,
+4225,
+4285,
+4300,
+4300,
+4300,
+4300,
+4318,
+4318,
+4318,
+4336,
+4348,
+4354,
+4354,
+4388,
+4388,
+4416,
+4433,
+4433,
+4433,
+4433,
+4433,
+4433,
+4450,
+4450,
+4450,
+4450,
+4467,
+4467,
+4480,
+4514,
+4524,
4534,
-4551,
-4551,
-4551,
-4564,
-4583,
-4583,
-4611,
-4611,
-4611,
-4622,
-4622,
-4649,
-4668,
-4677,
-4692,
-4692,
-4692,
-4705,
-4723,
-4723,
-4723,
-4729,
-4729,
-4743,
-4743,
-4750,
-4750,
-4763,
-4770,
-4776,
-4776,
-4776,
-4793,
-4811,
-4811,
-4811,
-4821,
-4821,
-4841,
-4857,
-4891,
-4897,
-4903,
-4903,
-4903,
-4919,
-4935,
-4942,
-4958,
-4958,
-4975,
-4975,
-4975,
-4985,
-4985,
-5020,
-5032,
+4552,
+4552,
+4572,
+4572,
+4599,
+4641,
+4659,
+4659,
+4659,
+4666,
+4666,
+4666,
+4717,
+4769,
+4785,
+4797,
+4797,
+4815,
+4853,
+4859,
+4868,
+4894,
+4894,
+4894,
+4920,
+4930,
+4972,
+4972,
+5005,
+5005,
+5023,
+5023,
5032,
-5040,
-5053,
-5068,
-5079,
-5079,
-5101,
-5115,
-5115,
-5135,
-5154,
-5161,
-5161,
-5168,
-5168,
-5184,
-5210,
-5210,
-5238,
-5255,
-5278,
-5285,
-5308,
-5318,
-5327,
-5327,
-5333,
-5333,
-5340,
-5348,
-5355,
-5366,
-5377,
-5384,
-5408,
-5415,
-5422,
-5435,
-5442,
-5482,
-5482,
-5482,
-5482,
-5498,
-5527,
-5534,
-5541,
-5572,
-5572,
-5572,
-5579,
-5591,
-5602,
-5602,
-5621,
-5621,
-5646,
-5664,
-5671,
-5671,
-5681,
-5696,
-5707,
-5716,
-5716,
-5723,
-5723,
-5732,
+5059,
+5059,
+5080,
+5094,
+5100,
+5100,
+5100,
+5100,
+5100,
+5118,
+5145,
+5145,
+5145,
+5153,
+5221,
+5256,
+5289,
+5296,
+5306,
+5306,
+5343,
+5343,
+5343,
+5362,
+5369,
+5433,
+5451,
+5451,
+5451,
+5470,
+5470,
+5470,
+5490,
+5506,
+5528,
+5548,
+5548,
+5548,
+5548,
+5563,
+5576,
+5585,
+5636,
+5636,
+5661,
+5661,
+5668,
+5685,
+5698,
+5715,
5742,
-5742,
-5763,
-5770,
-5776,
-5790,
-5790,
-5797,
-5806,
-5816,
-5832,
-5882,
-5882,
-5882,
-5882,
-5893,
-5934,
-5934,
-5965,
-5965,
-5980,
-5980,
-5980,
-5980,
-6007,
-6017,
-6034,
-6051,
-6065,
-6075,
-6075,
-6091,
-6097,
-6097,
-6109,
-6109,
-6109,
-6122,
-6147,
-6168,
-6168,
-6191,
-6191,
-6191,
-6191,
-6191,
-6198,
-6217,
-6224,
-6224,
-6231,
-6245,
-6252,
-6252,
-6270,
-6270,
-6284,
-6305,
-6315,
-6322,
-6322,
-6322,
-6329,
-6329,
-6329,
-6353,
-6361,
-6361,
-6375,
-6391,
-6405,
-6405,
-6415,
-6431,
-6431,
-6431,
-6431,
-6458,
-6475,
-6475,
-6475,
-6482,
-6489,
-6496,
-6496,
-6503,
-6520,
-6520,
-6520,
-6527,
-6527,
+5748,
+5756,
+5800,
+5800,
+5800,
+5827,
+5827,
+5846,
+5864,
+5910,
+5926,
+5941,
+5952,
+5952,
+5958,
+5958,
+5976,
+5985,
+5991,
+5991,
+5991,
+5998,
+5998,
+5998,
+6011,
+6011,
+6060,
+6076,
+6088,
+6105,
+6124,
+6124,
+6124,
+6157,
+6157,
+6157,
+6157,
+6174,
+6190,
+6190,
+6190,
+6209,
+6228,
+6228,
+6228,
+6228,
+6234,
+6234,
+6234,
+6234,
+6234,
+6249,
+6264,
+6264,
+6290,
+6308,
+6346,
+6362,
+6362,
+6400,
+6420,
+6432,
+6455,
+6455,
+6464,
+6491,
+6491,
+6491,
+6497,
+6524,
+6544,
+6544,
+6544,
6544,
-6561,
-6573,
-6573,
-6580,
-6580,
-6587,
-6587,
-6592,
-6592,
-6592,
-6592,
-6599,
-6599,
-6612,
-6633,
-6649,
-6649,
-6669,
-6676,
-6683,
-6683,
-6713,
-6720,
-6727,
-6736,
-6736,
-6746,
-6770,
-6807,
-6814,
-6827,
-6846,
-6846,
-6864,
-6864,
-6864,
-6864,
-6881,
-6888,
-6888,
-6888,
+6559,
+6576,
+6619,
+6682,
+6682,
+6716,
+6716,
+6716,
+6716,
+6716,
+6716,
+6730,
+6745,
+6783,
+6783,
+6801,
+6817,
+6841,
+6841,
+6858,
+6858,
6914,
-6935,
-6935,
-6935,
-6953,
-6959,
-6966,
-6983,
-6983,
-6983,
-7013,
-7023,
-7023,
-7023,
-7023,
+6925,
+6943,
+6954,
+6954,
+6954,
+6973,
+6973,
+6973,
+6987,
+6987,
+6987,
+7005,
7037,
-7044,
-7058,
-7079,
-7086,
-7123,
-7134,
-7155,
-7168,
+7037,
+7050,
+7050,
+7075,
+7090,
+7090,
+7096,
+7108,
+7124,
+7124,
+7136,
+7136,
+7146,
+7169,
7178,
-7203,
-7227,
-7236,
-7258,
-7265,
-7274,
-7274,
-7303,
-7303,
-7314,
-7314,
-7345,
-7352,
-7367,
-7377,
-7388,
-7388,
-7402,
-7402,
-7409,
-7421,
-7421,
-7467,
-7484,
-7484,
-7484,
+7197,
+7197,
+7197,
+7204,
+7204,
+7268,
+7268,
+7288,
+7311,
+7311,
+7321,
+7334,
+7334,
+7387,
+7417,
+7426,
+7444,
+7444,
+7460,
+7470,
7491,
-7532,
-7532,
-7539,
-7546,
-7546,
-7553,
-7573,
-7573,
-7573,
-7580,
-7587,
-7594,
-7594,
-7594,
-7606,
-7606,
-7637,
-7637,
-7637,
-7664,
-7664,
-7664,
-7677,
-7684,
-7701,
-7723,
-7723,
-7723,
-7723,
-7734,
-7734,
-7734,
-7748,
-7748,
-7748,
-7748,
-7759,
-7759,
-7775,
-7775,
-7782,
-7789,
-7817,
-7824,
-7831,
-7836,
-7865,
-7865,
+7516,
+7516,
+7535,
+7535,
+7555,
+7555,
+7555,
+7555,
+7575,
+7597,
+7597,
+7597,
+7597,
+7607,
+7627,
+7627,
+7652,
+7710,
+7710,
+7719,
+7737,
+7737,
+7737,
+7737,
+7737,
+7747,
+7747,
+7753,
+7773,
+7773,
+7793,
+7828,
+7841,
+7860,
+7860,
+7876,
7876,
7901,
7901,
-7908,
-7918,
-7938,
-7945,
-7945,
-7957,
-7964,
-7979,
-7986,
-7994,
-8007,
-8007,
-8014,
-8021,
-8061,
-8061,
-8071,
-8088,
-8131,
-8138,
-8153,
-8160,
-8160,
-8160,
-8175,
-8183,
+7901,
+7911,
+7911,
+7911,
+7911,
+7924,
+7941,
+7951,
+7983,
+7983,
+7990,
+8008,
+8008,
+8018,
+8018,
+8031,
+8056,
+8063,
+8077,
+8077,
+8090,
+8100,
+8165,
+8192,
+8192,
+8192,
+8192,
+8197,
8197,
-8211,
-8211,
-8211,
-8243,
-8243,
-8243,
-8243,
-8259,
-8259,
-8259,
-8259,
-8259,
-8266,
-8275,
-8281,
-8281,
-8281,
-8281,
-8288,
-8288,
+8197,
+8197,
+8197,
+8197,
+8227,
+8237,
+8253,
+8253,
8309,
8309,
8309,
-8330,
-8330,
-8330,
-8330,
-8337,
-8343,
-8343,
-8360,
-8370,
-8370,
-8380,
-8380,
-8386,
-8386,
-8397,
-8415,
-8415,
-8428,
-8454,
-8460,
-8475,
-8492,
-8526,
+8309,
+8329,
+8329,
+8329,
+8345,
+8378,
+8398,
+8420,
+8420,
+8420,
+8436,
+8452,
+8497,
+8538,
8554,
8554,
8583,
8583,
8583,
-8598,
-8607,
-8617,
-8617,
+8616,
8642,
8652,
8652,
-8652,
-8662,
-8688,
-8688,
-8704,
-8704,
-8747,
-8765,
-8775,
-8783,
-8811,
-8835,
-8835,
-8835,
-8850,
-8859,
-8884,
-8910,
-8919,
-8952,
-8978,
-8978,
-8991,
-8991,
-8991,
-8999,
-8999,
-8999,
-9030,
-9030,
-9030,
-9030,
-9030,
-9041,
-9048,
-9048,
-9054,
-9054,
-9054,
-9086,
-9108,
-9108,
-9119,
-9119,
-9130,
-9144,
-9152,
-9161,
-9174,
-9194,
-9207,
-9207,
-9207,
-9232,
-9242,
-9242,
-9271,
-9290,
-9308,
-9308,
-9308,
-9308,
-9320,
-9333,
-9343,
-9356,
-9379,
-9379,
+8672,
+8690,
+8699,
+8699,
+8715,
+8715,
+8737,
+8767,
+8767,
+8767,
+8780,
+8800,
+8837,
+8867,
+8896,
+8931,
+8948,
+8959,
+8981,
+9002,
+9008,
+9017,
+9017,
+9017,
+9017,
+9044,
+9044,
+9044,
+9069,
+9087,
+9087,
+9087,
+9087,
+9104,
+9136,
+9173,
+9173,
+9199,
+9199,
+9199,
+9199,
+9222,
+9233,
+9257,
+9257,
+9257,
+9272,
+9272,
+9284,
+9316,
+9346,
+9346,
+9346,
+9362,
9379,
-9395,
-9395,
-9406,
-9419,
-9419,
-9419,
-9419,
-9450,
-9485,
-9485,
-9497,
-9497,
-9505,
-9517,
-9528,
-9528,
+9404,
+9413,
+9413,
+9413,
+9439,
+9439,
+9447,
+9460,
+9479,
+9479,
+9486,
+9499,
+9506,
+9506,
+9513,
9551,
-9564,
-9586,
-9586,
-9608,
-9608,
-9626,
-9626,
-9626,
-9653,
-9653,
-9681,
-9681,
-9681,
-9698,
-9698,
-9698,
-9714,
-9729,
-9737,
-9737,
-9765,
-9765,
-9765,
-9765,
-9765,
-9825,
-9844,
-9866,
-9880,
-9880,
-9880,
-9880,
-9886,
-9895,
-9895,
-9895,
-9895,
-9895,
-9913,
-9913,
-9924,
-9958,
-9958,
-9967,
-9975,
-9975,
-9975,
-9981,
-9998,
-9998,
-9998,
+9551,
+9577,
+9577,
+9634,
+9634,
+9671,
+9693,
+9700,
+9700,
+9732,
+9774,
+9774,
+9780,
+9827,
+9851,
+9875,
+9875,
+9911,
+9937,
+9937,
+9944,
+9944,
+9944,
+9964,
+9992,
+9999,
+9999,
+9999,
+10006,
10012,
-10036,
-10036,
-10066,
-10079,
-10097,
+10019,
+10026,
+10047,
+10059,
+10059,
+10076,
+10083,
+10083,
+10083,
+10089,
+10089,
+10089,
+10096,
10121,
-10133,
-10142,
-10142,
-10142,
-10156,
-10173,
-10173,
-10173,
-10196,
-10205,
-10205,
-10205,
-10205,
-10218,
-10234,
-10240,
-10240,
-10240,
-10264,
-10273,
-10286,
-10286,
-10286,
-10286,
-10299,
-10299,
-10309,
-10309,
-10339,
-10358,
-10358,
-10374,
-10374,
-10390,
-10390,
-10413,
-10413,
-10439,
-10461,
-10467,
+10121,
+10137,
+10137,
+10137,
+10137,
+10154,
+10161,
+10161,
+10168,
+10177,
+10177,
+10231,
+10238,
+10261,
+10268,
+10288,
+10295,
+10303,
+10320,
+10344,
+10387,
+10421,
+10421,
+10421,
10467,
10467,
-10492,
-10492,
10501,
-10528,
-10528,
-10528,
-10539,
-10583,
-10583,
-10583,
-10613,
-10613,
-10619,
-10628,
-10645,
-10645,
-10645,
-10650,
-10671,
-10687,
-10709,
-10709,
-10709,
-10709,
-10709,
-10727,
+10517,
+10535,
+10552,
+10577,
+10577,
+10577,
+10577,
+10577,
+10615,
+10621,
+10639,
+10639,
+10639,
+10682,
+10682,
+10698,
+10698,
+10716,
10727,
-10727,
-10727,
-10733,
-10733,
-10768,
-10768,
-10773,
-10780,
-10788,
-10788,
+10750,
+10774,
+10781,
10797,
-10797,
-10835,
-10835,
-10845,
-10852,
-10861,
-10861,
-10861,
-10861,
-10861,
-10861,
-10861,
-10875,
-10888,
-10907,
-10907,
-10907,
-10920,
-10920,
-10932,
-10946,
-10977,
-10977,
-10997,
-11008,
-11037,
-11059,
-11059,
-11059,
-11067,
-11067,
-11067,
-11067,
-11067,
-11077,
-11091,
-11102,
+10804,
+10804,
+10804,
+10816,
+10836,
+10850,
+10850,
+10857,
+10857,
+10878,
+10878,
+10934,
+10934,
+10934,
+10934,
+10934,
+10934,
+10934,
+10941,
+10941,
+10941,
+10948,
+10973,
+10984,
+11015,
+11015,
+11015,
+11041,
+11058,
+11066,
+11066,
+11066,
+11087,
+11097,
11102,
-11112,
-11125,
+11108,
+11115,
+11122,
+11122,
+11122,
11129,
-11129,
-11154,
-11154,
-11154,
-11164,
-11164,
-11189,
-11189,
-11189,
-11189,
-11189,
-11196,
-11196,
-11227,
-11238,
-11247,
-11256,
-11265,
-11265,
-11286,
+11160,
+11194,
+11194,
+11215,
+11224,
+11224,
+11280,
+11297,
11307,
-11330,
-11337,
-11378,
-11378,
-11389,
-11413,
-11454,
-11469,
-11475,
-11475,
-11475,
-11475,
-11503,
-11503,
-11503,
-11503,
-11534,
-11534,
-11550,
-11550,
-11557,
-11557,
-11557,
-11557,
-11574,
-11585,
-11585,
-11603,
-11626,
-11643,
-11643,
-11643,
-11643,
-11663,
-11663,
-11682,
-11696,
-11696,
-11696,
-11696,
-11706,
-11706,
-11706,
-11706,
-11723,
-11723,
-11757,
-11757,
-11773,
-11795,
-11813,
-11836,
-11836,
-11883,
-11903,
-11952,
-11965,
-11965,
-11984,
-11997,
-12008,
-12008,
-12008,
-12024,
-12043,
-12065,
-12071,
-12099,
-12129,
-12140,
-12140,
-12146,
-12161,
-12161,
-12161,
-12161,
-12167,
-12167,
-12180,
-12186,
-12208,
-12226,
-12243,
-12243,
-12252,
-12252,
-12274,
-12289,
-12302,
-12302,
-12313,
-12313,
-12313,
-12313,
-12358,
-12358,
-12358,
-12369,
-12375,
-12391,
-12391,
-12391,
-12391,
-12405,
-12410,
-12416,
-12416,
-12436,
-12436,
-12436,
-12443,
-12443,
-12462,
-12477,
-12492,
-12492,
-12503,
-12519,
-12525,
-12531,
-12571,
-12571,
-12591,
-12591,
-12601,
-12641,
-12641,
-12641,
-12657,
-12657,
-12657,
-12699,
-12699,
-12699,
-12712,
-12728,
-12744,
-12761,
-12769,
-12782,
-12793,
-12823,
-12836,
-12851,
-12863,
-12890,
-12900,
-12900,
-12900,
-12910,
-12910,
-12924,
-12924,
-12924,
-12924,
-12924,
-12952,
-12984,
-13003,
-13038,
-13038,
-13056,
-13056,
-13056,
+11319,
+11352,
+11364,
+11364,
+11399,
+11399,
+11430,
+11430,
+11445,
+11478,
+11500,
+11508,
+11526,
+11526,
+11539,
+11539,
+11583,
+11583,
+11624,
+11654,
+11654,
+11661,
+11679,
+11714,
+11721,
+11733,
+11769,
+11778,
+11786,
+11805,
+11820,
+11857,
+11864,
+11877,
+11877,
+11892,
+11892,
+11892,
+11908,
+11915,
+11922,
+11940,
+11947,
+11975,
+11998,
+12021,
+12028,
+12028,
+12046,
+12068,
+12086,
+12109,
+12116,
+12130,
+12150,
+12150,
+12150,
+12150,
+12157,
+12182,
+12205,
+12212,
+12219,
+12219,
+12229,
+12229,
+12229,
+12250,
+12271,
+12285,
+12285,
+12292,
+12330,
+12330,
+12349,
+12349,
+12357,
+12357,
+12357,
+12357,
+12389,
+12409,
+12409,
+12448,
+12459,
+12473,
+12480,
+12489,
+12489,
+12497,
+12535,
+12542,
+12568,
+12575,
+12590,
+12620,
+12645,
+12652,
+12665,
+12672,
+12683,
+12683,
+12709,
+12716,
+12723,
+12746,
+12746,
+12746,
+12771,
+12771,
+12796,
+12796,
+12803,
+12803,
+12803,
+12838,
+12856,
+12872,
+12872,
+12872,
+12872,
+12872,
+12872,
+12889,
+12899,
+12899,
+12899,
+12899,
+12917,
+12934,
+12934,
+12947,
+12969,
+12969,
+12976,
+13012,
13056,
-13074,
-13081,
-13093,
-13103,
-13103,
-13112,
-13119,
-13132,
-13132,
-13132,
-13141,
-13151,
-13183,
-13193,
-13206,
-13206,
-13206,
-13236,
-13252,
-13267,
-13267,
-13294,
-13307,
-13307,
-13307,
-13343,
-13349,
-13349,
-13349,
-13375,
-13375,
-13375,
-13384,
-13384,
-13384,
-13393,
-13393,
-13393,
-13402,
-13414,
-13425,
-13445,
-13467,
-13485,
-13499,
-13509,
-13528,
-13528,
-13549,
-13549,
-13559,
-13570,
-13570,
-13570,
-13570,
-13598,
-13637,
-13647,
-13647,
-13661,
-13673,
-13682,
-13687,
-13694,
-13694,
-13720,
-13733,
-13742,
-13748,
-13771,
-13795,
-13795,
-13814,
-13821,
-13821,
-13855,
-13862,
-13862,
-13862,
-13874,
-13874,
-13897,
-13909,
-13909,
-13947,
-13947,
-13952,
-13952,
-13970,
-13979,
-13979,
-13979,
-14008,
-14049,
-14049,
-14049,
-14049,
-14049,
-14049,
-14060,
-14083,
-14083,
-14091,
-14101,
-14101,
-14101,
-14101,
-14118,
-14136,
-14195,
-14195,
-14195,
-14213,
-14213,
-14232,
-14232,
-14253,
-14253,
+13063,
+13092,
+13118,
+13142,
+13163,
+13202,
+13237,
+13256,
+13284,
+13295,
+13302,
+13326,
+13355,
+13372,
+13383,
+13398,
+13424,
+13452,
+13452,
+13452,
+13494,
+13533,
+13547,
+13547,
+13551,
+13558,
+13610,
+13657,
+13665,
+13692,
+13692,
+13707,
+13714,
+13714,
+13714,
+13728,
+13728,
+13750,
+13763,
+13782,
+13782,
+13819,
+13840,
+13840,
+13858,
+13867,
+13888,
+13925,
+13925,
+13950,
+13960,
+13960,
+13974,
+14014,
+14051,
+14067,
+14086,
+14095,
+14102,
+14102,
+14102,
+14123,
+14123,
+14123,
+14144,
+14168,
+14168,
+14175,
+14175,
+14175,
+14175,
+14186,
+14237,
+14237,
14258,
-14275,
-14275,
-14304,
-14311,
-14311,
-14318,
-14318,
-14318,
-14318,
-14318,
-14318,
-14325,
-14325,
-14345,
-14345,
-14379,
-14389,
-14422,
-14422,
-14422,
-14422,
-14435,
-14441,
-14441,
-14460,
-14460,
-14471,
-14471,
-14481,
-14495,
-14495,
-14495,
-14502,
-14502,
-14502,
-14502,
-14524,
-14533,
-14541,
-14552,
-14552,
-14552,
-14552,
-14563,
-14563,
-14568,
-14568,
-14585,
-14595,
-14602,
-14628,
-14628,
-14645,
-14672,
-14678,
-14697,
-14697,
-14734,
-14757,
-14764,
-14771,
-14771,
-14771,
-14796,
-14815,
-14822,
-14845,
-14861,
-14861,
-14861,
-14873,
-14873,
-14873,
-14902,
-14920,
-14920,
-14926,
-14926,
-14926,
-14941,
-14949,
-14949,
-14949,
-14949,
-14949,
-14960,
-14960,
-14971,
-14971,
-14998,
-15003,
-15003,
-15003,
-15013,
-15013,
-15027,
-15027,
-15027,
-15043,
-15053,
-15063,
-15074,
-15083,
-15093,
-15093,
-15121,
-15121,
-15128,
-15128,
-15144,
-15144,
-15144,
-15144,
-15165,
-15170,
-15170,
-15170,
-15170,
-15170,
-15170,
-15170,
-15186,
-15206,
-15206,
-15206,
-15224,
-15236,
-15236,
-15252,
-15258,
-15258,
-15258,
-15258,
-15264,
-15277,
-15288,
-15307,
-15307,
-15318,
-15328,
-15328,
-15334,
-15334,
-15363,
-15399,
-15399,
-15422,
-15438,
-15447,
-15447,
-15456,
-15456,
-15456,
-15495,
-15495,
-15495,
-15495,
-15511,
-15511,
-15530,
-15557,
-15566,
-15582,
-15590,
-15590,
-15604,
-15604,
-15625,
-15635,
-15655,
-15655,
-15655,
-15655,
-15655,
-15665,
-15675,
-15675,
-15675,
-15675,
-15675,
-15682,
-15682,
-15682,
-15694,
-15719,
-15749,
-15749,
-15794,
-15794,
-15837,
-15854,
-15854,
-15861,
-15861,
-15861,
-15861,
-15884,
-15900,
-15911,
-15931,
-15931,
-15931,
-15931,
-15931,
-15963,
-15963,
-15996,
-16006,
-16013,
-16024,
+14258,
+14258,
+14292,
+14292,
+14328,
+14338,
+14338,
+14338,
+14364,
+14390,
+14390,
+14423,
+14454,
+14469,
+14512,
+14512,
+14512,
+14512,
+14512,
+14512,
+14512,
+14525,
+14535,
+14550,
+14572,
+14578,
+14591,
+14603,
+14603,
+14603,
+14619,
+14619,
+14619,
+14619,
+14656,
+14679,
+14700,
+14725,
+14725,
+14725,
+14725,
+14725,
+14730,
+14751,
+14767,
+14767,
+14767,
+14767,
+14787,
+14820,
+14837,
+14837,
+14865,
+14865,
+14882,
+14882,
+14882,
+14882,
+14882,
+14892,
+14892,
+14892,
+14912,
+14929,
+14947,
+14947,
+14947,
+14947,
+14947,
+14947,
+14966,
+15018,
+15034,
+15044,
+15055,
+15055,
+15073,
+15118,
+15118,
+15118,
+15146,
+15158,
+15169,
+15175,
+15175,
+15175,
+15181,
+15181,
+15181,
+15247,
+15279,
+15292,
+15292,
+15292,
+15292,
+15326,
+15331,
+15365,
+15389,
+15398,
+15412,
+15426,
+15433,
+15433,
+15433,
+15433,
+15469,
+15490,
+15490,
+15506,
+15523,
+15553,
+15553,
+15571,
+15571,
+15585,
+15602,
+15602,
+15602,
+15602,
+15602,
+15631,
+15658,
+15669,
+15699,
+15716,
+15716,
+15757,
+15789,
+15796,
+15796,
+15796,
+15796,
+15815,
+15840,
+15898,
+15898,
+15919,
+15933,
+15933,
+15940,
+15946,
+15946,
+15964,
+15964,
+15964,
+15973,
+15979,
+16008,
+16019,
+16019,
16034,
-16049,
-16049,
-16049,
-16059,
-16059,
-16059,
-16059,
-16059,
-16059,
-16059,
-16064,
-16075,
-16104,
-16104,
-16117,
-16124,
-16124,
-16124,
-16124,
-16130,
-16145,
-16159,
-16190,
-16193,
-16196,
-16210,
-16224,
-16243,
-16255,
-16261,
-16280,
-16283,
-16292,
-16295,
-16295,
-16301,
-16304,
+16042,
+16057,
+16073,
+16095,
+16095,
+16112,
+16121,
+16139,
+16139,
+16139,
+16148,
+16148,
+16148,
+16148,
+16165,
+16187,
+16187,
+16199,
+16199,
+16215,
+16215,
+16215,
+16231,
+16240,
+16284,
+16305,
+16305,
16322,
-16325,
-16328,
-16349,
-16355,
-16382,
-16408,
-16414,
-16414,
-16414,
-16458,
-16477,
-16480,
-16485,
-16488,
-16514,
-16520,
-16530,
-16530,
-16546,
-16562,
-16597,
-16603,
-16622,
-16622,
-16646,
-16669,
-16672,
-16715,
-16715,
-16715,
-16718,
-16718,
-16727,
-16733,
-16752,
-16770,
-16787,
-16794,
-16810,
-16827,
-16840,
-16850,
-16876,
-16901,
-16901,
-16901,
-16916,
-16919,
-16926,
-16943,
-16972,
-16978,
-16978,
-16978,
-16981,
-17008,
-17008,
-17016,
-17053,
-17053,
-17053,
-17053,
-17072,
-17086,
-17105,
-17139,
-17153,
-17162,
-17162,
-17177,
-17177,
-17177,
-17177,
-17195,
-17218,
-17221,
-17221,
-17237,
-17276,
-17276,
-17300,
-17319,
-17339,
-17357,
-17370,
-17383,
-17400,
-17407,
-17419,
-17439,
-17439,
-17449,
-17465,
-17475,
-17504,
-17527,
-17527,
-17534,
-17548,
-17564,
-17564,
-17598,
-17598,
-17601,
-17630,
-17649,
-17669,
-17669,
-17679,
-17686,
+16343,
+16362,
+16383,
+16393,
+16393,
+16411,
+16419,
+16425,
+16436,
+16461,
+16468,
+16468,
+16468,
+16490,
+16490,
+16490,
+16507,
+16528,
+16528,
+16528,
+16538,
+16555,
+16566,
+16566,
+16590,
+16590,
+16605,
+16623,
+16636,
+16636,
+16636,
+16656,
+16666,
+16696,
+16713,
+16743,
+16760,
+16781,
+16797,
+16811,
+16811,
+16823,
+16838,
+16859,
+16879,
+16879,
+16879,
+16902,
+16908,
+16908,
+16908,
+16908,
+16966,
+16966,
+16966,
+16975,
+16992,
+16992,
+16992,
+17033,
+17069,
+17069,
+17100,
+17117,
+17133,
+17151,
+17151,
+17159,
+17203,
+17203,
+17220,
+17226,
+17226,
+17245,
+17245,
+17259,
+17259,
+17269,
+17295,
+17295,
+17295,
+17353,
+17386,
+17394,
+17394,
+17394,
+17409,
+17409,
+17442,
+17442,
+17454,
+17509,
+17509,
+17509,
+17532,
+17532,
+17532,
+17550,
+17561,
+17561,
+17561,
+17561,
+17561,
+17561,
+17561,
+17561,
+17561,
+17575,
+17581,
+17581,
+17581,
+17620,
+17627,
+17640,
+17640,
+17677,
+17677,
+17688,
+17688,
+17722,
+17734,
+17747,
+17757,
+17757,
17757,
-17776,
-17796,
-17810,
-17840,
-17840,
-17877,
-17884,
-17884,
-17911,
-17936,
-17970,
+17803,
+17820,
+17846,
+17892,
+17892,
+17899,
+17899,
+17919,
+17919,
+17968,
17980,
-17995,
-17995,
-18008,
-18011,
-18036,
-18075,
-18097,
-18097,
-18104,
-18115,
-18115,
-18129,
-18134,
-18141,
-18141,
-18157,
-18180,
-18190,
-18217,
-18224,
-18252,
-18284,
-18284,
-18296,
-18299,
-18312,
-18322,
-18338,
-18348,
-18348,
-18363,
-18372,
-18387,
-18387,
-18390,
+17996,
+18021,
+18021,
+18021,
+18021,
+18050,
+18050,
+18072,
+18102,
+18119,
+18119,
+18132,
+18132,
+18132,
+18146,
+18146,
+18165,
+18184,
+18184,
+18192,
+18192,
+18192,
+18223,
+18223,
+18223,
+18231,
+18231,
+18231,
+18231,
+18257,
+18270,
+18300,
+18313,
+18331,
+18331,
+18331,
+18351,
+18351,
+18382,
+18392,
+18392,
+18392,
18402,
+18402,
+18418,
18445,
-18445,
-18445,
-18466,
-18479,
-18479,
-18498,
-18508,
-18511,
-18511,
-18511,
-18511,
-18511,
-18526,
-18558,
-18586,
-18622,
+18519,
+18519,
+18528,
+18542,
+18571,
+18595,
+18616,
+18628,
+18628,
18643,
-18670,
-18686,
-18710,
-18720,
-18739,
-18739,
-18742,
-18745,
-18771,
-18774,
-18777,
-18791,
-18813,
-18816,
-18822,
-18839,
-18845,
-18851,
-18854,
-18878,
-18881,
-18896,
-18896,
-18899,
-18926,
-18937,
-18940,
-18953,
-18963,
-19010,
-19010,
-19017,
-19046,
-19060,
-19060,
-19087,
-19095,
-19101,
-19101,
-19128,
-19146,
-19157,
-19157,
-19188,
+18678,
+18690,
+18715,
+18731,
+18731,
+18751,
+18763,
+18763,
+18763,
+18779,
+18793,
+18793,
+18824,
+18840,
+18840,
+18856,
+18856,
+18864,
+18864,
+18902,
+18902,
+18933,
+18946,
+18946,
+18946,
+18946,
+18946,
+18946,
+18955,
+18955,
+18973,
+18979,
+18992,
+18992,
+18992,
+19008,
+19016,
+19016,
+19033,
+19033,
+19044,
+19044,
+19044,
+19044,
+19082,
+19129,
+19149,
19198,
-19205,
-19223,
-19230,
-19255,
-19280,
-19280,
-19283,
-19292,
-19301,
-19320,
-19323,
-19323,
-19341,
-19341,
-19365,
-19378,
-19381,
-19394,
-19423,
-19433,
-19440,
+19210,
+19210,
+19210,
+19219,
+19219,
+19219,
+19227,
+19261,
+19261,
+19268,
+19291,
+19319,
+19319,
+19319,
+19331,
+19359,
+19369,
+19369,
+19384,
+19384,
+19406,
+19413,
19466,
-19490,
-19490,
-19490,
-19497,
-19504,
-19511,
-19511,
-19518,
-19545,
-19568,
-19575,
-19575,
-19583,
-19586,
-19592,
-19592,
-19609,
-19622,
-19629,
-19641,
-19641,
-19656,
-19673,
-19700,
-19723,
-19733,
-19746,
-19759,
-19769,
-19782,
-19789,
-19795,
-19831,
-19834,
-19841,
-19851,
-19854,
-19880,
-19895,
-19898,
-19898,
-19911,
-19922,
-19950,
-20020,
+19482,
+19482,
+19494,
+19515,
+19522,
+19570,
+19570,
+19570,
+19610,
+19625,
+19632,
+19639,
+19658,
+19665,
+19672,
+19672,
+19679,
+19679,
+19692,
+19719,
+19749,
+19756,
+19776,
+19807,
+19817,
+19817,
+19837,
+19844,
+19876,
+19906,
+19906,
+19923,
+19923,
+19942,
+19958,
+19973,
+19995,
+20002,
+20023,
20030,
-20059,
-20062,
-20089,
-20107,
-20151,
-20154,
-20175,
+20036,
+20036,
+20060,
+20060,
+20066,
+20073,
+20108,
+20116,
+20131,
+20131,
+20131,
+20166,
+20183,
+20202,
20205,
-20208,
-20229,
-20229,
-20255,
-20261,
-20261,
-20283,
-20335,
-20362,
-20385,
-20392,
-20392,
-20392,
-20392,
-20418,
-20418,
-20418,
+20215,
+20233,
+20233,
+20236,
+20243,
+20253,
+20281,
+20284,
+20294,
+20297,
+20315,
+20355,
+20400,
+20415,
20418,
+20428,
20443,
-20446,
-20446,
-20452,
-20452,
+20461,
20467,
-20467,
-20489,
-20489,
-20498,
-20525,
-20554,
-20560,
+20470,
+20476,
+20499,
+20499,
+20513,
+20513,
+20516,
+20523,
+20546,
+20549,
20575,
-20589,
-20589,
-20589,
-20614,
-20652,
-20659,
-20659,
-20668,
-20679,
-20679,
-20679,
-20685,
+20615,
+20615,
+20618,
+20682,
20685,
-20685,
-20685,
-20685,
-20685,
-20696,
-20733,
-20760,
-20766,
-20769,
-20792,
-20792,
-20792,
-20792,
-20813,
-20813,
-20813,
-20813,
-20826,
-20826,
-20846,
-20862,
-20880,
+20691,
+20700,
+20727,
+20776,
+20779,
+20800,
+20816,
+20858,
20887,
-20901,
-20908,
-20933,
-20938,
-20958,
-20969,
-20978,
-20978,
-20978,
-20985,
-20985,
-20985,
-21000,
-21010,
-21010,
-21014,
-21026,
-21033,
-21041,
-21041,
-21051,
-21051,
-21064,
-21071,
-21113,
-21120,
-21120,
-21127,
-21134,
-21142,
-21164,
-21164,
-21164,
-21188,
-21195,
-21208,
-21215,
-21226,
-21226,
-21226,
-21238,
-21249,
-21255,
-21255,
-21265,
-21279,
-21296,
-21301,
-21315,
-21321,
-21331,
-21331,
-21331,
-21337,
-21343,
-21343,
-21351,
-21351,
-21361,
-21368,
-21383,
-21383,
-21389,
-21413,
-21437,
-21449,
-21462,
-21478,
-21506,
-21534,
-21546,
-21546,
-21557,
-21580,
-21595,
-21595,
-21595,
-21595,
-21626,
-21626,
-21646,
-21670,
-21676,
-21688,
-21688,
-21716,
-21731,
-21762,
-21762,
-21762,
-21762,
-21762,
-21783,
-21789,
-21799,
-21828,
-21828,
+20898,
+20898,
+20898,
+20923,
+20926,
+20949,
+20952,
+20959,
+20965,
+20974,
+20980,
+20996,
+20996,
+21021,
+21039,
+21039,
+21052,
+21055,
+21076,
+21079,
+21091,
+21094,
+21114,
+21114,
+21117,
+21117,
+21124,
+21143,
+21196,
+21196,
+21196,
+21196,
+21196,
+21205,
+21212,
+21261,
+21278,
+21293,
+21333,
+21354,
+21366,
+21373,
+21408,
+21433,
+21439,
+21442,
+21442,
+21445,
+21448,
+21460,
+21463,
+21466,
+21476,
+21479,
+21529,
+21568,
+21574,
+21574,
+21577,
+21604,
+21611,
+21611,
+21631,
+21649,
+21689,
+21692,
+21714,
+21752,
+21752,
+21780,
+21787,
+21813,
21837,
-21845,
-21868,
-21874,
-21874,
-21880,
-21880,
-21889,
-21901,
-21910,
-21941,
-21941,
-21959,
-21959,
-21959,
-21966,
-21966,
-21972,
-21972,
-21995,
-22011,
+21840,
+21857,
+21885,
+21888,
+21888,
+21911,
+21918,
+21928,
+21928,
+21934,
+21970,
+21983,
+21992,
+22012,
+22019,
+22036,
22043,
-22043,
-22051,
-22051,
-22060,
-22060,
-22060,
-22074,
-22086,
-22086,
-22099,
-22099,
-22120,
-22120,
-22134,
-22144,
-22150,
-22158,
-22164,
-22164,
-22171,
-22199,
-22210,
-22210,
-22210,
-22220,
+22050,
+22078,
+22112,
+22115,
+22122,
+22125,
+22174,
+22208,
+22211,
+22221,
22228,
22228,
-22239,
-22261,
-22304,
-22304,
-22312,
-22349,
-22349,
-22349,
-22357,
-22381,
-22381,
-22390,
-22390,
-22390,
-22390,
-22402,
-22413,
-22413,
-22422,
-22422,
-22445,
-22445,
-22445,
-22456,
-22456,
+22240,
+22254,
+22254,
+22273,
+22291,
+22327,
+22355,
+22358,
+22368,
+22368,
+22368,
+22368,
+22384,
+22397,
+22415,
+22418,
+22418,
+22439,
+22459,
+22459,
22469,
-22479,
-22501,
-22512,
-22528,
-22528,
-22528,
-22528,
-22528,
-22528,
-22528,
-22540,
+22488,
+22507,
+22524,
+22524,
22540,
+22543,
22546,
22546,
22546,
22546,
-22569,
-22591,
-22591,
-22591,
-22591,
-22610,
-22655,
-22655,
-22667,
-22667,
-22677,
-22677,
-22692,
-22692,
-22702,
-22702,
-22702,
-22717,
-22736,
+22553,
+22575,
+22581,
+22584,
+22587,
+22595,
+22607,
+22607,
+22614,
+22624,
+22650,
+22686,
+22699,
+22705,
+22718,
22750,
-22755,
-22780,
-22785,
-22822,
-22844,
-22859,
-22871,
-22909,
-22949,
-22962,
-22973,
-22979,
-22988,
-23007,
-23027,
-23035,
-23072,
-23082,
-23082,
-23109,
-23116,
-23130,
-23158,
-23166,
-23166,
-23172,
-23177,
-23189,
-23219,
-23219,
-23250,
-23273,
-23281,
-23281,
-23281,
-23281,
-23281,
+22753,
+22772,
+22782,
+22789,
+22825,
+22838,
+22890,
+22913,
+22916,
+22926,
+22932,
+22946,
+22986,
+22986,
+23015,
+23050,
+23073,
+23076,
+23079,
+23101,
+23132,
+23152,
+23211,
+23237,
+23240,
+23259,
+23284,
23287,
-23287,
-23299,
-23305,
-23315,
-23315,
-23321,
-23328,
-23334,
-23355,
-23355,
-23355,
-23355,
-23355,
-23366,
-23390,
-23396,
-23396,
-23396,
-23396,
-23402,
-23418,
-23424,
-23424,
-23438,
-23446,
-23446,
-23446,
-23500,
-23525,
-23569,
-23592,
-23592,
-23592,
-23605,
-23614,
-23614,
-23614,
-23627,
-23633,
-23657,
-23673,
-23673,
-23673,
-23689,
-23689,
-23701,
-23701,
-23701,
-23713,
-23713,
-23713,
-23738,
-23758,
-23775,
-23775,
-23794,
-23794,
-23803,
-23803,
-23803,
-23803,
-23813,
-23826,
-23845,
-23845,
-23845,
-23845,
-23872,
-23872,
-23872,
-23888,
-23888,
-23900,
-23900,
-23906,
-23906,
-23906,
-23906,
-23906,
-23924,
-23924,
-23924,
-23930,
-23930,
-23939,
-23949,
-23971,
-23971,
-23971,
-24000,
-24012,
-24042,
-24042,
-24042,
-24042,
-24042,
-24070,
-24076,
-24094,
-24094,
-24094,
-24123,
-24123,
-24123,
-24134,
-24150,
+23302,
+23308,
+23311,
+23311,
+23311,
+23318,
+23325,
+23339,
+23352,
+23369,
+23380,
+23430,
+23437,
+23457,
+23460,
+23466,
+23473,
+23516,
+23519,
+23522,
+23534,
+23549,
+23568,
+23589,
+23609,
+23631,
+23642,
+23645,
+23676,
+23683,
+23693,
+23696,
+23730,
+23746,
+23790,
+23807,
+23819,
+23840,
+23843,
+23843,
+23868,
+23885,
+23898,
+23905,
+23921,
+23921,
+23938,
+23979,
+23988,
+23994,
+24022,
+24029,
+24059,
+24059,
+24081,
+24100,
+24100,
+24107,
+24131,
24150,
-24150,
-24150,
-24150,
-24150,
-24155,
-24179,
-24179,
-24189,
-24189,
-24189,
-24198,
-24198,
-24218,
-24218,
-24218,
-24234,
-24251,
-24257,
-24276,
+24181,
+24181,
+24184,
+24187,
+24209,
+24239,
+24252,
+24265,
+24271,
+24274,
+24300,
24305,
-24321,
-24321,
-24321,
-24334,
-24334,
-24334,
-24349,
-24356,
-24361,
-24372,
-24372,
-24372,
-24388,
-24396,
-24396,
-24402,
-24410,
-24410,
-24428,
-24428,
-24450,
-24450,
+24308,
+24311,
+24314,
+24330,
+24333,
+24333,
+24333,
+24336,
+24339,
+24345,
+24348,
+24351,
+24378,
+24384,
+24422,
+24435,
+24446,
24467,
-24485,
-24495,
-24495,
-24495,
-24507,
-24507,
-24514,
-24531,
-24531,
-24531,
+24470,
+24473,
+24492,
+24505,
+24508,
+24508,
24531,
-24531,
-24537,
-24537,
-24558,
-24572,
-24584,
-24584,
-24601,
-24601,
-24607,
-24615,
-24615,
-24632,
-24632,
-24632,
-24632,
-24661,
-24676,
-24676,
-24724,
-24751,
-24751,
-24774,
-24774,
-24783,
-24793,
-24793,
-24793,
-24813,
-24819,
-24819,
-24826,
-24826,
-24842,
-24858,
-24872,
-24872,
-24890,
-24890,
-24890,
-24890,
-24890,
-24890,
-24890,
-24890,
-24890,
-24906,
-24906,
-24917,
-24928,
-24947,
-24947,
-24947,
-24947,
-24947,
-24947,
-24947,
-24947,
-24947,
-24963,
-24983,
-24991,
-24991,
-24991,
-24991,
-24991,
-24991,
-24991,
-24991,
-25007,
-25007,
-25007,
-25007,
-25007,
-25007,
-25007,
-25030,
-25040,
-25040,
-25040,
-25040,
-25040,
-25059,
-25097,
+24551,
+24593,
+24617,
+24640,
+24652,
+24652,
+24668,
+24668,
+24668,
+24717,
+24748,
+24748,
+24766,
+24769,
+24775,
+24791,
+24791,
+24829,
+24829,
+24851,
+24861,
+24867,
+24913,
+24946,
+24946,
+24965,
+24968,
+24968,
+24981,
+24981,
+24994,
+24994,
+25009,
+25012,
+25015,
+25026,
+25031,
+25043,
+25043,
+25056,
+25056,
+25056,
+25056,
+25062,
+25075,
+25099,
+25106,
+25118,
+25118,
+25118,
+25118,
+25126,
25132,
-25149,
-25159,
-25169,
-25169,
-25169,
-25192,
-25192,
-25192,
-25192,
-25205,
-25205,
-25216,
-25221,
-25221,
-25233,
-25233,
-25240,
-25250,
-25256,
-25273,
-25273,
-25303,
-25321,
-25321,
-25321,
-25333,
-25333,
-25333,
-25333,
-25370,
-25370,
-25402,
-25418,
-25418,
-25439,
-25439,
-25454,
-25454,
-25454,
-25463,
-25477,
-25526,
-25526,
-25526,
-25526,
-25545,
-25562,
-25572,
-25572,
-25582,
-25582,
-25582,
+25183,
+25183,
+25200,
+25219,
+25225,
+25241,
+25247,
+25259,
+25274,
+25322,
+25322,
+25336,
+25336,
+25336,
+25360,
+25368,
+25368,
+25368,
+25374,
+25381,
+25387,
+25398,
+25417,
+25417,
+25417,
+25431,
+25466,
+25492,
+25500,
+25549,
+25569,
+25569,
+25590,
+25590,
25597,
-25610,
-25634,
-25641,
-25641,
-25641,
-25668,
-25668,
-25675,
-25707,
-25727,
-25727,
-25741,
-25756,
-25756,
-25779,
-25811,
-25811,
-25811,
-25817,
-25817,
-25817,
-25827,
-25827,
-25827,
-25827,
-25827,
-25836,
-25836,
-25836,
-25836,
-25850,
-25850,
+25616,
+25622,
+25640,
+25640,
+25640,
+25655,
+25655,
+25671,
+25671,
+25691,
+25706,
+25706,
+25706,
+25738,
+25738,
+25746,
+25759,
+25759,
+25781,
+25781,
+25802,
+25815,
25860,
-25884,
-25901,
-25922,
-25936,
-25946,
-25969,
-25969,
-25969,
-25969,
-25975,
-25975,
-25987,
-25987,
-26065,
-26065,
+25860,
+25867,
+25877,
+25877,
+25877,
+25913,
+25913,
+25953,
+25980,
+26002,
+26013,
+26026,
+26026,
+26032,
+26032,
+26038,
+26050,
+26050,
+26059,
26065,
-26084,
-26084,
-26103,
+26071,
+26087,
+26122,
26128,
-26141,
-26151,
-26169,
-26169,
-26169,
-26180,
-26191,
-26191,
-26191,
-26197,
-26197,
-26205,
-26211,
-26235,
-26235,
-26235,
-26235,
-26235,
-26235,
-26245,
-26245,
-26259,
-26259,
-26259,
-26259,
-26284,
-26284,
-26325,
-26325,
-26355,
-26364,
-26364,
-26402,
-26418,
-26418,
-26425,
-26432,
-26432,
-26454,
-26504,
-26513,
-26525,
-26525,
-26525,
-26525,
-26525,
-26545,
-26545,
-26571,
-26590,
-26597,
-26597,
-26597,
-26597,
-26597,
+26146,
+26164,
+26185,
+26212,
+26212,
+26229,
+26229,
+26236,
+26248,
+26266,
+26290,
+26311,
+26311,
+26311,
+26311,
+26321,
+26352,
+26365,
+26371,
+26371,
+26394,
+26403,
+26435,
+26435,
+26435,
+26435,
+26485,
+26516,
+26522,
+26528,
+26565,
+26565,
+26600,
26639,
-26648,
-26659,
-26666,
-26672,
-26672,
-26672,
-26672,
-26672,
-26694,
-26701,
-26701,
-26701,
-26724,
-26724,
-26746,
-26753,
-26774,
-26774,
-26774,
-26774,
-26806,
-26824,
-26824,
-26830,
-26852,
-26882,
-26882,
-26889,
-26889,
-26889,
-26889,
-26889,
-26889,
-26903,
-26911,
-26918,
-26918,
-26928,
-26948,
-26948,
-26970,
-26970,
-26985,
-26996,
-27045,
-27045,
-27058,
-27058,
-27068,
-27068,
-27104,
-27155,
-27155,
-27155,
-27155,
-27155,
-27172,
-27172,
-27172,
-27172,
-27189,
-27195,
-27195,
-27223,
-27223,
-27223,
-27223,
-27244,
-27290,
-27322,
-27332,
-27364,
+26649,
+26649,
+26649,
+26649,
+26700,
+26735,
+26745,
+26759,
+26778,
+26778,
+26801,
+26810,
+26810,
+26829,
+26836,
+26849,
+26849,
+26856,
+26856,
+26874,
+26883,
+26883,
+26883,
+26883,
+26899,
+26915,
+26915,
+26915,
+26915,
+26936,
+26951,
+26958,
+26958,
+26975,
+26994,
+27000,
+27010,
+27041,
+27066,
+27073,
+27110,
+27150,
+27150,
+27168,
+27168,
+27175,
+27184,
+27184,
+27184,
+27196,
+27209,
+27224,
+27242,
+27242,
+27248,
+27248,
+27278,
+27298,
+27314,
+27320,
+27363,
27371,
27371,
-27371,
-27401,
-27401,
-27417,
-27417,
+27393,
+27399,
+27399,
+27405,
+27405,
+27405,
+27411,
+27418,
+27425,
+27431,
27431,
-27470,
-27470,
-27470,
-27470,
-27484,
-27484,
-27484,
-27484,
-27484,
-27496,
-27496,
-27515,
-27515,
-27543,
-27560,
-27576,
-27604,
-27622,
-27631,
-27631,
-27638,
-27649,
-27672,
-27682,
-27682,
-27682,
-27707,
-27717,
-27724,
-27732,
-27755,
-27755,
-27755,
-27768,
-27768,
-27783,
-27789,
-27799,
-27799,
-27799,
-27818,
-27826,
-27838,
-27848,
-27848,
-27848,
-27855,
-27862,
-27862,
-27896,
-27921,
-27921,
-27943,
-27954,
-27954,
-27976,
-27976,
-27976,
-27985,
-28002,
-28012,
-28019,
-28034,
-28034,
-28046,
-28068,
-28097,
-28122,
-28122,
-28131,
-28137,
-28151,
-28151,
-28172,
-28190,
+27455,
+27469,
+27475,
+27475,
+27475,
+27475,
+27475,
+27500,
+27500,
+27523,
+27523,
+27558,
+27574,
+27580,
+27650,
+27663,
+27679,
+27679,
+27733,
+27745,
+27754,
+27761,
+27774,
+27774,
+27782,
+27816,
+27854,
+27854,
+27875,
+27875,
+27875,
+27930,
+27947,
+27967,
+27967,
+27979,
+27986,
+28007,
+28015,
+28036,
+28036,
+28060,
+28060,
+28078,
+28078,
+28078,
+28085,
+28085,
+28091,
+28105,
+28119,
+28119,
+28157,
+28157,
+28163,
+28175,
+28196,
+28196,
28196,
-28211,
-28211,
-28264,
-28273,
-28286,
-28324,
-28324,
-28324,
-28354,
-28354,
-28361,
-28397,
-28417,
-28417,
-28424,
-28435,
-28461,
-28461,
-28470,
-28483,
-28483,
-28483,
-28483,
-28483,
-28483,
-28483,
-28515,
-28531,
-28531,
+28230,
+28230,
+28230,
+28230,
+28256,
+28265,
+28265,
+28281,
+28281,
+28299,
+28310,
+28325,
+28325,
+28344,
+28353,
+28353,
+28389,
+28389,
+28389,
+28399,
+28421,
+28444,
+28444,
+28478,
+28525,
+28525,
28549,
-28575,
-28575,
-28575,
-28582,
-28599,
-28615,
-28630,
-28630,
+28549,
+28579,
+28579,
+28594,
+28607,
+28621,
+28638,
28672,
-28711,
-28723,
-28723,
-28731,
-28752,
-28752,
-28752,
-28763,
-28763,
-28775,
-28775,
-28775,
-28775,
-28775,
-28775,
-28805,
-28814,
-28830,
-28861,
-28882,
-28882,
-28902,
-28918,
-28937,
-28952,
-28959,
-28998,
-29009,
-29009,
-29009,
-29009,
-29019,
-29019,
-29019,
-29019,
-29019,
-29057,
-29069,
-29076,
-29076,
-29076,
-29076,
-29076,
-29082,
-29082,
-29082,
-29117,
-29117,
-29117,
+28679,
+28679,
+28679,
+28690,
+28738,
+28748,
+28748,
+28748,
+28748,
+28748,
+28769,
+28803,
+28810,
+28810,
+28819,
+28819,
+28819,
+28826,
+28853,
+28853,
+28853,
+28860,
+28873,
+28898,
+28898,
+28913,
+28913,
+28913,
+28930,
+28930,
+28956,
+28981,
+29024,
+29024,
+29044,
+29044,
+29074,
+29085,
+29104,
29117,
-29134,
-29134,
-29159,
-29159,
-29185,
-29185,
-29196,
-29196,
-29242,
-29248,
-29256,
-29280,
-29301,
-29307,
-29307,
-29307,
-29314,
-29314,
-29338,
-29356,
-29367,
-29367,
-29381,
-29391,
-29399,
-29399,
-29414,
-29434,
-29434,
-29441,
-29473,
-29484,
-29503,
-29520,
-29520,
-29548,
-29565,
-29572,
-29572,
-29572,
-29572,
-29572,
-29597,
-29597,
-29620,
-29655,
-29660,
-29660,
-29660,
-29667,
-29674,
-29688,
-29698,
-29705,
-29728,
-29740,
-29740,
-29761,
-29761,
-29767,
-29780,
-29787,
-29794,
-29794,
-29807,
-29820,
-29820,
-29820,
-29820,
-29832,
-29844,
-29855,
-29855,
-29855,
-29867,
-29867,
-29867,
-29867,
-29881,
-29881,
-29905,
-29905,
-29905,
-29923,
-29923,
-29948,
-29948,
-29948,
-29976,
-29986,
-29996,
-29996,
-30030,
-30030,
-30054,
-30054,
-30070,
-30070,
-30070,
-30077,
-30077,
-30087,
-30107,
-30107,
-30115,
-30141,
-30178,
-30178,
-30201,
-30201,
-30201,
-30207,
-30229,
-30239,
-30254,
-30268,
-30277,
-30311,
-30323,
-30323,
-30331,
-30331,
-30331,
-30331,
-30331,
-30353,
-30365,
-30374,
-30374,
-30374,
-30380,
-30380,
-30380,
-30380,
-30410,
-30410,
-30410,
-30443,
-30443,
-30453,
-30462,
-30472,
-30472,
-30472,
-30472,
-30472,
-30472,
-30489,
-30500,
-30500,
-30500,
-30532,
-30532,
-30553,
-30577,
-30599,
-30599,
-30609,
-30640,
-30640,
-30640,
-30664,
-30676,
-30676,
-30676,
-30692,
-30719,
-30728,
-30728,
-30742,
-30742,
-30749,
-30749,
-30760,
-30770,
-30770,
-30783,
-30783,
-30783,
-30804,
-30847,
-30847,
-30847,
-30847,
-30857,
-30857,
-30857,
-30857,
-30875,
-30875,
-30895,
-30895,
-30921,
-30926,
-30926,
-30926,
+29125,
+29125,
+29146,
+29153,
+29153,
+29160,
+29175,
+29189,
+29189,
+29214,
+29214,
+29214,
+29224,
+29224,
+29224,
+29234,
+29299,
+29318,
+29325,
+29325,
+29343,
+29400,
+29417,
+29417,
+29436,
+29436,
+29436,
+29436,
+29454,
+29460,
+29460,
+29478,
+29478,
+29478,
+29487,
+29487,
+29516,
+29516,
+29549,
+29559,
+29559,
+29576,
+29587,
+29609,
+29609,
+29630,
+29630,
+29644,
+29644,
+29644,
+29644,
+29664,
+29664,
+29686,
+29711,
+29734,
+29734,
+29741,
+29752,
+29752,
+29778,
+29798,
+29805,
+29819,
+29835,
+29842,
+29849,
+29866,
+29884,
+29891,
+29891,
+29919,
+29943,
+29993,
+30000,
+30010,
+30016,
+30046,
+30069,
+30085,
+30085,
+30102,
+30124,
+30143,
+30150,
+30150,
+30169,
+30169,
+30216,
+30230,
+30256,
+30256,
+30265,
+30280,
+30304,
+30320,
+30324,
+30340,
+30354,
+30364,
+30382,
+30396,
+30396,
+30407,
+30457,
+30473,
+30490,
+30490,
+30490,
+30514,
+30514,
+30539,
+30562,
+30583,
+30615,
+30622,
+30622,
+30629,
+30638,
+30662,
+30662,
+30688,
+30712,
+30712,
+30721,
+30721,
+30721,
+30721,
+30721,
+30758,
+30792,
+30811,
+30811,
+30811,
+30843,
+30843,
+30876,
+30876,
+30876,
+30876,
+30889,
+30909,
+30923,
30945,
30945,
-30945,
-30945,
-30959,
-30959,
-30959,
-30959,
-30972,
-30972,
-30984,
-31011,
-31011,
-31048,
-31056,
-31056,
-31070,
-31077,
-31077,
-31110,
-31110,
-31115,
-31122,
-31139,
-31159,
-31159,
-31165,
-31171,
-31171,
-31197,
-31204,
-31211,
-31211,
-31221,
-31228,
-31228,
-31245,
-31245,
-31245,
-31252,
-31265,
-31265,
-31265,
-31265,
-31294,
-31305,
-31320,
-31333,
-31333,
-31333,
-31343,
-31350,
-31357,
-31369,
-31369,
-31379,
-31385,
-31391,
-31407,
-31407,
-31407,
-31423,
-31423,
-31423,
-31434,
-31454,
-31470,
-31511,
-31521,
-31521,
-31521,
-31542,
-31582,
-31582,
-31597,
-31597,
-31597,
-31614,
-31623,
-31645,
-31645,
+30980,
+31031,
+31059,
+31078,
+31108,
+31125,
+31137,
+31174,
+31200,
+31200,
+31200,
+31200,
+31207,
+31237,
+31237,
+31259,
+31279,
+31307,
+31335,
+31378,
+31378,
+31378,
+31378,
+31397,
+31437,
+31443,
+31467,
+31467,
+31483,
+31527,
+31537,
+31548,
+31557,
+31564,
+31564,
+31589,
+31603,
+31647,
31661,
-31661,
-31669,
-31669,
-31676,
-31676,
-31706,
-31720,
-31726,
-31743,
-31785,
-31804,
-31817,
-31817,
-31835,
-31846,
-31863,
-31885,
-31885,
-31896,
-31907,
-31907,
-31907,
-31922,
-31922,
-31929,
-31929,
-31929,
-31936,
-31943,
-31949,
-31949,
-31949,
-31959,
-32006,
-32024,
-32031,
-32031,
-32038,
-32063,
-32095,
-32095,
-32105,
-32105,
-32105,
-32105,
-32105,
-32125,
-32134,
-32140,
-32176,
-32185,
-32195,
-32195,
-32195,
-32195,
-32202,
-32202,
-32218,
-32236,
-32259,
-32294,
+31677,
+31677,
+31690,
+31709,
+31709,
+31762,
+31769,
+31776,
+31799,
+31841,
+31841,
+31848,
+31869,
+31875,
+31875,
+31904,
+31904,
+31925,
+31939,
+31952,
+31984,
+31984,
+31984,
+32029,
+32029,
+32029,
+32045,
+32055,
+32086,
+32086,
+32124,
+32152,
+32152,
+32159,
+32159,
+32184,
+32190,
+32211,
+32231,
+32231,
+32238,
+32261,
+32268,
+32284,
+32284,
+32284,
+32284,
32300,
-32305,
-32305,
-32305,
32323,
-32337,
-32352,
-32359,
-32374,
-32381,
-32388,
-32388,
-32388,
-32402,
+32351,
+32358,
+32396,
+32396,
+32396,
32402,
32402,
-32402,
-32418,
-32428,
-32428,
-32428,
-32450,
-32450,
-32450,
-32462,
-32467,
-32480,
-32480,
-32480,
-32487,
-32502,
-32509,
-32525,
-32560,
-32570,
-32583,
-32597,
-32623,
-32637,
-32644,
-32667,
-32707,
-32725,
-32725,
-32747,
-32747,
-32751,
-32758,
-32789,
-32807,
-32824,
-32824,
-32824,
-32824,
-32843,
-32843,
-32850,
-32876,
-32908,
-32915,
-32946,
-32965,
-32965,
-32982,
-33002,
-33009,
-33029,
-33064,
-33084,
-33098,
-33098,
-33098,
-33098,
+32414,
+32414,
+32438,
+32449,
+32455,
+32483,
+32490,
+32510,
+32541,
+32548,
+32578,
+32585,
+32592,
+32592,
+32592,
+32616,
+32625,
+32641,
+32671,
+32681,
+32681,
+32688,
+32711,
+32737,
+32754,
+32761,
+32761,
+32777,
+32810,
+32817,
+32817,
+32817,
+32817,
+32817,
+32844,
+32867,
+32901,
+32943,
+32956,
+32974,
+32983,
+33004,
+33004,
+33050,
+33066,
+33072,
+33072,
+33080,
+33080,
33110,
33110,
-33151,
-33158,
-33180,
-33198,
-33205,
-33227,
-33227,
-33237,
-33237,
-33253,
-33258,
-33277,
-33292,
-33315,
-33315,
-33333,
-33348,
-33348,
-33348,
+33134,
+33157,
+33164,
+33200,
+33200,
+33207,
+33244,
+33244,
+33309,
+33316,
+33316,
+33316,
+33316,
+33316,
+33323,
+33341,
33348,
-33348,
-33348,
-33348,
-33355,
-33355,
-33355,
-33390,
-33408,
-33423,
-33437,
-33452,
-33458,
-33465,
-33480,
-33480,
+33361,
+33394,
+33394,
+33394,
+33394,
+33432,
+33442,
+33470,
+33470,
+33470,
+33487,
33487,
-33494,
-33504,
-33511,
-33551,
-33551,
-33558,
-33589,
-33595,
-33595,
+33487,
+33516,
+33548,
+33562,
+33562,
+33569,
+33584,
+33584,
+33584,
33602,
-33627,
-33644,
-33668,
-33668,
-33668,
-33676,
-33676,
-33716,
-33728,
-33747,
-33747,
-33769,
-33775,
-33789,
-33803,
-33803,
-33810,
-33810,
-33810,
-33820,
-33820,
-33820,
-33820,
-33843,
-33843,
-33843,
-33879,
-33889,
-33889,
-33889,
-33903,
-33917,
-33931,
-33959,
-33993,
-34000,
-34014,
-34037,
-34043,
-34055,
-34055,
+33621,
+33621,
+33629,
+33645,
+33645,
+33652,
+33652,
+33672,
+33691,
+33707,
+33714,
+33721,
+33721,
+33735,
+33766,
+33772,
+33772,
+33772,
+33779,
+33779,
+33824,
+33844,
+33844,
+33850,
+33867,
+33867,
+33874,
+33874,
+33874,
+33874,
+33901,
+33946,
+33960,
+33971,
+34019,
+34050,
34077,
-34083,
-34090,
-34099,
-34099,
-34115,
-34115,
-34133,
-34140,
-34167,
-34172,
-34184,
-34221,
-34245,
-34252,
-34252,
+34084,
+34103,
+34110,
+34121,
+34128,
+34157,
+34193,
+34193,
+34220,
34259,
-34318,
+34272,
+34272,
+34272,
+34279,
+34294,
+34300,
+34313,
34318,
34325,
-34325,
-34352,
-34400,
-34415,
-34422,
-34422,
-34431,
-34438,
-34445,
-34445,
-34473,
-34473,
-34489,
-34489,
-34489,
-34489,
-34499,
-34499,
-34499,
-34516,
-34536,
-34551,
-34564,
-34580,
-34580,
-34580,
-34589,
+34333,
+34347,
+34354,
+34361,
+34368,
+34368,
+34368,
+34408,
+34433,
+34467,
+34504,
+34504,
+34547,
+34547,
+34554,
+34561,
+34561,
+34561,
+34582,
34589,
-34589,
-34613,
-34648,
-34648,
-34648,
-34655,
-34664,
-34681,
-34681,
-34698,
-34698,
-34720,
-34736,
+34611,
+34627,
+34637,
+34637,
+34637,
+34641,
+34666,
+34666,
+34683,
+34690,
+34690,
+34699,
+34699,
+34716,
34749,
34749,
-34765,
-34778,
-34785,
-34795,
-34819,
-34819,
-34829,
-34841,
-34848,
-34854,
-34854,
-34854,
-34878,
-34894,
-34894,
-34900,
-34917,
-34934,
-34940,
-34970,
-34998,
-34998,
-35004,
-35004,
-35012,
-35012,
-35012,
-35020,
-35020,
-35032,
-35038,
-35062,
-35062,
-35062,
-35068,
-35068,
-35082,
-35092,
-35096,
-35107,
-35118,
-35134,
-35155,
-35155,
-35166,
-35178,
-35178,
-35195,
-35201,
-35201,
-35201,
-35226,
-35226,
+34756,
+34756,
+34756,
+34756,
+34777,
+34777,
+34777,
+34820,
+34827,
+34862,
+34874,
+34881,
+34881,
+34903,
+34903,
+34903,
+34920,
+34949,
+34949,
+34949,
+34949,
+34968,
+34968,
+35003,
+35003,
+35015,
+35039,
+35039,
+35081,
+35093,
+35093,
+35115,
+35115,
+35132,
+35132,
+35132,
+35132,
+35157,
35226,
-35226,
-35256,
-35262,
-35272,
-35280,
+35241,
+35248,
+35266,
+35266,
+35273,
+35273,
+35273,
+35273,
+35299,
35299,
-35332,
-35354,
-35354,
-35354,
-35370,
-35386,
-35417,
-35417,
-35460,
-35473,
-35478,
-35495,
-35504,
-35504,
-35518,
-35552,
-35589,
-35624,
-35624,
-35637,
-35637,
-35643,
-35643,
-35669,
-35682,
-35695,
-35702,
-35709,
-35709,
-35726,
-35739,
-35749,
-35756,
-35756,
-35778,
-35803,
-35810,
-35829,
-35883,
+35306,
+35334,
+35365,
+35365,
+35406,
+35428,
+35428,
+35441,
+35474,
+35506,
+35506,
+35529,
+35529,
+35548,
+35555,
+35574,
+35574,
+35574,
+35595,
+35630,
+35644,
+35649,
+35698,
+35750,
+35750,
+35762,
+35762,
+35762,
+35798,
+35842,
+35849,
+35866,
+35878,
+35885,
+35892,
35899,
-35905,
-35911,
-35911,
+35899,
+35906,
+35906,
+35906,
35923,
-35947,
-35954,
-35980,
-35987,
-36034,
-36052,
-36063,
-36095,
-36106,
-36106,
+35944,
+35951,
+35961,
+35978,
+35984,
+35992,
+36023,
+36060,
+36076,
+36085,
36113,
-36120,
-36140,
-36140,
-36153,
-36160,
-36160,
-36167,
-36203,
-36203,
-36218,
-36218,
-36225,
-36253,
-36259,
-36284,
-36296,
-36310,
-36324,
-36331,
-36344,
-36367,
-36367,
-36367,
-36412,
-36412,
-36422,
-36463,
-36463,
-36463,
-36479,
-36490,
-36513,
-36520,
-36520,
-36527,
-36527,
-36527,
-36540,
-36574,
-36594,
-36594,
-36605,
-36621,
-36621,
-36641,
-36641,
-36641,
-36659,
-36682,
-36682,
-36682,
-36682,
-36705,
-36705,
-36705,
-36720,
-36720,
-36755,
-36755,
-36771,
-36771,
-36771,
-36788,
-36806,
-36835,
-36845,
-36875,
-36875,
-36903,
-36921,
-36928,
-36928,
-36940,
-36940,
-36940,
-36966,
-36966,
-36973,
-36983,
-36998,
-37004,
-37014,
-37024,
-37024,
-37032,
-37038,
-37038,
-37061,
-37074,
-37074,
-37091,
-37098,
-37105,
-37105,
-37133,
-37141,
-37141,
-37148,
-37191,
-37191,
-37197,
-37197,
-37210,
-37224,
-37224,
-37231,
-37250,
-37257,
-37273,
-37273,
-37280,
-37287,
-37294,
-37300,
-37307,
-37330,
-37348,
-37348,
-37359,
-37359,
-37359,
-37377,
-37392,
-37398,
-37412,
-37431,
-37469,
-37486,
-37508,
-37517,
-37535,
-37535,
-37542,
-37542,
-37549,
-37549,
-37549,
-37549,
-37556,
-37576,
-37576,
-37583,
-37590,
-37597,
-37604,
-37604,
-37621,
-37635,
-37676,
-37676,
-37704,
-37711,
-37728,
+36144,
+36144,
+36159,
+36166,
+36166,
+36173,
+36173,
+36201,
+36201,
+36220,
+36227,
+36227,
+36227,
+36247,
+36263,
+36270,
+36270,
+36315,
+36315,
+36322,
+36330,
+36354,
+36408,
+36420,
+36420,
+36440,
+36454,
+36454,
+36454,
+36461,
+36474,
+36529,
+36569,
+36667,
+36674,
+36674,
+36700,
+36707,
+36707,
+36714,
+36721,
+36721,
+36731,
+36760,
+36781,
+36793,
+36800,
+36800,
+36847,
+36854,
+36868,
+36938,
+36945,
+36967,
+36967,
+36992,
+37008,
+37050,
+37050,
+37050,
+37068,
+37081,
+37088,
+37113,
+37145,
+37145,
+37145,
+37145,
+37165,
+37171,
+37171,
+37198,
+37198,
+37211,
+37239,
+37247,
+37298,
+37341,
+37341,
+37367,
+37400,
+37422,
+37458,
+37492,
+37530,
+37530,
+37530,
+37537,
+37551,
+37566,
+37592,
+37614,
+37614,
+37631,
+37638,
+37645,
+37652,
+37664,
+37702,
+37714,
+37721,
37728,
-37737,
-37737,
-37737,
-37750,
-37757,
-37778,
-37785,
-37785,
-37819,
-37826,
-37833,
-37843,
-37850,
-37869,
-37914,
-37921,
-37935,
+37740,
+37770,
+37770,
+37793,
+37809,
+37830,
+37830,
+37841,
+37841,
+37867,
+37867,
+37883,
+37890,
+37890,
+37910,
+37926,
37942,
-37949,
-37982,
-38013,
-38013,
-38013,
-38023,
-38057,
-38077,
-38097,
-38110,
-38117,
-38123,
-38133,
-38133,
-38133,
-38140,
-38140,
-38148,
-38159,
-38179,
-38192,
-38205,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38218,
-38225,
-38225,
-38230,
-38246,
-38258,
-38280,
-38287,
-38294,
-38294,
-38294,
-38301,
-38318,
-38318,
-38340,
-38371,
-38371,
-38384,
-38420,
-38440,
-38453,
-38481,
-38506,
-38522,
-38534,
+37957,
+37991,
+38010,
+38010,
+38026,
+38079,
+38086,
+38093,
+38112,
+38119,
+38136,
+38136,
+38155,
+38189,
+38210,
+38220,
+38248,
+38278,
+38278,
+38314,
+38339,
+38339,
+38354,
+38370,
+38385,
+38399,
+38417,
+38441,
+38469,
+38476,
+38483,
+38499,
+38499,
+38499,
+38521,
38559,
-38559,
-38559,
-38564,
-38564,
-38581,
-38604,
-38604,
-38611,
-38620,
-38626,
-38635,
-38635,
-38635,
-38666,
-38674,
+38599,
+38617,
+38624,
+38624,
+38660,
+38673,
38688,
-38693,
-38710,
-38722,
-38722,
-38722,
-38729,
-38734,
-38752,
-38792,
-38818,
-38825,
+38742,
+38774,
+38774,
+38799,
+38799,
+38830,
+38861,
+38861,
38861,
+38861,
+38861,
+38890,
38902,
-38934,
-38949,
-38949,
-38960,
-38969,
-38985,
-38985,
-38996,
-39013,
-39024,
-39024,
-39032,
-39061,
-39074,
+38909,
+38944,
+38989,
+39007,
+39045,
+39063,
39089,
-39123,
-39123,
-39123,
-39140,
-39161,
-39180,
-39206,
-39215,
-39254,
-39261,
-39277,
-39284,
-39314,
-39314,
-39330,
-39340,
-39340,
-39371,
-39371,
-39392,
+39096,
+39109,
+39109,
+39114,
+39127,
+39162,
+39177,
+39177,
+39200,
+39218,
+39226,
+39226,
+39257,
+39293,
+39293,
+39324,
+39324,
+39352,
+39364,
+39364,
+39377,
+39395,
+39395,
+39413,
39430,
-39430,
-39437,
-39444,
-39461,
-39468,
-39468,
-39485,
-39517,
-39524,
-39538,
-39543,
-39548,
-39555,
+39459,
+39469,
+39469,
+39479,
+39479,
+39479,
+39503,
+39518,
+39528,
+39528,
+39528,
+39540,
+39565,
+39565,
39581,
-39588,
-39588,
-39609,
-39609,
-39616,
-39652,
+39605,
+39622,
+39653,
+39670,
39670,
-39677,
-39677,
-39684,
-39691,
-39702,
-39717,
-39717,
-39717,
-39724,
-39749,
-39760,
-39766,
-39775,
-39791,
-39791,
-39814,
-39827,
-39827,
-39837,
-39859};
+39670,
+39670,
+39683,
+39689,
+39708,
+39743,
+39743,
+39743,
+39743,
+39743,
+39750,
+39750,
+39750,
+39761,
+39761,
+39777,
+39805,
+39845,
+39855,
+39855,
+39855,
+39855,
+39887,
+39887,
+39887,
+39887,
+39916,
+39916,
+39936,
+39943,
+39962,
+39962,
+39976,
+39976,
+40005,
+40011,
+40011,
+40011,
+40039,
+40051,
+40071,
+40087,
+40087,
+40087,
+40099,
+40099,
+40099,
+40148,
+40170,
+40170,
+40183,
+40183,
+40210,
+40210,
+40210,
+40210,
+40210,
+40221,
+40221,
+40221,
+40221,
+40243,
+40271,
+40271,
+40293,
+40309,
+40314,
+40329,
+40329,
+40354,
+40354,
+40354,
+40354,
+40373,
+40383,
+40383,
+40383,
+40383,
+40396,
+40404,
+40411,
+40417,
+40417,
+40417,
+40417,
+40424,
+40462,
+40473,
+40473,
+40479,
+40479,
+40510,
+40539,
+40539,
+40539,
+40539,
+40539,
+40539,
+40539,
+40556,
+40556,
+40577,
+40588,
+40588,
+40588,
+40588,
+40597,
+40614,
+40623,
+40623,
+40623,
+40623,
+40635,
+40635,
+40635,
+40652,
+40652,
+40652,
+40663,
+40702,
+40724,
+40724,
+40724,
+40724,
+40724,
+40750,
+40750,
+40759,
+40781,
+40781,
+40791,
+40817,
+40817,
+40817,
+40817,
+40817,
+40840,
+40891,
+40891,
+40891,
+40936,
+40990,
+40997,
+41022,
+41071,
+41086,
+41086,
+41102,
+41110,
+41131,
+41157,
+41157,
+41198,
+41216,
+41216,
+41216,
+41235,
+41235,
+41235,
+41247,
+41273,
+41273,
+41273,
+41286,
+41286,
+41320,
+41351,
+41377,
+41403,
+41403,
+41416,
+41426,
+41426,
+41442,
+41458,
+41458,
+41458,
+41470,
+41470,
+41487,
+41498,
+41525,
+41525,
+41544,
+41550,
+41581,
+41598,
+41608,
+41645,
+41654,
+41687,
+41715,
+41715,
+41721,
+41763,
+41776,
+41800,
+41800,
+41800,
+41826,
+41853,
+41879,
+41879,
+41898,
+41908,
+41908,
+41908,
+41926,
+41926,
+41926,
+41943,
+41962,
+41972,
+41998,
+42013,
+42027,
+42027,
+42064,
+42064,
+42073,
+42073,
+42087,
+42101,
+42101,
+42138,
+42148,
+42185,
+42185,
+42208,
+42244,
+42284,
+42284,
+42311,
+42311,
+42321,
+42367,
+42367,
+42367,
+42413,
+42413,
+42427,
+42427,
+42447,
+42486,
+42486,
+42486,
+42509,
+42518,
+42556,
+42556,
+42556,
+42568,
+42586,
+42586,
+42586,
+42605,
+42605,
+42605,
+42628,
+42638,
+42651,
+42651,
+42651,
+42660,
+42681,
+42731,
+42769,
+42769,
+42769,
+42794,
+42802,
+42831,
+42862,
+42862,
+42862,
+42862,
+42911,
+42911,
+42931,
+42946,
+42946,
+42977,
+42994,
+43024,
+43024,
+43024,
+43030,
+43030,
+43084,
+43116,
+43163,
+43163,
+43175,
+43175,
+43175,
+43175,
+43175,
+43175,
+43200,
+43206,
+43206,
+43217,
+43249,
+43249,
+43268,
+43268,
+43285,
+43285,
+43306,
+43306,
+43306,
+43306,
+43324,
+43342,
+43342,
+43361,
+43375,
+43375,
+43375,
+43391,
+43418,
+43424,
+43424,
+43436,
+43443,
+43443,
+43443,
+43473,
+43473,
+43473,
+43486,
+43486,
+43501,
+43501,
+43534,
+43552,
+43567,
+43583,
+43583,
+43599,
+43599,
+43621,
+43621,
+43630,
+43646,
+43663,
+43663,
+43680,
+43680,
+43680,
+43692,
+43720,
+43753,
+43765,
+43778,
+43795,
+43795,
+43795,
+43811,
+43811,
+43811,
+43823,
+43879,
+43895,
+43895,
+43930,
+43930,
+43954,
+43954,
+43971,
+43971,
+43971,
+44004,
+44029,
+44038,
+44048,
+44060,
+44060,
+44060,
+44066,
+44075,
+44090,
+44100,
+44137,
+44157,
+44166,
+44175,
+44175,
+44180,
+44188,
+44210,
+44220,
+44220,
+44220,
+44220,
+44220,
+44220,
+44236,
+44246,
+44255,
+44279,
+44279,
+44302,
+44332,
+44332,
+44332,
+44352,
+44368,
+44391,
+44391,
+44391,
+44420,
+44420,
+44444,
+44479,
+44479,
+44497,
+44510,
+44510,
+44510,
+44510,
+44510,
+44510,
+44543,
+44550,
+44550,
+44557,
+44623,
+44623,
+44642,
+44642,
+44642,
+44679,
+44691,
+44774,
+44774,
+44774,
+44819,
+44836,
+44895,
+44895,
+44930,
+44945,
+44945,
+45013,
+45020,
+45083,
+45099,
+45111,
+45119,
+45129,
+45136,
+45148,
+45148,
+45148,
+45154,
+45171,
+45171,
+45171,
+45171,
+45171,
+45182,
+45182,
+45208,
+45217,
+45255,
+45255,
+45274,
+45274,
+45274,
+45303,
+45309,
+45323,
+45323,
+45354,
+45363,
+45372,
+45372,
+45388,
+45421,
+45449,
+45463,
+45477,
+45504,
+45504,
+45521,
+45521,
+45537,
+45556,
+45556,
+45563,
+45569,
+45569,
+45569,
+45587,
+45593,
+45611,
+45616,
+45616,
+45628,
+45648,
+45692,
+45710,
+45740,
+45773,
+45787,
+45805,
+45811,
+45828,
+45828,
+45861,
+45875,
+45881,
+45881,
+45881,
+45891,
+45891,
+45908,
+45920,
+45920,
+45932,
+45932,
+45932,
+45932,
+45947,
+45966,
+45966,
+46003,
+46039,
+46045,
+46081,
+46087,
+46104,
+46133,
+46150,
+46165,
+46176,
+46176,
+46176,
+46176,
+46181,
+46187,
+46187,
+46187,
+46187,
+46196,
+46202,
+46202,
+46202,
+46213,
+46213,
+46218,
+46218,
+46235,
+46235,
+46235,
+46235,
+46240,
+46302,
+46302,
+46324,
+46324,
+46324,
+46324,
+46324,
+46324,
+46324,
+46324,
+46344,
+46344,
+46356,
+46365,
+46365,
+46396,
+46396,
+46402,
+46430,
+46444,
+46467,
+46492,
+46492,
+46534,
+46563,
+46563,
+46584,
+46595,
+46605,
+46616,
+46616,
+46629,
+46629,
+46654,
+46660,
+46676,
+46676,
+46676,
+46682,
+46682,
+46682,
+46682,
+46711,
+46728,
+46728,
+46728,
+46728,
+46782,
+46797,
+46802,
+46818,
+46818,
+46824,
+46853,
+46853,
+46870,
+46876,
+46876,
+46928,
+46961,
+46981,
+46981,
+47023,
+47023,
+47023,
+47023,
+47075,
+47112,
+47134,
+47146,
+47162,
+47172,
+47172,
+47172,
+47177,
+47177,
+47177,
+47182,
+47193,
+47193,
+47214,
+47256,
+47278,
+47289,
+47338,
+47344,
+47344,
+47367,
+47367,
+47414,
+47423,
+47423,
+47434,
+47451,
+47464,
+47464,
+47464,
+47464,
+47464,
+47479,
+47479,
+47520,
+47520,
+47533,
+47546,
+47552,
+47561,
+47573,
+47573,
+47573,
+47591,
+47591,
+47591,
+47591,
+47596,
+47609,
+47609,
+47620,
+47650,
+47650,
+47650,
+47655,
+47693,
+47708,
+47708,
+47732,
+47737,
+47742,
+47754,
+47768,
+47800,
+47818,
+47818,
+47829,
+47850,
+47850,
+47908,
+47908,
+47930,
+47936,
+47936,
+47978,
+47978,
+47983,
+48002,
+48012,
+48025,
+48025,
+48034,
+48049,
+48083,
+48093,
+48138,
+48138,
+48153,
+48182,
+48205,
+48205,
+48205,
+48212,
+48212,
+48212,
+48234,
+48234,
+48234,
+48234,
+48250,
+48264,
+48264,
+48280,
+48280,
+48295,
+48295,
+48295,
+48295,
+48319,
+48319,
+48319,
+48328,
+48328,
+48334,
+48356,
+48356,
+48362,
+48419,
+48469,
+48488,
+48494,
+48534,
+48534,
+48559,
+48569,
+48583,
+48604,
+48620,
+48670,
+48688,
+48688,
+48697,
+48710,
+48710,
+48710,
+48724,
+48751,
+48757,
+48770,
+48782,
+48797,
+48835,
+48835,
+48840,
+48886,
+48906,
+48922,
+48931,
+48931,
+48951,
+48951,
+48951,
+48962,
+48962,
+48969,
+49033,
+49033,
+49033,
+49074,
+49116,
+49116,
+49123,
+49130,
+49130,
+49164,
+49170,
+49187,
+49206,
+49215,
+49234,
+49261,
+49261,
+49273,
+49324,
+49324,
+49357,
+49404,
+49404,
+49429,
+49448,
+49448,
+49466,
+49472,
+49499,
+49499,
+49499,
+49543,
+49572,
+49579,
+49622,
+49632,
+49685,
+49724,
+49724,
+49724,
+49724,
+49724,
+49761,
+49769,
+49769,
+49797,
+49797,
+49832,
+49832,
+49832,
+49859,
+49859,
+49873,
+49884,
+49884,
+49920,
+49920,
+49931,
+49947,
+49961,
+49978,
+50008,
+50038,
+50038,
+50038,
+50060,
+50076,
+50089,
+50089,
+50089,
+50102,
+50130,
+50130,
+50146,
+50146,
+50146,
+50151,
+50159,
+50184,
+50206,
+50233,
+50250,
+50250,
+50266,
+50274,
+50274,
+50274,
+50274,
+50287,
+50315,
+50315,
+50315,
+50327,
+50327,
+50334,
+50334,
+50366,
+50372,
+50402,
+50402,
+50434,
+50474,
+50494,
+50494,
+50510,
+50510,
+50510,
+50510,
+50510,
+50510,
+50515,
+50515,
+50536,
+50557,
+50578,
+50595,
+50595,
+50595,
+50620,
+50626,
+50626,
+50644,
+50656,
+50671,
+50671,
+50671,
+50695,
+50730,
+50730,
+50740,
+50746,
+50750,
+50765,
+50771,
+50771,
+50817,
+50817,
+50828,
+50837,
+50837,
+50844,
+50844,
+50894,
+50894,
+50905,
+50905,
+50905,
+50944,
+50944,
+50944,
+50975,
+51011,
+51024,
+51024,
+51024,
+51042,
+51042,
+51042,
+51054,
+51054,
+51064,
+51073,
+51073,
+51073,
+51073,
+51073,
+51073,
+51098,
+51117,
+51117,
+51117,
+51137,
+51137,
+51137,
+51200,
+51221,
+51246,
+51246,
+51272,
+51307,
+51334,
+51334,
+51334,
+51334,
+51354,
+51354,
+51370,
+51377,
+51377,
+51415,
+51431,
+51431,
+51431,
+51450,
+51450,
+51456,
+51499,
+51517,
+51529,
+51550,
+51550,
+51558,
+51569,
+51569,
+51569,
+51569,
+51569,
+51569,
+51584,
+51584,
+51584,
+51598,
+51638,
+51638,
+51638,
+51671,
+51683,
+51710,
+51710,
+51731,
+51766,
+51775,
+51808,
+51829,
+51861,
+51861,
+51861,
+51877,
+51877,
+51889,
+51889,
+51889,
+51911,
+51946,
+51946,
+51966,
+51966,
+51966,
+51966,
+51980,
+51985,
+51997,
+51997,
+51997,
+51997,
+52004,
+52004,
+52004,
+52004,
+52017,
+52032,
+52032,
+52032,
+52063,
+52063,
+52076,
+52095,
+52107,
+52121,
+52121,
+52121,
+52121,
+52121,
+52121,
+52149,
+52184,
+52213,
+52213,
+52213,
+52213,
+52213,
+52213,
+52246,
+52257,
+52286,
+52286,
+52316,
+52316,
+52329,
+52329,
+52329,
+52365,
+52365,
+52365,
+52365,
+52372,
+52386,
+52386,
+52412,
+52420,
+52430,
+52430,
+52436,
+52436,
+52448,
+52454,
+52454,
+52454,
+52479,
+52497,
+52497,
+52512,
+52531,
+52531,
+52551,
+52571,
+52609,
+52609,
+52623,
+52623,
+52635,
+52656,
+52656,
+52668,
+52689,
+52689,
+52706,
+52706,
+52716,
+52716,
+52732,
+52749,
+52755,
+52772,
+52772,
+52772,
+52772,
+52801,
+52801,
+52830,
+52841,
+52841,
+52841,
+52864,
+52864,
+52864,
+52864,
+52864,
+52875,
+52885,
+52893,
+52914,
+52936,
+52960,
+52980,
+53001,
+53001,
+53001,
+53001,
+53001,
+53023,
+53039,
+53039,
+53039,
+53056,
+53069,
+53069,
+53127,
+53145,
+53162,
+53162,
+53183,
+53199,
+53230,
+53244,
+53251,
+53251,
+53269,
+53269,
+53284,
+53320,
+53326,
+53326,
+53359,
+53359,
+53377,
+53404,
+53404,
+53436,
+53454,
+53471,
+53481,
+53498,
+53517,
+53517,
+53517,
+53517,
+53536,
+53557,
+53603,
+53617,
+53617,
+53636,
+53663,
+53663,
+53682,
+53682,
+53702,
+53702,
+53702,
+53717,
+53717,
+53757,
+53769,
+53788,
+53788,
+53788,
+53788,
+53788,
+53809,
+53809,
+53823,
+53840,
+53840,
+53866,
+53907,
+53942,
+53942,
+53942,
+53979,
+54003,
+54003,
+54024,
+54024,
+54024,
+54024,
+54024,
+54043,
+54043,
+54059,
+54069,
+54110,
+54131,
+54142,
+54160,
+54177,
+54177,
+54177,
+54187,
+54187,
+54205,
+54212,
+54212,
+54244,
+54270,
+54280,
+54292,
+54292,
+54292,
+54309,
+54309,
+54335,
+54335,
+54335,
+54343,
+54365,
+54379,
+54379,
+54414,
+54414,
+54414,
+54414,
+54414,
+54448,
+54448,
+54458,
+54490,
+54496,
+54513,
+54521,
+54583,
+54583,
+54603,
+54637,
+54658,
+54658,
+54666,
+54682,
+54691,
+54691,
+54726,
+54743,
+54784,
+54784,
+54794,
+54825,
+54825,
+54825,
+54839,
+54866,
+54866,
+54899,
+54899,
+54908,
+54908,
+54936,
+54936,
+54942,
+54942,
+54977,
+54977,
+54977,
+54977,
+54977,
+54977,
+54977,
+54977,
+54977,
+54988,
+54988,
+54995,
+55056,
+55082,
+55082,
+55082,
+55092,
+55104,
+55128,
+55128,
+55148,
+55170,
+55170,
+55170,
+55210,
+55229,
+55251,
+55308,
+55308,
+55326,
+55336,
+55355,
+55355,
+55355,
+55355,
+55368,
+55375,
+55382,
+55382,
+55382,
+55389,
+55389,
+55389,
+55415,
+55425,
+55467,
+55467,
+55481,
+55492,
+55492,
+55492,
+55516,
+55516,
+55516,
+55529,
+55540,
+55540,
+55560,
+55560,
+55577,
+55577,
+55577,
+55584,
+55584,
+55602,
+55602,
+55602,
+55638,
+55638,
+55655,
+55655,
+55655,
+55655,
+55655,
+55672,
+55680,
+55680,
+55698,
+55715,
+55754,
+55762,
+55802,
+55802,
+55802,
+55808,
+55825,
+55825,
+55825,
+55865,
+55865,
+55865,
+55885,
+55891,
+55901,
+55901,
+55918,
+55945,
+55945,
+55971,
+55978,
+55991,
+56004,
+56011,
+56026,
+56026,
+56041,
+56049,
+56049,
+56071,
+56122,
+56122,
+56149,
+56149,
+56149,
+56169,
+56169,
+56181,
+56181,
+56181,
+56181,
+56181,
+56196,
+56196,
+56255,
+56281,
+56281,
+56299,
+56299,
+56336,
+56342,
+56342,
+56375,
+56381,
+56381,
+56381,
+56387,
+56410,
+56426,
+56426,
+56436,
+56436,
+56436,
+56457,
+56457,
+56457,
+56464,
+56464,
+56478,
+56490,
+56490,
+56490,
+56511,
+56511,
+56517,
+56531,
+56548,
+56548,
+56548,
+56554,
+56570,
+56593,
+56605,
+56619,
+56619,
+56638,
+56638,
+56638,
+56638,
+56650,
+56668,
+56685,
+56698,
+56698,
+56698,
+56709,
+56722,
+56739,
+56739,
+56755,
+56773,
+56812,
+56828,
+56834,
+56865,
+56865,
+56865,
+56865,
+56871,
+56893,
+56911,
+56937,
+56937,
+56937,
+56937,
+56976,
+56976,
+57000,
+57009,
+57027,
+57073,
+57073,
+57124,
+57124,
+57149,
+57190,
+57221,
+57243,
+57253,
+57279,
+57300,
+57300,
+57338,
+57338,
+57338,
+57347,
+57359,
+57380,
+57380,
+57380,
+57403,
+57409,
+57424,
+57433,
+57450,
+57472,
+57472,
+57480,
+57480,
+57480,
+57480,
+57491,
+57518,
+57518,
+57518,
+57533,
+57533,
+57533,
+57533,
+57553,
+57553,
+57553,
+57588,
+57595,
+57610,
+57619,
+57619,
+57661,
+57691,
+57691,
+57691,
+57691,
+57707,
+57713,
+57731,
+57731,
+57750,
+57750,
+57756,
+57791,
+57791,
+57791,
+57791,
+57791,
+57805,
+57829,
+57867,
+57867,
+57867,
+57873,
+57893,
+57912,
+57912,
+57948,
+57948,
+57973,
+57979,
+57979,
+57979,
+57990,
+58009,
+58027,
+58039,
+58056,
+58056,
+58080,
+58080,
+58080,
+58115,
+58115,
+58115,
+58115,
+58122,
+58122,
+58122,
+58122,
+58122,
+58153,
+58168,
+58175,
+58175,
+58188,
+58212,
+58237,
+58237,
+58237,
+58275,
+58275,
+58275,
+58275,
+58313,
+58322,
+58343,
+58352,
+58379,
+58379,
+58388,
+58401,
+58418,
+58430,
+58444,
+58469,
+58479,
+58484,
+58503,
+58521,
+58545,
+58572,
+58582,
+58597,
+58630,
+58630,
+58637,
+58654,
+58654,
+58690,
+58690,
+58697,
+58707,
+58713,
+58713,
+58713,
+58730,
+58730,
+58730,
+58763,
+58817,
+58817,
+58817,
+58817,
+58838,
+58838,
+58838,
+58866,
+58902,
+58902,
+58902,
+58911,
+58911,
+58930,
+58930,
+58960,
+58960,
+58988,
+59006,
+59043,
+59061,
+59061,
+59097,
+59122,
+59122,
+59122,
+59122,
+59122,
+59122,
+59122,
+59122,
+59151,
+59167,
+59187,
+59204,
+59212,
+59222,
+59222,
+59222,
+59238,
+59266,
+59285,
+59300,
+59315,
+59315,
+59315,
+59330,
+59343,
+59375,
+59375,
+59395,
+59413,
+59428,
+59428,
+59428,
+59456,
+59466,
+59486,
+59508,
+59508,
+59517,
+59524,
+59542,
+59542,
+59549,
+59549,
+59557,
+59571,
+59587,
+59587,
+59642,
+59668,
+59679,
+59679,
+59694,
+59734,
+59744,
+59758,
+59771,
+59771,
+59786,
+59793,
+59802,
+59820,
+59831,
+59870,
+59896,
+59896,
+59917,
+59932,
+59932,
+59942,
+59942,
+59962,
+59969,
+59969,
+60007,
+60038,
+60050,
+60057,
+60064,
+60102,
+60102,
+60109,
+60116,
+60132,
+60146,
+60165,
+60181,
+60201,
+60201,
+60208,
+60224,
+60245,
+60328,
+60328,
+60335,
+60342,
+60349,
+60349,
+60401,
+60401,
+60401,
+60436,
+60467,
+60467,
+60474,
+60497,
+60504,
+60545,
+60545,
+60569,
+60592,
+60632,
+60638,
+60645,
+60654,
+60654,
+60654,
+60684,
+60684,
+60701,
+60701,
+60718,
+60744,
+60751,
+60751,
+60751,
+60751,
+60776,
+60792,
+60799,
+60799,
+60806,
+60806,
+60845,
+60872,
+60890,
+60890,
+60930,
+60930,
+60930,
+60930,
+60930,
+60948,
+60992,
+61000,
+61000,
+61017,
+61017,
+61044,
+61061,
+61087,
+61107,
+61107,
+61107,
+61107,
+61123,
+61123,
+61142,
+61142,
+61142,
+61184,
+61207,
+61227,
+61227,
+61276,
+61283,
+61290,
+61313,
+61342,
+61376,
+61383,
+61383,
+61390,
+61390,
+61415,
+61424,
+61449,
+61461,
+61461,
+61495,
+61495,
+61502,
+61502,
+61548,
+61548,
+61548,
+61570,
+61602,
+61619,
+61628,
+61628,
+61628,
+61659,
+61673,
+61680,
+61706,
+61729,
+61753,
+61753,
+61753,
+61753,
+61763,
+61796,
+61796,
+61813,
+61820,
+61820,
+61845,
+61852,
+61877,
+61884,
+61904,
+61912,
+61912,
+61912,
+61949,
+61949,
+61961,
+61961,
+61968,
+61968,
+61968,
+61968,
+62014,
+62026,
+62047,
+62068,
+62075,
+62075,
+62082,
+62089,
+62099,
+62128,
+62155,
+62184,
+62184,
+62213,
+62220,
+62245,
+62274,
+62318,
+62338,
+62359,
+62359,
+62359,
+62388,
+62408,
+62415,
+62415,
+62421,
+62421,
+62429,
+62440,
+62440,
+62470,
+62470,
+62470,
+62494,
+62535,
+62542,
+62549,
+62556,
+62564,
+62571,
+62578,
+62611,
+62618,
+62645,
+62655,
+62667,
+62676,
+62701,
+62720,
+62720,
+62727,
+62752,
+62759,
+62766,
+62782,
+62794,
+62794,
+62804,
+62804,
+62814,
+62831,
+62839,
+62846,
+62852,
+62886,
+62886,
+62900,
+62910,
+62929,
+62943,
+62950,
+62972,
+62985,
+62985,
+62985,
+62998,
+63014,
+63041,
+63067,
+63067,
+63085,
+63101,
+63108,
+63108,
+63115,
+63135,
+63135,
+63142,
+63149,
+63149,
+63156,
+63173,
+63173,
+63180,
+63212,
+63219,
+63236,
+63236,
+63247,
+63298,
+63310,
+63343,
+63343,
+63343,
+63356,
+63356,
+63374,
+63374,
+63374,
+63374,
+63381,
+63401,
+63421,
+63436,
+63459,
+63459,
+63500,
+63506,
+63516,
+63528,
+63551,
+63551,
+63567,
+63615,
+63615,
+63651,
+63679,
+63693,
+63700,
+63734,
+63734,
+63748,
+63763,
+63763,
+63763,
+63775,
+63815,
+63861,
+63884,
+63884,
+63899,
+63907,
+63943,
+63943,
+63950,
+63950,
+63964,
+63964,
+63964,
+63996,
+64003,
+64012,
+64012,
+64106,
+64124,
+64131,
+64131,
+64138,
+64158,
+64158,
+64177,
+64208,
+64208,
+64220,
+64220,
+64220,
+64235,
+64243,
+64258,
+64258,
+64280,
+64290,
+64301,
+64321,
+64334,
+64341,
+64357,
+64400,
+64400,
+64407,
+64407,
+64414,
+64414,
+64433,
+64454,
+64472,
+64502,
+64523,
+64523,
+64582,
+64589,
+64589,
+64619,
+64619,
+64619,
+64619,
+64638,
+64638,
+64638,
+64648,
+64660,
+64660,
+64676,
+64676,
+64695,
+64705,
+64705,
+64732,
+64732,
+64732,
+64738,
+64764,
+64774,
+64787,
+64830,
+64854,
+64888,
+64893,
+64902,
+64938,
+64967,
+64997,
+64997,
+65015,
+65046,
+65072,
+65072,
+65097,
+65110,
+65110,
+65110,
+65110,
+65110,
+65110,
+65122,
+65122,
+65122,
+65129,
+65170,
+65187,
+65187,
+65210,
+65228,
+65235,
+65251,
+65259,
+65259,
+65259,
+65274,
+65274,
+65287,
+65307,
+65323,
+65323,
+65323,
+65362,
+65384,
+65384,
+65400,
+65400,
+65400,
+65400,
+65423,
+65430,
+65457,
+65457,
+65457,
+65476,
+65476,
+65476,
+65476,
+65486,
+65486,
+65521,
+65550,
+65550,
+65550,
+65584,
+65584,
+65584,
+65584,
+65584,
+65601,
+65621,
+65631,
+65672,
+65692,
+65719,
+65719,
+65743,
+65766,
+65766,
+65782,
+65788,
+65828,
+65854,
+65868,
+65877,
+65897,
+65909,
+65936,
+65936,
+65948,
+65948,
+65968,
+65989,
+65989,
+65989,
+65989,
+66016,
+66016,
+66032,
+66039,
+66039,
+66039,
+66055,
+66066,
+66098,
+66114,
+66140,
+66140,
+66174,
+66174,
+66174,
+66220,
+66249,
+66249,
+66249,
+66249,
+66268,
+66276,
+66295,
+66314,
+66322,
+66343,
+66343,
+66343,
+66395,
+66395,
+66413,
+66413,
+66422,
+66430,
+66430,
+66449,
+66449,
+66460,
+66486,
+66492,
+66492,
+66492,
+66492,
+66492,
+66492,
+66510,
+66510,
+66519,
+66530,
+66563,
+66563,
+66573,
+66573,
+66573,
+66612,
+66612,
+66612,
+66625,
+66625,
+66642,
+66642,
+66642,
+66658,
+66672,
+66672,
+66680,
+66715,
+66724,
+66724,
+66740,
+66745,
+66753,
+66769,
+66802,
+66802,
+66802,
+66802,
+66829,
+66843,
+66858,
+66875,
+66893,
+66893,
+66893,
+66933,
+66933,
+66945,
+66945,
+66945,
+66945,
+66956,
+66976,
+66976,
+66976,
+66985,
+67003,
+67003,
+67010,
+67031,
+67031,
+67051,
+67064,
+67083,
+67091,
+67116,
+67116,
+67141,
+67190,
+67220,
+67220,
+67220,
+67233,
+67241,
+67241,
+67275,
+67281,
+67292,
+67302,
+67302,
+67315,
+67379,
+67395,
+67405,
+67421,
+67421,
+67475,
+67483,
+67526,
+67526,
+67546,
+67546,
+67546,
+67571,
+67579,
+67637,
+67659,
+67676,
+67676,
+67676,
+67705,
+67723,
+67739,
+67739,
+67777,
+67792,
+67792,
+67811,
+67811,
+67819,
+67860,
+67876,
+67876,
+67899,
+67915,
+67955,
+67955,
+67969,
+67979,
+67991,
+67991,
+67991,
+68006,
+68020,
+68020,
+68020,
+68045,
+68057,
+68072,
+68072,
+68086,
+68097,
+68113,
+68120,
+68129,
+68136,
+68155,
+68170,
+68170,
+68195,
+68241,
+68258,
+68287,
+68313,
+68325,
+68342,
+68384,
+68416,
+68427,
+68461,
+68461,
+68476,
+68498,
+68498,
+68506,
+68513,
+68533,
+68546,
+68563,
+68563,
+68581,
+68621,
+68634,
+68657,
+68657,
+68657,
+68676,
+68707,
+68726,
+68739,
+68753,
+68753,
+68753,
+68753,
+68765,
+68798,
+68804,
+68819,
+68819,
+68819,
+68847,
+68856,
+68872,
+68872,
+68904,
+68915,
+68942,
+68953,
+68962,
+68980,
+69007,
+69013,
+69024,
+69038,
+69069,
+69082,
+69108,
+69116,
+69134,
+69157,
+69180,
+69180,
+69201,
+69217,
+69217,
+69234,
+69257,
+69257,
+69257,
+69312,
+69312,
+69330,
+69343,
+69360,
+69360,
+69383,
+69402,
+69423,
+69434,
+69455,
+69455,
+69488,
+69496,
+69541,
+69559,
+69559,
+69578,
+69587,
+69587,
+69622,
+69622,
+69630,
+69654,
+69667,
+69674,
+69685,
+69696,
+69734,
+69749,
+69759,
+69759,
+69759,
+69759,
+69790,
+69805,
+69805,
+69823,
+69823,
+69823,
+69839,
+69861,
+69871,
+69871,
+69871,
+69916,
+69916,
+69931,
+69931,
+69931,
+69931,
+69949,
+70014,
+70026,
+70026,
+70026,
+70050,
+70077,
+70113,
+70152,
+70165,
+70182,
+70191,
+70191,
+70191,
+70206,
+70206,
+70206,
+70206,
+70206,
+70230,
+70230,
+70230,
+70230,
+70244,
+70244,
+70244,
+70251,
+70251,
+70251,
+70288,
+70315,
+70357,
+70363,
+70363,
+70376,
+70376,
+70387,
+70387,
+70397,
+70397,
+70397,
+70434,
+70460,
+70476,
+70476,
+70476,
+70507,
+70507,
+70515,
+70534,
+70534,
+70554,
+70570,
+70580,
+70594,
+70623,
+70623,
+70641,
+70641,
+70641,
+70641,
+70641,
+70674,
+70704,
+70735,
+70735,
+70735,
+70748,
+70748,
+70757,
+70802,
+70852,
+70873,
+70873,
+70892,
+70923,
+70923,
+70935,
+70935,
+70941,
+70941,
+70960,
+70980,
+70980,
+71023,
+71034,
+71034,
+71034,
+71045,
+71045,
+71045,
+71045,
+71045,
+71083,
+71093,
+71115,
+71115,
+71131,
+71131,
+71131,
+71141,
+71148,
+71148,
+71166,
+71186,
+71186,
+71201,
+71209,
+71209,
+71238,
+71246,
+71246,
+71246,
+71246,
+71258,
+71258,
+71258,
+71258,
+71276,
+71276,
+71276,
+71291,
+71309,
+71309,
+71309,
+71309,
+71318,
+71318,
+71318,
+71332,
+71342,
+71342,
+71356,
+71388,
+71388,
+71397,
+71407,
+71407,
+71407,
+71425,
+71436,
+71436,
+71466,
+71466,
+71491,
+71491,
+71527,
+71540,
+71540,
+71560,
+71584,
+71600,
+71600,
+71632,
+71648,
+71678,
+71689,
+71703,
+71703,
+71727,
+71742,
+71742,
+71742,
+71759,
+71759,
+71774,
+71780,
+71780,
+71780,
+71799,
+71819,
+71819,
+71837,
+71849,
+71867,
+71867,
+71867,
+71867,
+71867,
+71867,
+71867,
+71867,
+71867,
+71890,
+71890,
+71941,
+71941,
+71972,
+72002,
+72016,
+72037,
+72053,
+72053,
+72053,
+72053,
+72106,
+72131,
+72131,
+72131,
+72152,
+72159,
+72159,
+72171,
+72176,
+72207,
+72207,
+72207,
+72207,
+72221,
+72221,
+72237,
+72264,
+72264,
+72264,
+72280,
+72289,
+72307,
+72326,
+72343,
+72343,
+72343,
+72370,
+72370,
+72370,
+72370,
+72370,
+72396,
+72402,
+72402,
+72402,
+72430,
+72430,
+72449,
+72489,
+72499,
+72499,
+72550,
+72550,
+72573,
+72588,
+72623,
+72623,
+72623,
+72641,
+72652,
+72670,
+72684,
+72684,
+72684,
+72684,
+72699,
+72699,
+72699,
+72699,
+72699,
+72718,
+72769,
+72774,
+72786,
+72799,
+72799,
+72799,
+72837,
+72867,
+72915,
+72935,
+72935,
+72935,
+72953,
+72973,
+72973,
+72973,
+72973,
+73005,
+73005,
+73018,
+73018,
+73028,
+73058,
+73068,
+73068,
+73090,
+73102,
+73114,
+73142,
+73180,
+73180,
+73223,
+73247,
+73247,
+73247,
+73247,
+73247,
+73247,
+73247,
+73256,
+73256,
+73304,
+73321,
+73328,
+73328,
+73328,
+73389,
+73405,
+73405,
+73425,
+73425,
+73425,
+73443,
+73460,
+73476,
+73476,
+73498,
+73518,
+73533,
+73563,
+73591,
+73628,
+73628,
+73648,
+73667,
+73736,
+73736,
+73736,
+73756,
+73756,
+73756,
+73803,
+73803,
+73803,
+73803,
+73831,
+73863,
+73875,
+73875,
+73875,
+73875,
+73875,
+73908,
+73931,
+73942,
+73942,
+73953,
+73982,
+74007,
+74066,
+74075,
+74075,
+74108,
+74108,
+74108,
+74114,
+74167,
+74178,
+74178,
+74178,
+74199,
+74199,
+74218,
+74218,
+74248,
+74248,
+74248,
+74248,
+74248,
+74272,
+74272,
+74290,
+74326,
+74349,
+74349,
+74349,
+74367,
+74367,
+74367,
+74385,
+74410,
+74429,
+74429,
+74475,
+74497,
+74497,
+74513,
+74527,
+74551,
+74581,
+74581,
+74581,
+74638,
+74644,
+74644,
+74665,
+74691,
+74691,
+74691,
+74691,
+74701,
+74701,
+74708,
+74721,
+74721,
+74721,
+74761,
+74801,
+74801,
+74808,
+74825,
+74833,
+74833,
+74850,
+74870,
+74870,
+74893,
+74893,
+74928,
+74928,
+74928,
+74928,
+74938,
+74938,
+74938,
+74938,
+74938,
+74938,
+74938,
+74938,
+74949,
+74949,
+74981,
+75000,
+75019,
+75029,
+75029,
+75029,
+75044,
+75054,
+75071,
+75071,
+75089,
+75103,
+75103,
+75103,
+75103,
+75103,
+75103,
+75103,
+75103,
+75103,
+75103,
+75120,
+75120,
+75120,
+75120,
+75165,
+75165,
+75165,
+75165,
+75185,
+75191,
+75208,
+75208,
+75236,
+75252,
+75269,
+75292,
+75311,
+75318,
+75318,
+75344,
+75359,
+75359,
+75359,
+75423,
+75423,
+75444,
+75444,
+75444,
+75457,
+75464,
+75476,
+75493,
+75516,
+75516,
+75516,
+75532,
+75539};
-static const char tldData[] = {
-"com.cn\0"
-"com.co\0"
-"hb.cn\0"
-"med.br\0conf.lv\0wallonie.museum\0"
-"namsos.no\0"
-"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0farmers.museum\0rel.pl\0"
-"com.cu\0"
-"military.museum\0"
-"*.jm\0convent.museum\0cymru.museum\0malvik.no\0"
-"univ.sn\0"
-"gliding.aero\0"
-"wodzislaw.pl\0"
-"com.dm\0!pref.iwate.jp\0tran\xc3\xb8y.no\0pila.pl\0"
-"mb.it\0*.ke\0lib.ri.us\0"
-"com.ec\0*.kh\0tr\xc3\xb8gstad.no\0"
-"com.ee\0"
-"mobi.gp\0"
+static const char *tldData[] = {
+"vgs.no\0ah.no\0"
+"ma.us\0"
+"mizunami.gifu.jp\0"
+"saitama.jp\0kimino.wakayama.jp\0"
+"int.bo\0cambridge.museum\0"
+"andasuolo.no\0lardal.no\0"
+"transport.museum\0"
+"nishinomiya.hyogo.jp\0"
+"is-into-cars.com\0"
+"karlsoy.no\0"
+"bungoono.oita.jp\0"
+"int.ci\0"
+"chikujo.fukuoka.jp\0"
+"aisai.aichi.jp\0"
+"os.hedmark.no\0"
+"int.co\0"
+"komaki.aichi.jp\0seki.gifu.jp\0"
+"wanouchi.gifu.jp\0lib.ri.us\0"
+"higashiosaka.osaka.jp\0"
+"org\0cechire.com\0"
+"satte.saitama.jp\0"
+"berg.no\0"
+"saitama.saitama.jp\0"
+"cc.sd.us\0"
+"act.gov.au\0mansion.museum\0"
+"fe.it\0y.se\0"
+"gunma.jp\0"
+"otoyo.kochi.jp\0miyoshi.saitama.jp\0"
+"sa.gov.au\0"
+"online.museum\0"
+"abiko.chiba.jp\0"
+"!educ.ar\0"
+"agematsu.nagano.jp\0"
+"akiruno.tokyo.jp\0lund.no\0"
+"kasuga.hyogo.jp\0"
+"nakano.tokyo.jp\0homeunix.net\0"
+"ambulance.aero\0sv.it\0"
+"shiso.hyogo.jp\0"
+"fuso.aichi.jp\0delmenhorst.museum\0"
+"dali.museum\0"
+"brindisi.it\0"
+"midori.gunma.jp\0"
+"nantan.kyoto.jp\0"
+"takaishi.osaka.jp\0imizu.toyama.jp\0"
+"tonsberg.no\0"
+"countryestate.museum\0"
+"rawa-maz.pl\0"
+"yokoshibahikari.chiba.jp\0"
+"ontario.museum\0"
+"certification.aero\0"
+"franziskaner.museum\0cc.nj.us\0"
+"genkai.saga.jp\0"
+"tysfjord.no\0"
+"ra.it\0"
+"air-traffic-control.aero\0ina.ibaraki.jp\0"
+"in-the-band.net\0"
+"ainan.ehime.jp\0oita.oita.jp\0!national-library-scotland.uk\0"
+"kamiichi.toyama.jp\0"
+"ogata.akita.jp\0smola.no\0"
+"matsushima.miyagi.jp\0langev\xc3\xa5g.no\0"
+"vard\xc3\xb8.no\0"
+"limanowa.pl\0"
+"is-a-bruinsfan.org\0"
+"yufu.oita.jp\0berkeley.museum\0"
+"torino.it\0per.la\0"
+"noheji.aomori.jp\0koebenhavn.museum\0isa-geek.com\0"
+"choyo.kumamoto.jp\0"
+"s\xc3\xb8r-odal.no\0"
+"int.is\0bir.ru\0"
+"jefferson.museum\0"
+"brasil.museum\0"
+"sologne.museum\0"
+"shimosuwa.nagano.jp\0setagaya.tokyo.jp\0"
+"tokoname.aichi.jp\0lerdal.no\0"
+"!retina.ar\0boston.museum\0"
+"bologna.it\0kimobetsu.hokkaido.jp\0yuzawa.niigata.jp\0"
+"obuse.nagano.jp\0gs.svalbard.no\0"
+"furudono.fukushima.jp\0"
+"isla.pr\0ny.us\0"
+"5.bg\0"
+"lt.ua\0"
"gran.no\0"
-"wa.gov.au\0"
-"com.dz\0kg.kr\0"
-"zoological.museum\0gjerstad.no\0haugesund.no\0kharkov.ua\0"
-"walbrzych.pl\0"
-"civilization.museum\0"
-"ha.no\0"
-"*.kw\0"
-"med.ec\0com.es\0"
-"med.ee\0otago.museum\0svelvik.no\0"
-"art.ht\0amber.museum\0elvendrell.museum\0rost.no\0"
-"jx.cn\0gratangen.no\0"
-"association.aero\0ca.it\0"
-"zaporizhzhe.ua\0"
-"com.fr\0"
-"szex.hu\0"
-"e-burg.ru\0"
-"com.ge\0bokn.no\0"
+"per.nf\0"
+"int.la\0"
+"kumakogen.ehime.jp\0nasu.tochigi.jp\0"
+"shirataka.yamagata.jp\0"
+"vet.br\0graz.museum\0"
+"int.lk\0"
+"plc.co.im\0md.us\0k12.gu.us\0"
+"wildlife.museum\0"
+"stokke.no\0"
+"stordal.no\0oskol.ru\0"
+"kosaka.akita.jp\0"
+"kitami.hokkaido.jp\0"
+"higashimatsuyama.saitama.jp\0"
+"s\xc3\xb8rreisa.no\0poznan.pl\0"
+"\xd1\x81\xd1\x80\xd0\xb1\0"
+"tokuyama.yamaguchi.jp\0"
+"tosa.kochi.jp\0est-le-patron.com\0"
+"hachijo.tokyo.jp\0"
+"ibaraki.osaka.jp\0rindal.no\0"
+"taishi.osaka.jp\0ol.no\0"
+"int.mv\0lib.az.us\0"
+"int.mw\0hjartdal.no\0"
+"imb.br\0\xc3\xb8ksnes.no\0"
+"ishikawa.jp\0osen.no\0"
+"nakamura.kochi.jp\0"
+"seiyo.ehime.jp\0mincom.tn\0"
+"chieti.it\0sakado.saitama.jp\0"
+"enebakk.no\0cc.ca.us\0from-hi.com\0"
+"kokonoe.oita.jp\0auto.pl\0"
+"venice.it\0shimada.shizuoka.jp\0"
+"surrey.museum\0"
+"audnedaln.no\0"
+"minamifurano.hokkaido.jp\0axis.museum\0webhop.info\0"
+"is-not-certified.com\0"
+"volda.no\0"
+"is-a-lawyer.com\0"
+"oga.akita.jp\0"
+"higashimatsushima.miyagi.jp\0"
+"tonaki.okinawa.jp\0"
+"somna.no\0rovno.ua\0"
+"nt.gov.au\0"
+"cc.pr.us\0"
+"cs.it\0bieszczady.pl\0"
+"per.sg\0"
+"research.museum\0endoftheinternet.org\0"
+"int.pt\0"
+"costume.museum\0"
+"eisenbahn.museum\0slask.pl\0"
+"gdynia.pl\0"
+"wa.au\0pol.dz\0fukui.jp\0higashishirakawa.gifu.jp\0botanicalgarden.museum\0"
+"automotive.museum\0"
+"sshn.se\0"
+"nogata.fukuoka.jp\0cc.nm.us\0is-an-anarchist.com\0"
+"dontexist.com\0"
+"an.it\0"
+"uenohara.yamanashi.jp\0"
+"midtre-gauldal.no\0"
+"hm.no\0komvux.se\0"
+"hidaka.wakayama.jp\0hobby-site.org\0"
+"giske.no\0"
+"sund.no\0"
+"troms\xc3\xb8.no\0"
+"zagan.pl\0"
+"chikusei.ibaraki.jp\0wlocl.pl\0"
+"in-addr.arpa\0notaires.fr\0altai.ru\0"
+"int.ru\0"
+"aquila.it\0"
+"int.rw\0"
+"ito.shizuoka.jp\0"
+"missoula.museum\0kolobrzeg.pl\0"
+"assabu.hokkaido.jp\0"
+"sld.do\0meloy.no\0"
+"ak.us\0"
+"k12.md.us\0"
+"kawanishi.yamagata.jp\0is-lost.org\0"
+"ochi.kochi.jp\0"
+"amami.kagoshima.jp\0gamo.shiga.jp\0"
+"yamazoe.nara.jp\0"
+"shirako.chiba.jp\0matsuda.kanagawa.jp\0int.tj\0"
+"ota.tokyo.jp\0"
+"kicks-ass.net\0"
+"yamato.fukushima.jp\0shinjo.okayama.jp\0baltimore.museum\0ushistory.museum\0pro\0"
+"mallorca.museum\0hoyanger.no\0hobby-site.com\0"
+"narvik.no\0olsztyn.pl\0warmia.pl\0"
+"pol.ht\0int.tt\0"
+"mizusawa.iwate.jp\0h\xc3\xb8yanger.no\0przeworsk.pl\0"
+"matsuno.ehime.jp\0"
+"folkebibl.no\0"
+"pb.ao\0taranto.it\0nomi.ishikawa.jp\0chizu.tottori.jp\0alta.no\0"
+"8.bg\0okazaki.aichi.jp\0"
+"goshiki.hyogo.jp\0lib.wi.us\0"
+"or.at\0"
+"stateofdelaware.museum\0"
+"modern.museum\0"
+"\xd1\x80\xd1\x84\0"
+"or.bi\0himi.toyama.jp\0"
+"kitaaiki.nagano.jp\0toga.toyama.jp\0"
+"kutchan.hokkaido.jp\0tamaki.mie.jp\0finnoy.no\0int.vn\0"
+"fujisawa.iwate.jp\0"
+"homebuilt.aero\0cranbrook.museum\0"
+"kv\xc3\xa6""fjord.no\0"
+"or.ci\0saigawa.fukuoka.jp\0kutno.pl\0"
+"asuke.aichi.jp\0kanonji.kagawa.jp\0"
+"higashikagawa.kagawa.jp\0"
+"inashiki.ibaraki.jp\0matta-varjjat.no\0"
+"lviv.ua\0"
+"or.cr\0mitane.akita.jp\0"
+"*.kitakyushu.jp\0fujikawa.shizuoka.jp\0"
+"egersund.no\0"
+"srv.br\0"
+"belgorod.ru\0"
+"v\xc3\xa5gs\xc3\xb8y.no\0fh.se\0"
+"tsuruta.aomori.jp\0shibuya.tokyo.jp\0k12.va.us\0"
+"kamishihoro.hokkaido.jp\0"
+"sogne.no\0"
+"turystyka.pl\0"
+"gujo.gifu.jp\0"
+"experts-comptables.fr\0"
+"yame.fukuoka.jp\0"
+"annaka.gunma.jp\0kawagoe.mie.jp\0"
+"wakayama.jp\0"
+"openair.museum\0operaunite.com\0"
+"wakuya.miyagi.jp\0"
+"bjarkoy.no\0ivano-frankivsk.ua\0dyndns.tv\0is-a-linux-user.org\0"
+"olbiatempio.it\0"
+"etne.no\0fosnes.no\0"
+"ginoza.okinawa.jp\0"
+"krager\xc3\xb8.no\0"
+"vn.ua\0"
+"jx.cn\0bill.museum\0home.dyndns.org\0"
+"lecco.it\0bihoro.hokkaido.jp\0"
+"asaka.saitama.jp\0"
+"tagajo.miyagi.jp\0"
+"maintenance.aero\0"
+"nordreisa.no\0"
+"kamogawa.chiba.jp\0nebraska.museum\0"
+"lib.nm.us\0"
+"r\xc3\xa1isa.no\0"
+"historisch.museum\0"
+"is-a-republican.com\0"
+"prd.fr\0yonaguni.okinawa.jp\0"
+"bristol.museum\0crafts.museum\0blogsite.org\0"
+"kasamatsu.gifu.jp\0"
+"fin.ec\0"
+"slg.br\0seirou.niigata.jp\0cahcesuolo.no\0from-ma.com\0"
+"ba.it\0aq.it\0exhibition.museum\0heimatunduhren.museum\0"
+"rg.it\0dyndns.ws\0"
+"homedns.org\0"
+"kakogawa.hyogo.jp\0"
+"chikushino.fukuoka.jp\0mito.ibaraki.jp\0"
+"dc.us\0"
+"terni.it\0"
+"or.id\0yoshida.shizuoka.jp\0"
+"fukaya.saitama.jp\0rost.no\0"
+"aomori.jp\0"
+"aeroport.fr\0sabae.fukui.jp\0geology.museum\0"
+"yakage.okayama.jp\0rahkkeravju.no\0"
+"kasama.ibaraki.jp\0"
+"frana.no\0"
+"hatoyama.saitama.jp\0za.org\0"
+"kitayama.wakayama.jp\0"
+"bilbao.museum\0"
+"or.it\0"
+"!nawrastelecom.om\0"
+"nanjo.okinawa.jp\0k12.me.us\0"
+"mobi.gp\0"
+"daisen.akita.jp\0bizen.okayama.jp\0hembygdsforbund.museum\0salangen.no\0"
+"yoshikawa.saitama.jp\0homelinux.com\0"
+"or.jp\0farmers.museum\0from-ri.com\0"
+"\xe1\x83\x92\xe1\x83\x94\0"
+"\xc3\xa5snes.no\0"
+"assisi.museum\0muos\xc3\xa1t.no\0kemerovo.ru\0"
+"musashino.tokyo.jp\0"
+"sld.pa\0"
+"kushimoto.wakayama.jp\0virginia.museum\0is-a-financialadvisor.com\0"
+"yuasa.wakayama.jp\0"
+"yachimata.chiba.jp\0"
+"\xc3\xa5seral.no\0klabu.no\0"
+"onna.okinawa.jp\0"
+"hikone.shiga.jp\0or.kr\0"
+"tranby.no\0lib.vt.us\0"
+"carrier.museum\0"
+"isa-geek.net\0"
+"orsta.no\0"
+"toyone.aichi.jp\0fortmissoula.museum\0zoology.museum\0"
+"historicalsociety.museum\0"
+"prd.km\0"
+"iheya.okinawa.jp\0"
+"kongsberg.no\0"
+"dreamhosters.com\0"
+"chicago.museum\0gjerdrum.no\0"
+"pe.ca\0"
+"cpa.pro\0"
+"makurazaki.kagoshima.jp\0mashiki.kumamoto.jp\0"
+"sondrio.it\0masaki.ehime.jp\0"
+"numazu.shizuoka.jp\0"
+"kawanishi.nara.jp\0"
+"futaba.fukushima.jp\0nachikatsuura.wakayama.jp\0"
+"airguard.museum\0"
+"society.museum\0"
+"ulm.museum\0"
+"or.na\0"
+"tohma.hokkaido.jp\0"
+"masoy.no\0"
+"or.mu\0"
+"prd.mg\0"
+"!omanpost.om\0"
+"izumizaki.fukushima.jp\0nishikatsura.yamanashi.jp\0"
+"miyazu.kyoto.jp\0"
+"unj\xc3\xa1rga.no\0"
+"noshiro.akita.jp\0"
+"ryokami.saitama.jp\0"
+"carboniaiglesias.it\0homeunix.org\0"
+"australia.museum\0"
+"sowa.ibaraki.jp\0"
+"urausu.hokkaido.jp\0"
+"kaisei.kanagawa.jp\0"
+"vt.it\0"
+"virtual.museum\0"
+"hs.kr\0brand.se\0"
+"daejeon.kr\0seaport.museum\0"
+"takaoka.toyama.jp\0"
+"kitakata.fukushima.jp\0fribourg.museum\0"
+"montreal.museum\0"
+"higashiyama.kyoto.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
+"chitose.hokkaido.jp\0"
+"engine.aero\0"
+"rome.it\0medical.museum\0"
+"tjome.no\0"
+"asti.it\0reggio-calabria.it\0"
+"or.pw\0"
+"to.it\0murayama.yamagata.jp\0"
+"shiraoi.hokkaido.jp\0"
+"joshkar-ola.ru\0"
+"fetsund.no\0wa.us\0"
+"nakaniikawa.toyama.jp\0wroclaw.pl\0lib.nh.us\0"
+"ragusa.it\0nakanojo.gunma.jp\0r\xc3\xa5""de.no\0barrell-of-knowledge.info\0"
+"yuza.yamagata.jp\0moareke.no\0cv.ua\0"
+"anjo.aichi.jp\0"
+"!omanmobile.om\0"
+"fukuroi.shizuoka.jp\0space-to-rent.com\0"
+"torahime.shiga.jp\0"
+"gojome.akita.jp\0"
+"at.it\0yawara.ibaraki.jp\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
+"okutama.tokyo.jp\0naturbruksgymn.se\0est-mon-blogueur.com\0"
+"gj\xc3\xb8vik.no\0"
+"marylhurst.museum\0"
+"ferrara.it\0"
+"shimonita.gunma.jp\0"
+"chernivtsi.ua\0"
+"yusuhara.kochi.jp\0"
+"indianmarket.museum\0from-nm.com\0"
+"chambagri.fr\0"
+"yono.saitama.jp\0romsa.no\0"
+"lucerne.museum\0"
+"pe.it\0"
+"from-mn.com\0"
+"kurgan.ru\0or.th\0"
+"udmurtia.ru\0"
+"k12.nj.us\0"
+"c.bg\0atami.shizuoka.jp\0"
+"herad.no\0"
+"midatlantic.museum\0"
+"\xd1\x83\xd0\xba\xd1\x80\0"
+"inazawa.aichi.jp\0matsumoto.nagano.jp\0francaise.museum\0horten.no\0"
+"isehara.kanagawa.jp\0"
+"fuji.shizuoka.jp\0or.ug\0"
+"oppdal.no\0"
+"or.tz\0\xd9\x82\xd8\xb7\xd8\xb1\0"
+"!nacion.ar\0shiroi.chiba.jp\0muncie.museum\0from-ct.com\0"
+"television.museum\0doomdns.com\0"
+"bod\xc3\xb8.no\0"
+"seihi.nagasaki.jp\0"
+"memorial.museum\0"
+"slupsk.pl\0"
+"arkhangelsk.ru\0or.us\0"
+"pe.kr\0is-a-bulls-fan.com\0"
+"matsubara.osaka.jp\0"
+"ishigaki.okinawa.jp\0"
+"nysa.pl\0from-nv.com\0"
+"ishikawa.fukushima.jp\0"
+"drobak.no\0"
+"stpetersburg.museum\0"
+"andria-trani-barletta.it\0"
+"aibetsu.hokkaido.jp\0plants.museum\0silk.museum\0holtalen.no\0"
+"lakas.hu\0"
+"gs.of.no\0rauma.no\0"
+"modena.it\0"
+"kh.ua\0"
+"togitsu.nagasaki.jp\0"
+"newhampshire.museum\0"
+"oirase.aomori.jp\0grajewo.pl\0fin.tn\0"
+"depot.museum\0"
+"nayoro.hokkaido.jp\0"
+"forgot.her.name\0"
+"sande.more-og-romsdal.no\0"
+"reklam.hu\0"
+"\xc3\xa5krehamn.no\0"
+"ancona.it\0h\xc3\xa5.no\0"
+"lib.as.us\0"
+"marketplace.aero\0schweiz.museum\0"
+"eu.int\0"
+"urasoe.okinawa.jp\0"
+"kaluga.ru\0"
+"godo.gifu.jp\0"
+"kitagawa.kochi.jp\0kr.com\0"
+"pvt.ge\0"
+"usuki.oita.jp\0"
+"mino.gifu.jp\0"
+"rovigo.it\0"
+"yamada.fukuoka.jp\0amakusa.kumamoto.jp\0lajolla.museum\0uzhgorod.ua\0"
+"shimane.jp\0workshop.museum\0"
+"aero\0"
+"shikatsu.aichi.jp\0warszawa.pl\0"
+"wegrow.pl\0"
+"koga.fukuoka.jp\0"
+"funabashi.chiba.jp\0moriya.ibaraki.jp\0yamaga.kumamoto.jp\0"
+"act.edu.au\0mbone.pl\0"
+"ikaruga.nara.jp\0"
+"shinichi.hiroshima.jp\0gjesdal.no\0"
+"hanawa.fukushima.jp\0"
+"tr.it\0wakasa.fukui.jp\0"
+"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
+"olbia-tempio.it\0"
+"aizumisato.fukushima.jp\0convent.museum\0bd.se\0"
+"fukuchi.fukuoka.jp\0takino.hyogo.jp\0vt.us\0"
+"yazu.tottori.jp\0"
+"kagoshima.jp\0loyalist.museum\0"
+"kitahiroshima.hokkaido.jp\0fed.us\0"
+"sandnessj\xc3\xb8""en.no\0varoy.no\0"
+"hurdal.no\0"
+"salem.museum\0jar.ru\0"
+"yaizu.shizuoka.jp\0"
+"cc.nv.us\0"
+"airtraffic.aero\0"
+"bg.it\0sukumo.kochi.jp\0"
+"rm.it\0nishiokoppe.hokkaido.jp\0"
+"house.museum\0"
+"aizumi.tokushima.jp\0"
+"hitachinaka.ibaraki.jp\0kicks-ass.org\0"
+"hokuryu.hokkaido.jp\0k12.or.us\0"
+"geisei.kochi.jp\0tatarstan.ru\0"
+"toyotsu.fukuoka.jp\0meguro.tokyo.jp\0"
+"myoko.niigata.jp\0"
+"bronnoy.no\0"
+"nishikawa.yamagata.jp\0"
+"minamata.kumamoto.jp\0"
+"gd.cn\0"
+"trana.no\0"
+"takasaki.gunma.jp\0cc.ma.us\0"
+"trani-barletta-andria.it\0"
+"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0c.la\0"
+"hanno.saitama.jp\0"
+"ami.ibaraki.jp\0kurotaki.nara.jp\0"
+"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0boldlygoingnowhere.org\0"
+"f.bg\0unjarga.no\0lib.ia.us\0"
+"\xc3\xb8rskog.no\0tingvoll.no\0"
+"webhop.org\0"
+"grue.no\0dyndns-blog.com\0"
+"dyndns-web.com\0"
+"zakopane.pl\0"
+"britishcolumbia.museum\0turek.pl\0"
+"omi.nagano.jp\0is-an-actor.com\0"
+"ms.it\0gov.nc.tr\0"
+"kijo.miyazaki.jp\0"
+"starostwo.gov.pl\0mobi.tt\0"
+"gs.ah.no\0"
+"minobu.yamanashi.jp\0tr.no\0"
+"mobi.tz\0"
+"rakkestad.no\0"
+"org.ac\0from-az.net\0"
+"org.ae\0"
+"org.af\0bj.cn\0"
+"org.ag\0"
+"org.ai\0"
+"nanae.hokkaido.jp\0oshino.yamanashi.jp\0"
+"org.al\0takashima.shiga.jp\0"
+"org.an\0naha.okinawa.jp\0matsuzaki.shizuoka.jp\0bahn.museum\0"
+"chungbuk.kr\0biev\xc3\xa1t.no\0homelinux.net\0"
+"org.ba\0umi.fukuoka.jp\0"
+"org.bb\0"
+"mihama.wakayama.jp\0cyber.museum\0"
+"org.au\0yorii.saitama.jp\0hagi.yamaguchi.jp\0"
+"ms.kr\0"
+"org.bh\0fujikawa.yamanashi.jp\0floro.no\0oryol.ru\0"
+"org.bi\0sakahogi.gifu.jp\0"
+"org.az\0niimi.okayama.jp\0"
+"aguni.okinawa.jp\0sells-for-less.com\0"
+"org.bm\0tsukuba.ibaraki.jp\0"
+"org.bo\0"
+"org.br\0r\xc3\xa6lingen.no\0"
+"org.bs\0kuriyama.hokkaido.jp\0"
+"org.bt\0"
+"org.bw\0"
+"nf.ca\0"
+"org.ci\0"
+"org.bz\0"
+"hirogawa.wakayama.jp\0"
"mordovia.ru\0"
-"com.gh\0*.mm\0"
-"com.gi\0z.se\0"
-"cahcesuolo.no\0"
-"hurdal.no\0joshkar-ola.ru\0"
-"cadaques.museum\0ma.us\0"
-"a.bg\0"
-"com.gn\0bozen.it\0tambov.ru\0"
-"*.gifu.jp\0*.tokyo.jp\0*.mt\0"
-"com.gp\0travel\0cc.tx.us\0"
-"com.gr\0hemne.no\0"
-"*.ni\0"
-"*.mz\0"
-"cc.il.us\0"
-"com.gy\0"
-"zj.cn\0oksnes.no\0museum.tt\0"
-"com.hk\0*.np\0"
-"rc.it\0baseball.museum\0"
-"com.hn\0exhibition.museum\0"
-"h\xc3\xa1""bmer.no\0"
+"org.cn\0k12.vt.us\0"
+"org.co\0"
+"if.ua\0"
+"org.cu\0"
+"futsu.nagasaki.jp\0hu.net\0"
+"dyndns-pics.com\0"
+"karumai.iwate.jp\0"
+"org.dm\0"
+"org.do\0"
+"risor.no\0"
+"kujukuri.chiba.jp\0abashiri.hokkaido.jp\0novosibirsk.ru\0"
+"org.ec\0"
+"ballangen.no\0k12.co.us\0"
+"org.ee\0"
+"navuotna.no\0pisz.pl\0"
+"org.eg\0"
+"mobi.na\0"
+"tonami.toyama.jp\0"
+"org.dz\0sci.eg\0\xc3\xa5rdal.no\0"
+"environmentalconservation.museum\0edunet.tn\0"
+"murakami.niigata.jp\0usarts.museum\0"
+"eidfjord.no\0e-burg.ru\0from-mt.com\0from-nd.com\0"
+"karasuyama.tochigi.jp\0utah.museum\0"
+"maritimo.museum\0"
+"union.aero\0org.es\0"
+"esan.hokkaido.jp\0"
+"namegawa.saitama.jp\0c.se\0"
+"anamizu.ishikawa.jp\0kitakami.iwate.jp\0"
+"ga.us\0"
+"qld.au\0gjemnes.no\0"
+"ichinoseki.iwate.jp\0makinohara.shizuoka.jp\0"
+"bahccavuotna.no\0"
+"is-an-actress.com\0"
+"karm\xc3\xb8y.no\0"
+"org.ge\0cesena-forli.it\0"
+"vantaa.museum\0gaular.no\0"
+"org.gg\0"
+"org.gh\0cc.ny.us\0"
+"org.gi\0"
+"from-dc.com\0"
+"fitjar.no\0vyatka.ru\0"
+"org.gn\0museum\0"
+"org.gp\0"
+"org.gr\0beppu.oita.jp\0"
+"groundhandling.aero\0org.gt\0okegawa.saitama.jp\0lib.ky.us\0"
+"org.hk\0"
+"org.hn\0"
+"presidio.museum\0cc.md.us\0"
+"bolzano.it\0"
+"sosa.chiba.jp\0koenig.ru\0iki.fi\0"
+"org.ht\0ebetsu.hokkaido.jp\0"
+"fuel.aero\0org.hu\0"
+"hole.no\0"
+"blog.br\0tosu.saga.jp\0"
+"k12.nh.us\0"
+"i.bg\0"
+"rs.ba\0"
+"org.im\0"
+"org.in\0"
+"org.iq\0"
+"lel.br\0org.ir\0kasahara.gifu.jp\0"
+"org.is\0chofu.tokyo.jp\0notodden.no\0"
+"org.je\0spjelkavik.no\0"
+"vefsn.no\0"
+"fukuoka.jp\0yamanobe.yamagata.jp\0yamanakako.yamanashi.jp\0"
+"yaese.okinawa.jp\0"
+"baikal.ru\0"
+"from-me.org\0"
+"kanazawa.ishikawa.jp\0nowaruda.pl\0"
+"swidnica.pl\0"
+"org.jo\0!city.yokohama.jp\0olkusz.pl\0"
+"higashiura.aichi.jp\0mosjoen.no\0"
+"vestv\xc3\xa5g\xc3\xb8y.no\0"
+"takahama.aichi.jp\0dyn-o-saur.com\0"
+"shimabara.nagasaki.jp\0"
+"ebiz.tw\0"
+"caserta.it\0org.kg\0"
+"sc.cn\0org.ki\0"
+"aizuwakamatsu.fukushima.jp\0is-a-teacher.com\0"
+"sado.niigata.jp\0org.km\0resistance.museum\0"
+"togo.aichi.jp\0org.kn\0skien.no\0"
+"org.kp\0"
+"org.la\0kommune.no\0"
+"vic.edu.au\0miyoshi.aichi.jp\0org.lb\0"
+"org.lc\0"
+"cagliari.it\0"
+"uscountryestate.museum\0h\xc3\xb8nefoss.no\0"
+"gs.ol.no\0"
+"riik.ee\0"
+"g12.br\0ms.us\0nc.us\0"
+"org.ky\0agro.pl\0"
+"org.kz\0landes.museum\0doesntexist.com\0"
+"org.lk\0"
+"holt\xc3\xa5len.no\0"
+"nedre-eiker.no\0"
+"org.ma\0naroy.no\0"
+"org.lr\0"
+"org.ls\0"
+"tagawa.fukuoka.jp\0"
+"org.me\0"
+"nonoichi.ishikawa.jp\0org.lv\0"
+"org.mg\0horology.museum\0"
+"utazas.hu\0ako.hyogo.jp\0"
+"org.ly\0"
+"org.mk\0sandnes.no\0"
+"ayabe.kyoto.jp\0org.ml\0"
+"office-on-the.net\0"
+"minato.tokyo.jp\0org.mn\0"
+"org.mo\0"
+"koryo.nara.jp\0"
+"org.na\0balsfjord.no\0"
+"org.mu\0"
+"hyuga.miyazaki.jp\0org.mv\0"
+"perso.ht\0org.mw\0org.ng\0"
+"org.mx\0"
+"org.my\0"
+"powiat.pl\0"
+"kinokawa.wakayama.jp\0"
+"shichinohe.aomori.jp\0"
+"ru.com\0se.com\0"
+"org.nr\0"
+"environment.museum\0planetarium.museum\0"
+"niigata.niigata.jp\0"
+"name.hr\0"
+"asago.hyogo.jp\0is-very-nice.org\0"
+"hirata.fukushima.jp\0"
+"sera.hiroshima.jp\0shizuoka.shizuoka.jp\0"
+"nrw.museum\0"
+"palace.museum\0"
+"org.pa\0"
+"cc.ak.us\0"
+"wiki.br\0"
+"shimotsuke.tochigi.jp\0org.pe\0press.se\0"
+"org.pf\0"
+"nishiizu.shizuoka.jp\0f.se\0"
+"org.ph\0"
+"is-a-llama.com\0"
+"kamikawa.saitama.jp\0elblag.pl\0"
+"kochi.jp\0gs.hm.no\0org.pk\0"
+"org.pl\0"
+"paleo.museum\0"
+"org.pn\0"
+"torsken.no\0"
+"iwafune.tochigi.jp\0org.qa\0"
+"org.pr\0"
+"org.ps\0"
+"bato.tochigi.jp\0org.pt\0"
+"isumi.chiba.jp\0and\xc3\xb8y.no\0"
+"tatsuno.nagano.jp\0org.py\0"
+"pub.sa\0"
+"portal.museum\0is-into-cartoons.com\0"
+"sasayama.hyogo.jp\0"
+"ibigawa.gifu.jp\0"
+"uruma.okinawa.jp\0"
+"orskog.no\0"
+"cincinnati.museum\0"
+"farmstead.museum\0"
+"ftpaccess.cc\0"
+"castres.museum\0org.ro\0"
+"org.sa\0"
+"sassari.it\0saka.hiroshima.jp\0org.sb\0"
+"higashihiroshima.hiroshima.jp\0org.rs\0org.sc\0"
+"org.sd\0"
+"tokai.aichi.jp\0org.ru\0org.se\0"
+"games.hu\0pn.it\0v\xc3\xa6r\xc3\xb8y.no\0"
+"amsterdam.museum\0org.sg\0"
+"campobasso.it\0org.sh\0"
+"forli-cesena.it\0corvette.museum\0ath.cx\0"
+"yokawa.hyogo.jp\0is-a-socialist.com\0"
+"tjeldsund.no\0az.us\0"
+"student.aero\0name.eg\0org.sl\0"
+"l.bg\0sc.kr\0"
+"org.sn\0"
+"frankfurt.museum\0org.so\0"
+"barcelona.museum\0from-wy.com\0"
+"is-an-artist.com\0"
+"dvrdns.org\0"
+"ikata.ehime.jp\0"
+"dr.na\0steinkjer.no\0org.st\0"
+"yao.osaka.jp\0british.museum\0"
+"grosseto.it\0gemological.museum\0lipetsk.ru\0"
+"civilization.museum\0iron.museum\0org.sy\0"
+"org.sz\0org.tj\0"
+"tel\0"
+"org.tm\0"
+"honbetsu.hokkaido.jp\0minamioguni.kumamoto.jp\0org.tn\0"
+"name.az\0ohira.miyagi.jp\0s\xc3\xb8ndre-land.no\0org.to\0"
+"intl.tn\0"
+"schlesisches.museum\0org.ua\0"
+"cesenaforli.it\0"
+"org.tt\0"
+"org.tw\0org.ug\0"
+"takehara.hiroshima.jp\0"
+"bible.museum\0"
+"narashino.chiba.jp\0"
+"tsubame.niigata.jp\0hinohara.tokyo.jp\0"
+"minamiawaji.hyogo.jp\0"
+"is-into-anime.com\0"
+"press.ma\0"
+"nishihara.okinawa.jp\0"
+"kita.osaka.jp\0kazo.saitama.jp\0org.vc\0"
+"tagami.niigata.jp\0org.ve\0"
+"lebork.pl\0"
+"chuo.osaka.jp\0"
+"kashiwa.chiba.jp\0turen.tn\0org.uy\0org.vi\0"
+"flakstad.no\0org.uz\0isa-hockeynut.com\0"
+"kyuragi.saga.jp\0"
+"ichikai.tochigi.jp\0"
+"aoste.it\0"
+"org.vn\0"
+"mishima.fukushima.jp\0"
+"funagata.yamagata.jp\0"
+"from-ms.com\0from-nc.com\0"
+"psc.br\0"
+"gorlice.pl\0"
+"nl.ca\0chippubetsu.hokkaido.jp\0tone.ibaraki.jp\0i.ph\0"
+"etajima.hiroshima.jp\0"
+"uji.kyoto.jp\0sakai.osaka.jp\0la.us\0"
+"aukra.no\0stranda.no\0stryn.no\0org.ws\0"
+"tromsa.no\0"
+"ind.br\0yoichi.hokkaido.jp\0"
+"sayama.osaka.jp\0usenet.pl\0"
+"amusement.aero\0maniwa.okayama.jp\0"
+"katowice.pl\0is-a-nascarfan.com\0"
+"okawa.kochi.jp\0"
+"tomisato.chiba.jp\0cadaques.museum\0cc.dc.us\0"
+"space.museum\0"
+"afjord.no\0"
+"oharu.aichi.jp\0"
+"koriyama.fukushima.jp\0"
+"il.us\0"
+"n\xc3\xa1vuotna.no\0"
+"satx.museum\0"
+"misato.akita.jp\0"
+"katsuragi.wakayama.jp\0history.museum\0"
+"pharmacien.fr\0rieti.it\0"
+"assassination.museum\0"
+"j\xc3\xb8rpeland.no\0r\xc3\xb8yken.no\0"
+"i.se\0"
+"miyoshi.hiroshima.jp\0"
+"computer.museum\0"
+"tsubata.ishikawa.jp\0"
+"kawakita.ishikawa.jp\0for-the.biz\0"
+"fortworth.museum\0"
+"akita.akita.jp\0storfjord.no\0"
+"b\xc3\xa1hccavuotna.no\0"
+"andebu.no\0"
+"taketomi.okinawa.jp\0"
+"isshiki.aichi.jp\0"
+"taiji.wakayama.jp\0"
+"haebaru.okinawa.jp\0"
+"dell-ogliastra.it\0historichouses.museum\0trogstad.no\0"
+"tx.us\0k12.pa.us\0"
+"lib.ks.us\0"
+"kherson.ua\0"
+"uonuma.niigata.jp\0"
+"bifuka.hokkaido.jp\0kouhoku.saga.jp\0luster.no\0"
+"gotsu.shimane.jp\0r\xc3\xb8""d\xc3\xb8y.no\0"
+"skiptvet.no\0"
+"press.aero\0"
+"sc.ug\0"
+"sc.tz\0"
+"hekinan.aichi.jp\0kariya.aichi.jp\0kounosu.saitama.jp\0quebec.museum\0"
+"ind.gt\0kuromatsunai.hokkaido.jp\0"
+"money.museum\0"
+"historical.museum\0sc.us\0k12.mn.us\0"
+"o.bg\0"
+"chesapeakebay.museum\0ringerike.no\0"
+"fst.br\0shitara.aichi.jp\0"
+"urn.arpa\0"
+"homelinux.org\0"
+"ina.nagano.jp\0"
+"its.me\0"
+"kawakami.nagano.jp\0miyada.nagano.jp\0"
+"ishikari.hokkaido.jp\0"
+"national.museum\0"
+"imabari.ehime.jp\0"
+"akaiwa.okayama.jp\0rhcloud.com\0"
+"kamaishi.iwate.jp\0"
+"joyo.kyoto.jp\0"
+"ind.in\0school.na\0"
+"kiso.nagano.jp\0sevastopol.ua\0"
+"shimoichi.nara.jp\0loten.no\0"
+"selfip.net\0"
+"a\xc3\xa9roport.ci\0ascoli-piceno.it\0"
+"nuremberg.museum\0"
+"otaki.saitama.jp\0chuvashia.ru\0defense.tn\0"
+"mibu.tochigi.jp\0mitaka.tokyo.jp\0"
+"odo.br\0"
+"koori.fukushima.jp\0"
+"omuta.fukuoka.jp\0med.pro\0"
+"tomioka.gunma.jp\0kitakata.miyazaki.jp\0arteducation.museum\0"
+"yamatotakada.nara.jp\0"
+"brunel.museum\0"
+"vik.no\0"
+"sf.no\0"
+"is-a-designer.com\0"
+"perso.sn\0"
+"lg.jp\0"
+"hayashima.okayama.jp\0name.vn\0"
+"gangwon.kr\0"
+"atlanta.museum\0"
+"coop.ht\0"
+"veterinaire.km\0"
+"gda.pl\0cc.wa.us\0"
+"qsl.br\0mitsue.nara.jp\0"
+"oumu.hokkaido.jp\0"
+"zarow.pl\0"
+"kisarazu.chiba.jp\0"
+"perso.tn\0"
+"ono.fukushima.jp\0"
+"tas.au\0nordre-land.no\0"
+"kanagawa.jp\0"
+"pasadena.museum\0"
+"uto.kumamoto.jp\0"
+"sport.hu\0"
+"yamatokoriyama.nara.jp\0stj\xc3\xb8rdal.no\0name.tj\0"
+"nishigo.fukushima.jp\0"
+"nikko.tochigi.jp\0"
+"tsushima.nagasaki.jp\0"
+"palmsprings.museum\0"
+"coop.br\0yaroslavl.ru\0"
+"meldal.no\0"
+"takasago.hyogo.jp\0"
+"name.tt\0"
+"nl.no\0"
+"webhop.net\0"
+"nic.im\0sayama.saitama.jp\0"
+"nic.in\0"
+"tomakomai.hokkaido.jp\0"
+"agano.niigata.jp\0"
+"\xd9\x85\xd8\xb5\xd8\xb1\0go.dyndns.org\0"
+"savona.it\0"
+"kodaira.tokyo.jp\0"
+"qld.gov.au\0"
+"kashiwara.osaka.jp\0l.se\0"
+"veterinaire.fr\0"
+"university.museum\0"
+"haugesund.no\0"
+"hokuto.yamanashi.jp\0"
+"lib.ok.us\0"
+"pesarourbino.it\0n\xc3\xb8tter\xc3\xb8y.no\0"
+"2000.hu\0froya.no\0"
+"genova.it\0saskatchewan.museum\0"
+"isleofman.museum\0"
+"video.hu\0smolensk.ru\0"
+"taira.toyama.jp\0"
+"masfjorden.no\0"
+"jessheim.no\0"
+"science.museum\0"
+"cc.or.us\0from-pa.com\0"
+"muroran.hokkaido.jp\0"
+"bs.it\0ube.yamaguchi.jp\0"
+"si.it\0"
+"catering.aero\0esashi.hokkaido.jp\0newmexico.museum\0tana.no\0"
+"opole.pl\0"
+"iruma.saitama.jp\0"
+"hiroo.hokkaido.jp\0ogawa.ibaraki.jp\0rv.ua\0"
+"nakatsugawa.gifu.jp\0\xc3\xa1k\xc5\x8boluokta.no\0"
+"naie.hokkaido.jp\0kvinnherad.no\0"
+"pilot.aero\0ws.na\0"
+"yahaba.iwate.jp\0"
+"birthplace.museum\0"
+"name.qa\0"
+"tahara.aichi.jp\0hashikami.aomori.jp\0name.pr\0"
+"filatelia.museum\0"
+"pt.it\0"
+"chattanooga.museum\0"
+"*.yokohama.jp\0"
+"k12.mo.us\0"
+"r.bg\0yugawara.kanagawa.jp\0"
+"geometre-expert.fr\0koka.shiga.jp\0fundacio.museum\0hamar.no\0"
+"yamanouchi.nagano.jp\0\xc3\xa5lesund.no\0"
+"name.na\0"
+"village.museum\0"
+"shinkamigoto.nagasaki.jp\0name.mv\0"
+"orkanger.no\0"
+"mikasa.hokkaido.jp\0name.my\0balestrand.no\0kr\xc3\xa5""anghke.no\0"
+"no.it\0pesaro-urbino.it\0"
+"kamikawa.hyogo.jp\0"
+"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0"
+"botany.museum\0"
+"cc.na\0"
+"ntr.br\0sango.nara.jp\0masuda.shimane.jp\0"
+"ind.tn\0"
+"trondheim.no\0"
+"fermo.it\0kagamino.okayama.jp\0odda.no\0"
+"askvoll.no\0"
+"tottori.tottori.jp\0bronnoysund.no\0"
+"ena.gifu.jp\0"
+"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
+"evenes.no\0"
+"shiriuchi.hokkaido.jp\0hino.tokyo.jp\0lib.vi.us\0"
+"iide.yamagata.jp\0"
+"sande.m\xc3\xb8re-og-romsdal.no\0"
+"shibata.niigata.jp\0botanicgarden.museum\0lg.ua\0"
+"\xc3\xa5s.no\0"
+"namegata.ibaraki.jp\0"
+"architecture.museum\0fineart.museum\0ostrowwlkp.pl\0"
+"sorreisa.no\0"
+"psi.br\0cc.vt.us\0"
+"barrel-of-knowledge.info\0"
+"kunitomi.miyazaki.jp\0name.mk\0"
+"stor-elvdal.no\0uy.com\0"
+"bonn.museum\0budejju.no\0rnu.tn\0"
+"chiyoda.gunma.jp\0"
+"yoro.gifu.jp\0"
+"yasu.shiga.jp\0"
+"amagasaki.hyogo.jp\0"
+"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0"
+"jur.pro\0"
+"mukawa.hokkaido.jp\0narviika.no\0"
+"name.jo\0"
+"marburg.museum\0tysv\xc3\xa6r.no\0"
+"lorenskog.no\0"
+"aland.fi\0yonezawa.yamagata.jp\0"
+"gyeongnam.kr\0"
+"maebashi.gunma.jp\0"
+"tateshina.nagano.jp\0"
+"yamato.kanagawa.jp\0dyndns.info\0"
+"mosvik.no\0"
+"crimea.ua\0"
+"laakesvuemie.no\0"
+"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0"
+"embetsu.hokkaido.jp\0chiyoda.tokyo.jp\0kudamatsu.yamaguchi.jp\0gop.pk\0nic.tj\0"
+"yalta.ua\0"
+"oregon.museum\0"
+"naples.it\0ginan.gifu.jp\0o.se\0"
+"va.it\0tamayu.shimane.jp\0"
+"ninomiya.kanagawa.jp\0"
+"orenburg.ru\0"
+"academy.museum\0"
+"miyakonojo.miyazaki.jp\0appspot.com\0"
+"moma.museum\0"
+"lib.nv.us\0readmyblog.org\0"
+"wake.okayama.jp\0"
+"kusu.oita.jp\0ing.pa\0"
+"blogdns.org\0"
+"is-a-doctor.com\0"
+"london.museum\0"
+"group.aero\0fukumitsu.toyama.jp\0"
+"osaki.miyagi.jp\0"
+"is-a-techie.com\0"
+"!nel.uk\0"
+"otake.hiroshima.jp\0shinonsen.hyogo.jp\0"
+"oshima.yamaguchi.jp\0mari-el.ru\0"
+"obu.aichi.jp\0"
+"bykle.no\0"
+"yasuoka.nagano.jp\0"
+"gs.cn\0"
+"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
+"chuo.fukuoka.jp\0"
+"aero.tt\0"
+"tokai.ibaraki.jp\0"
+"nsw.edu.au\0"
+"suzu.ishikawa.jp\0kitagawa.miyazaki.jp\0"
+"kawaminami.miyazaki.jp\0aisho.shiga.jp\0gs.tr.no\0"
+"bungotakada.oita.jp\0"
+"center.museum\0maritime.museum\0timekeeping.museum\0"
+"u.bg\0ecn.br\0"
+"yamal.ru\0"
+"aero.mv\0"
+"botanical.museum\0at-band-camp.net\0"
+"isa.us\0"
+"kasumigaura.ibaraki.jp\0"
+"ogawa.nagano.jp\0oppegard.no\0"
+"avellino.it\0"
+"samukawa.kanagawa.jp\0nat.tn\0"
+"b\xc3\xb8mlo.no\0"
+"gov.ac\0asso.fr\0"
+"gov.ae\0konan.aichi.jp\0"
+"gov.af\0"
+"research.aero\0omitama.ibaraki.jp\0kita.tokyo.jp\0va.no\0"
+"okaya.nagano.jp\0"
+"zhitomir.ua\0"
+"communication.museum\0"
+"gov.al\0"
+"kanra.gunma.jp\0kamisu.ibaraki.jp\0googlecode.com\0"
+"sandefjord.no\0astrakhan.ru\0kamchatka.ru\0"
+"gov.ba\0asso.gp\0"
+"gov.bb\0"
+"gov.as\0"
+"okinawa.okinawa.jp\0"
+"gov.au\0"
+"gov.bf\0"
+"gov.bh\0"
+"gov.az\0bv.nl\0"
+"pisa.it\0showa.yamanashi.jp\0"
+"kawajima.saitama.jp\0uw.gov.pl\0"
+"gov.bm\0"
+"kunimi.fukushima.jp\0"
+"gov.bo\0vologda.ru\0servebbs.net\0"
+"lib.ut.us\0"
+"gov.br\0naval.museum\0"
+"gov.bs\0"
+"gov.bt\0gov.cd\0minakami.gunma.jp\0"
+"asso.ht\0ovre-eiker.no\0coop.tt\0"
+"nt.edu.au\0mat.br\0"
+"gov.by\0bale.museum\0"
+"gov.bz\0cc.ga.us\0"
+"aga.niigata.jp\0"
+"gov.cl\0fredrikstad.no\0"
+"gov.cm\0"
+"gov.cn\0bushey.museum\0"
+"gov.co\0"
+"nu.ca\0"
+"kamiamakusa.kumamoto.jp\0"
+"aa.no\0"
+"gov.cu\0"
+"omachi.saga.jp\0k12.wy.us\0lib.ca.us\0"
+"coop.mv\0"
+"gov.cx\0coop.mw\0"
+"asso.bj\0venezia.it\0windmill.museum\0"
+"ac\0likes-pie.com\0"
+"ad\0gov.dm\0kepno.pl\0"
+"ae\0"
+"af\0gov.do\0"
+"aerodrome.aero\0ag\0"
+"ai\0"
+"gov.ec\0"
+"milano.it\0"
+"al\0gov.ee\0oguni.kumamoto.jp\0"
+"am\0"
+"an\0gov.eg\0"
+"ao\0"
+"kumiyama.kyoto.jp\0"
+"aq\0ba\0asso.ci\0gov.dz\0hidaka.hokkaido.jp\0"
+"bb\0hongo.hiroshima.jp\0shishikui.tokushima.jp\0"
+"as\0blogdns.com\0"
+"at\0"
+"be\0idv.hk\0"
+"agents.aero\0bf\0"
+"aw\0bg\0notteroy.no\0"
+"ax\0bh\0"
+"bi\0"
+"az\0bj\0"
+"higashiizu.shizuoka.jp\0"
+"bm\0norilsk.ru\0"
+"bo\0"
+"gos.pk\0"
+"ca\0yawatahama.ehime.jp\0"
+"br\0"
+"bs\0cc\0chiropractic.museum\0"
+"bt\0cd\0\xe7\xae\x87\xe4\xba\xba.hk\0en.it\0clock.museum\0r.se\0"
+"cf\0"
+"bw\0cg\0kobayashi.miyazaki.jp\0aurskog-h\xc3\xb8land.no\0valer.hedmark.no\0"
+"ch\0"
+"by\0ci\0"
+"gv.ao\0bz\0"
+"osakasayama.osaka.jp\0wv.us\0"
+"cl\0gov.ge\0tozsde.hu\0nakagyo.kyoto.jp\0homeftp.org\0"
+"cm\0"
+"cn\0gov.gg\0bus.museum\0"
+"gv.at\0co\0gov.gh\0"
+"consultant.aero\0gov.gi\0kahoku.ishikawa.jp\0"
+"shobara.hiroshima.jp\0coop.py\0"
+"cr\0asso.dz\0"
+"cu\0de\0gov.gn\0getmyip.com\0"
+"cv\0"
+"kasai.hyogo.jp\0amur.ru\0"
+"cx\0"
+"gov.gr\0"
+"cz\0dj\0"
+"dk\0ci.it\0"
+"so.it\0"
+"express.aero\0dm\0"
+"do\0tomigusuku.okinawa.jp\0"
+"oseto.nagasaki.jp\0"
+"gov.hk\0va.us\0"
+"ec\0"
+"izumozaki.niigata.jp\0"
+"ee\0"
+"principe.st\0"
+"eg\0"
+"is-a-bookkeeper.com\0"
+"dz\0"
+"gov.ie\0"
+"showa.fukushima.jp\0"
+"noboribetsu.hokkaido.jp\0tourism.tn\0cc.ms.us\0cc.nc.us\0"
+"es\0pz.it\0"
+"gov.im\0"
+"eu\0gov.in\0coop.km\0!british-library.uk\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
+"artcenter.museum\0"
+"suwa.nagano.jp\0"
+"gov.iq\0nationalfirearms.museum\0lubin.pl\0"
+"fi\0gov.ir\0aver\xc3\xb8y.no\0"
+"x.bg\0gov.is\0"
+"gov.it\0"
+"radio.br\0gov.je\0sasebo.nagasaki.jp\0"
+"fm\0monzaedellabrianza.it\0"
+"ad.jp\0"
+"fo\0"
+"ga\0"
+"fr\0"
+"from-nj.com\0"
+"gd\0"
+"ge\0"
+"gf\0gov.jo\0"
+"gg\0"
+"gh\0eiheiji.fukui.jp\0shintomi.miyazaki.jp\0odesa.ua\0"
+"gi\0gifu.jp\0rockart.museum\0homeunix.com\0"
+"nu.it\0"
+"gl\0"
+"gm\0publ.pt\0forgot.his.name\0"
+"gov.kg\0"
+"gp\0gov.ki\0karmoy.no\0"
+"gq\0kr\xc3\xb8""dsherad.no\0"
+"far.br\0gr\0roma.museum\0endofinternet.net\0"
+"gs\0"
+"gt\0gov.km\0inder\xc3\xb8y.no\0"
+"nakama.fukuoka.jp\0gov.kn\0kvanangen.no\0"
+"gw\0taiki.hokkaido.jp\0gov.kp\0"
+"gov.la\0"
+"gy\0haga.tochigi.jp\0gov.lb\0"
+"gobo.wakayama.jp\0gov.lc\0"
+"hk\0"
+"natori.miyagi.jp\0"
+"hm\0crotone.it\0snillfjord.no\0"
+"hn\0"
+"chiryu.aichi.jp\0gov.ky\0"
+"gov.kz\0"
+"hr\0gov.lk\0"
+"ht\0id\0"
+"hu\0ie\0nanbu.yamanashi.jp\0nesseby.no\0"
+"ono.fukui.jp\0"
+"vikna.no\0"
+"gov.ma\0bashkiria.ru\0"
+"gov.lr\0"
+"niihama.ehime.jp\0"
+"gov.lt\0"
+"gov.me\0"
+"im\0shonai.fukuoka.jp\0gov.lv\0"
+"in\0gov.mg\0gorge.museum\0dyndns.org\0"
+"io\0"
+"gov.ly\0"
+"iq\0"
+"ir\0campidanomedio.it\0nichinan.miyazaki.jp\0gov.mk\0"
+"is\0minamitane.kagoshima.jp\0gov.ml\0"
+"it\0"
+"je\0gov.mn\0"
+"gov.mo\0"
+"*.nagoya.jp\0"
+"gov.mr\0est.pr\0"
+"kinko.kagoshima.jp\0"
+"gov.mu\0dudinka.ru\0"
+"kouyama.kagoshima.jp\0gov.mv\0rnrt.tn\0"
+"gov.mw\0gov.ng\0swiebodzin.pl\0"
+"jo\0"
+"jp\0gov.my\0"
+"columbia.museum\0"
+"udono.mie.jp\0"
+"nx.cn\0oristano.it\0"
+"kg\0"
+"ki\0bygland.no\0gov.nr\0"
+"toyoura.hokkaido.jp\0"
+"\xe6\x94\xbf\xe5\xba\x9c.hk\0"
+"taishi.hyogo.jp\0km\0"
+"miyako.iwate.jp\0kn\0"
+"hamatama.saga.jp\0"
+"la\0stavropol.ru\0"
+"kr\0"
+"lc\0"
+"cn.com\0"
+"tarumizu.kagoshima.jp\0"
+"ky\0li\0"
+"kz\0"
+"lk\0"
+"tver.ru\0"
+"uvic.museum\0"
+"gov.ph\0"
+"lyngen.no\0"
+"koto.tokyo.jp\0ma\0cc.az.us\0"
+"sannan.hyogo.jp\0gov.pk\0sells-it.net\0"
+"ls\0mc\0gov.pl\0"
+"lt\0md\0"
+"lu\0me\0gov.pn\0"
+"lv\0meland.no\0u.se\0servegame.org\0"
+"mg\0"
+"mh\0other.nf\0gov.qa\0"
+"ly\0gov.pr\0"
+"gov.ps\0"
+"\xe7\xbb\x84\xe7\xbb\x87.hk\0nishio.aichi.jp\0mk\0gov.pt\0"
+"ml\0miasta.pl\0"
+"iwamizawa.hokkaido.jp\0ikeda.osaka.jp\0sejny.pl\0wy.us\0"
+"kesennuma.miyagi.jp\0mn\0"
+"mo\0"
+"mp\0gov.py\0"
+"mq\0na\0"
+"mr\0selfip.org\0"
+"tsuruoka.yamagata.jp\0ms\0touch.museum\0nc\0"
+"matsumoto.kagoshima.jp\0mu\0ne\0"
+"lecce.it\0wassamu.hokkaido.jp\0mv\0nf\0"
+"hirono.fukushima.jp\0mw\0"
+"mx\0"
+"my\0"
+"hamamatsu.shizuoka.jp\0"
+"rikubetsu.hokkaido.jp\0jamal.ru\0"
+"nl\0nieruchomosci.pl\0"
+"cl.it\0hisayama.fukuoka.jp\0minami.kyoto.jp\0arai.shizuoka.jp\0"
+"sr.it\0kikonai.hokkaido.jp\0"
+"no\0"
+"yakumo.hokkaido.jp\0"
+"keisen.fukuoka.jp\0idv.tw\0"
+"nr\0"
+"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
+"ut.us\0"
+"nu\0"
+"gov.sa\0"
+"gov.sb\0"
+"gov.rs\0gov.sc\0"
+"hi.cn\0gov.sd\0"
+"orkdal.no\0gov.ru\0"
+"fuoisku.no\0"
+"shiraoka.saitama.jp\0building.museum\0gov.rw\0gov.sg\0"
+"gov.sh\0"
+"co.ae\0aeroclub.aero\0"
+"pa\0"
+"co.ag\0"
+"gov.sl\0"
+"ag.it\0higashi.okinawa.jp\0lancashire.museum\0"
+"pe\0"
+"pf\0"
+"oygarden.no\0"
+"!siemens.om\0ph\0"
+"aikawa.kanagawa.jp\0"
+"co.ao\0tempioolbia.it\0"
+"lierne.no\0pk\0gov.st\0"
+"co.ba\0force.museum\0pl\0"
+"pm\0asso.re\0"
+"pn\0"
+"co.at\0dep.no\0irkutsk.ru\0gov.sx\0"
+"gov.sy\0"
+"qa\0gov.tj\0"
+"pr\0"
+"historyofscience.museum\0ps\0gov.tl\0"
+"co.bi\0pt\0gov.tm\0"
+"higashinaruse.akita.jp\0madrid.museum\0gov.tn\0"
+"gov.to\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"pw\0cc.la.us\0"
+"tarui.gifu.jp\0gov.ua\0"
+"py\0"
+"kyotango.kyoto.jp\0gov.tt\0"
+"tourism.pl\0co.ca\0"
+"leirfjord.no\0"
+"gov.tw\0"
+"tenkawa.nara.jp\0"
+"minowa.nagano.jp\0"
+"co.bw\0takazaki.miyazaki.jp\0ullensvang.no\0"
+"andoy.no\0"
+"co.ci\0"
+"finland.museum\0tysnes.no\0re\0"
+"e12.ve\0"
+"co.cl\0austevoll.no\0wolomin.pl\0"
+"kunstunddesign.museum\0"
+"k\xc3\xa5""fjord.no\0gov.vc\0"
+"gov.ve\0"
+"co.cr\0kasuga.fukuoka.jp\0"
+"iris.arpa\0cc.il.us\0"
+"latina.it\0copenhagen.museum\0ro\0"
+"sa\0"
+"sb\0"
+"mc.it\0um.gov.pl\0rs\0sc\0"
+"futtsu.chiba.jp\0incheon.kr\0sd\0"
+"ru\0se\0gov.vn\0"
+"oppeg\xc3\xa5rd.no\0"
+"rw\0sg\0"
+"sh\0"
+"cnt.br\0harima.hyogo.jp\0si\0"
+"1.bg\0"
+"sk\0"
+"sl\0"
+"sm\0"
+"plaza.museum\0sn\0"
+"so\0"
+"sr\0"
+"tc\0"
+"st\0td\0"
+"su\0"
+"tf\0"
+"nishiawakura.okayama.jp\0tg\0"
+"sx\0th\0"
+"unbi.ba\0sumita.iwate.jp\0forsand.no\0sy\0"
+"sz\0tj\0gov.ws\0"
+"asso.nc\0tk\0"
+"artgallery.museum\0tl\0"
+"tm\0"
+"tn\0"
+"toda.saitama.jp\0to\0"
+"for-some.biz\0"
+"ua\0"
+"yatsushiro.kumamoto.jp\0"
+"!rakpetroleum.om\0tt\0"
+"taishin.fukushima.jp\0beeldengeluid.museum\0"
+"hellas.museum\0tv\0gr.com\0"
+"fujimi.nagano.jp\0tw\0ug\0"
+"rennesoy.no\0"
+"asahi.nagano.jp\0"
+"ogano.saitama.jp\0mjondalen.no\0loabat.no\0cc.tx.us\0"
+"kikuchi.kumamoto.jp\0gniezno.pl\0"
+"iwaizumi.iwate.jp\0"
+"va\0"
+"co.gg\0"
+"nesset.no\0us\0vc\0"
+"parma.it\0hasama.oita.jp\0b\xc3\xa1l\xc3\xa1t.no\0ve\0"
+"kashima.ibaraki.jp\0vg\0"
+"k12.ut.us\0"
+"uy\0vi\0"
+"monza-e-della-brianza.it\0ebina.kanagawa.jp\0uz\0"
+"kosa.kumamoto.jp\0nagi.okayama.jp\0"
+"yomitan.okinawa.jp\0"
+"vn\0"
+"ouda.nara.jp\0"
+"ogliastra.it\0"
+"co.gy\0cc.sc.us\0"
+"vu\0"
+"wf\0"
+"webhop.biz\0"
+"x.se\0"
+"farm.museum\0"
+"nord-fron.no\0"
+"co.id\0"
+"mil.ac\0co.hu\0"
+"suzuka.mie.jp\0sigdal.no\0"
+"mil.ae\0"
+"forde.no\0ws\0"
+"ivgu.no\0"
+"co.im\0"
+"mil.al\0co.in\0uchiko.ehime.jp\0mer\xc3\xa5ker.no\0s\xc3\xb8rum.no\0"
+"vibo-valentia.it\0"
+"nango.fukushima.jp\0"
+"co.ir\0"
+"mil.ba\0\xc3\xa5mot.no\0"
+"co.it\0"
+"te.it\0co.je\0"
+"ostre-toten.no\0"
+"engineer.aero\0kumamoto.jp\0nativeamerican.museum\0"
+"miyama.mie.jp\0"
+"mil.az\0nagawa.nagano.jp\0"
+"eng.pro\0"
+"co.jp\0"
+"mil.bo\0"
+"hl.cn\0"
+"sk\xc3\xa1nit.no\0"
+"mil.br\0uda.nara.jp\0"
+"pvt.k12.ma.us\0"
+"medio-campidano.it\0columbus.museum\0"
+"sakaiminato.tottori.jp\0yt\0"
+"asso.km\0"
+"mil.by\0higashiyodogawa.osaka.jp\0nanbu.tottori.jp\0"
+"intelligence.museum\0"
+"mil.cl\0aioi.hyogo.jp\0"
+"mil.cn\0"
+"mil.co\0levanger.no\0"
+"co.kr\0"
+"co.lc\0from-wi.com\0"
+"kawai.iwate.jp\0"
+"b\xc3\xb8.telemark.no\0"
+"tsurugi.ishikawa.jp\0"
+"flekkefjord.no\0"
+"furniture.museum\0newyork.museum\0"
+"asso.mc\0"
+"mil.do\0co.ma\0"
+"nagara.chiba.jp\0co.ls\0"
+"mil.ec\0bolt.hu\0co.me\0"
+"uhren.museum\0"
+"joso.ibaraki.jp\0niyodogawa.kochi.jp\0gs.sf.no\0"
+"mil.eg\0"
+"lib.il.us\0"
+"umaji.kochi.jp\0kurashiki.okayama.jp\0"
+"kakinoki.shimane.jp\0oishida.yamagata.jp\0"
+"bearalv\xc3\xa1hki.no\0sokndal.no\0"
+"wa.gov.au\0sx.cn\0co.na\0"
+"art.museum\0"
+"mo-i-rana.no\0"
+"co.mu\0"
+"co.mw\0"
+"design.aero\0"
+"vadso.no\0"
+"am.br\0"
+"co.nl\0"
+"hidaka.kochi.jp\0"
+"tokushima.jp\0communications.museum\0"
+"co.no\0"
+"oh.us\0blogdns.net\0"
+"4.bg\0nord-odal.no\0"
+"kumamoto.kumamoto.jp\0"
+"altoadige.it\0koto.shiga.jp\0"
+"yasaka.nagano.jp\0"
+"mil.ge\0"
+"jaworzno.pl\0"
+"saito.miyazaki.jp\0"
+"mil.gh\0toyoake.aichi.jp\0"
+"mombetsu.hokkaido.jp\0"
+"fauske.no\0"
+"nishi.fukuoka.jp\0alaska.museum\0"
+"marnardal.no\0"
+"on.ca\0"
+"higashikurume.tokyo.jp\0"
+"gs.nl.no\0"
+"mil.gt\0reggioemilia.it\0r\xc3\xb8st.no\0"
+"fnd.br\0bjark\xc3\xb8y.no\0l\xc3\xa6rdal.no\0tromso.no\0krakow.pl\0"
+"takahashi.okayama.jp\0hasvik.no\0"
+"co.pl\0"
+"zt.ua\0"
+"katsuyama.fukui.jp\0co.pn\0homeftp.net\0"
+"mil.hn\0fuchu.tokyo.jp\0omaha.museum\0"
+"date.hokkaido.jp\0shimokawa.hokkaido.jp\0"
+"tyumen.ru\0"
+"mil.id\0philadelphiaarea.museum\0sanfrancisco.museum\0"
+"honjo.akita.jp\0living.museum\0co.pw\0"
+"beiarn.no\0"
+"ullensaker.no\0"
+"tozawa.yamagata.jp\0"
+"aya.miyazaki.jp\0uk.net\0"
+"sklep.pl\0"
+"hokuto.hokkaido.jp\0"
+"mil.in\0"
+"tsaritsyn.ru\0"
+"mil.iq\0"
+"minami.fukuoka.jp\0"
+"naklo.pl\0"
+"susaki.kochi.jp\0"
+"karatsu.saga.jp\0"
+"fg.it\0badajoz.museum\0"
+"for-better.biz\0"
+"mil.jo\0"
+"midsund.no\0co.rs\0"
+"shimane.shimane.jp\0"
+"hi.us\0"
+"d\xc3\xb8nna.no\0"
+"york.museum\0spydeberg.no\0co.rw\0"
+"hamatonbetsu.hokkaido.jp\0"
+"mil.kg\0"
+"!nic.ar\0kagami.kochi.jp\0dynalias.com\0"
+"civilaviation.aero\0modelling.aero\0uz.ua\0"
+"nanao.ishikawa.jp\0"
+"mil.km\0"
+"modum.no\0"
+"badaddja.no\0"
+"mil.kr\0co.st\0"
+"oi.kanagawa.jp\0"
+"author.aero\0cr.it\0"
+"co.th\0"
+"versailles.museum\0co.sz\0co.tj\0"
+"encyclopedic.museum\0"
+"mil.kz\0grong.no\0"
+"co.tm\0"
+"minamiboso.chiba.jp\0lib.ma.us\0servebbs.org\0"
+"kiev.ua\0"
+"journalist.aero\0co.ua\0"
+"te.ua\0"
+"co.tt\0"
+"co.ug\0"
+"mil.lv\0"
+"mil.mg\0"
+"co.tz\0"
+"council.aero\0ibaraki.jp\0"
+"family.museum\0"
+"rc.it\0"
+"hl.no\0ostrowiec.pl\0co.us\0"
+"!statecouncil.om\0co.ve\0"
+"!congresodelalengua3.ar\0nalchik.ru\0"
+"mil.mv\0halsa.no\0"
+"co.vi\0"
+"takayama.gifu.jp\0fujishiro.ibaraki.jp\0os.hordaland.no\0sirdal.no\0co.uz\0"
+"fj.cn\0mil.my\0"
+"kazuno.akita.jp\0"
+"unzen.nagasaki.jp\0mizuho.tokyo.jp\0indianapolis.museum\0"
+"from-id.com\0"
+"hurum.no\0"
+"mil.no\0"
+"pordenone.it\0"
+"kvam.no\0"
+"mutsuzawa.chiba.jp\0artdeco.museum\0"
+"hamada.shimane.jp\0philadelphia.museum\0"
+"kudoyama.wakayama.jp\0"
+"mishima.shizuoka.jp\0minami-alps.yamanashi.jp\0k12.mi.us\0"
+"nanmoku.gunma.jp\0"
+"ashikaga.tochigi.jp\0"
+"from-wv.com\0"
+"\xe5\x8f\xb0\xe6\xb9\xbe\0"
+"kawatana.nagasaki.jp\0"
+"oslo.no\0"
+"fukuchiyama.kyoto.jp\0"
+"kisofukushima.nagano.jp\0"
+"okayama.jp\0mil.pe\0"
+"mil.ph\0"
+"mi.it\0"
+"russia.museum\0"
+"abo.pa\0mil.pl\0"
+"nobeoka.miyazaki.jp\0shinjuku.tokyo.jp\0"
+"ok.us\0"
+"7.bg\0mil.qa\0"
+"verran.no\0suwalki.pl\0"
+"onjuku.chiba.jp\0szczytno.pl\0lv.ua\0"
+"mitou.yamaguchi.jp\0mil.py\0"
+"chita.ru\0"
+"hirono.iwate.jp\0"
+"embroidery.museum\0"
+"mad.museum\0"
+"kawaue.gifu.jp\0"
+"shiiba.miyazaki.jp\0"
+"asnes.no\0"
+"media.hu\0sande.vestfold.no\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
+"lib.de.us\0"
+"erotika.hu\0ski.museum\0"
+"parti.se\0on-the-web.tv\0"
+"works.aero\0gb.com\0dyndns-free.com\0"
+"biz.bb\0firm.ht\0rifu.miyagi.jp\0watari.miyagi.jp\0"
+"takagi.nagano.jp\0biz.at\0"
+"surgeonshall.museum\0skanit.no\0"
+"florida.museum\0"
+"kani.gifu.jp\0"
+"biz.az\0mil.ru\0"
+"isesaki.gunma.jp\0"
+"firm.in\0yusui.kagoshima.jp\0mil.rw\0"
+"mil.sh\0"
+"inderoy.no\0"
+"software.aero\0kushiro.hokkaido.jp\0pyatigorsk.ru\0"
+"bindal.no\0"
+"sakegawa.yamagata.jp\0"
+"ninohe.iwate.jp\0yonago.tottori.jp\0"
+"mil.st\0"
+"galsa.no\0"
+"mil.sy\0"
+"salvadordali.museum\0mil.tj\0"
+"mil.tm\0"
+"for-our.info\0"
+"shikama.miyagi.jp\0mil.to\0"
+"yaotsu.gifu.jp\0"
+"niki.hokkaido.jp\0"
+"hikawa.shimane.jp\0stat.no\0"
+"joetsu.niigata.jp\0mil.tw\0"
+"firm.co\0bruxelles.museum\0endofinternet.org\0"
+"asahi.mie.jp\0mil.tz\0"
+"sor-varanger.no\0dynathome.net\0"
+"skoczow.pl\0"
+"shonai.yamagata.jp\0"
+"stadt.museum\0"
+"roma.it\0"
+"shijonawate.osaka.jp\0"
+"mil.vc\0"
+"mil.ve\0"
+"honai.ehime.jp\0"
+"muko.kyoto.jp\0"
+"karpacz.pl\0mil.uy\0us.com\0"
+"k12.az.us\0"
+"\xe6\x95\x99\xe8\x82\xb2.hk\0"
+"monza-brianza.it\0shingo.aomori.jp\0toshima.tokyo.jp\0prochowice.pl\0"
+"kuju.oita.jp\0cr.ua\0"
+"eid.no\0"
+"kyowa.hokkaido.jp\0"
+"higashikagura.hokkaido.jp\0otari.nagano.jp\0kiyama.saga.jp\0"
+"rochester.museum\0"
+"fuchu.hiroshima.jp\0"
+"hasuda.saitama.jp\0"
+"ap.it\0"
+"fm.br\0dagestan.ru\0"
+"gs.va.no\0"
+"shinshiro.aichi.jp\0lowicz.pl\0"
+"taiwa.miyagi.jp\0yekaterinburg.ru\0"
+"wielun.pl\0"
+"geelvinck.museum\0"
+"slattum.no\0"
+"utsunomiya.tochigi.jp\0"
+"bern.museum\0rivne.ua\0"
+"miners.museum\0"
+"com.ac\0kraanghke.no\0"
+"pa.it\0davvenj\xc3\xa1rga.no\0"
+"com.af\0tsushima.aichi.jp\0"
+"com.ag\0asmatart.museum\0"
+"com.ai\0"
+"etnedal.no\0"
+"com.al\0snaase.no\0media.pl\0"
+"sula.no\0vanylven.no\0"
+"com.an\0"
+"torino.museum\0"
+"helsinki.museum\0"
+"com.ba\0"
+"com.bb\0"
+"kimitsu.chiba.jp\0"
+"tarama.okinawa.jp\0"
+"com.au\0"
+"com.aw\0\xe4\xb8\xaa\xe4\xba\xba.hk\0aremark.no\0"
+"com.bh\0vestre-slidre.no\0"
+"com.bi\0goto.nagasaki.jp\0higashisumiyoshi.osaka.jp\0"
+"com.az\0"
+"rollag.no\0"
+"bc.ca\0"
+"com.bm\0oceanographique.museum\0"
+"mesaverde.museum\0mi.th\0"
+"com.bo\0gs.aa.no\0"
+"jerusalem.museum\0"
+"com.br\0is-a-green.com\0"
+"com.bs\0nagasaki.jp\0"
+"com.bt\0"
+"nishiwaki.hyogo.jp\0"
+"verbania.it\0takarazuka.hyogo.jp\0georgia.museum\0"
+"com.by\0com.ci\0"
+"com.bz\0uchinomi.kagawa.jp\0"
+"ehime.jp\0"
+"shinjo.nara.jp\0"
+"com.cn\0shiki.saitama.jp\0"
+"com.co\0cc.wv.us\0"
+"xxx\0"
+"tychy.pl\0nkz.ru\0"
+"tobe.ehime.jp\0"
+"strand.no\0"
+"biz.ki\0ivanovo.ru\0"
+"com.cu\0com.de\0"
+"s\xc3\xa1l\xc3\xa1t.no\0"
+"hichiso.gifu.jp\0nirasaki.yamanashi.jp\0flesberg.no\0"
+"mi.us\0k12.il.us\0"
+"jgora.pl\0sumy.ua\0"
+"com.dm\0izumo.shimane.jp\0"
+"com.do\0hiranai.aomori.jp\0"
+"jor.br\0!city.sendai.jp\0"
+"omaezaki.shizuoka.jp\0"
+"turin.it\0nissedal.no\0skierva.no\0"
+"com.ec\0"
+"com.ee\0"
+"cc.va.us\0"
+"com.eg\0nagano.nagano.jp\0"
+"halloffame.museum\0leka.no\0"
+"com.dz\0morioka.iwate.jp\0"
+"lesja.no\0"
+"vibovalentia.it\0nishi.osaka.jp\0kg.kr\0"
+"!city.kawasaki.jp\0flanders.museum\0"
+"com.es\0florence.it\0"
+"kumano.hiroshima.jp\0from-sd.com\0"
+"mo.cn\0yamagata.nagano.jp\0!nic.tr\0"
+"yamanashi.jp\0"
+"is-with-theband.com\0"
+"canada.museum\0"
+"bardu.no\0tr\xc3\xb8gstad.no\0"
+"fm.it\0biz.mv\0bialowieza.pl\0!nic.uk\0"
+"com.fr\0vs.it\0kunohe.iwate.jp\0aoki.nagano.jp\0biz.mw\0"
+"izumi.osaka.jp\0koeln.museum\0"
+"gulen.no\0ruovat.no\0"
+"agr.br\0com.ge\0nes.buskerud.no\0"
+"fukudomi.saga.jp\0"
+"dnsdojo.com\0"
+"com.gh\0hitachi.ibaraki.jp\0selfip.biz\0"
+"com.gi\0nakagawa.nagano.jp\0"
+"biz.nr\0"
+"com.gn\0nishiaizu.fukushima.jp\0"
+"com.gp\0bearalvahki.no\0"
+"m\xc3\xa5lselv.no\0kchr.ru\0"
+"com.gr\0tosashimizu.kochi.jp\0"
+"tas.gov.au\0nosegawa.nara.jp\0"
+"com.gt\0kanan.osaka.jp\0oyer.no\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0"
+"shinagawa.tokyo.jp\0"
+"com.gy\0tn.it\0kyoto.jp\0kurume.fukuoka.jp\0"
+"yk.ca\0"
+"com.hk\0itako.ibaraki.jp\0"
+"hammarfeasta.no\0"
+"broker.aero\0com.hn\0shinshinotsu.hokkaido.jp\0"
+"k12.ri.us\0"
+"czeladz.pl\0"
+"dovre.no\0"
"com.hr\0"
-"fg.it\0stathelle.no\0defense.tn\0"
-"com.ht\0"
-"qld.gov.au\0*.nz\0"
-"davvenj\xc3\xa1rga.no\0*.om\0"
-"vang.no\0"
-"*.kumamoto.jp\0"
-"vercelli.it\0usenet.pl\0"
-"com.io\0stalbans.museum\0"
-"com.iq\0"
-"*.pg\0"
-"com.is\0klabu.no\0skiptvet.no\0"
-"med.ht\0field.museum\0"
-"gr.it\0gj\xc3\xb8vik.no\0tromsa.no\0lib.mi.us\0"
-"ca.na\0"
-"hagebostad.no\0k12.ma.us\0"
-"*.qa\0"
-"*.niigata.jp\0"
-"monzaebrianza.it\0com.jo\0comunica\xc3\xa7\xc3\xb5""es.museum\0"
-"gr.jp\0"
-"ballangen.no\0*.py\0"
-"scienceandindustry.museum\0"
-"nuoro.it\0com.kg\0"
+"com.ht\0ebino.miyazaki.jp\0"
+"celtic.museum\0"
+"fujimi.saitama.jp\0biz.pk\0dyndns-at-home.com\0"
+"asn.au\0biz.pl\0"
+"kanzaki.saga.jp\0"
+"nannestad.no\0"
+"yachiyo.ibaraki.jp\0"
+"kaizuka.osaka.jp\0r\xc3\xa5holt.no\0biz.pr\0is-into-games.com\0"
+"\xe9\xa6\x99\xe6\xb8\xaf\0"
+"com.io\0"
+"ri.it\0komoro.nagano.jp\0"
+"com.iq\0gyokuto.kumamoto.jp\0googleapis.com\0"
+"com.is\0"
+"issmarterthanyou.com\0"
+"de.us\0"
+"castle.museum\0!parliament.uk\0"
+"shimodate.ibaraki.jp\0"
+"g\xc3\xa1ivuotna.no\0"
+"kviteseid.no\0"
+"yabu.hyogo.jp\0naamesjevuemie.no\0"
+"com.jo\0science-fiction.museum\0zaporizhzhe.ua\0"
+"tanabe.kyoto.jp\0"
+"aejrie.no\0"
+"sakae.nagano.jp\0is-a-nurse.com\0"
+"moriguchi.osaka.jp\0stjordalshalsen.no\0"
+"pd.it\0ot.it\0com.kg\0tokke.no\0"
"com.ki\0"
-"im.it\0idv.tw\0"
-"*.akita.jp\0com.km\0r\xc3\xb8ros.no\0sopot.pl\0"
-"!pref.yamanashi.jp\0"
+"bibai.hokkaido.jp\0tsk.ru\0"
+"fm.no\0"
+"com.km\0kirovograd.ua\0"
+"b.bg\0tomi.nagano.jp\0"
"com.kp\0"
-"!pref.kochi.jp\0com.la\0"
+"ballooning.aero\0com.la\0"
"com.lb\0"
-"com.lc\0stjordalshalsen.no\0sigdal.no\0cc.nm.us\0"
-"samnanger.no\0"
-"drobak.no\0"
-"vt.it\0"
-"catering.aero\0com.ky\0"
-"com.kz\0cc.ca.us\0"
-"com.lk\0"
-"grosseto.it\0mosvik.no\0"
-"namsskogan.no\0"
-"loten.no\0"
-"chirurgiens-dentistes.fr\0"
-"com.lr\0bremanger.no\0"
-"gs.cn\0"
-"com.lv\0lib.co.us\0"
-"com.mg\0"
-"passenger-association.aero\0"
-"com.ly\0yekaterinburg.ru\0"
-"vladivostok.ru\0"
-"com.mk\0beeldengeluid.museum\0"
+"com.lc\0lutsk.ua\0"
+"yatomi.aichi.jp\0"
+"virtuel.museum\0firm.ro\0"
+"navigation.aero\0b.br\0com.ky\0"
+"com.kz\0"
+"tenei.fukushima.jp\0chungnam.kr\0com.lk\0"
+"mo.it\0"
+"dnsdojo.org\0"
+"com.lr\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0"
+"opoczno.pl\0"
+"pa.us\0"
+"saga.jp\0kvinesdal.no\0biz.tj\0"
+"com.lv\0"
+"gose.nara.jp\0com.mg\0"
+"nagaokakyo.kyoto.jp\0tcm.museum\0"
+"com.ly\0"
+"kawasaki.miyagi.jp\0cieszyn.pl\0"
+"com.mk\0"
"com.ml\0"
-"art.pl\0"
-"com.mo\0"
-"britishcolumbia.museum\0tx.us\0"
-"com.na\0sakhalin.ru\0*.sv\0"
-"mc.it\0"
-"amsterdam.museum\0udm.ru\0"
+"com.mo\0siljan.no\0biz.tt\0"
+"akita.jp\0"
+"com.na\0cc.wy.us\0"
+"riodejaneiro.museum\0marine.ru\0"
+"averoy.no\0"
"com.mu\0"
-"com.mv\0com.nf\0"
-"com.mw\0com.ng\0il.us\0"
-"geometre-expert.fr\0com.mx\0"
-"med.ly\0com.my\0"
-"ag.it\0"
-"*.tr\0"
-"!pref.oita.jp\0"
-"hoyanger.no\0skedsmo.no\0"
-"com.nr\0turystyka.pl\0"
-"koebenhavn.museum\0"
-"quebec.museum\0"
-"stord.no\0*.uk\0"
-"act.au\0"
-"br.it\0cb.it\0gyeonggi.kr\0jobs.tt\0lib.hi.us\0"
-"*.ve\0"
-"*.saga.jp\0wildlife.museum\0com.pa\0"
-"monzabrianza.it\0sciencehistory.museum\0stange.no\0oskol.ru\0principe.st\0*.uy\0"
-"plaza.museum\0com.pe\0"
-"com.pf\0"
-"eigersund.no\0"
+"com.mv\0com.nf\0tolga.no\0"
+"com.mw\0com.ng\0vladimir.ru\0"
+"com.mx\0deatnu.no\0"
+"com.my\0"
+"mihara.kochi.jp\0"
+"hyllestad.no\0melhus.no\0lib.co.us\0"
+"eng.br\0"
+"mashike.hokkaido.jp\0com.nr\0"
+"minamiminowa.nagano.jp\0"
+"moroyama.saitama.jp\0moscow.museum\0"
+"phoenix.museum\0vladikavkaz.ru\0from-nh.com\0"
+"jan-mayen.no\0"
+"granvin.no\0khv.ru\0"
+"cc.ut.us\0"
+"mj\xc3\xb8ndalen.no\0biz.vn\0"
+"accident-investigation.aero\0v\xc3\xa5ler.hedmark.no\0"
+"kisosaki.mie.jp\0"
+"nb.ca\0"
+"firm.nf\0"
+"biz\0doshi.yamanashi.jp\0com.pa\0"
+"lib.ar.us\0dyndns-ip.com\0"
+"fukushima.fukushima.jp\0"
+"com.pe\0"
+"misasa.tottori.jp\0fuossko.no\0com.pf\0"
"com.ph\0"
-"manx.museum\0marylhurst.museum\0"
-"md.ci\0pi.it\0schweiz.museum\0com.pk\0"
-"grp.lk\0fr\xc3\xb8ya.no\0com.pl\0press.se\0"
-"us.com\0"
-"b.bg\0cremona.it\0communication.museum\0art.sn\0"
-"med.pa\0"
-"com.pr\0"
+"tokashiki.okinawa.jp\0\xc4\x8d\xc3\xa1hcesuolo.no\0"
+"moriyama.shiga.jp\0museumcenter.museum\0hof.no\0vegarshei.no\0com.pk\0"
+"com.pl\0"
+"com.qa\0"
+"imperia.it\0com.pr\0"
"com.ps\0"
-"com.pt\0"
-"k12.in.us\0"
-"ah.cn\0bahcavuotna.no\0"
-"sondrio.it\0arkhangelsk.ru\0"
-"cargo.aero\0"
-"council.aero\0"
-"museum.mv\0hattfjelldal.no\0spydeberg.no\0med.pl\0"
-"niepce.museum\0museum.mw\0"
-"anthropology.museum\0"
-"pharmacien.fr\0smola.no\0"
-"fin.ec\0"
-"selbu.no\0"
-"workinggroup.aero\0nm.us\0"
-"museum.no\0com.re\0"
-"cc.vt.us\0"
-"village.museum\0"
-"ca.us\0"
-"*.sapporo.jp\0"
-"teramo.it\0"
+"vv.it\0com.pt\0"
+"ayagawa.kagawa.jp\0davvenjarga.no\0"
+"iwakuni.yamaguchi.jp\0com.py\0k12.dc.us\0"
+"royken.no\0"
+"pri.ee\0nishikata.tochigi.jp\0"
+"urawa.saitama.jp\0"
+"equipment.aero\0sweden.museum\0"
+"kyowa.akita.jp\0guovdageaidnu.no\0"
+"ogaki.gifu.jp\0"
+"com.re\0"
+"emergency.aero\0"
+"ikusaka.nagano.jp\0"
+"hirosaki.aomori.jp\0"
+"jobs.tt\0"
+"maryland.museum\0"
"com.ro\0"
-"*.ye\0"
-"com.sa\0"
-"com.sb\0"
-"so.it\0com.sc\0"
-"jolster.no\0com.sd\0"
+"com.sa\0is-found.org\0"
+"usa.oita.jp\0com.sb\0"
+"frogn.no\0com.sc\0"
+"com.sd\0"
"com.ru\0"
"com.rw\0com.sg\0"
-"sydney.museum\0"
-"sa.edu.au\0"
-"tom.ru\0"
-"com.sl\0*.za\0"
-"\xe7\xbd\x91\xe7\xb5\xa1.hk\0naturbruksgymn.se\0com.sn\0"
-"assedic.fr\0com.so\0"
-"!pref.mie.jp\0*.yu\0"
-"med.sa\0"
-"newspaper.museum\0holmestrand.no\0dnepropetrovsk.ua\0"
-"christiansburg.museum\0roan.no\0"
-"pesaro-urbino.it\0med.sd\0com.st\0"
-"s\xc3\xb8gne.no\0"
-"nuernberg.museum\0"
-"*.zm\0"
-"com.sy\0"
-"*.nagano.jp\0com.tj\0"
-"nt.gov.au\0news.hu\0paderborn.museum\0"
-"boston.museum\0"
-"com.tn\0"
+"inawashiro.fukushima.jp\0com.sh\0"
+"yn.cn\0"
+"com.sl\0"
+"togakushi.nagano.jp\0unazuki.toyama.jp\0com.sn\0"
+"porsanger.no\0com.so\0"
+"av.it\0"
+"gc.ca\0okinawa.jp\0"
+"com.st\0"
+"asn.lv\0namdalseid.no\0tn.us\0"
+"amber.museum\0com.sy\0broke-it.net\0podzone.net\0"
+"net.ac\0com.tj\0"
+"selfip.com\0"
+"net.ae\0ofunato.iwate.jp\0shichikashuku.miyagi.jp\0"
+"net.af\0yoita.niigata.jp\0com.tm\0"
+"net.ag\0com.tn\0dynalias.net\0"
"com.to\0"
-"broadcast.museum\0"
+"net.ai\0eidsberg.no\0"
"com.ua\0"
-"*.zw\0"
-"baikal.ru\0"
-"bykle.no\0com.tt\0"
-"verdal.no\0"
-"roros.no\0"
-"fi.cr\0carboniaiglesias.it\0chuvashia.ru\0com.tw\0"
-"k12.ca.us\0"
-"eidsvoll.no\0"
-"*.ishikawa.jp\0"
-"dolls.museum\0"
-"naval.museum\0"
-"karasjok.no\0tysvar.no\0"
-"bielawa.pl\0com.vc\0"
-"svalbard.no\0deatnu.no\0rnd.ru\0"
-"grandrapids.museum\0"
-"bauern.museum\0k12.pr.us\0"
-"press.ma\0"
-"*.kagawa.jp\0fribourg.museum\0przeworsk.pl\0com.vi\0"
-"com.uz\0"
-"babia-gora.pl\0"
-"com.vn\0"
-"med.pro\0"
-"suedtirol.it\0kursk.ru\0"
-"bonn.museum\0"
-"lt.it\0"
-"design.aero\0microlight.aero\0americanantiques.museum\0meland.no\0"
-"insurance.aero\0aarborte.no\0"
-"kh.ua\0"
-"macerata.it\0architecture.museum\0"
-"rovigo.it\0rawa-maz.pl\0"
-"store.nf\0levanger.no\0"
-"b\xc3\xa1jddar.no\0"
-"not.br\0"
-"com.ws\0"
-"!pref.kagawa.jp\0"
-"!omanpost.om\0"
-"vt.us\0"
-"gs.ah.no\0vladikavkaz.ru\0"
-"no.it\0"
-"in.na\0szkola.pl\0a.se\0"
-"aid.pl\0"
-"workshop.museum\0vegarshei.no\0"
-"sund.no\0"
-"bs.it\0flora.no\0"
-"agriculture.museum\0"
-"koeln.museum\0"
-"minnesota.museum\0k12.il.us\0"
-"froya.no\0"
-"aeroport.fr\0"
-"davvenjarga.no\0zgora.pl\0ivano-frankivsk.ua\0"
-"*.gunma.jp\0"
-"amot.no\0"
-"mus.br\0chungbuk.kr\0"
-"ggf.br\0lorenskog.no\0"
-"jeonbuk.kr\0"
-"k12.vi.us\0"
-"c.bg\0sande.more-og-romsdal.no\0"
-"perugia.it\0"
-"massa-carrara.it\0"
-"michigan.museum\0"
-"archaeology.museum\0mosj\xc3\xb8""en.no\0czest.pl\0koenig.ru\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0"
-"mobi.tt\0"
-"kraanghke.no\0"
-"cc.in.us\0"
-"re.it\0lib.vt.us\0"
-"dell-ogliastra.it\0"
-"s\xc3\xb8mna.no\0"
-"k12.wv.us\0"
-"gok.pk\0fh.se\0"
-"luzern.museum\0"
-"fi.it\0swidnica.pl\0"
-"cbg.ru\0"
-"latina.it\0"
-"vibovalentia.it\0"
-"modum.no\0"
-"safety.aero\0"
-"sp.it\0"
-"science.museum\0ah.no\0"
-"norddal.no\0"
-"cc.na\0"
-"re.kr\0"
-"dielddanuorri.no\0"
-"force.museum\0"
-"torino.it\0cc.md.us\0"
-"artanddesign.museum\0pisz.pl\0"
-"olsztyn.pl\0"
-"unsa.ba\0rade.no\0vinnica.ua\0"
-"in.rs\0astrakhan.ru\0"
-"sogne.no\0"
-"homebuilt.aero\0"
-"polkowice.pl\0"
-"hole.no\0health.vn\0"
-"fj.cn\0"
-"davvesiida.no\0"
-"vic.au\0"
-"kongsberg.no\0"
-"pub.sa\0"
-"vv.it\0"
-"!pref.tottori.jp\0"
-"*.sendai.jp\0in.th\0"
-"lib.pa.us\0"
-"chiropractic.museum\0"
-"mobi.na\0aca.pro\0"
-"konyvelo.hu\0sciencecenters.museum\0"
-"he.cn\0"
-"in.ua\0"
-"!city.nagoya.jp\0"
-"muenchen.museum\0"
-"psi.br\0"
-"maryland.museum\0"
-"!statecouncil.om\0"
-"tr\xc3\xa6na.no\0"
-"!pref.yamagata.jp\0jewishart.museum\0"
-"lu.it\0me.it\0"
-"chel.ru\0"
-"tatarstan.ru\0"
-"adult.ht\0in.us\0"
-"kafjord.no\0"
-"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0"
-"net.ac\0k12.ec\0"
-"net.ae\0bashkiria.ru\0"
-"net.af\0!omantel.om\0"
-"net.ag\0"
-"net.ai\0"
-"!pref.toyama.jp\0"
-"net.al\0timekeeping.museum\0"
-"net.an\0design.museum\0fin.tn\0"
-"ethnology.museum\0"
-"perso.ht\0asker.no\0b.se\0"
-"net.ba\0"
-"net.bb\0flanders.museum\0"
-"mincom.tn\0"
-"frana.no\0"
-"bt.it\0"
-"net.bh\0"
-"auto.pl\0"
+"lugansk.ua\0"
+"net.al\0"
+"nishihara.kumamoto.jp\0com.tt\0"
+"net.an\0cymru.museum\0heritage.museum\0"
+"sarpsborg.no\0com.tw\0com.ug\0"
+"net.ba\0higashiyamato.tokyo.jp\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
+"net.bb\0pg.it\0"
+"net.au\0"
+"meiwa.gunma.jp\0"
+"as.us\0"
+"net.bh\0ri.us\0"
+"e.bg\0"
"net.az\0"
-"treviso.it\0"
-"war.museum\0"
+"roan.no\0"
+"com.vc\0\xe5\x8f\xb0\xe7\x81\xa3\0"
"net.bm\0"
-"langevag.no\0m\xc3\xa5lselv.no\0"
+"com.ve\0"
"net.bo\0"
-"gol.no\0"
-"folkebibl.no\0"
-"net.br\0"
-"net.bs\0troandin.no\0saotome.st\0lib.tn.us\0"
-"md.us\0k12.ut.us\0"
-"d.bg\0cambridge.museum\0\xc3\xa5s.no\0"
+"net.br\0com.uy\0com.vi\0fuettertdasnetz.de\0"
+"net.bs\0tran\xc3\xb8y.no\0com.uz\0"
+"net.bt\0higashiomi.shiga.jp\0kms.ru\0"
+"accident-prevention.aero\0from-ca.com\0"
+"ozora.hokkaido.jp\0com.vn\0dyndns-server.com\0"
"net.ci\0"
"net.bz\0"
-"sch.ae\0undersea.museum\0odda.no\0"
+"livinghistory.museum\0"
"net.cn\0"
-"net.co\0c.la\0"
-"gliwice.pl\0"
-"aurskog-h\xc3\xb8land.no\0"
-"andria-trani-barletta.it\0"
-"net.cu\0loab\xc3\xa1t.no\0"
-"rep.kp\0"
-"\xe7\xbb\x84\xe7\xb9\x94.hk\0"
-"gallery.museum\0"
-"\xc3\xb8rland.no\0"
-"store.ro\0"
-"net.dm\0"
-"somna.no\0"
-"hemnes.no\0"
-"ringebu.no\0k12.ky.us\0"
-"net.ec\0"
-"dn.ua\0"
-"tarnobrzeg.pl\0"
-"soc.lk\0"
-"romsa.no\0"
-"bamble.no\0"
-"net.dz\0lutsk.ua\0"
-"barlettatraniandria.it\0ta.it\0countryestate.museum\0"
-"kaszuby.pl\0"
-"*.yamaguchi.jp\0cranbrook.museum\0store.st\0"
-"southcarolina.museum\0lib.md.us\0"
-"textile.museum\0"
-"cheltenham.museum\0hurum.no\0"
-"*.oita.jp\0"
-"shop.ht\0cc.me.us\0"
-"shop.hu\0turin.it\0"
-"louvre.museum\0"
-"k12.ar.us\0"
-"consulting.aero\0"
-"gv.ao\0"
-"sauherad.no\0"
-"gv.at\0net.ge\0"
-"ostre-toten.no\0lib.ok.us\0"
-"net.gg\0pilots.museum\0"
-"2000.hu\0geology.museum\0"
-"net.gn\0"
-"mazowsze.pl\0bir.ru\0"
+"net.co\0ryuoh.shiga.jp\0"
+"krokstadelva.no\0"
+"lib.wa.us\0"
+"cat\0"
+"oz.au\0net.cu\0from-sc.com\0"
+"chocolate.museum\0"
+"sch.ae\0"
+"iwate.jp\0"
+"museum.tt\0com.ws\0"
+"net.dm\0selje.no\0is-very-good.org\0"
+"net.do\0"
+"net.ec\0gildesk\xc3\xa5l.no\0"
+"moriyoshi.akita.jp\0rl.no\0mo.us\0blogspot.re\0"
+"net.eg\0"
+"hachioji.tokyo.jp\0childrens.museum\0"
+"shizuoka.jp\0"
+"net.dz\0"
+"minamiizu.shizuoka.jp\0"
+"is-a-patsfan.org\0"
+"inagawa.hyogo.jp\0blogspot.ro\0"
+"yamagata.jp\0gsm.pl\0"
+"suldal.no\0dlugoleka.pl\0blogspot.se\0"
+"blogspot.sg\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0dnsalias.com\0"
+"kamikawa.hokkaido.jp\0kamoenai.hokkaido.jp\0"
+"blogspot.sk\0"
+"siracusa.it\0k12.wi.us\0"
+"oksnes.no\0\xed\x95\x9c\xea\xb5\xad\0"
+"vardo.no\0starachowice.pl\0"
+"net.ge\0ishinomaki.miyagi.jp\0oji.nara.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0blogspot.td\0"
+"trustee.museum\0"
+"net.gg\0"
+"misato.saitama.jp\0"
+"ppg.br\0"
+"net.gn\0chikuho.fukuoka.jp\0"
"net.gp\0"
-"net.gr\0"
-"oxford.museum\0"
-"per.la\0"
-"eastafrica.museum\0"
-"meeres.museum\0"
-"net.gy\0*.shizuoka.jp\0"
-"\xe5\x95\x86\xe6\xa5\xad.tw\0"
-"net.hk\0"
+"osoyro.no\0dyndns-office.com\0"
+"net.gr\0higashikawa.hokkaido.jp\0"
+"net.gt\0monzabrianza.it\0mr.no\0eidsvoll.no\0"
+"aridagawa.wakayama.jp\0"
+"sykkylven.no\0"
+"minamiaiki.nagano.jp\0blogspot.tw\0"
+"net.gy\0naturhistorisches.museum\0"
+"net.hk\0zaporizhzhia.ua\0"
+"mifune.kumamoto.jp\0"
"net.hn\0"
-"philadelphiaarea.museum\0"
-"osen.no\0"
+"kahoku.yamagata.jp\0"
+"asakawa.fukushima.jp\0"
+"barlettatraniandria.it\0blogspot.mr\0"
"net.ht\0net.id\0"
-"fundacio.museum\0"
-"j\xc3\xb8rpeland.no\0"
-"\xe6\x95\x99\xe8\x82\xb2.hk\0"
-"divtasvuodna.no\0"
-"student.aero\0sch.gg\0net.im\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.cn\0net.in\0"
+"b.se\0"
+"ud.it\0tsuchiura.ibaraki.jp\0naturalhistory.museum\0"
+"matsushige.tokushima.jp\0nanto.toyama.jp\0from-al.com\0"
+"blogspot.mx\0"
+"nagakute.aichi.jp\0zamami.okinawa.jp\0"
+"net.im\0ikawa.akita.jp\0lib.ne.us\0blogspot.nl\0"
+"net.in\0"
+"yokkaichi.mie.jp\0"
+"blogspot.no\0"
"net.iq\0"
"net.ir\0"
"net.is\0"
"net.je\0"
-"kepno.pl\0lapy.pl\0"
-"per.nf\0"
-"gov\0*.shimane.jp\0"
-"artcenter.museum\0"
-"k\xc3\xa5""fjord.no\0"
-"net.jo\0"
-"eu.int\0"
-"c.se\0"
+"from.hr\0cc.oh.us\0"
+"biratori.hokkaido.jp\0"
+"sch.gg\0"
+"taxi.aero\0"
+"bi.it\0treviso.it\0"
+"ro.it\0"
+"mine.nu\0"
+"net.jo\0tenri.nara.jp\0alvdal.no\0"
+"ikeda.hokkaido.jp\0here-for-more.info\0"
+"owani.aomori.jp\0"
+"uri.arpa\0"
+"tsukui.kanagawa.jp\0bryne.no\0"
+"shibetsu.hokkaido.jp\0grozny.ru\0"
+"jewelry.museum\0"
"net.kg\0"
-"ce.it\0net.ki\0"
-"sch.id\0os.hedmark.no\0"
-"columbus.museum\0"
-"arteducation.museum\0"
+"net.ki\0"
+"sakura.chiba.jp\0nittedal.no\0"
+"kawazu.shizuoka.jp\0"
"net.kn\0"
-"kr.com\0"
-"net.la\0bushey.museum\0cc.gu.us\0"
-"net.lb\0"
+"net.la\0hoylandet.no\0"
+"net.lb\0\xc3\xa5mli.no\0"
"net.lc\0"
-"gs.bu.no\0"
-"e164.arpa\0"
-"chieti.it\0labour.museum\0"
-"sch.ir\0creation.museum\0krodsherad.no\0"
-"net.ky\0"
-"net.kz\0me.us\0"
-"e.bg\0sch.je\0net.lk\0"
-"zlg.br\0suwalki.pl\0"
-"\xe5\x80\x8b\xe4\xba\xba.hk\0net.ma\0"
-"net.lr\0"
-"sch.jo\0notaires.km\0net.me\0"
-"net.lv\0karate.museum\0"
-"net.ly\0karm\xc3\xb8y.no\0"
-"rg.it\0"
+"mihama.fukui.jp\0yamagata.gifu.jp\0blogspot.pt\0"
+"sch.id\0"
+"aca.pro\0"
+"sanjo.niigata.jp\0net.ky\0"
+"tsukumi.oita.jp\0net.kz\0oceanographic.museum\0k12.nm.us\0"
+"h.bg\0net.lk\0"
+"miharu.fukushima.jp\0"
+"aknoluokta.no\0"
+"net.ma\0"
+"tw.cn\0net.lr\0"
+"kamikitayama.nara.jp\0miyashiro.saitama.jp\0chernihiv.ua\0"
+"ichikawa.hyogo.jp\0comunica\xc3\xa7\xc3\xb5""es.museum\0"
+"sch.ir\0oki.fukuoka.jp\0yoshioka.gunma.jp\0akkeshi.hokkaido.jp\0net.me\0kazimierz-dolny.pl\0blogspot.it\0"
+"net.lv\0"
+"sch.je\0yoshida.saitama.jp\0"
+"net.ly\0"
"net.mk\0"
-"net.ml\0evenes.no\0"
-"ngo.lk\0net.mo\0egyptian.museum\0"
-"marine.ru\0"
-"realestate.pl\0"
+"net.ml\0"
+"museum.mv\0"
+"hokkaido.jp\0net.mo\0museum.mw\0"
+"\xc3\xa1lt\xc3\xa1.no\0vestnes.no\0"
+"blogspot.jp\0"
+"sch.jo\0"
+"yokoze.saitama.jp\0stathelle.no\0blogspot.com.ar\0"
"net.mu\0"
"net.mv\0net.nf\0"
-"net.mw\0net.ng\0gda.pl\0"
+"adult.ht\0ne.jp\0coldwar.museum\0net.mw\0net.ng\0museum.no\0blogspot.com.au\0"
"net.mx\0"
-"freemasonry.museum\0net.my\0enebakk.no\0"
-"karlsoy.no\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.hk\0\xc3\xb8rskog.no\0"
-"randaberg.no\0"
-"club.aero\0"
-"certification.aero\0sr.it\0"
-"center.museum\0so.gov.pl\0"
-"caa.aero\0"
-"sch.lk\0tvedestrand.no\0"
+"skydiving.aero\0net.my\0"
+"nakasatsunai.hokkaido.jp\0"
+"undersea.museum\0"
+"kainan.wakayama.jp\0sebastopol.ua\0cc.hi.us\0"
+"gamagori.aichi.jp\0"
+"gyeongbuk.kr\0"
"net.nr\0"
-"luroy.no\0"
-"aukra.no\0s\xc3\xa1lat.no\0lib.me.us\0"
-"ddr.museum\0"
-"york.museum\0stryn.no\0k12.nm.us\0"
-"per.sg\0"
-"judaica.museum\0"
-"verona.it\0"
-"agdenes.no\0"
-"cng.br\0sch.ly\0"
-"net.pa\0"
-"author.aero\0"
-"naturalhistory.museum\0steiermark.museum\0bu.no\0"
-"sn\xc3\xa5sa.no\0net.pe\0"
-"net.ph\0"
-"savannahga.museum\0batsfjord.no\0lib.oh.us\0"
+"jorpeland.no\0blogspot.kr\0"
+"bellevue.museum\0blogspot.com.br\0"
+"kanegasaki.iwate.jp\0"
+"ne.kr\0"
+"aosta.it\0mima.tokushima.jp\0"
+"pro.az\0km.ua\0"
+"nakanoto.ishikawa.jp\0sch.lk\0"
+"nome.pt\0"
+"nagareyama.chiba.jp\0himeji.hyogo.jp\0denmark.museum\0"
+"echizen.fukui.jp\0net.pa\0\xe4\xb8\xad\xe5\x9b\xbd\0from-oh.com\0"
+"kongsvinger.no\0ringebu.no\0"
+"tsukigata.hokkaido.jp\0m\xc3\xa5s\xc3\xb8y.no\0"
+"pro.br\0net.pe\0bar.pro\0"
+"viterbo.it\0heroy.more-og-romsdal.no\0"
+"omihachiman.shiga.jp\0labor.museum\0"
+"toho.fukuoka.jp\0tome.miyagi.jp\0net.ph\0"
"net.pk\0"
-"net.pl\0"
-"net.pn\0"
-"washingtondc.museum\0"
+"sch.ly\0net.pl\0"
+"saijo.ehime.jp\0"
+"shiojiri.nagano.jp\0net.pn\0"
+"newport.museum\0\xe4\xb8\xad\xe5\x9c\x8b\0"
+"\xe6\x95\x8e\xe8\x82\xb2.hk\0net.qa\0"
"net.pr\0"
"net.ps\0"
"net.pt\0"
-"nordkapp.no\0"
-"emergency.aero\0krokstadelva.no\0"
-"satx.museum\0ngo.ph\0omsk.ru\0"
-"texas.museum\0"
-"ngo.pl\0"
-"mantova.it\0gu.us\0"
-"!pref.shiga.jp\0isa.us\0"
-"usa.museum\0"
-"gb.net\0k12.vi\0"
-"iveland.no\0"
-"tempio-olbia.it\0"
+"akrehamn.no\0"
+"oshu.iwate.jp\0lincoln.museum\0fjell.no\0"
+"selfip.info\0"
+"hol.no\0"
+"net.py\0"
+"blogspot.fi\0"
+"kakegawa.shizuoka.jp\0cc.co.us\0"
+"com\0schoenbrunn.museum\0"
+"microlight.aero\0"
+"shimogo.fukushima.jp\0"
+"leirvik.no\0"
+"veg\xc3\xa5rshei.no\0blogspot.fr\0"
+"blogspot.com.es\0"
+"pro.ec\0"
+"civilisation.museum\0"
+"g\xc3\xa1\xc5\x8bgaviika.no\0"
+"nago.okinawa.jp\0"
+"station.museum\0"
+"akashi.hyogo.jp\0ichinohe.iwate.jp\0"
+"tsukiyono.gunma.jp\0"
+"b\xc3\xa1hcavuotna.no\0"
+"notogawa.shiga.jp\0sciencehistory.museum\0s\xc3\xb8r-fron.no\0"
"net.sa\0"
"net.sb\0"
-"works.aero\0net.sc\0komvux.se\0"
+"net.sc\0blogspot.gr\0"
"net.sd\0"
-"net.ru\0"
-"0.bg\0"
-"forlicesena.it\0net.rw\0net.sg\0"
-"klodzko.pl\0"
-"detroit.museum\0wegrow.pl\0"
-"net.sl\0"
-"glogow.pl\0"
-"store.bb\0air.museum\0"
-"net.so\0"
-"katowice.pl\0"
-"nsk.ru\0"
-"pisa.it\0eid.no\0"
-"net.st\0"
-"film.hu\0"
-"tuva.ru\0d.se\0"
+"mandal.no\0net.ru\0"
+"net.rw\0e.se\0net.sg\0"
+"flight.aero\0alabama.museum\0net.sh\0"
+"dgca.aero\0dominic.ua\0"
+"vestby.no\0"
+"kuroishi.aomori.jp\0gs.hl.no\0"
+"sorfold.no\0net.sl\0blogspot.hk\0"
+"nemuro.hokkaido.jp\0l\xc3\xa1hppi.no\0wi.us\0"
+"tsuno.miyazaki.jp\0net.so\0"
+"giessen.museum\0"
+"l\xc3\xb8ten.no\0dn.ua\0"
+"wada.nagano.jp\0"
+"sch.qa\0net.st\0"
+"shiroishi.saga.jp\0"
+"blogspot.hu\0blogspot.ie\0"
+"teramo.it\0kuzumaki.iwate.jp\0"
"net.th\0"
"net.sy\0"
-"viterbo.it\0tsaritsyn.ru\0perso.sn\0net.tj\0"
-"lib.gu.us\0"
-"plc.co.im\0sec.ps\0"
-"r\xc3\xa1hkker\xc3\xa1vju.no\0kazimierz-dolny.pl\0net.tn\0"
-"net.to\0"
-"veterinaire.km\0"
+"net.tj\0cc.ok.us\0"
+"uozu.toyama.jp\0net.tm\0"
+"bl.it\0naoshima.kagawa.jp\0ne.pw\0net.tn\0"
+"ohi.fukui.jp\0fusa.no\0net.to\0blogspot.in\0"
+"hirakata.osaka.jp\0"
"net.ua\0"
-"info.ht\0net.tt\0"
-"info.hu\0"
-"exchange.aero\0"
-"sch.sa\0net.tw\0"
-"andriatranibarletta.it\0perso.tn\0"
-"f.bg\0malselv.no\0"
+"fujiyoshida.yamanashi.jp\0beskidy.pl\0"
+"ed.ao\0net.tt\0"
+"kochi.kochi.jp\0"
+"southcarolina.museum\0valle.no\0blogspot.be\0dnsdojo.net\0"
+"tomika.gifu.jp\0muosat.no\0net.tw\0"
+"minamiyamashiro.kyoto.jp\0"
+"itano.tokushima.jp\0blogspot.bj\0"
+"tainai.niigata.jp\0zachpomor.pl\0"
+"komono.mie.jp\0project.museum\0"
+"blogspot.ca\0"
"net.vc\0"
-"trana.no\0"
-"ns.ca\0"
-"net.vi\0"
-"lucca.it\0oristano.it\0"
-"usarts.museum\0net.vn\0"
-"gon.pk\0"
-"pl.ua\0"
-"eastcoast.museum\0"
-"novara.it\0"
-"k12.ks.us\0"
-"dp.ua\0"
-"nesseby.no\0"
-"!pref.wakayama.jp\0"
-"repbody.aero\0"
-"jamison.museum\0lugansk.ua\0"
-"ss.it\0"
-"alessandria.it\0"
-"hadsel.no\0net.ws\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"
-"veterinaire.fr\0leirfjord.no\0"
-"massacarrara.it\0north.museum\0"
-"project.museum\0"
-"other.nf\0"
-"k12.nh.us\0"
-"mat.br\0artgallery.museum\0"
-"sr.gov.pl\0"
-"gamvik.no\0"
-"info.ec\0lancashire.museum\0"
-"fm.br\0ltd.co.im\0"
-"americana.museum\0southwest.museum\0cc.ak.us\0"
-"enna.it\0lunner.no\0"
-"v\xc3\xa5gan.no\0"
-"mari.ru\0"
-"accident-investigation.aero\0"
-"sor-aurdal.no\0lib.ny.us\0"
-"novosibirsk.ru\0"
-"bjugn.no\0"
-"n\xc3\xa6r\xc3\xb8y.no\0ostrowwlkp.pl\0"
-"info.bb\0foundation.museum\0"
-"brand.se\0"
-"info.at\0!pref.akita.jp\0l\xc3\xb8ten.no\0"
-"coal.museum\0miners.museum\0"
-"glass.museum\0"
-"info.az\0"
-"frog.museum\0szczytno.pl\0nov.ru\0"
-"sunndal.no\0"
-"gen.in\0"
-"gx.cn\0"
-"web.co\0*.mie.jp\0hobol.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0"
-"logistics.aero\0plo.ps\0"
-"erotika.hu\0"
-"torsken.no\0"
-"exeter.museum\0"
-"info.co\0"
-"selje.no\0"
-"storfjord.no\0"
-"barum.no\0lind\xc3\xa5s.no\0"
+"aerobatic.aero\0benevento.it\0sch.sa\0"
+"nakadomari.aomori.jp\0ibara.okayama.jp\0net.ve\0"
+"elvendrell.museum\0"
+"pro.ht\0tomari.hokkaido.jp\0blogspot.cf\0"
+"hikimi.shimane.jp\0"
+"net.uy\0net.vi\0blogspot.ch\0"
+"net.uz\0"
+"servebbs.com\0"
+"k.bg\0"
+"ed.ci\0net.vn\0"
+"paragliding.aero\0otobe.hokkaido.jp\0"
+"sakai.fukui.jp\0"
+"rikuzentakata.iwate.jp\0"
+"journalism.museum\0"
+"news.hu\0"
+"susono.shizuoka.jp\0blogspot.de\0"
+"ed.cr\0mediocampidano.it\0blogspot.cv\0"
+"soma.fukushima.jp\0blogspot.com\0"
+"blogspot.cz\0is-a-player.com\0"
+"blogspot.dk\0"
+"consulado.st\0"
+"shingu.fukuoka.jp\0"
+"inami.wakayama.jp\0"
+"education.museum\0"
+"sciencecenters.museum\0net.ws\0"
+"lib.ga.us\0"
+"bergen.no\0"
+"prato.it\0shiwa.iwate.jp\0"
+"bo.nordland.no\0"
+"foggia.it\0"
+"pp.az\0ne.ug\0"
+"chirurgiens-dentistes.fr\0"
+"toyama.jp\0ne.tz\0"
+"forum.hu\0chita.aichi.jp\0"
+"nisshin.aichi.jp\0"
+"lc.it\0mitake.gifu.jp\0solund.no\0"
+"ogose.saitama.jp\0"
+"kunst.museum\0"
+"ne.us\0"
+"furukawa.miyagi.jp\0"
+"nakatombetsu.hokkaido.jp\0lib.tn.us\0"
+"\xc3\xa5l.no\0"
+"fareast.ru\0"
+"railroad.museum\0"
+"yamaguchi.jp\0sakae.chiba.jp\0"
+"atsuma.hokkaido.jp\0minamimaki.nagano.jp\0"
+"marker.no\0"
+"yabuki.fukushima.jp\0from-ak.com\0"
+"settlers.museum\0rubtsovsk.ru\0"
+"akabira.hokkaido.jp\0"
+"pro.na\0"
+"yurihonjo.akita.jp\0"
+"kuji.iwate.jp\0"
+"morotsuka.miyazaki.jp\0pro.mv\0"
+"mx.na\0"
+"cargo.aero\0ohira.tochigi.jp\0"
+"fyresdal.no\0"
+"trieste.it\0tokyo.jp\0"
+"midori.chiba.jp\0"
+"manx.museum\0"
+"soo.kagoshima.jp\0kunstsammlung.museum\0rzeszow.pl\0"
+"samegawa.fukushima.jp\0"
"leasing.aero\0"
-"championship.aero\0fst.br\0"
-"lierne.no\0"
-"!gobiernoelectronico.ar\0""1.bg\0"
-"corporation.museum\0"
-"al.it\0*.miyagi.jp\0"
-"*.aomori.jp\0"
-"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
-"amursk.ru\0"
-"vestvagoy.no\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0cc.fl.us\0"
-"os.hordaland.no\0"
-"pistoia.it\0"
-"tver.ru\0e.se\0"
-"res.in\0*.yamagata.jp\0syzran.ru\0"
-"capebreton.museum\0sandnessj\xc3\xb8""en.no\0"
-"ternopil.ua\0"
-"shop.pl\0"
-"tank.museum\0"
-"m\xc3\xa5s\xc3\xb8y.no\0"
-"potenza.it\0time.museum\0"
-"mjondalen.no\0"
-"eng.br\0nedre-eiker.no\0"
-"air-surveillance.aero\0"
-"nt.au\0am.br\0pn.it\0"
-"oystre-slidre.no\0ug.gov.pl\0"
-"g.bg\0nesodden.no\0vologda.ru\0"
-"parma.it\0tula.ru\0"
-"*.nara.jp\0ak.us\0"
-"nt.ca\0konin.pl\0"
-"kiev.ua\0"
-"skierv\xc3\xa1.no\0vestre-toten.no\0"
-"ri.it\0botanical.museum\0farsund.no\0veg\xc3\xa5rshei.no\0dagestan.ru\0"
-"ind.br\0k-uralsk.ru\0"
-"rahkkeravju.no\0cmw.ru\0"
-"canada.museum\0"
-"fm.it\0"
-"cc.wi.us\0"
-"web.id\0aver\xc3\xb8y.no\0"
-"dudinka.ru\0"
-"baghdad.museum\0fitjar.no\0grane.no\0"
-"gs.fm.no\0"
-"sumy.ua\0"
-"al.no\0"
-"westfalen.museum\0"
-"oregon.museum\0"
-"bruxelles.museum\0elk.pl\0"
-"planetarium.museum\0sn\xc3\xa5""ase.no\0"
-"s\xc3\xb8rreisa.no\0"
-"gs.st.no\0skien.no\0"
-"bible.museum\0ivanovo.ru\0"
-"avellino.it\0"
-"tgory.pl\0"
-"family.museum\0"
-"ppg.br\0k12.as.us\0"
-"trader.aero\0gorlice.pl\0"
-"cc.al.us\0"
-"ogliastra.it\0"
-"is.it\0lib.nv.us\0"
-"dr.na\0"
-"media.hu\0nesna.no\0fl.us\0"
-"uri.arpa\0"
-"bjerkreim.no\0"
-"charter.aero\0"
-"genova.it\0"
-"it.ao\0botany.museum\0hapmir.no\0"
-"educational.museum\0"
-"helsinki.museum\0"
-"memorial.museum\0"
-"web.lk\0pharmacy.museum\0"
-"aircraft.aero\0appspot.com\0"
-"ferrara.it\0beskidy.pl\0"
-"hi.cn\0"
-"taxi.aero\0flekkefjord.no\0"
-"varoy.no\0"
-"ragusa.it\0ambulance.museum\0"
-"can.museum\0"
-"*.osaka.jp\0isleofman.museum\0fm.no\0warmia.pl\0"
-"educator.aero\0asmatart.museum\0"
-"mi.it\0"
-"kutno.pl\0"
-"skedsmokorset.no\0"
-"2.bg\0"
-"*.kagoshima.jp\0km.ua\0"
-"!city.sendai.jp\0"
-"web.nf\0st.no\0cc.ri.us\0"
-"reggiocalabria.it\0"
-"wi.us\0"
-"ancona.it\0newjersey.museum\0nnov.ru\0"
-"f.se\0"
-"ind.in\0"
-"info.vn\0"
-"andoy.no\0"
-"ch.it\0fredrikstad.no\0guovdageaidnu.no\0"
-"fjaler.no\0"
-"sa.com\0"
-"gs.nt.no\0"
-"masfjorden.no\0"
-"pordenone.it\0"
-"po.it\0basel.museum\0"
-"chambagri.fr\0"
-"h.bg\0web.pk\0"
-"london.museum\0"
-"sciencecenter.museum\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"unbi.ba\0augustow.pl\0"
-"wolomin.pl\0"
-"notaires.fr\0tcm.museum\0al.us\0"
-"nu.ca\0!pref.nagano.jp\0"
-"info.tn\0"
-"lib.wa.us\0"
-"ed.ao\0info.tt\0"
-"barreau.bj\0"
-"k12.wy.us\0"
-"pp.az\0gop.pk\0"
-"int\0"
-"l\xc3\xb8renskog.no\0podhale.pl\0"
-"voagat.no\0"
-"telekommunikation.museum\0"
-"qld.au\0"
-"te.it\0freiburg.museum\0snasa.no\0"
-"gjemnes.no\0"
-"sejny.pl\0"
-"media.pl\0"
-"skjak.no\0"
-"watchandclock.museum\0"
-"ed.ci\0pacific.museum\0"
-"theater.museum\0info.ro\0"
-"uk.com\0"
-"campobasso.it\0aquarium.museum\0tysv\xc3\xa6r.no\0"
-"kragero.no\0"
-"windmill.museum\0info.sd\0"
-"sologne.museum\0sande.m\xc3\xb8re-og-romsdal.no\0"
-"nt.no\0cc.mi.us\0"
-"ed.cr\0"
-"academy.museum\0zachpomor.pl\0"
-"tananger.no\0v\xc3\xa1rgg\xc3\xa1t.no\0ri.us\0"
+"higashi.fukuoka.jp\0kids.us\0"
+"assedic.fr\0"
+"state.museum\0czest.pl\0"
+"wallonie.museum\0podzone.org\0"
+"hitoyoshi.kumamoto.jp\0"
+"hamura.tokyo.jp\0"
+"h.se\0"
+"minoh.osaka.jp\0"
+"tako.chiba.jp\0kafjord.no\0"
+"freemasonry.museum\0"
+"lib.mo.us\0"
+"ed.jp\0pro.pr\0"
+"film.hu\0"
+"act.au\0"
+"in.na\0"
+"no.com\0"
+"higashiizumo.shimane.jp\0elburg.museum\0"
+"siedlce.pl\0"
+"bo.it\0"
+"chikugo.fukuoka.jp\0from-mo.com\0"
+"!city.kitakyushu.jp\0sopot.pl\0"
+"togura.nagano.jp\0"
+"handson.museum\0sb.ua\0"
+"rennebu.no\0"
+"milan.it\0"
+"kamioka.akita.jp\0"
+"cc.mi.us\0"
+"from-de.com\0"
+"urayasu.chiba.jp\0"
+"varggat.no\0"
+"takatsuki.shiga.jp\0k12.ms.us\0k12.nc.us\0"
+"n.bg\0sakaki.nagano.jp\0"
+"uwajima.ehime.jp\0skaun.no\0"
+"kursk.ru\0"
+"tabayama.yamanashi.jp\0"
+"ryazan.ru\0"
+"oyabe.toyama.jp\0health.vn\0"
+"higashiyoshino.nara.jp\0"
+"isen.kagoshima.jp\0nogi.tochigi.jp\0broadcast.museum\0"
+"iitate.fukushima.jp\0yawata.kyoto.jp\0daegu.kr\0"
+"obihiro.hokkaido.jp\0rebun.hokkaido.jp\0kamo.niigata.jp\0"
+"vrn.ru\0"
+"higashimurayama.tokyo.jp\0"
+"ora.gunma.jp\0shimoji.okinawa.jp\0pro.tt\0lib.wv.us\0"
+"odate.akita.jp\0"
+"shoo.okayama.jp\0"
+"tula.ru\0"
+"uchinada.ishikawa.jp\0"
+"sh.cn\0kawahara.tottori.jp\0"
+"ingatlan.hu\0chikuma.nagano.jp\0vaksdal.no\0"
+"foundation.museum\0"
+"lewismiller.museum\0"
+"trentino.it\0"
+"qc.ca\0piacenza.it\0bokn.no\0"
+"in.rs\0tom.ru\0"
+"cng.br\0lebesby.no\0nh.us\0k12.ia.us\0"
+"noto.ishikawa.jp\0arita.saga.jp\0"
+"svizzera.museum\0ask\xc3\xb8y.no\0"
+"kiyose.tokyo.jp\0frosta.no\0"
+"ks.ua\0pro.vn\0"
+"namsos.no\0"
"federation.aero\0"
-"web.tj\0"
-"matta-varjjat.no\0"
-"steigen.no\0"
-"local\0akrehamn.no\0"
-"!pref.chiba.jp\0info.pk\0"
-"info.pl\0""6bone.pl\0"
-"klepp.no\0kherson.ua\0"
-"ketrzyn.pl\0info.pr\0"
-"sweden.museum\0"
-"lardal.no\0"
-"!retina.ar\0gz.cn\0"
-"barletta-trani-andria.it\0vikna.no\0"
-"bearalv\xc3\xa1hki.no\0"
-"broker.aero\0gov.nc.tr\0"
-"info.na\0k12.fl.us\0"
-"hembygdsforbund.museum\0"
-"entertainment.aero\0jerusalem.museum\0l\xc3\xa6rdal.no\0"
-"hitra.no\0sogndal.no\0"
-"farmequipment.museum\0info.mv\0info.nf\0\xc3\xa5lg\xc3\xa5rd.no\0"
-"la-spezia.it\0"
-"skanland.no\0fam.pk\0"
-"skole.museum\0"
-"art.museum\0"
-"presidio.museum\0"
-"3.bg\0public.museum\0"
-"h\xc3\xb8yanger.no\0zagan.pl\0"
-"an.it\0"
-"philadelphia.museum\0info.nr\0"
-"pesarourbino.it\0g\xc3\xa1ivuotna.no\0"
+"naumburg.museum\0"
+"szczecin.pl\0"
+"koza.wakayama.jp\0"
"poltava.ua\0"
-"nt.ro\0"
-"station.museum\0"
-"mi.th\0"
-"altoadige.it\0"
-"nu.it\0"
-"usculture.museum\0g.se\0"
-"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
-"daegu.kr\0info.la\0"
-"dovre.no\0"
-"ci.it\0horology.museum\0"
-"bergbau.museum\0"
-"press.museum\0"
-"gangwon.kr\0"
-"!city.kitakyushu.jp\0sor-varanger.no\0cc.hi.us\0"
-"fuossko.no\0"
-"zp.ua\0"
-"american.museum\0"
-"fl\xc3\xa5.no\0mi.us\0"
-"i.bg\0"
-"od.ua\0"
-"encyclopedic.museum\0"
-"ind.tn\0"
-"midatlantic.museum\0"
-"newyork.museum\0"
-"castres.museum\0"
-"act.edu.au\0"
-"topology.museum\0"
-"ed.jp\0"
-"of.by\0"
-"iris.arpa\0inf.br\0askim.no\0pyatigorsk.ru\0"
-"nord-fron.no\0nsn.us\0"
-"beardu.no\0"
-"agrar.hu\0corvette.museum\0chtr.k12.ma.us\0"
+"sorum.no\0ed.pw\0from-ky.com\0"
+"nishiazai.shiga.jp\0"
+"in.th\0"
+"moseushi.hokkaido.jp\0sn\xc3\xa5sa.no\0"
+"nankoku.kochi.jp\0"
+"orland.no\0"
+"miyoshi.tokushima.jp\0larvik.no\0ks.us\0"
+"loppa.no\0"
+"*.kobe.jp\0childrensgarden.museum\0"
+"sakai.ibaraki.jp\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
+"in.ua\0"
+"inf.br\0\xe7\xbd\x91\xe7\xb5\xa1.hk\0h\xc3\xb8ylandet.no\0skedsmo.no\0"
+"dynalias.org\0"
+"kurobe.toyama.jp\0gol.no\0"
+"not.br\0shingu.wakayama.jp\0"
+"nakai.kanagawa.jp\0cc.de.us\0"
+"azumino.nagano.jp\0rade.no\0"
+"dyndns-at-work.com\0"
+"travel.pl\0"
+"katsuura.chiba.jp\0"
+"oiso.kanagawa.jp\0"
+"it.ao\0cim.br\0in.us\0"
+"bamble.no\0"
+"inf.cu\0mimata.miyazaki.jp\0"
+"bo.telemark.no\0"
+"karasjohka.no\0"
+"hanyu.saitama.jp\0artanddesign.museum\0"
+"padua.it\0"
+"health.museum\0"
+"edu\0aseral.no\0"
+"carbonia-iglesias.it\0nikaho.akita.jp\0"
+"r\xc3\xb8ros.no\0"
+"matsudo.chiba.jp\0yoshinogari.saga.jp\0"
+"\xc3\xb8ystre-slidre.no\0k.se\0"
+"bodo.no\0holmestrand.no\0vestvagoy.no\0"
+"horokanai.hokkaido.jp\0matsue.shimane.jp\0"
+"oyodo.nara.jp\0dnsalias.net\0"
+"fr\xc3\xb8ya.no\0"
+"monzaebrianza.it\0katagami.akita.jp\0istmein.de\0"
+"tochigi.tochigi.jp\0lea\xc5\x8bgaviika.no\0komforb.se\0"
+"design.museum\0"
+"hanamigawa.chiba.jp\0"
+"zj.cn\0nahari.kochi.jp\0discovery.museum\0"
+"carraramassa.it\0elk.pl\0"
+"cc.pa.us\0"
+"kaga.ishikawa.jp\0tokamachi.niigata.jp\0"
+"br.it\0cb.it\0"
+"plc.ly\0agrinet.tn\0"
+"gs.fm.no\0surgut.ru\0"
+"usa.museum\0pp.ru\0pp.se\0"
+"lib.la.us\0"
+"go.ci\0\xe8\x87\xba\xe7\x81\xa3\0"
+"rodoy.no\0"
+"niikappu.hokkaido.jp\0"
+"kure.hiroshima.jp\0fudai.iwate.jp\0maizuru.kyoto.jp\0"
+"passenger-association.aero\0iveland.no\0"
+"go.cr\0takayama.nagano.jp\0"
+"game.tw\0"
+"tvedestrand.no\0chernovtsy.ua\0"
+"entertainment.aero\0trader.aero\0"
+"shikaoi.hokkaido.jp\0komagane.nagano.jp\0travel.tt\0"
+"katsushika.tokyo.jp\0"
+"suita.osaka.jp\0"
+"nasushiobara.tochigi.jp\0za.com\0"
+"q.bg\0cody.museum\0"
+"esp.br\0sagamihara.kanagawa.jp\0"
+"pp.ua\0"
+"andriatranibarletta.it\0mikawa.yamagata.jp\0naustdal.no\0"
+"takinoue.hokkaido.jp\0gs.oslo.no\0"
+"shiroishi.miyagi.jp\0community.museum\0bievat.no\0"
+"from-ia.com\0"
+"rep.kp\0luxembourg.museum\0"
+"sk.ca\0"
+"vic.gov.au\0"
+"yamanashi.yamanashi.jp\0hemne.no\0"
+"ulsan.kr\0k12.ky.us\0"
+"is-a-caterer.com\0"
+"kozagawa.wakayama.jp\0"
+"capebreton.museum\0"
+"is-a-musician.com\0"
+"kaita.hiroshima.jp\0"
+"seto.aichi.jp\0"
+"yoshino.nara.jp\0"
+"muenster.museum\0os\xc3\xb8yro.no\0"
+"li.it\0"
+"hokksund.no\0"
+"snz.ru\0"
+"hannan.osaka.jp\0brumunddal.no\0"
+"fukushima.jp\0"
+"tgory.pl\0kv.ua\0"
+"hachinohe.aomori.jp\0media.museum\0"
+"hidaka.saitama.jp\0"
+"oto.fukuoka.jp\0"
+"kozaki.chiba.jp\0"
+"sandnessjoen.no\0"
+"christiansburg.museum\0"
+"res.aero\0"
+"ashiya.hyogo.jp\0"
+"soeda.fukuoka.jp\0"
+"nuernberg.museum\0"
+"sakhalin.ru\0"
+"go.id\0soundandvision.museum\0"
+"tajimi.gifu.jp\0tonosho.kagawa.jp\0"
+"from-ut.com\0"
+"aki.kochi.jp\0"
+"niiza.saitama.jp\0"
+"stalowa-wola.pl\0"
+"from-ne.com\0"
+"tado.mie.jp\0abeno.osaka.jp\0bergbau.museum\0dallas.museum\0"
+"inf.mk\0cc.tn.us\0"
+"onomichi.hiroshima.jp\0saga.saga.jp\0"
+"go.it\0motoyama.kochi.jp\0"
+"iwakura.aichi.jp\0"
+"kashihara.nara.jp\0inagi.tokyo.jp\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.cn\0judaica.museum\0"
+"ilawa.pl\0"
+"lib.pr.us\0"
+"buryatia.ru\0"
+"go.jp\0"
+"snasa.no\0"
+"otaki.chiba.jp\0"
+"mielno.pl\0"
+"tachiarai.fukuoka.jp\0settsu.osaka.jp\0"
+"hikari.yamaguchi.jp\0"
+"cc.as.us\0"
+"cc.ri.us\0"
+"jobs\0"
+"mail.pl\0"
+"santacruz.museum\0n.se\0"
+"hapmir.no\0"
+"go.kr\0k12.sc.us\0"
+"lib.ny.us\0"
+"nuoro.it\0"
+"sogndal.no\0sosnowiec.pl\0"
+"asaminami.hiroshima.jp\0"
+"isernia.it\0froland.no\0vang.no\0"
+"nanporo.hokkaido.jp\0"
+"dyndns-wiki.com\0"
+"bari.it\0bahcavuotna.no\0"
+"panama.museum\0santafe.museum\0"
+"ce.it\0shirakawa.gifu.jp\0"
+"aircraft.aero\0ptz.ru\0iamallama.com\0"
+"takayama.gunma.jp\0"
+"ama.aichi.jp\0"
+"yakumo.shimane.jp\0taito.tokyo.jp\0"
+"cmw.ru\0"
+"res.in\0"
+"hb.cn\0tohnosho.chiba.jp\0kashiba.nara.jp\0soni.nara.jp\0ostroleka.pl\0"
+"aogashima.tokyo.jp\0"
+"minano.saitama.jp\0lur\xc3\xb8y.no\0cc.mo.us\0"
+"gjerstad.no\0"
+"yashiro.hyogo.jp\0hitachiomiya.ibaraki.jp\0hakone.kanagawa.jp\0watch-and-clock.museum\0"
+"pv.it\0toyohashi.aichi.jp\0okuizumo.shimane.jp\0"
+"shop.ht\0olawa.pl\0"
+"shop.hu\0sukagawa.fukushima.jp\0marugame.kagawa.jp\0v\xc3\xa5g\xc3\xa5.no\0"
+"\xe7\xb5\x84\xe7\xbb\x87.hk\0usantiques.museum\0udm.ru\0"
+"railway.museum\0"
+"t.bg\0tsubetsu.hokkaido.jp\0kariwa.niigata.jp\0tsurugashima.saitama.jp\0"
+"etc.br\0"
+"obira.hokkaido.jp\0ide.kyoto.jp\0educational.museum\0bydgoszcz.pl\0"
"figueres.museum\0"
-"!pref.gunma.jp\0medizinhistorisches.museum\0"
-"tjeldsund.no\0"
-"nebraska.museum\0"
-"bellevue.museum\0"
-"abo.pa\0k12.al.us\0"
-"info.ki\0"
-"inf.cu\0sv.it\0"
-"jfk.museum\0"
-"!city.osaka.jp\0swinoujscie.pl\0"
-"bydgoszcz.pl\0"
-"!city.kyoto.jp\0"
-"uvic.museum\0"
-"madrid.museum\0steinkjer.no\0"
-"lib.ma.us\0"
-"sirdal.no\0"
-"n\xc3\xb8tter\xc3\xb8y.no\0"
-"taranto.it\0starnberg.museum\0"
-"vic.gov.au\0pvt.ge\0pors\xc3\xa1\xc5\x8bgu.no\0"
-"naroy.no\0ris\xc3\xb8r.no\0"
-"va.it\0salem.museum\0starachowice.pl\0"
-"!nawrastelecom.om\0"
-"town.museum\0te.ua\0"
-"se.net\0"
-"kemerovo.ru\0"
-"lerdal.no\0"
-"gs.va.no\0"
-"kms.ru\0"
-"consulado.st\0"
+"langevag.no\0"
+"tinn.no\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.hk\0"
+"ens.tn\0"
+"vercelli.it\0"
+"ac.ae\0"
+"newspaper.museum\0"
+"potenza.it\0"
+"komatsushima.tokushima.jp\0"
+"gs.rl.no\0"
+"nakayama.yamagata.jp\0abu.yamaguchi.jp\0"
+"lind\xc3\xa5s.no\0pila.pl\0"
+"ac.at\0tamatsukuri.ibaraki.jp\0"
+"ac.be\0"
+"durham.museum\0"
+"sn.cn\0kadena.okinawa.jp\0atm.pl\0"
"haram.no\0"
-"tysnes.no\0"
-"!pref.ibaraki.jp\0hamburg.museum\0"
-"\xc3\xa5rdal.no\0"
-"airline.aero\0"
-"crew.aero\0newhampshire.museum\0"
-"muenster.museum\0"
-"aerodrome.aero\0"
-"heroy.nordland.no\0belau.pw\0"
-"kamchatka.ru\0"
-"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0lillehammer.no\0hi.us\0"
-"hk.cn\0"
-"!city.kobe.jp\0berlevag.no\0"
-"ardal.no\0"
-"askoy.no\0"
-"vardo.no\0"
-"fyresdal.no\0"
-"sassari.it\0"
-"video.hu\0drammen.no\0"
-"lyngen.no\0nakhodka.ru\0"
-"ip6.arpa\0games.hu\0"
-"online.museum\0"
-"k12.sd.us\0"
-"4.bg\0sebastopol.ua\0"
-"ao.it\0atlanta.museum\0"
-"lebork.pl\0"
-"ravenna.it\0"
-"railway.museum\0songdalen.no\0"
-"!pref.shimane.jp\0delaware.museum\0ed.pw\0"
-"f\xc3\xb8rde.no\0"
-"living.museum\0"
-"juif.museum\0"
-"lomza.pl\0"
-"h.se\0"
-"!bl.uk\0"
-"portland.museum\0\xe7\xb5\x84\xe7\xb9\x94.tw\0"
-"stj\xc3\xb8rdal.no\0"
-"lecce.it\0"
-"bz.it\0"
-"farmstead.museum\0va.no\0"
-"express.aero\0!nacion.ar\0"
-"presse.km\0gs.of.no\0"
-"\xe5\x8f\xb0\xe7\x81\xa3\0"
-"og.ao\0gyeongbuk.kr\0vestv\xc3\xa5g\xc3\xb8y.no\0"
-"prd.fr\0"
-"pp.ru\0pp.se\0"
-"forum.hu\0!pref.saga.jp\0"
-"kvalsund.no\0"
-"!city.kawasaki.jp\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
-"j.bg\0"
-"vlaanderen.museum\0"
-"cc.va.us\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0alabama.museum\0"
-"school.museum\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0"
-"\xc3\xa5seral.no\0"
-"traniandriabarletta.it\0"
-"flog.br\0"
-"presse.ml\0"
-"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0"
-"historisch.museum\0"
-"farm.museum\0palmsprings.museum\0oslo.no\0dyroy.no\0stranda.no\0"
-"gs.rl.no\0r\xc3\xa5""de.no\0"
-"bomlo.no\0s\xc3\xb8rum.no\0"
-"jan-mayen.no\0ivgu.no\0"
-"coop\0"
-"agr.br\0k12.ak.us\0"
-"!nic.ar\0catanzaro.it\0fusa.no\0"
-"hu.com\0"
-"inf.mk\0"
-"vet.br\0"
-"k12.mt.us\0k12.nd.us\0"
-"vlog.br\0\xe5\x85\xac\xe5\x8f\xb8.cn\0sandnessjoen.no\0"
-"lib.az.us\0"
-"nsw.edu.au\0of.no\0\xc3\xb8stre-toten.no\0"
-"*.okinawa.jp\0"
-"vb.it\0"
-"asso.fr\0firenze.it\0"
-"trieste.it\0"
-"\xe5\x85\xac\xe5\x8f\xb8.hk\0"
-"museet.museum\0"
-"prd.km\0"
-"navuotna.no\0lib.ca.us\0"
-"cc.nv.us\0"
-"asso.gp\0"
-"meraker.no\0"
-"h\xc3\xa1pmir.no\0"
-"i.ph\0"
-"sx.cn\0jeonnam.kr\0"
-"halden.no\0"
-"fed.us\0"
-"medio-campidano.it\0tsk.ru\0"
-"barcelona.museum\0"
-"giessen.museum\0roma.museum\0"
-"hl.cn\0"
-"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0"
-"biz.bb\0benevento.it\0rl.no\0bygland.no\0"
-"port.fr\0asso.ht\0prd.mg\0"
-"biz.at\0"
-"tra.kp\0"
-"*.aichi.jp\0khabarovsk.ru\0"
-"campidano-medio.it\0"
-"biz.az\0"
-"newmexico.museum\0va.us\0"
+"aichi.jp\0"
+"mihama.aichi.jp\0"
+"mizumaki.fukuoka.jp\0serveftp.net\0"
+"portland.museum\0from-in.com\0"
+"hagebostad.no\0"
+"nara.jp\0go.pw\0"
+"sa.edu.au\0ukiha.fukuoka.jp\0"
+"*.ar\0nyny.museum\0"
+"media.aero\0*.bd\0"
+"ine.kyoto.jp\0bu.no\0"
+"br.com\0"
+"ac.ci\0"
+"onagawa.miyagi.jp\0"
+"nt.au\0"
+"ac.cn\0from-tx.com\0"
+"*.bn\0"
+"sor-odal.no\0"
+"ac.cr\0ikeda.gifu.jp\0"
+"sobetsu.hokkaido.jp\0culture.museum\0zgrad.ru\0"
+"tadotsu.kagawa.jp\0"
+"machida.tokyo.jp\0chernigov.ua\0"
+"kembuchi.hokkaido.jp\0from-mi.com\0"
+"sor-aurdal.no\0"
+"pippu.hokkaido.jp\0"
+"nt.ca\0"
+"mitoyo.kagawa.jp\0"
+"*.ck\0tsuwano.shimane.jp\0gs.mr.no\0"
+"toyo.kochi.jp\0"
+"ky.us\0"
+"tranoy.no\0"
+"br\xc3\xb8nn\xc3\xb8ysund.no\0"
+"hemsedal.no\0"
+"rendalen.no\0"
+"*.cy\0utsira.no\0"
+"takasu.hokkaido.jp\0"
+"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0"
+"tsuyama.okayama.jp\0beauxarts.museum\0"
+"gr.it\0"
+"firenze.it\0misugi.mie.jp\0and.museum\0"
+"go.th\0"
+"semboku.akita.jp\0"
+"tokushima.tokushima.jp\0go.tj\0"
+"buzen.fukuoka.jp\0"
+"land-4-sale.us\0"
+"nyc.museum\0"
+"mobi\0"
+"gr.jp\0"
+"raisa.no\0"
+"go.ug\0"
+"*.er\0go.tz\0"
+"*.et\0"
+"vc.it\0h\xc3\xa1pmir.no\0"
+"*.fj\0"
+"scientist.aero\0*.fk\0yamato.kumamoto.jp\0modalen.no\0stargard.pl\0"
+"ac.gn\0sumida.tokyo.jp\0"
+"historisches.museum\0"
+"kvits\xc3\xb8y.no\0"
+"store.nf\0"
+"yoka.hyogo.jp\0omachi.nagano.jp\0"
+"ch.it\0"
+"overhalla.no\0likescandy.com\0"
+"www.ro\0se.net\0"
+"nakamichi.yamanashi.jp\0"
+"adm.br\0dnipropetrovsk.ua\0"
+"vindafjord.no\0k12.ak.us\0is-a-rockstar.com\0"
+"ac.id\0minamiechizen.fukui.jp\0"
+"*.gu\0children.museum\0"
+"tsu.mie.jp\0"
+"fr\xc3\xa6na.no\0"
+"gliwice.pl\0"
+"he.cn\0aid.pl\0"
+"ac.im\0kishiwada.osaka.jp\0"
+"ac.in\0"
"finearts.museum\0"
-"murmansk.ru\0"
-"\xc3\xb8rsta.no\0radom.pl\0k12.sc.us\0"
-"5.bg\0kvinesdal.no\0"
-"ap.it\0"
-"*.fukushima.jp\0"
-"asso.bj\0"
-"mad.museum\0"
-"lebesby.no\0"
-"og.it\0glas.museum\0sauda.no\0"
-"i.se\0"
-"k12.tx.us\0"
-"asso.ci\0mk.ua\0"
-"cesena-forli.it\0"
-"lowicz.pl\0"
-"k12.id.us\0"
-"tas.gov.au\0"
-"lukow.pl\0"
-"utazas.hu\0"
-"maritimo.museum\0bjark\xc3\xb8y.no\0"
-"adm.br\0"
-"pr.it\0lib.vi.us\0"
-"bergamo.it\0k12.va.us\0"
-"k.bg\0"
-"railroad.museum\0"
-"!british-library.uk\0"
-"cincinnati.museum\0"
-"sorreisa.no\0"
-"asso.dz\0!nel.uk\0"
-"rm.it\0"
-"nv.us\0"
-"nx.cn\0gos.pk\0"
-"vic.edu.au\0"
-"biella.it\0tjome.no\0"
-"r\xc3\xb8yken.no\0"
-"beiarn.no\0"
-"qc.ca\0"
-"georgia.museum\0square.museum\0"
-"labor.museum\0omasvuotna.no\0cc.la.us\0"
-"br.com\0reggioemilia.it\0"
-"kristiansund.no\0"
-"sorum.no\0"
-"orsta.no\0"
-"furniture.museum\0surrey.museum\0eng.pro\0"
-"asn.lv\0balat.no\0"
-"lavangen.no\0sld.pa\0"
-"fla.no\0k12.ms.us\0k12.nc.us\0"
-"bardu.no\0"
+"ac.ir\0"
+"\xe5\x80\x8b\xe4\xba\xba.hk\0lucca.it\0odessa.ua\0"
+"massa-carrara.it\0"
+"happou.akita.jp\0colonialwilliamsburg.museum\0k12.nv.us\0"
+"w.bg\0lib.in.us\0"
+"*.il\0"
+"scotland.museum\0"
+"ac.jp\0"
+"shimoda.shizuoka.jp\0is-by.us\0"
+"kui.hiroshima.jp\0"
+"us.na\0"
+"reggio-emilia.it\0asahi.ibaraki.jp\0saintlouis.museum\0"
+"kashima.saga.jp\0arboretum.museum\0"
+"bandai.fukushima.jp\0"
+"chikuhoku.nagano.jp\0hayakawa.yamanashi.jp\0"
+"*.jm\0namikata.ehime.jp\0haibara.shizuoka.jp\0bytom.pl\0"
+"furano.hokkaido.jp\0zushi.kanagawa.jp\0"
+"\xe7\xbb\x84\xe7\xb9\x94.hk\0*.sendai.jp\0"
+"ulan-ude.ru\0"
+"ac.kr\0beardu.no\0"
+"lib.gu.us\0"
+"*.ke\0"
+"*.kh\0"
+"vinnica.ua\0"
+"takahata.yamagata.jp\0"
+"honjyo.akita.jp\0scienceandindustry.museum\0"
+"tokorozawa.saitama.jp\0"
+"meraker.no\0"
+"katsuragi.nara.jp\0h\xc3\xa1mm\xc3\xa1rfeasta.no\0bialystok.pl\0"
+"ac.ma\0"
+"lo.it\0akagi.shimane.jp\0"
+"tawaramoto.nara.jp\0obanazawa.yamagata.jp\0ac.me\0"
+"genoa.it\0"
+"iz.hr\0*.kw\0"
+"og.ao\0yakutia.ru\0"
+"taku.saga.jp\0"
+"heguri.nara.jp\0"
+"mansions.museum\0folldal.no\0omasvuotna.no\0"
+"cherkassy.ua\0"
+"trainer.aero\0"
+"ac.mu\0"
+"cc.wi.us\0"
+"ac.mw\0ac.ng\0"
+"cartoonart.museum\0"
+"*.mm\0"
+"paris.museum\0"
+"can.museum\0"
+"juedisches.museum\0from-vt.com\0"
+"*.mt\0"
+"narita.chiba.jp\0fukushima.hokkaido.jp\0"
+"awaji.hyogo.jp\0"
+"lodi.it\0is-uberleet.com\0"
+"*.ni\0"
+"*.mz\0"
+"engerdal.no\0"
+"square.museum\0"
+"saroma.hokkaido.jp\0neues.museum\0"
+"reggiocalabria.it\0"
+"*.np\0ac.pa\0"
+"mb.ca\0seika.kyoto.jp\0"
+"higashiagatsuma.gunma.jp\0iizuna.nagano.jp\0nesoddtangen.no\0"
+"nakatane.kagoshima.jp\0"
+"nt.no\0"
+"tendo.yamagata.jp\0brandywinevalley.museum\0"
+"*.nz\0"
+"kunitachi.tokyo.jp\0"
+"b\xc3\xa6rum.no\0"
+"*.om\0tuva.ru\0"
+"balat.no\0"
+"sue.fukuoka.jp\0"
+"iwata.shizuoka.jp\0tysvar.no\0ac.pr\0"
+"skodje.no\0"
+"ama.shimane.jp\0illustration.museum\0idrett.no\0"
+"better-than.tv\0"
+"ashiya.fukuoka.jp\0leksvik.no\0"
+"*.pg\0wloclawek.pl\0t.se\0"
+"mie.jp\0"
+"kawamata.fukushima.jp\0"
"donostia.museum\0"
-"club.tw\0"
-"elburg.museum\0"
-"gs.hl.no\0lodingen.no\0"
-"samara.ru\0"
-"vc.it\0*.nagasaki.jp\0"
-"fosnes.no\0"
-"fuel.aero\0"
+"is-a-chef.org\0"
+"guernsey.museum\0"
+"saku.nagano.jp\0"
+"minamisanriku.miyagi.jp\0"
+"penza.ru\0"
+"ta.it\0"
+"kawanabe.kagoshima.jp\0"
+"ac.rs\0"
+"okayama.okayama.jp\0kamiizumi.saitama.jp\0annefrank.museum\0"
+"association.aero\0gushikami.okinawa.jp\0ac.ru\0ac.se\0"
+"zentsuji.kagawa.jp\0"
+"ac.rw\0"
+"nagahama.shiga.jp\0narusawa.yamanashi.jp\0"
+"telekommunikation.museum\0"
+"crew.aero\0"
+"services.aero\0"
+"gx.cn\0konan.shiga.jp\0"
+"misaki.osaka.jp\0"
+"fukui.fukui.jp\0toya.hokkaido.jp\0toyonaka.osaka.jp\0"
+"sugito.saitama.jp\0"
+"cc.ne.us\0"
+"hornindal.no\0"
+"noda.iwate.jp\0"
+"wakkanai.hokkaido.jp\0nt.ro\0"
+"ac.th\0"
+"ringsaker.no\0"
+"ac.sz\0ac.tj\0"
+"arq.br\0nnov.ru\0"
+"itami.hyogo.jp\0kashiwazaki.niigata.jp\0"
+"z.bg\0"
+"eti.br\0showa.gunma.jp\0unnan.shimane.jp\0sos.pl\0"
+"rishiri.hokkaido.jp\0"
+"aso.kumamoto.jp\0"
+"store.ro\0"
+"otofuke.hokkaido.jp\0"
+"*.sv\0ac.ug\0"
+"ae.org\0"
+"iida.nagano.jp\0kitanakagusuku.okinawa.jp\0ac.tz\0teaches-yoga.com\0"
+"shimokitayama.nara.jp\0arakawa.saitama.jp\0"
+"og.it\0joboji.iwate.jp\0kainan.tokushima.jp\0"
+"ski.no\0"
+"lib.ee\0"
+"itakura.gunma.jp\0sor-fron.no\0*.tr\0"
+"vf.no\0"
+"astronomy.museum\0"
+"takatsuki.osaka.jp\0"
+"store.st\0"
+"rokunohe.aomori.jp\0"
+"kiyokawa.kanagawa.jp\0od.ua\0"
+"kvalsund.no\0"
+"ashoro.hokkaido.jp\0utazu.kagawa.jp\0ibestad.no\0*.uk\0"
+"urbinopesaro.it\0lyngdal.no\0ac.vn\0"
+"koshu.yamanashi.jp\0michigan.museum\0r\xc3\xb8mskog.no\0"
+"kitagata.saga.jp\0omsk.ru\0"
+"mashiko.tochigi.jp\0"
+"kofu.yamanashi.jp\0"
+"mb.it\0"
+"medizinhistorisches.museum\0"
+"inuyama.aichi.jp\0dnsalias.org\0is-a-chef.com\0"
+"otaki.nagano.jp\0austrheim.no\0"
+"ar.com\0"
+"0.bg\0anthropology.museum\0hvaler.no\0shop.pl\0"
+"lib.va.us\0"
+"fukusaki.hyogo.jp\0baths.museum\0culturalcenter.museum\0"
+"show.aero\0iraq.museum\0r\xc3\xa1hkker\xc3\xa1vju.no\0"
+"kamakura.kanagawa.jp\0toyono.osaka.jp\0"
+"vega.no\0"
+"sumoto.hyogo.jp\0film.museum\0"
+"kadogawa.miyazaki.jp\0garden.museum\0"
+"schokoladen.museum\0!nls.uk\0"
+"konskowola.pl\0"
+"legnica.pl\0"
+"caltanissetta.it\0wajima.ishikawa.jp\0"
+"mragowo.pl\0"
+"hattfjelldal.no\0"
+"kuwana.mie.jp\0"
+"tsuga.tochigi.jp\0"
+"itayanagi.aomori.jp\0v\xc3\xa5gan.no\0"
+"museumvereniging.museum\0zp.ua\0"
+"kawanehon.shizuoka.jp\0"
+"american.museum\0"
+"dolls.museum\0"
+"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
+"hiroshima.jp\0betainabox.com\0"
+"kawaba.gunma.jp\0"
+"*.ye\0"
+"law.pro\0"
+"kin.okinawa.jp\0skj\xc3\xa5k.no\0"
+"is-a-conservative.com\0"
+"americana.museum\0k12.vi.us\0"
+"yamada.toyama.jp\0"
+"miasa.nagano.jp\0"
+"conf.au\0"
+"aure.no\0*.za\0"
+"oizumi.gunma.jp\0lodingen.no\0"
+"from-or.com\0"
"qc.com\0"
-"skjervoy.no\0"
-"bill.museum\0kv\xc3\xa6""fjord.no\0"
-"skydiving.aero\0*.tokushima.jp\0"
-"!congresodelalengua3.ar\0laquila.it\0k12.ct.us\0"
-"gorge.museum\0linz.museum\0sherbrooke.museum\0"
-"tranoy.no\0ing.pa\0"
-"ptz.ru\0"
-"kr.it\0prato.it\0stat.no\0"
+"fc.it\0farmequipment.museum\0w.se\0"
+"vi.it\0"
+"archaeological.museum\0moss.no\0"
+"khakassia.ru\0*.zm\0isteingeek.de\0"
+"izumi.kagoshima.jp\0imageandsound.museum\0"
+"suisse.museum\0gu.us\0"
+"tajiri.osaka.jp\0"
+"*.zw\0"
+"kiyosato.hokkaido.jp\0"
+"takaharu.miyazaki.jp\0"
+"takanabe.miyazaki.jp\0"
+"paroch.k12.ma.us\0"
+"hatsukaichi.hiroshima.jp\0"
+"cn.it\0"
+"ranzan.saitama.jp\0"
+"murmansk.ru\0"
+"hamburg.museum\0"
+"es.kr\0heroy.nordland.no\0"
+"barletta-trani-andria.it\0lib.me.us\0"
+"hob\xc3\xb8l.no\0"
+"ck.ua\0"
+"gov\0"
+"city.hu\0fhs.no\0"
+"hk.cn\0"
+"ascolipiceno.it\0motorcycle.museum\0skanland.no\0"
+"qld.edu.au\0"
+"cc.nh.us\0"
+"gub.uy\0"
+"trani-andria-barletta.it\0birkenes.no\0is-a-cpa.com\0"
+"trapani.it\0"
+"art.br\0kibichuo.okayama.jp\0tananger.no\0"
+"otama.fukushima.jp\0kiho.mie.jp\0"
+"nose.osaka.jp\0nakagawa.tokushima.jp\0"
+"is-slick.com\0"
+"assn.lk\0\xe5\x95\x86\xe6\xa5\xad.tw\0"
+"from-ga.com\0"
+"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0"
+"cc.ks.us\0"
+"kamagaya.chiba.jp\0grp.lk\0"
+"hioki.kagoshima.jp\0"
+"nagato.yamaguchi.jp\0"
+"control.aero\0gliding.aero\0tsumagoi.gunma.jp\0nishitosa.kochi.jp\0"
+"kitadaito.okinawa.jp\0"
+"art.do\0zoological.museum\0"
+"toyako.hokkaido.jp\0plo.ps\0"
+"cq.cn\0kadoma.osaka.jp\0basel.museum\0"
+"osakikamijima.hiroshima.jp\0"
+"elverum.no\0cc.in.us\0"
+"shingu.hyogo.jp\0"
+"art.dz\0"
+"avoues.fr\0lu.it\0me.it\0nerima.tokyo.jp\0"
+"military.museum\0"
+"satosho.okayama.jp\0"
+"st.no\0"
+"3.bg\0yamagata.ibaraki.jp\0humanities.museum\0"
+"championship.aero\0"
+"does-it.net\0"
+"higashi.fukushima.jp\0"
+"taxi.br\0"
+"kharkiv.ua\0"
+"ushuaia.museum\0"
+"kumano.mie.jp\0"
+"unsa.ba\0shimamoto.osaka.jp\0wodzislaw.pl\0"
+"yokosuka.kanagawa.jp\0is-leet.com\0"
+"jevnaker.no\0"
+"minamiashigara.kanagawa.jp\0"
+"ryugasaki.ibaraki.jp\0"
+"tsuno.kochi.jp\0flora.no\0kuzbass.ru\0"
+"nesna.no\0"
+"yachiyo.chiba.jp\0civilwar.museum\0"
+"matsumae.hokkaido.jp\0"
+"kumatori.osaka.jp\0namsskogan.no\0"
+"knowsitall.info\0"
+"linz.museum\0"
+"sakuragawa.ibaraki.jp\0"
+"toride.ibaraki.jp\0traeumtgerade.de\0"
+"store.bb\0jolster.no\0"
+"pilots.museum\0"
+"asia\0"
+"kustanai.ru\0"
+"art.ht\0"
+"pubol.museum\0"
+"england.museum\0"
+"shimizu.shizuoka.jp\0kartuzy.pl\0"
+"volgograd.ru\0"
+"tateyama.toyama.jp\0"
+"augustow.pl\0"
+"askoy.no\0z.se\0"
+"obama.nagasaki.jp\0k12.ca.us\0"
+"higashine.yamagata.jp\0wales.museum\0"
+"kiwa.mie.jp\0izena.okinawa.jp\0"
+"js.cn\0kanna.gunma.jp\0from-tn.com\0"
+"brescia.it\0"
+"aip.ee\0otoineppu.hokkaido.jp\0"
+"sakyo.kyoto.jp\0kami.miyagi.jp\0"
+"serveftp.org\0"
+"miyama.fukuoka.jp\0hakui.ishikawa.jp\0"
+"adv.br\0"
+"exeter.museum\0"
+"nichinan.tottori.jp\0vi.us\0"
+"enna.it\0"
+"flor\xc3\xb8.no\0"
+"cn.ua\0"
+"from-co.net\0"
+"hn.cn\0"
+"andria-barletta-trani.it\0"
+"himeshima.oita.jp\0"
+"boleslawiec.pl\0"
+"nishiarita.saga.jp\0"
+"al.it\0sydney.museum\0"
+"washingtondc.museum\0"
+"iglesiascarbonia.it\0kanuma.tochigi.jp\0"
+"educator.aero\0"
+"from-ny.net\0"
+"watchandclock.museum\0"
+"frog.museum\0"
+"takamori.kumamoto.jp\0"
+"is-a-blogger.com\0"
+"habmer.no\0"
+"consulting.aero\0"
+"ogawa.saitama.jp\0"
+"fi.cr\0"
+"hanggliding.aero\0"
+"minamiise.mie.jp\0\xc3\xa5lg\xc3\xa5rd.no\0"
+"ueda.nagano.jp\0lebtimnetz.de\0"
+"karelia.ru\0"
+"zlg.br\0koge.tottori.jp\0"
+"kvitsoy.no\0"
+"vagsoy.no\0"
+"time.no\0"
+"toyotomi.hokkaido.jp\0"
+"tj.cn\0nes.akershus.no\0"
+"med.br\0fujioka.gunma.jp\0"
+"imakane.hokkaido.jp\0"
+"yamakita.kanagawa.jp\0"
+"okinoshima.shimane.jp\0"
+"gs.jan-mayen.no\0"
+"kasugai.aichi.jp\0"
+"texas.museum\0"
+"tsugaru.aomori.jp\0miyawaka.fukuoka.jp\0otsuki.yamanashi.jp\0"
+"6.bg\0suedtirol.it\0"
+"koya.wakayama.jp\0"
+"shikokuchuo.ehime.jp\0"
"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0"
-"cosenza.it\0"
-"stj\xc3\xb8rdalshalsen.no\0"
-"finland.museum\0leka.no\0cc.pr.us\0"
-"historichouses.museum\0s\xc3\xa1l\xc3\xa1t.no\0"
-"venice.it\0"
-"biz.ki\0"
-"g\xc3\xa1ls\xc3\xa1.no\0"
-"\xe7\xbb\x84\xe7\xbb\x87.hk\0"
-"*.yamanashi.jp\0"
-"rad\xc3\xb8y.no\0"
-"6.bg\0"
-"fareast.ru\0"
-"paragliding.aero\0ba.it\0aq.it\0"
-"sk\xc3\xa5nland.no\0"
-"its.me\0"
-"us.na\0"
-"hl.no\0cc.ga.us\0"
-"ac\0granvin.no\0"
-"ad\0qld.edu.au\0!city.sapporo.jp\0"
-"ae\0"
-"af\0"
-"ag\0crotone.it\0"
-"dallas.museum\0"
-"ai\0brussels.museum\0"
-"dali.museum\0"
-"la.us\0"
-"al\0salzburg.museum\0"
-"am\0"
-"an\0cl.it\0"
-"ao\0"
-"aq\0ba\0"
-"bb\0"
-"as\0lajolla.museum\0"
-"at\0"
-"be\0"
-"bf\0inderoy.no\0snz.ru\0"
-"aw\0bg\0"
-"ax\0bh\0cim.br\0ltd.gi\0biz.mv\0"
-"bi\0xz.cn\0\xe7\xb5\x84\xe7\xb9\x94.hk\0biz.mw\0"
-"az\0bj\0"
-"bm\0tranibarlettaandria.it\0naamesjevuemie.no\0"
-"chattanooga.museum\0"
-"bo\0"
-"l.bg\0"
-"ca\0"
-"br\0stateofdelaware.museum\0"
-"bs\0cc\0"
-"cd\0biz.nr\0"
-"cf\0berlev\xc3\xa5g.no\0"
-"bw\0cg\0snaase.no\0"
-"ch\0harvestcelebration.museum\0ck.ua\0"
-"by\0ci\0"
-"bz\0bahccavuotna.no\0"
-"cl\0yuzhno-sakhalinsk.ru\0"
-"cm\0halsa.no\0lyngdal.no\0"
-"cn\0"
-"co\0rn.it\0childrens.museum\0frankfurt.museum\0"
-"cr\0"
-"pskov.ru\0"
-"cu\0de\0"
-"cv\0fr.it\0lib.ky.us\0"
-"aseral.no\0kvam.no\0"
-"cx\0hellas.museum\0"
-"hof.no\0"
-"cz\0dj\0k12.la.us\0"
-"dk\0moscow.museum\0"
-"sosnowiec.pl\0"
-"dm\0biz.pk\0"
-"schokoladen.museum\0biz.pl\0"
-"far.br\0arna.no\0tynset.no\0"
-"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0"
-"ec\0"
-"biz.pr\0"
-"ee\0celtic.museum\0"
-"scientist.aero\0modern.museum\0"
-"pr.us\0"
-"dz\0"
-"mj\xc3\xb8ndalen.no\0s\xc3\xb8r-odal.no\0"
-"!nic.tr\0"
-"conference.aero\0vestnes.no\0k12.mn.us\0"
-"!pref.hiroshima.jp\0"
-"es\0trapani.it\0"
-"fermo.it\0vard\xc3\xb8.no\0"
-"eu\0gs.hm.no\0r\xc3\xb8""d\xc3\xb8y.no\0stordal.no\0"
-"gc.ca\0!nhs.uk\0"
-"jgora.pl\0"
-"fi\0stjordal.no\0"
-"fm\0!mediaphone.om\0"
-"kirov.ru\0pvt.k12.ma.us\0"
-"fo\0"
-"ga\0hyllestad.no\0"
-"gov.ac\0fr\0andriabarlettatrani.it\0ga.us\0"
-"gov.ae\0gd\0estate.museum\0"
-"gov.af\0ge\0tolga.no\0"
-"gf\0asso.re\0cc.oh.us\0"
-"gg\0florida.museum\0"
-"presse.ci\0gh\0"
-"gi\0k12.dc.us\0"
-"ltd.lk\0orland.no\0"
-"gov.al\0"
-"gl\0tokke.no\0"
-"hanggliding.aero\0gm\0"
-"hareid.no\0"
-"gov.ba\0tj.cn\0gp\0"
-"gov.bb\0gq\0"
-"gov.as\0gr\0agrigento.it\0lc.it\0"
-"gs\0kalmykia.ru\0aero.tt\0"
-"gov.bf\0"
-"county.museum\0"
-"gov.bh\0hn.cn\0gw\0"
-"gov.az\0gy\0assn.lk\0guernsey.museum\0"
-"hk\0"
-"gov.bm\0h\xc3\xa6gebostad.no\0biz.tj\0"
-"hm\0computer.museum\0"
-"gov.bo\0hn\0kl\xc3\xa6""bu.no\0"
-"pulawy.pl\0"
-"gov.br\0"
-"trd.br\0gov.bs\0hr\0reggio-calabria.it\0historyofscience.museum\0lipetsk.ru\0"
-"gov.cd\0*.nagoya.jp\0"
-"ht\0id\0spjelkavik.no\0"
-"hu\0ie\0aero.mv\0"
-"marketplace.aero\0mn.it\0biz.tt\0"
-"gov.by\0saintlouis.museum\0mer\xc3\xa5ker.no\0"
-"gov.bz\0"
-"7.bg\0gov.cl\0virtual.museum\0"
-"gov.cm\0vennesla.no\0kr.ua\0"
-"gov.cn\0im\0ar.it\0galsa.no\0rovno.ua\0"
-"gov.co\0in\0"
-"io\0limanowa.pl\0"
-"iq\0k12.ga.us\0"
-"ir\0"
-"riik.ee\0is\0\xc3\xa1laheadju.no\0"
-"gov.cu\0it\0hawaii.museum\0seaport.museum\0"
-"je\0pubol.museum\0hm.no\0"
-"gov.cx\0"
-"*.chiba.jp\0"
-"*.kawasaki.jp\0"
-"k.se\0"
-"gov.dm\0"
-"aland.fi\0vik.no\0"
-"yk.ca\0jo\0kobierzyce.pl\0"
-"jp\0biz.vn\0"
-"presse.fr\0lib.il.us\0\xe9\xa6\x99\xe6\xb8\xaf\0"
-"gov.ec\0"
-"transport.museum\0bronnoy.no\0"
-"slg.br\0gov.ee\0asso.nc\0bievat.no\0"
-"nyny.museum\0"
-"kg\0"
-"mo-i-rana.no\0"
-"gov.dz\0ki\0"
+"kameyama.mie.jp\0missile.museum\0"
+"fhv.se\0hu.com\0"
+"art.pl\0"
+"tamano.okayama.jp\0"
+"taketa.oita.jp\0"
+"\xc3\xb8yer.no\0oystre-slidre.no\0rad\xc3\xb8y.no\0"
+"me.tz\0"
+"takahagi.ibaraki.jp\0steam.museum\0"
+"technology.museum\0"
+"med.ec\0asakuchi.okayama.jp\0"
+"med.ee\0stavanger.no\0merseine.nu\0"
+"al.no\0porsangu.no\0"
+"stavern.no\0me.us\0"
+"lib.ct.us\0"
+"emp.br\0tr\xc3\xa6na.no\0"
+"kayabe.hokkaido.jp\0"
+"sekigahara.gifu.jp\0"
+"udine.it\0shacknet.nu\0"
+"presse.km\0posts-and-telecommunications.museum\0"
+"is-a-chef.net\0"
+"gokase.miyazaki.jp\0"
+"choshi.chiba.jp\0podhale.pl\0"
+"archaeology.museum\0"
+"localhistory.museum\0"
+"krasnoyarsk.ru\0"
+"minamidaito.okinawa.jp\0yorkshire.museum\0"
+"lavangen.no\0"
+"oyamazaki.kyoto.jp\0"
+"nagasaki.nagasaki.jp\0"
+"\xc3\xa1laheadju.no\0"
+"kameoka.kyoto.jp\0"
+"bielawa.pl\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
+"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0art.sn\0from-pr.com\0"
+"takata.fukuoka.jp\0dielddanuorri.no\0"
+"fujisato.akita.jp\0association.museum\0"
+"gouv.fr\0fi.it\0presse.ml\0"
+"nakagawa.hokkaido.jp\0"
+"tanabe.wakayama.jp\0"
"monmouth.museum\0"
-"suldal.no\0"
-"bc.ca\0km\0zt.ua\0"
-"pt.it\0kn\0"
-"fineart.museum\0"
-"la\0"
-"kr\0gulen.no\0"
-"m.bg\0mo.cn\0lc\0alaheadju.no\0g\xc3\xa1\xc5\x8bgaviika.no\0"
-"nowaruda.pl\0cc.ut.us\0"
-"br\xc3\xb8nn\xc3\xb8y.no\0"
-"ky\0li\0overhalla.no\0"
-"kz\0khv.ru\0"
-"lk\0"
-"artdeco.museum\0"
-"ma\0fortworth.museum\0kostroma.ru\0"
-"ro.it\0kirkenes.no\0vestby.no\0"
-"urbino-pesaro.it\0ls\0mc\0alstahaug.no\0"
-"blog.br\0gov.ge\0lt\0md\0"
-"lu\0me\0botanicgarden.museum\0"
-"gov.gg\0lv\0oh.us\0"
-"gov.gh\0mg\0valley.museum\0"
-"gov.gi\0mh\0"
-"ly\0sandiego.museum\0"
-"mk\0"
-"ml\0"
-"gov.gn\0rollag.no\0naklo.pl\0"
-"mn\0"
-"mo\0"
-"mp\0leirvik.no\0"
-"gov.gr\0mq\0na\0cc.ks.us\0"
-"mr\0"
-"ms\0nc\0"
-"valer.hedmark.no\0"
-"mu\0ne\0"
-"mv\0nf\0"
-"mw\0"
-"mx\0nord-odal.no\0jur.pro\0"
-"my\0"
-"gov.hk\0name.hr\0"
-"nl\0"
-"astronomy.museum\0lib.nm.us\0"
-"catania.it\0"
-"no\0"
-"skjerv\xc3\xb8y.no\0"
-"k12.ne.us\0"
-"monza-e-della-brianza.it\0!pref.fukushima.jp\0nr\0"
-"gov.ie\0"
-"stuttgart.museum\0nu\0cc.mn.us\0"
-"karasjohka.no\0"
-"engine.aero\0bearalvahki.no\0"
-"oyer.no\0"
-"ve.it\0"
-"gov.im\0froland.no\0cc.ar.us\0"
-"gov.in\0magadan.ru\0"
-"pescara.it\0"
-"gov.iq\0usdecorativearts.museum\0"
-"gov.ir\0pa\0"
-"gov.is\0"
-"gov.it\0lavagis.no\0"
-"gov.je\0"
-"naustdal.no\0pe\0k12.or.us\0"
-"gd.cn\0carraramassa.it\0pf\0"
-"ph\0"
-"cc.ny.us\0"
-"rissa.no\0"
-"info\0pk\0pomorze.pl\0"
-"pl\0"
-"gov.jo\0asso.km\0pn\0"
-"*.okayama.jp\0cieszyn.pl\0"
-"freight.aero\0"
-"pr\0"
-"narvik.no\0ps\0"
-"!pref.aichi.jp\0elverum.no\0pt\0"
-"edunet.tn\0"
-"gov.kg\0"
-"flatanger.no\0marker.no\0pw\0"
-"gov.ki\0nuremberg.museum\0"
-"aip.ee\0"
-"gov.km\0"
-"gov.kn\0"
-"gov.kp\0"
-"rieti.it\0gov.la\0bajddar.no\0"
-"gov.lb\0aviation.museum\0"
-"gov.lc\0"
-"asso.mc\0"
-"re\0"
-"ut.us\0"
-"sa.gov.au\0gov.ky\0"
-"mo.it\0gov.kz\0"
-"gov.lk\0"
-"iraq.museum\0"
-"badajoz.museum\0"
-"8.bg\0inder\xc3\xb8y.no\0"
-"monticello.museum\0ro\0ks.ua\0"
-"gov.ma\0svizzera.museum\0"
-"gov.lr\0sa\0"
-"matera.it\0sb\0"
-"gov.lt\0rs\0sc\0"
-"gov.me\0sd\0"
-"gov.lv\0ru\0se\0"
-"gov.mg\0"
-"rw\0sg\0"
-"gov.ly\0assisi.museum\0kids.museum\0sh\0"
-"si\0"
-"gov.mk\0"
-"gov.ml\0sk\0"
-"sl\0"
-"gov.mn\0airguard.museum\0sm\0"
-"gov.mo\0l.se\0sn\0"
-"so\0"
-"gov.mr\0ks.us\0"
-"name.az\0sr\0"
-"naturhistorisches.museum\0tc\0"
-"trainer.aero\0cn.it\0urbinopesaro.it\0gov.mu\0nativeamerican.museum\0st\0td\0"
-"gov.mv\0su\0"
-"trentino.it\0gov.mw\0gov.ng\0tf\0"
-"tg\0"
-"co.ae\0venezia.it\0gov.my\0th\0"
-"!pref.ehime.jp\0sy\0"
-"co.ag\0lewismiller.museum\0ostrowiec.pl\0sz\0tj\0"
-"tk\0"
-"motorcycle.museum\0tl\0"
-"birdart.museum\0trogstad.no\0tm\0"
-"tn\0"
-"humanities.museum\0to\0"
-"pu.it\0gov.nr\0ua\0lib.ut.us\0"
-"co.ao\0"
-"co.ba\0trondheim.no\0tt\0"
-"in-addr.arpa\0tempioolbia.it\0!city.yokohama.jp\0mn.us\0"
-"n.bg\0schoenbrunn.museum\0tv\0"
-"co.at\0aremark.no\0tw\0ug\0"
-"jus.br\0"
-"co.bi\0bialowieza.pl\0ar.us\0"
-"audnedaln.no\0kustanai.ru\0"
-"va\0"
-"us\0vc\0"
-"newport.museum\0"
-"kopervik.no\0gov.ph\0vg\0"
-"ny.us\0vi\0"
-"co.bw\0finn\xc3\xb8y.no\0gov.pk\0uz\0"
-"honefoss.no\0gov.pl\0lanbib.se\0"
-"co.ci\0"
-"gov.pn\0intl.tn\0"
-"act.gov.au\0vn\0"
-"television.museum\0gov.pr\0"
-"sykkylven.no\0v\xc3\xa5ler.hedmark.no\0gov.ps\0"
-"gov.pt\0"
-"co.cr\0vu\0"
-"legnica.pl\0"
-"sa.au\0"
-"bjarkoy.no\0"
-"openair.museum\0birkenes.no\0lib.nj.us\0"
-"fylkesbibl.no\0holt\xc3\xa5len.no\0"
-"iz.hr\0"
-"ws\0"
-"oceanographique.museum\0"
-"b\xc3\xa1id\xc3\xa1r.no\0cc.mo.us\0"
-"\xc3\xb8ygarden.no\0"
-"contemporary.museum\0"
-"gb.com\0cc.as.us\0"
-"belluno.it\0gov.sa\0"
-"gov.sb\0"
-"gov.rs\0gov.sc\0"
-"gov.sd\0"
-"!pref.nagasaki.jp\0gov.ru\0"
-"asia\0"
-"sa.cr\0gov.rw\0gov.sg\0"
-"kuzbass.ru\0"
-"gs.vf.no\0"
-"gov.sl\0"
-"norfolk.museum\0"
-"k12.de.us\0"
-"mil\0"
-"rendalen.no\0"
-"gov.st\0"
-"agro.pl\0"
-"orkdal.no\0"
-"le.it\0gov.sy\0"
-"gov.tj\0"
-"co.gg\0nore-og-uvdal.no\0v\xc3\xa5ler.\xc3\xb8stfold.no\0"
-"gov.tl\0"
-"gov.tn\0"
-"gov.to\0"
-"kids.us\0"
-"equipment.aero\0gov.ua\0"
-"!city.niigata.jp\0gov.tt\0"
-"sel.no\0"
-"l\xc3\xa4ns.museum\0"
-"gov.tw\0"
-"rennebu.no\0"
-"egersund.no\0"
-"medecin.km\0"
-"co.gy\0"
-"!mecon.ar\0"
-"berlin.museum\0"
-"carrara-massa.it\0"
-"9.bg\0"
-"pri.ee\0gov.vc\0"
-"at.it\0"
-"muosat.no\0"
-"co.id\0"
-"co.hu\0"
-"etne.no\0"
-"\xc3\xa1lt\xc3\xa1.no\0"
-"gov.vn\0"
-"modelling.aero\0"
-"co.im\0"
-"co.in\0\xc3\xa5krehamn.no\0m.se\0"
-"gouv.fr\0*.kitakyushu.jp\0"
-"narviika.no\0"
-"rennes\xc3\xb8y.no\0"
-"co.ir\0afjord.no\0"
-"lea\xc5\x8bgaviika.no\0buryatia.ru\0"
-"co.it\0coastaldefence.museum\0"
-"co.je\0vf.no\0"
-"osteroy.no\0"
-"uslivinghistory.museum\0"
-"aerobatic.aero\0"
-"mesaverde.museum\0mining.museum\0"
-"a\xc3\xa9roport.ci\0gov.ws\0"
-"co.jp\0copenhagen.museum\0"
-"pv.it\0"
-"r\xc3\xb8mskog.no\0"
-"vossevangen.no\0porsanger.no\0"
-"salat.no\0mo.us\0"
-"o.bg\0imperia.it\0carrier.museum\0"
-"carbonia-iglesias.it\0"
-"as.us\0"
-"alvdal.no\0"
-"state.museum\0mandal.no\0cn.ua\0"
-"cuneo.it\0"
+"dyr\xc3\xb8y.no\0"
+"takikawa.hokkaido.jp\0urakawa.hokkaido.jp\0"
+"shibecha.hokkaido.jp\0"
+"sand\xc3\xb8y.no\0"
+"collection.museum\0"
+"kusatsu.gunma.jp\0"
+"pulawy.pl\0"
+"monticello.museum\0"
+"med.ht\0"
+"ct.it\0otago.museum\0alaheadju.no\0"
+"omotego.fukushima.jp\0name\0"
+"balsan.it\0"
+"ogi.saga.jp\0"
+"okawa.fukuoka.jp\0"
+"norfolk.museum\0n\xc3\xa6r\xc3\xb8y.no\0"
"gouv.ht\0"
-"!city.okayama.jp\0co.kr\0"
-"co.lc\0"
-"sa.it\0"
-"donna.no\0"
-"sortland.no\0"
-"tomsk.ru\0"
-"birthplace.museum\0l\xc3\xb8""dingen.no\0"
-"ge.it\0orenburg.ru\0"
-"cn.com\0"
-"co.ma\0"
-"co.ls\0skaun.no\0name.vn\0"
-"navigation.aero\0"
-"cagliari.it\0co.me\0portal.museum\0"
+"kaminokawa.tochigi.jp\0"
+"hammerfest.no\0"
+"hiraya.nagano.jp\0settlement.museum\0"
+"toei.aichi.jp\0santabarbara.museum\0"
+"\xc3\xb8rsta.no\0"
+"ao.it\0sano.tochigi.jp\0jondal.no\0"
+"re.it\0"
+"kamitsue.oita.jp\0"
+"sola.no\0"
+"laspezia.it\0luzern.museum\0salat.no\0stv.ru\0est-a-la-maison.com\0"
+"avocat.fr\0sm\xc3\xb8la.no\0"
+"bando.ibaraki.jp\0kawakami.nara.jp\0"
+"*.kawasaki.jp\0ngo.lk\0"
"gouv.bj\0"
-"udine.it\0"
-"engineer.aero\0"
-"szczecin.pl\0"
-"wales.museum\0"
-"co.na\0bo.telemark.no\0"
-"austin.museum\0"
-"k12.mo.us\0"
-"co.mu\0"
-"gouv.ci\0"
-"co.mw\0"
-"esp.br\0"
-"naturalhistorymuseum.museum\0"
-"mosjoen.no\0"
-"solund.no\0"
-"name.tj\0"
-"sand\xc3\xb8y.no\0"
-"kunstunddesign.museum\0"
-"cartoonart.museum\0collection.museum\0gsm.pl\0"
-"aure.no\0"
-"!pref.yamaguchi.jp\0historical.museum\0"
-"name.tt\0"
-"england.museum\0valle.no\0"
-"cc.ok.us\0"
-"salangen.no\0"
-"gloppen.no\0"
-"cc.co.us\0"
-"contemporaryart.museum\0"
-"tas.edu.au\0"
-"trading.aero\0"
-"mazury.pl\0"
-"!pref.aomori.jp\0co.pl\0"
-"opoczno.pl\0"
-"*.kobe.jp\0co.pn\0"
-"oppegard.no\0"
-"co.pw\0"
-"saltdal.no\0smolensk.ru\0"
-"na.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0"
-"vgs.no\0evenassi.no\0"
-"parachuting.aero\0jl.cn\0maritime.museum\0bd.se\0"
-"badaddja.no\0"
-"bergen.no\0"
-"brussel.museum\0"
-"avoues.fr\0"
-"cesenaforli.it\0"
-"oregontrail.museum\0"
-"ullensaker.no\0"
-"jobs\0"
-"accident-prevention.aero\0"
-"n.se\0"
-"association.museum\0california.museum\0"
-"cultural.museum\0co.rs\0"
-"zoology.museum\0"
-"pruszkow.pl\0"
-"control.aero\0nt.edu.au\0net\0komforb.se\0"
-"lincoln.museum\0aurland.no\0name.pr\0co.rw\0"
-"ostroleka.pl\0"
-"isernia.it\0"
-"tm.fr\0"
-"gs.ol.no\0"
-"nb.ca\0marnardal.no\0"
-"williamsburg.museum\0"
-"!jet.uk\0"
-"suisse.museum\0\xc3\xa5""fjord.no\0flakstad.no\0"
-"karmoy.no\0"
-"yn.cn\0chesapeakebay.museum\0"
-"nsw.au\0"
-"amur.ru\0co.st\0"
-"imb.br\0siellak.no\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
-"name.na\0"
-"co.th\0"
-"p.bg\0"
-"co.sz\0co.tj\0"
-"name.mv\0\xc3\xa5lesund.no\0lib.in.us\0"
-"lucerne.museum\0naumburg.museum\0"
-"society.museum\0name.my\0"
-"tinn.no\0"
-"co.tt\0"
-"unj\xc3\xa1rga.no\0"
-"co.ug\0"
-"lib.wy.us\0"
-"co.tz\0"
-"ass.km\0"
-"ok.us\0"
-"tm.hu\0kongsvinger.no\0"
-"ibestad.no\0"
-"juedisches.museum\0co.us\0"
-"cq.cn\0"
-"rs.ba\0"
-"wa.edu.au\0co.vi\0"
-"co.uz\0"
-"health.museum\0"
-"grue.no\0"
-"automotive.museum\0journalism.museum\0settlement.museum\0"
-"qh.cn\0interactive.museum\0"
-"snillfjord.no\0!national-library-scotland.uk\0"
-"balsfjord.no\0lib.nh.us\0"
-"kolobrzeg.pl\0"
-"gs.tm.no\0"
-"h\xc3\xb8nefoss.no\0"
-"ol.no\0"
-"music.museum\0moareke.no\0"
-"b\xc3\xb8.nordland.no\0"
-"name.mk\0lier.no\0"
-"eidfjord.no\0"
-"sc.cn\0tm.km\0"
-"jelenia-gora.pl\0sanok.pl\0"
-"intelligence.museum\0"
-"srv.br\0elblag.pl\0"
-"judygarland.museum\0"
-"padua.it\0"
-"k12.co.us\0"
-"lindesnes.no\0"
-"name.jo\0izhevsk.ru\0"
-"yorkshire.museum\0mel\xc3\xb8y.no\0"
-"tm.mc\0lib.pr.us\0"
-"hjartdal.no\0"
+"sennan.osaka.jp\0"
+"greta.fr\0"
+"minamiuonuma.niigata.jp\0h\xc3\xa1""bmer.no\0"
+"sanuki.kagawa.jp\0"
+"cosenza.it\0kota.aichi.jp\0takko.aomori.jp\0"
+"gamvik.no\0"
+"kaneyama.fukushima.jp\0cc.ky.us\0"
+"stjohn.museum\0"
+"habikino.osaka.jp\0askim.no\0"
+"gouv.ci\0musashimurayama.tokyo.jp\0"
+"gs.bu.no\0"
+"teshikaga.hokkaido.jp\0al.us\0"
+"re.kr\0"
+"kyotamba.kyoto.jp\0minnesota.museum\0"
+"ise.mie.jp\0"
+"med.ly\0"
+"safety.aero\0kyonan.chiba.jp\0koga.ibaraki.jp\0skedsmokorset.no\0"
+"!www.ck\0sherbrooke.museum\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0"
+"b\xc3\xa1jddar.no\0"
+"fuchu.toyama.jp\0conf.lv\0"
+"yonabaru.okinawa.jp\0"
+"9.bg\0ujiie.tochigi.jp\0"
+"numata.hokkaido.jp\0luroy.no\0sortland.no\0"
+"yamamoto.miyagi.jp\0"
+"morimachi.shizuoka.jp\0"
+"iijima.nagano.jp\0ichikawamisato.yamanashi.jp\0upow.gov.pl\0"
+"losangeles.museum\0"
+"club.aero\0"
+"kommunalforbund.se\0"
+"drangedal.no\0"
+"ngo.ph\0"
+"tur.br\0"
+"ngo.pl\0"
+"nishinoomote.kagoshima.jp\0"
+"lib.dc.us\0"
+"chihayaakasaka.osaka.jp\0eastafrica.museum\0"
+"leitungsen.de\0"
+"aurland.no\0"
+"misawa.aomori.jp\0med.pa\0"
+"inabe.mie.jp\0"
+"laquila.it\0"
+"tm.fr\0toon.ehime.jp\0"
+"kusatsu.shiga.jp\0"
+"med.pl\0"
+"hofu.yamaguchi.jp\0"
+"mamurogawa.yamagata.jp\0vinnytsia.ua\0"
+"miyota.nagano.jp\0"
+"parachuting.aero\0"
+"suli.hu\0"
+"yasugi.shimane.jp\0"
+"johana.toyama.jp\0"
+"yaita.tochigi.jp\0!nawras.om\0izhevsk.ru\0"
+"frei.no\0"
+"kumenan.okayama.jp\0kikugawa.shizuoka.jp\0"
+"vr.it\0"
+"ambulance.museum\0"
+"tsunan.niigata.jp\0matsubushi.saitama.jp\0"
+"ichiba.tokushima.jp\0"
+"tm.hu\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0"
+"id.au\0perugia.it\0"
+"gotemba.shizuoka.jp\0fla.no\0"
+"kamikoani.akita.jp\0sec.ps\0"
+"med.sa\0"
+"skole.museum\0"
+"airport.aero\0"
+"med.sd\0"
+"sibenik.museum\0"
+"sondre-land.no\0"
+"jpn.com\0"
+"shimamaki.hokkaido.jp\0"
+"owariasahi.aichi.jp\0utashinai.hokkaido.jp\0hotel.tz\0"
+"namie.fukushima.jp\0komi.ru\0"
+"malvik.no\0lib.nj.us\0"
+"k-uralsk.ru\0"
+"xz.cn\0lukow.pl\0"
+"iiyama.nagano.jp\0steiermark.museum\0radom.pl\0blogspot.co.at\0"
+"saltdal.no\0vladivostok.ru\0"
+"int\0kira.aichi.jp\0"
+"flog.br\0shiranuka.hokkaido.jp\0nsk.ru\0"
+"ar.it\0"
+"tono.iwate.jp\0fujiidera.osaka.jp\0"
+"tm.km\0"
+"ct.us\0"
+"kuchinotsu.nagasaki.jp\0"
+"shinto.gunma.jp\0"
+"trysil.no\0"
+"saves-the-whales.com\0"
+"off.ai\0"
+"county.museum\0"
+"tank.museum\0"
+"is-a-hard-worker.com\0"
+"pc.it\0"
+"tm.mc\0kyiv.ua\0"
+"onojo.fukuoka.jp\0"
"tm.mg\0"
-"bari.it\0milano.it\0"
-"lg.jp\0"
-"zgrad.ru\0"
-"sm\xc3\xb8la.no\0"
-"communications.museum\0"
-"arts.co\0seoul.kr\0engerdal.no\0"
+"onga.fukuoka.jp\0"
+"a.bg\0vlog.br\0lib.id.us\0"
+"kalmykia.ru\0"
+"alto-adige.it\0"
+"shibukawa.gunma.jp\0"
+"toba.mie.jp\0"
+"misato.shimane.jp\0"
+"kitahata.saga.jp\0"
+"for-more.biz\0"
+"siellak.no\0"
+"la-spezia.it\0"
+"mn.it\0seljord.no\0"
+"mihama.chiba.jp\0"
+"miyako.fukuoka.jp\0"
+"fujinomiya.shizuoka.jp\0moka.tochigi.jp\0"
+"cultural.museum\0"
+"tm.no\0"
+"kamisato.saitama.jp\0magadan.ru\0"
+"mk.ua\0"
+"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0"
+"motobu.okinawa.jp\0"
+"r\xc3\xb8yrvik.no\0is-a-geek.com\0"
+"shizukuishi.iwate.jp\0omura.nagasaki.jp\0"
+"rec.br\0kai.yamanashi.jp\0"
+"monza.it\0"
+"teo.br\0pescara.it\0"
+"yugawa.fukushima.jp\0circus.museum\0kirkenes.no\0"
+"air-surveillance.aero\0br\xc3\xb8nn\xc3\xb8y.no\0roros.no\0rnd.ru\0"
+"pharmacy.museum\0gs.nt.no\0"
+"bmd.br\0takizawa.iwate.jp\0bunkyo.tokyo.jp\0"
+"motegi.tochigi.jp\0youth.museum\0"
+"gob.bo\0tamba.hyogo.jp\0"
+"lib.tx.us\0"
+"kitashiobara.fukushima.jp\0"
+"rec.co\0kautokeino.no\0"
+"baseball.museum\0dinosaur.museum\0tm.pl\0"
+"grane.no\0"
"oster\xc3\xb8y.no\0"
-"\xe6\x95\x8e\xe8\x82\xb2.hk\0foggia.it\0verran.no\0"
-"orskog.no\0voronezh.ru\0kv.ua\0"
-"av.it\0"
-"tm.no\0nissedal.no\0"
-"historisches.museum\0gs.mr.no\0"
-"medecin.fr\0"
-"montreal.museum\0"
-"o.se\0"
-"!metro.tokyo.jp\0sola.no\0"
-"k12.tn.us\0"
-"floro.no\0"
-"milan.it\0*.shiga.jp\0"
-"berkeley.museum\0"
-"maintenance.aero\0"
-"ws.na\0"
-"lindas.no\0cc.ia.us\0"
-"brescia.it\0embroidery.museum\0"
-"arezzo.it\0tm.pl\0"
-"r\xc3\xa6lingen.no\0"
-"burghof.museum\0"
-"rec.br\0"
-"q.bg\0"
-"!nawras.om\0"
-"hammarfeasta.no\0"
-"moss.no\0"
-"on.ca\0"
-"gouv.rw\0"
-"luxembourg.museum\0"
-"rec.co\0british.museum\0"
-"reggio-emilia.it\0"
-"gouv.sn\0lib.wv.us\0"
-"avocat.fr\0"
-"simbirsk.ru\0"
-"jar.ru\0"
-"monza-brianza.it\0"
-"tm.ro\0"
-"imageandsound.museum\0"
-"jpn.com\0mr.no\0"
-"siracusa.it\0"
-"norilsk.ru\0tm.se\0"
-"tn.it\0"
-"jeju.kr\0"
-"!pref.fukuoka.jp\0"
-"*.hyogo.jp\0portlligat.museum\0"
-"!pref.osaka.jp\0"
-"siena.it\0sc.kr\0omaha.museum\0saskatchewan.museum\0"
-"phoenix.museum\0vanylven.no\0"
-"botanicalgarden.museum\0"
-"turek.pl\0"
-"vagsoy.no\0"
-"riodejaneiro.museum\0"
-"vi.it\0"
-"uy.com\0"
-"kristiansand.no\0"
-"sd.cn\0trento.it\0"
-"muncie.museum\0"
-"berg.no\0meldal.no\0"
-"nes.buskerud.no\0"
-"saratov.ru\0"
-"gs.oslo.no\0"
-"harstad.no\0vaga.no\0"
-"research.museum\0"
-"brunel.museum\0ia.us\0"
-"test.tj\0"
-"columbia.museum\0"
-"ms.it\0stockholm.museum\0"
-"reklam.hu\0"
-"pomorskie.pl\0lg.ua\0"
-"bg.it\0historicalsociety.museum\0rns.tn\0"
-"mallorca.museum\0surgut.ru\0cc.sc.us\0"
-"ushistory.museum\0"
-"palana.ru\0"
-"snoasa.no\0"
-"naturalsciences.museum\0"
-"yaroslavl.ru\0"
-"unjarga.no\0"
-"p.se\0"
-"ingatlan.hu\0"
-"irc.pl\0"
-"savona.it\0"
-"cr.it\0"
-"test.ru\0cc.tn.us\0"
-"ms.kr\0museumvereniging.museum\0"
-"time.no\0k12.ia.us\0"
-"vladimir.ru\0"
-"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0"
-"gouv.km\0nationalfirearms.museum\0"
-"m\xc3\xa1latvuopmi.no\0"
-"aero\0yosemite.museum\0"
-"r.bg\0school.na\0"
-"cc.vi.us\0"
-"*.wakayama.jp\0"
-"beauxarts.museum\0averoy.no\0ullensvang.no\0bar.pro\0"
-"!city.hiroshima.jp\0"
-"b\xc3\xa1hccavuotna.no\0"
-"frosta.no\0"
-"gdynia.pl\0"
-"medical.museum\0"
-"embaixada.st\0"
-"balsan.it\0vantaa.museum\0"
-"za.net\0"
-"!city.saitama.jp\0lib.ks.us\0"
-"fnd.br\0"
-"ru.com\0se.com\0hol.no\0modalen.no\0"
-"gouv.ml\0chukotka.ru\0"
-"malopolska.pl\0"
-"mansion.museum\0"
-"iki.fi\0children.museum\0"
-"cyber.museum\0rec.nf\0mo\xc3\xa5reke.no\0"
-"to.it\0"
-"hasvik.no\0"
-"\xc3\xb8yer.no\0"
-"arts.ro\0sc.ug\0"
-"lib.ar.us\0"
-"sc.tz\0cc.ms.us\0cc.nc.us\0"
-"etc.br\0poznan.pl\0"
-"cnt.br\0viking.museum\0"
-"*.miyazaki.jp\0"
-"melhus.no\0"
-"skodje.no\0vevelstad.no\0"
-"sc.us\0"
-"upow.gov.pl\0"
-"!city.fukuoka.jp\0brandywinevalley.museum\0natuurwetenschappen.museum\0tranby.no\0"
-"bahn.museum\0msk.ru\0"
-"delmenhorst.museum\0"
-"russia.museum\0fuoisku.no\0"
-"shell.museum\0"
-"r\xc3\xa1isa.no\0"
-"hs.kr\0udmurtia.ru\0"
-"palermo.it\0"
-"pilot.aero\0"
-"tn.us\0"
-"priv.hu\0"
-"li.it\0"
-"kr\xc3\xa5""anghke.no\0mosreg.ru\0"
-"lib.fl.us\0"
-"plants.museum\0"
-"ulsan.kr\0national.museum\0"
-"mil.ac\0!pref.nara.jp\0surgeonshall.museum\0"
-"mil.ae\0santacruz.museum\0vi.us\0"
-"wlocl.pl\0"
-"mt.it\0napoli.it\0alaska.museum\0arts.nf\0"
-"missoula.museum\0"
-"rec.ro\0"
-"mil.al\0"
-"marburg.museum\0waw.pl\0"
-"pharmaciens.km\0indianapolis.museum\0larsson.museum\0"
-"cc.sd.us\0"
-"mil.ba\0mobi\0"
-"indianmarket.museum\0"
-"recreation.aero\0padova.it\0"
-"varese.it\0parti.se\0"
-"mil.az\0"
-"mil.bo\0!pref.kagoshima.jp\0khmelnitskiy.ua\0"
-"rygge.no\0"
-"os\xc3\xb8yro.no\0"
-"mil.br\0"
-"cs.it\0"
-"austevoll.no\0fjell.no\0"
-"mil.by\0"
-"!pref.tokushima.jp\0org\0"
-"mil.cn\0gs.svalbard.no\0"
-"mil.co\0"
-"pz.it\0lib.va.us\0\xd1\x80\xd1\x84\0"
-"\xe4\xb8\xaa\xe4\xba\xba.hk\0ms.us\0nc.us\0k12.wi.us\0"
-"s.bg\0drangedal.no\0"
-"en.it\0"
-"culturalcenter.museum\0"
-"house.museum\0divttasvuotna.no\0"
-"fhs.no\0"
-"circus.museum\0"
-"priv.at\0"
-"mil.ec\0"
-"ruovat.no\0"
-"midsund.no\0vagan.no\0"
-"casadelamoneda.museum\0"
-"bristol.museum\0"
-"and.museum\0"
-"ascolipiceno.it\0computerhistory.museum\0vyatka.ru\0"
-"uhren.museum\0"
-"lahppi.no\0"
-"*.yokohama.jp\0cody.museum\0lib.al.us\0"