summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/Qt5CoreConfigExtras.cmake.in23
-rw-r--r--src/corelib/Qt5CoreMacros.cmake13
-rw-r--r--src/corelib/animation/qabstractanimation.h8
-rw-r--r--src/corelib/animation/qanimationgroup.h2
-rw-r--r--src/corelib/animation/qparallelanimationgroup.h2
-rw-r--r--src/corelib/animation/qpauseanimation.h4
-rw-r--r--src/corelib/animation/qpropertyanimation.h4
-rw-r--r--src/corelib/animation/qsequentialanimationgroup.h2
-rw-r--r--src/corelib/animation/qsequentialanimationgroup_p.h2
-rw-r--r--src/corelib/animation/qvariantanimation.h4
-rw-r--r--src/corelib/codecs/qbig5codec.cpp4
-rw-r--r--src/corelib/codecs/qeucjpcodec.cpp4
-rw-r--r--src/corelib/codecs/qeuckrcodec.cpp4
-rw-r--r--src/corelib/codecs/qgb18030codec.cpp6
-rw-r--r--src/corelib/codecs/qjiscodec.cpp2
-rw-r--r--src/corelib/codecs/qsjiscodec.cpp2
-rw-r--r--src/corelib/codecs/qtextcodec.cpp3
-rw-r--r--src/corelib/codecs/qtextcodec.h6
-rw-r--r--src/corelib/codecs/qutfcodec.cpp3
-rw-r--r--src/corelib/codecs/qutfcodec_p.h2
-rw-r--r--src/corelib/corelib.pro6
-rw-r--r--src/corelib/doc/qtcore.qdocconf2
-rw-r--r--src/corelib/doc/snippets/code/doc_src_containers.cpp6
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_codecs_qtextcodec.cpp10
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp33
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp25
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qlinkedlist.cpp6
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qmap.cpp25
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qvector.cpp17
-rw-r--r--src/corelib/doc/snippets/qstring/main.cpp12
-rw-r--r--src/corelib/doc/snippets/qstringlist/main.cpp2
-rw-r--r--src/corelib/doc/src/containers.qdoc18
-rw-r--r--src/corelib/doc/src/eventsandfilters.qdoc2
-rw-r--r--src/corelib/doc/src/external-resources.qdoc9
-rw-r--r--src/corelib/doc/src/implicit-sharing.qdoc6
-rw-r--r--src/corelib/doc/src/objectmodel/metaobjects.qdoc2
-rw-r--r--src/corelib/doc/src/objectmodel/properties.qdoc11
-rw-r--r--src/corelib/global/global.pri10
-rw-r--r--src/corelib/global/qcompilerdetection.h25
-rw-r--r--src/corelib/global/qflags.h2
-rw-r--r--src/corelib/global/qglobal.cpp259
-rw-r--r--src/corelib/global/qglobal.h94
-rw-r--r--src/corelib/global/qhooks_p.h11
-rw-r--r--src/corelib/global/qlogging.cpp32
-rw-r--r--src/corelib/global/qlogging.h3
-rw-r--r--src/corelib/global/qnamespace.h30
-rw-r--r--src/corelib/global/qnamespace.qdoc103
-rw-r--r--src/corelib/global/qnumeric_p.h117
-rw-r--r--src/corelib/global/qprocessordetection.h82
-rw-r--r--src/corelib/global/qsysinfo.h28
-rw-r--r--src/corelib/global/qsystemdetection.h4
-rw-r--r--src/corelib/global/qtypeinfo.h72
-rw-r--r--src/corelib/global/qversiontagging.cpp86
-rw-r--r--src/corelib/global/qversiontagging.h86
-rw-r--r--src/corelib/io/forkfd_qt.cpp16
-rw-r--r--src/corelib/io/io.pri1
-rw-r--r--src/corelib/io/qabstractfileengine.cpp1
-rw-r--r--src/corelib/io/qbuffer.h4
-rw-r--r--src/corelib/io/qdatastream.cpp1
-rw-r--r--src/corelib/io/qdatastream.h5
-rw-r--r--src/corelib/io/qdebug.cpp29
-rw-r--r--src/corelib/io/qdebug.h25
-rw-r--r--src/corelib/io/qdir.cpp14
-rw-r--r--src/corelib/io/qdir.h16
-rw-r--r--src/corelib/io/qfile.h2
-rw-r--r--src/corelib/io/qfiledevice.cpp2
-rw-r--r--src/corelib/io/qfiledevice.h2
-rw-r--r--src/corelib/io/qfileinfo.h5
-rw-r--r--src/corelib/io/qfileselector.cpp4
-rw-r--r--src/corelib/io/qfileselector.h2
-rw-r--r--src/corelib/io/qfilesystemengine.cpp4
-rw-r--r--src/corelib/io/qfilesystemengine_p.h2
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp161
-rw-r--r--src/corelib/io/qfilesystemengine_win.cpp5
-rw-r--r--src/corelib/io/qfilesystementry.cpp3
-rw-r--r--src/corelib/io/qfilesystemmetadata_p.h4
-rw-r--r--src/corelib/io/qfilesystemwatcher.cpp10
-rw-r--r--src/corelib/io/qfilesystemwatcher.h4
-rw-r--r--src/corelib/io/qfilesystemwatcher_fsevents.mm31
-rw-r--r--src/corelib/io/qfilesystemwatcher_win.cpp2
-rw-r--r--src/corelib/io/qfsfileengine_p.h1
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp4
-rw-r--r--src/corelib/io/qiodevice.cpp73
-rw-r--r--src/corelib/io/qiodevice.h2
-rw-r--r--src/corelib/io/qiodevice_p.h1
-rw-r--r--src/corelib/io/qlockfile_unix.cpp8
-rw-r--r--src/corelib/io/qloggingcategory.cpp9
-rw-r--r--src/corelib/io/qloggingregistry.cpp68
-rw-r--r--src/corelib/io/qloggingregistry_p.h1
-rw-r--r--src/corelib/io/qprocess.cpp165
-rw-r--r--src/corelib/io/qprocess.h27
-rw-r--r--src/corelib/io/qprocess_p.h4
-rw-r--r--src/corelib/io/qprocess_unix.cpp65
-rw-r--r--src/corelib/io/qprocess_win.cpp46
-rw-r--r--src/corelib/io/qprocess_wince.cpp29
-rw-r--r--src/corelib/io/qresource.cpp8
-rw-r--r--src/corelib/io/qsavefile.h2
-rw-r--r--src/corelib/io/qsettings.cpp64
-rw-r--r--src/corelib/io/qsettings.h10
-rw-r--r--src/corelib/io/qsettings_mac.cpp15
-rw-r--r--src/corelib/io/qsettings_p.h3
-rw-r--r--src/corelib/io/qsettings_win.cpp8
-rw-r--r--src/corelib/io/qstandardpaths.cpp10
-rw-r--r--src/corelib/io/qstandardpaths_unix.cpp30
-rw-r--r--src/corelib/io/qstandardpaths_win.cpp6
-rw-r--r--src/corelib/io/qstandardpaths_winrt.cpp3
-rw-r--r--src/corelib/io/qstorageinfo.cpp12
-rw-r--r--src/corelib/io/qstorageinfo.h6
-rw-r--r--src/corelib/io/qstorageinfo_mac.cpp41
-rw-r--r--src/corelib/io/qstorageinfo_p.h3
-rw-r--r--src/corelib/io/qstorageinfo_unix.cpp12
-rw-r--r--src/corelib/io/qtemporarydir.cpp51
-rw-r--r--src/corelib/io/qtemporarydir.h1
-rw-r--r--src/corelib/io/qtemporaryfile.cpp4
-rw-r--r--src/corelib/io/qtemporaryfile_p.h2
-rw-r--r--src/corelib/io/qtextstream.cpp155
-rw-r--r--src/corelib/io/qtextstream.h5
-rw-r--r--src/corelib/io/qtextstream_p.h10
-rw-r--r--src/corelib/io/qtldurl.cpp16
-rw-r--r--src/corelib/io/qurl.cpp8
-rw-r--r--src/corelib/io/qurlidna.cpp2
-rw-r--r--src/corelib/io/qurlquery.cpp22
-rw-r--r--src/corelib/io/qurlquery.h12
-rw-r--r--src/corelib/io/qwindowspipereader.cpp6
-rw-r--r--src/corelib/io/qwindowspipereader_p.h2
-rw-r--r--src/corelib/io/qwinoverlappedionotifier.cpp27
-rw-r--r--src/corelib/io/qwinoverlappedionotifier_p.h2
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp6
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.h16
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel_p.h3
-rw-r--r--src/corelib/itemmodels/qabstractproxymodel.cpp1
-rw-r--r--src/corelib/itemmodels/qabstractproxymodel.h2
-rw-r--r--src/corelib/itemmodels/qidentityproxymodel.cpp3
-rw-r--r--src/corelib/itemmodels/qidentityproxymodel.h2
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.cpp18
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.h36
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp33
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.h2
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.cpp4
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.h4
-rw-r--r--src/corelib/json/qjson_p.h4
-rw-r--r--src/corelib/json/qjsonarray.cpp13
-rw-r--r--src/corelib/json/qjsonarray.h8
-rw-r--r--src/corelib/json/qjsondocument.cpp2
-rw-r--r--src/corelib/json/qjsondocument.h2
-rw-r--r--src/corelib/json/qjsonobject.cpp12
-rw-r--r--src/corelib/json/qjsonobject.h6
-rw-r--r--src/corelib/json/qjsonvalue.cpp26
-rw-r--r--src/corelib/json/qjsonwriter.cpp4
-rw-r--r--src/corelib/kernel/kernel.pri18
-rw-r--r--src/corelib/kernel/qabstracteventdispatcher.h4
-rw-r--r--src/corelib/kernel/qcfsocketnotifier.cpp307
-rw-r--r--src/corelib/kernel/qcfsocketnotifier_p.h105
-rw-r--r--src/corelib/kernel/qcore_mac_objc.mm17
-rw-r--r--src/corelib/kernel/qcore_mac_p.h4
-rw-r--r--src/corelib/kernel/qcore_unix_p.h78
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp306
-rw-r--r--src/corelib/kernel/qcoreapplication.h17
-rw-r--r--src/corelib/kernel/qcoreapplication_p.h8
-rw-r--r--src/corelib/kernel/qcoreapplication_win.cpp7
-rw-r--r--src/corelib/kernel/qcoreevent.cpp4
-rw-r--r--src/corelib/kernel/qcoreevent.h2
-rw-r--r--src/corelib/kernel/qeventdispatcher_blackberry.cpp6
-rw-r--r--src/corelib/kernel/qeventdispatcher_cf.mm633
-rw-r--r--src/corelib/kernel/qeventdispatcher_cf_p.h280
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib.cpp1
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib_p.h2
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp8
-rw-r--r--src/corelib/kernel/qeventdispatcher_winrt.cpp132
-rw-r--r--src/corelib/kernel/qeventdispatcher_winrt_p.h4
-rw-r--r--src/corelib/kernel/qeventloop.cpp2
-rw-r--r--src/corelib/kernel/qeventloop.h2
-rw-r--r--src/corelib/kernel/qfunctions_fake_env_p.h122
-rw-r--r--src/corelib/kernel/qfunctions_wince.cpp58
-rw-r--r--src/corelib/kernel/qfunctions_wince.h49
-rw-r--r--src/corelib/kernel/qfunctions_winrt.cpp51
-rw-r--r--src/corelib/kernel/qfunctions_winrt.h55
-rw-r--r--src/corelib/kernel/qjni.cpp10
-rw-r--r--src/corelib/kernel/qjni_p.h8
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp102
-rw-r--r--src/corelib/kernel/qjnihelpers_p.h33
-rw-r--r--src/corelib/kernel/qmath.h10
-rw-r--r--src/corelib/kernel/qmetaobject.cpp19
-rw-r--r--src/corelib/kernel/qmetaobject.h36
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder.cpp20
-rw-r--r--src/corelib/kernel/qmetatype.cpp30
-rw-r--r--src/corelib/kernel/qmetatype.h115
-rw-r--r--src/corelib/kernel/qmimedata.cpp6
-rw-r--r--src/corelib/kernel/qobject.cpp27
-rw-r--r--src/corelib/kernel/qobject.h46
-rw-r--r--src/corelib/kernel/qobject_impl.h10
-rw-r--r--src/corelib/kernel/qobject_p.h6
-rw-r--r--src/corelib/kernel/qobjectdefs.h24
-rw-r--r--src/corelib/kernel/qpointer.cpp8
-rw-r--r--src/corelib/kernel/qpointer.h12
-rw-r--r--src/corelib/kernel/qsharedmemory.cpp4
-rw-r--r--src/corelib/kernel/qsharedmemory.h4
-rw-r--r--src/corelib/kernel/qsharedmemory_android.cpp14
-rw-r--r--src/corelib/kernel/qsharedmemory_systemv.cpp2
-rw-r--r--src/corelib/kernel/qsharedmemory_win.cpp6
-rw-r--r--src/corelib/kernel/qsignalmapper.h2
-rw-r--r--src/corelib/kernel/qsocketnotifier.h2
-rw-r--r--src/corelib/kernel/qsystemerror.cpp2
-rw-r--r--src/corelib/kernel/qsystemerror_p.h10
-rw-r--r--src/corelib/kernel/qsystemsemaphore_android.cpp8
-rw-r--r--src/corelib/kernel/qsystemsemaphore_systemv.cpp2
-rw-r--r--src/corelib/kernel/qsystemsemaphore_win.cpp2
-rw-r--r--src/corelib/kernel/qtimer.cpp9
-rw-r--r--src/corelib/kernel/qtimer.h10
-rw-r--r--src/corelib/kernel/qtranslator.cpp1
-rw-r--r--src/corelib/kernel/qtranslator.h4
-rw-r--r--src/corelib/kernel/qvariant.cpp12
-rw-r--r--src/corelib/kernel/qvariant.h34
-rw-r--r--src/corelib/kernel/qvariant_p.h88
-rw-r--r--src/corelib/mimetypes/qmimedatabase.cpp4
-rw-r--r--src/corelib/mimetypes/qmimedatabase_p.h1
-rw-r--r--src/corelib/mimetypes/qmimeprovider.cpp18
-rw-r--r--src/corelib/mimetypes/qmimetype.cpp13
-rw-r--r--src/corelib/mimetypes/qmimetype.h13
-rw-r--r--src/corelib/plugin/plugin.pri1
-rw-r--r--src/corelib/plugin/qfactoryinterface.cpp43
-rw-r--r--src/corelib/plugin/qfactoryinterface.h2
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp8
-rw-r--r--src/corelib/plugin/qlibrary.cpp6
-rw-r--r--src/corelib/plugin/qlibrary.h8
-rw-r--r--src/corelib/plugin/qlibrary_win.cpp9
-rw-r--r--src/corelib/plugin/qplugin.qdoc8
-rw-r--r--src/corelib/plugin/qpluginloader.cpp34
-rw-r--r--src/corelib/plugin/qpluginloader.h4
-rw-r--r--src/corelib/plugin/quuid.cpp14
-rw-r--r--src/corelib/qtzlib.pro7
-rw-r--r--src/corelib/statemachine/qabstractstate.cpp12
-rw-r--r--src/corelib/statemachine/qabstractstate.h2
-rw-r--r--src/corelib/statemachine/qabstractstate_p.h9
-rw-r--r--src/corelib/statemachine/qabstracttransition.cpp67
-rw-r--r--src/corelib/statemachine/qabstracttransition.h2
-rw-r--r--src/corelib/statemachine/qabstracttransition_p.h6
-rw-r--r--src/corelib/statemachine/qeventtransition.cpp3
-rw-r--r--src/corelib/statemachine/qeventtransition.h4
-rw-r--r--src/corelib/statemachine/qeventtransition_p.h4
-rw-r--r--src/corelib/statemachine/qfinalstate.h2
-rw-r--r--src/corelib/statemachine/qhistorystate.cpp77
-rw-r--r--src/corelib/statemachine/qhistorystate.h10
-rw-r--r--src/corelib/statemachine/qhistorystate_p.h25
-rw-r--r--src/corelib/statemachine/qsignaltransition.cpp5
-rw-r--r--src/corelib/statemachine/qsignaltransition.h4
-rw-r--r--src/corelib/statemachine/qsignaltransition_p.h3
-rw-r--r--src/corelib/statemachine/qstate.cpp10
-rw-r--r--src/corelib/statemachine/qstate.h4
-rw-r--r--src/corelib/statemachine/qstate_p.h3
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp209
-rw-r--r--src/corelib/statemachine/qstatemachine.h4
-rw-r--r--src/corelib/statemachine/qstatemachine_p.h27
-rw-r--r--src/corelib/thread/qbasicatomic.h12
-rw-r--r--src/corelib/thread/qexception.cpp24
-rw-r--r--src/corelib/thread/qexception.h18
-rw-r--r--src/corelib/thread/qfuture.qdoc1
-rw-r--r--src/corelib/thread/qfutureinterface.h2
-rw-r--r--src/corelib/thread/qfuturewatcher.cpp24
-rw-r--r--src/corelib/thread/qfuturewatcher.h4
-rw-r--r--src/corelib/thread/qgenericatomic.h81
-rw-r--r--src/corelib/thread/qmutex.cpp7
-rw-r--r--src/corelib/thread/qmutex.h8
-rw-r--r--src/corelib/thread/qmutex_win.cpp6
-rw-r--r--src/corelib/thread/qorderedmutexlocker_p.h6
-rw-r--r--src/corelib/thread/qresultstore.h4
-rw-r--r--src/corelib/thread/qrunnable.cpp11
-rw-r--r--src/corelib/thread/qrunnable.h9
-rw-r--r--src/corelib/thread/qthread.cpp28
-rw-r--r--src/corelib/thread/qthread.h4
-rw-r--r--src/corelib/thread/qthread_p.h10
-rw-r--r--src/corelib/thread/qthread_unix.cpp35
-rw-r--r--src/corelib/thread/qthread_win.cpp32
-rw-r--r--src/corelib/thread/qthreadpool.cpp10
-rw-r--r--src/corelib/thread/qthreadpool.h2
-rw-r--r--src/corelib/thread/qthreadpool_p.h2
-rw-r--r--src/corelib/thread/qwaitcondition_unix.cpp2
-rw-r--r--src/corelib/thread/qwaitcondition_win.cpp6
-rw-r--r--src/corelib/tools/qalgorithms.h125
-rw-r--r--src/corelib/tools/qalgorithms.qdoc70
-rw-r--r--src/corelib/tools/qarraydata.cpp4
-rw-r--r--src/corelib/tools/qarraydata.h6
-rw-r--r--src/corelib/tools/qarraydatapointer.h11
-rw-r--r--src/corelib/tools/qbitarray.cpp4
-rw-r--r--src/corelib/tools/qbitarray.h2
-rw-r--r--src/corelib/tools/qbytearray.cpp98
-rw-r--r--src/corelib/tools/qbytearray.h48
-rw-r--r--src/corelib/tools/qbytearray_p.h61
-rw-r--r--src/corelib/tools/qbytearraylist.h2
-rw-r--r--src/corelib/tools/qchar.cpp134
-rw-r--r--src/corelib/tools/qchar.h280
-rw-r--r--src/corelib/tools/qcollator.cpp2
-rw-r--r--src/corelib/tools/qcollator.h2
-rw-r--r--src/corelib/tools/qcommandlineoption.cpp114
-rw-r--r--src/corelib/tools/qcommandlineoption.h8
-rw-r--r--src/corelib/tools/qcommandlineparser.cpp60
-rw-r--r--src/corelib/tools/qcommandlineparser.h6
-rw-r--r--src/corelib/tools/qcryptographichash.cpp2
-rw-r--r--src/corelib/tools/qdatetime.cpp189
-rw-r--r--src/corelib/tools/qdatetime.h7
-rw-r--r--src/corelib/tools/qdatetimeparser_p.h1
-rw-r--r--src/corelib/tools/qeasingcurve.cpp10
-rw-r--r--src/corelib/tools/qeasingcurve.h2
-rw-r--r--src/corelib/tools/qelapsedtimer.cpp2
-rw-r--r--src/corelib/tools/qharfbuzz.cpp3
-rw-r--r--src/corelib/tools/qhash.cpp198
-rw-r--r--src/corelib/tools/qhash.h174
-rw-r--r--src/corelib/tools/qhashfunctions.h156
-rw-r--r--src/corelib/tools/qlinkedlist.cpp78
-rw-r--r--src/corelib/tools/qlinkedlist.h34
-rw-r--r--src/corelib/tools/qlist.cpp307
-rw-r--r--src/corelib/tools/qlist.h148
-rw-r--r--src/corelib/tools/qlocale.cpp46
-rw-r--r--src/corelib/tools/qlocale.h40
-rw-r--r--src/corelib/tools/qlocale_mac.mm14
-rw-r--r--src/corelib/tools/qlocale_p.h3
-rw-r--r--src/corelib/tools/qlocale_win.cpp59
-rw-r--r--src/corelib/tools/qmap.cpp160
-rw-r--r--src/corelib/tools/qmap.h155
-rw-r--r--src/corelib/tools/qqueue.cpp13
-rw-r--r--src/corelib/tools/qqueue.h5
-rw-r--r--src/corelib/tools/qrect.cpp4
-rw-r--r--src/corelib/tools/qregexp.cpp46
-rw-r--r--src/corelib/tools/qregexp.h5
-rw-r--r--src/corelib/tools/qregularexpression.cpp29
-rw-r--r--src/corelib/tools/qregularexpression.h4
-rw-r--r--src/corelib/tools/qringbuffer.cpp314
-rw-r--r--src/corelib/tools/qringbuffer_p.h246
-rw-r--r--src/corelib/tools/qscopedpointer.h14
-rw-r--r--src/corelib/tools/qset.h71
-rw-r--r--src/corelib/tools/qset.qdoc124
-rw-r--r--src/corelib/tools/qshareddata.h11
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h83
-rw-r--r--src/corelib/tools/qsimd.cpp298
-rw-r--r--src/corelib/tools/qsimd_p.h181
-rw-r--r--src/corelib/tools/qstack.cpp13
-rw-r--r--src/corelib/tools/qstack.h5
-rw-r--r--src/corelib/tools/qstring.cpp515
-rw-r--r--src/corelib/tools/qstring.h187
-rw-r--r--src/corelib/tools/qstringbuilder.h2
-rw-r--r--src/corelib/tools/qstringiterator_p.h7
-rw-r--r--src/corelib/tools/qtextboundaryfinder.h2
-rw-r--r--src/corelib/tools/qtimeline.h2
-rw-r--r--src/corelib/tools/qtimezone.cpp82
-rw-r--r--src/corelib/tools/qtimezoneprivate.cpp11
-rw-r--r--src/corelib/tools/qtimezoneprivate_android.cpp22
-rw-r--r--src/corelib/tools/qtimezoneprivate_p.h1
-rw-r--r--src/corelib/tools/qtimezoneprivate_tz.cpp8
-rw-r--r--src/corelib/tools/qunicodetables.cpp11034
-rw-r--r--src/corelib/tools/qunicodetables_p.h36
-rw-r--r--src/corelib/tools/qunicodetools.cpp61
-rw-r--r--src/corelib/tools/qvarlengtharray.h39
-rw-r--r--src/corelib/tools/qvarlengtharray.qdoc108
-rw-r--r--src/corelib/tools/qvector.cpp272
-rw-r--r--src/corelib/tools/qvector.h125
-rw-r--r--src/corelib/tools/qversionnumber.cpp138
-rw-r--r--src/corelib/tools/qversionnumber.h313
-rw-r--r--src/corelib/tools/qversionnumber_p.h193
-rw-r--r--src/corelib/tools/tools.pri9
-rw-r--r--src/corelib/xml/qxmlstream.cpp10
-rw-r--r--src/corelib/xml/qxmlstream.h48
361 files changed, 15531 insertions, 8997 deletions
diff --git a/src/corelib/Qt5CoreConfigExtras.cmake.in b/src/corelib/Qt5CoreConfigExtras.cmake.in
index 65fd1f9383..91a4eb619a 100644
--- a/src/corelib/Qt5CoreConfigExtras.cmake.in
+++ b/src/corelib/Qt5CoreConfigExtras.cmake.in
@@ -70,7 +70,14 @@ set(_qt5_corelib_extra_includes)
# Qt5_POSITION_INDEPENDENT_CODE variable is used in the # qt5_use_module
# macro to add it.
set(Qt5_POSITION_INDEPENDENT_CODE True)
-set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"-fPIC\")
+
+# On x86 and x86-64 systems with ELF binaries (especially Linux), due to
+# a new optimization in GCC 5.x in combination with a recent version of
+# GNU binutils, compiling Qt applications with -fPIE is no longer
+# enough.
+# Applications now need to be compiled with the -fPIC option if the Qt option
+# \"reduce relocations\" is active. For backward compatibility only, Qt accepts
+# the use of -fPIE for GCC 4.x versions.
if (CMAKE_VERSION VERSION_LESS 2.8.12
AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0))
@@ -79,6 +86,20 @@ else()
set_property(TARGET Qt5::Core APPEND PROPERTY INTERFACE_COMPILE_OPTIONS $$QMAKE_CXXFLAGS_APP)
endif()
+# Applications using qmake or cmake >= 2.8.12 as their build system will
+# adapt automatically. Applications using an older release of cmake in
+# combination with GCC 5.x need to change their CMakeLists.txt to add
+# Qt5Core_EXECUTABLE_COMPILE_FLAGS to CMAKE_CXX_FLAGS. In particular,
+# applications using cmake >= 2.8.9 and < 2.8.11 will continue to build
+# with the -fPIE option and invoke the special compatibility mode if using
+# GCC 4.x.
+set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"\")
+if (CMAKE_VERSION VERSION_LESS 2.8.12
+ AND (CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
+ AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0))
+ set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"-fPIC\")
+endif()
+
!!IF !isEmpty(QT_NAMESPACE)
list(APPEND Qt5Core_DEFINITIONS -DQT_NAMESPACE=$$QT_NAMESPACE)
list(APPEND Qt5Core_COMPILE_DEFINITIONS QT_NAMESPACE=$$QT_NAMESPACE)
diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake
index 18563764ad..9fab04fb26 100644
--- a/src/corelib/Qt5CoreMacros.cmake
+++ b/src/corelib/Qt5CoreMacros.cmake
@@ -94,7 +94,7 @@ endmacro()
# helper macro to set up a moc rule
-macro(QT5_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target)
+macro(QT5_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target moc_depends)
# Pass the parameters in a file. Set the working directory to
# be that containing the parameters file and reference it by
# just the file name. This is necessary because the moc tool on
@@ -131,7 +131,7 @@ macro(QT5_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target)
set(_moc_extra_parameters_file @${_moc_parameters_file})
add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Core_MOC_EXECUTABLE} ${_moc_extra_parameters_file}
- DEPENDS ${infile}
+ DEPENDS ${infile} ${moc_depends}
${_moc_working_dir}
VERBATIM)
endmacro()
@@ -151,7 +151,7 @@ function(QT5_GENERATE_MOC infile outfile )
endif()
set(moc_target ${ARGV3})
endif()
- qt5_create_moc_command(${abs_infile} ${_outfile} "${moc_flags}" "" "${moc_target}")
+ qt5_create_moc_command(${abs_infile} ${_outfile} "${moc_flags}" "" "${moc_target}" "")
set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file
endfunction()
@@ -164,13 +164,14 @@ function(QT5_WRAP_CPP outfiles )
set(options)
set(oneValueArgs TARGET)
- set(multiValueArgs OPTIONS)
+ set(multiValueArgs OPTIONS DEPENDS)
cmake_parse_arguments(_WRAP_CPP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(moc_files ${_WRAP_CPP_UNPARSED_ARGUMENTS})
set(moc_options ${_WRAP_CPP_OPTIONS})
set(moc_target ${_WRAP_CPP_TARGET})
+ set(moc_depends ${_WRAP_CPP_DEPENDS})
if (moc_target AND CMAKE_VERSION VERSION_LESS 2.8.12)
message(FATAL_ERROR "The TARGET parameter to qt5_wrap_cpp is only available when using CMake 2.8.12 or later.")
@@ -178,7 +179,7 @@ function(QT5_WRAP_CPP outfiles )
foreach(it ${moc_files})
get_filename_component(it ${it} ABSOLUTE)
qt5_make_output_file(${it} moc_ cpp outfile)
- qt5_create_moc_command(${it} ${outfile} "${moc_flags}" "${moc_options}" "${moc_target}")
+ qt5_create_moc_command(${it} ${outfile} "${moc_flags}" "${moc_options}" "${moc_target}" "${moc_depends}")
list(APPEND ${outfiles} ${outfile})
endforeach()
set(${outfiles} ${${outfiles}} PARENT_SCOPE)
@@ -335,7 +336,7 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.9)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG)
if (Qt5_POSITION_INDEPENDENT_CODE
AND (CMAKE_VERSION VERSION_LESS 2.8.12
- AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
+ AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)))
set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
endif()
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index da78341d90..7085a9fc5e 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -76,7 +76,7 @@ public:
DeleteWhenStopped
};
- QAbstractAnimation(QObject *parent = 0);
+ QAbstractAnimation(QObject *parent = Q_NULLPTR);
virtual ~QAbstractAnimation();
State state() const;
@@ -111,7 +111,7 @@ public Q_SLOTS:
void setCurrentTime(int msecs);
protected:
- QAbstractAnimation(QAbstractAnimationPrivate &dd, QObject *parent = 0);
+ QAbstractAnimation(QAbstractAnimationPrivate &dd, QObject *parent = Q_NULLPTR);
bool event(QEvent *event) Q_DECL_OVERRIDE;
virtual void updateCurrentTime(int currentTime) = 0;
@@ -130,7 +130,7 @@ class Q_CORE_EXPORT QAnimationDriver : public QObject
Q_DECLARE_PRIVATE(QAnimationDriver)
public:
- QAnimationDriver(QObject *parent = 0);
+ QAnimationDriver(QObject *parent = Q_NULLPTR);
~QAnimationDriver();
virtual void advance();
@@ -156,7 +156,7 @@ protected:
virtual void start();
virtual void stop();
- QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent = 0);
+ QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent = Q_NULLPTR);
private:
friend class QUnifiedTimer;
diff --git a/src/corelib/animation/qanimationgroup.h b/src/corelib/animation/qanimationgroup.h
index 9b180b1704..b668b503b4 100644
--- a/src/corelib/animation/qanimationgroup.h
+++ b/src/corelib/animation/qanimationgroup.h
@@ -47,7 +47,7 @@ class Q_CORE_EXPORT QAnimationGroup : public QAbstractAnimation
Q_OBJECT
public:
- QAnimationGroup(QObject *parent = 0);
+ QAnimationGroup(QObject *parent = Q_NULLPTR);
~QAnimationGroup();
QAbstractAnimation *animationAt(int index) const;
diff --git a/src/corelib/animation/qparallelanimationgroup.h b/src/corelib/animation/qparallelanimationgroup.h
index 52a61dafcd..7ce05d6344 100644
--- a/src/corelib/animation/qparallelanimationgroup.h
+++ b/src/corelib/animation/qparallelanimationgroup.h
@@ -47,7 +47,7 @@ class Q_CORE_EXPORT QParallelAnimationGroup : public QAnimationGroup
Q_OBJECT
public:
- QParallelAnimationGroup(QObject *parent = 0);
+ QParallelAnimationGroup(QObject *parent = Q_NULLPTR);
~QParallelAnimationGroup();
int duration() const Q_DECL_OVERRIDE;
diff --git a/src/corelib/animation/qpauseanimation.h b/src/corelib/animation/qpauseanimation.h
index 159d82f969..5207472623 100644
--- a/src/corelib/animation/qpauseanimation.h
+++ b/src/corelib/animation/qpauseanimation.h
@@ -48,8 +48,8 @@ class Q_CORE_EXPORT QPauseAnimation : public QAbstractAnimation
Q_OBJECT
Q_PROPERTY(int duration READ duration WRITE setDuration)
public:
- QPauseAnimation(QObject *parent = 0);
- QPauseAnimation(int msecs, QObject *parent = 0);
+ QPauseAnimation(QObject *parent = Q_NULLPTR);
+ QPauseAnimation(int msecs, QObject *parent = Q_NULLPTR);
~QPauseAnimation();
int duration() const Q_DECL_OVERRIDE;
diff --git a/src/corelib/animation/qpropertyanimation.h b/src/corelib/animation/qpropertyanimation.h
index 8d06a9f354..c0d30ba0fd 100644
--- a/src/corelib/animation/qpropertyanimation.h
+++ b/src/corelib/animation/qpropertyanimation.h
@@ -49,8 +49,8 @@ class Q_CORE_EXPORT QPropertyAnimation : public QVariantAnimation
Q_PROPERTY(QObject* targetObject READ targetObject WRITE setTargetObject)
public:
- QPropertyAnimation(QObject *parent = 0);
- QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = 0);
+ QPropertyAnimation(QObject *parent = Q_NULLPTR);
+ QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = Q_NULLPTR);
~QPropertyAnimation();
QObject *targetObject() const;
diff --git a/src/corelib/animation/qsequentialanimationgroup.h b/src/corelib/animation/qsequentialanimationgroup.h
index 1a4ead90d4..c8a84a1220 100644
--- a/src/corelib/animation/qsequentialanimationgroup.h
+++ b/src/corelib/animation/qsequentialanimationgroup.h
@@ -50,7 +50,7 @@ class Q_CORE_EXPORT QSequentialAnimationGroup : public QAnimationGroup
Q_PROPERTY(QAbstractAnimation* currentAnimation READ currentAnimation NOTIFY currentAnimationChanged)
public:
- QSequentialAnimationGroup(QObject *parent = 0);
+ QSequentialAnimationGroup(QObject *parent = Q_NULLPTR);
~QSequentialAnimationGroup();
QPauseAnimation *addPause(int msecs);
diff --git a/src/corelib/animation/qsequentialanimationgroup_p.h b/src/corelib/animation/qsequentialanimationgroup_p.h
index 035a553799..fdb97ca83c 100644
--- a/src/corelib/animation/qsequentialanimationgroup_p.h
+++ b/src/corelib/animation/qsequentialanimationgroup_p.h
@@ -86,7 +86,7 @@ public:
// this is the actual duration of uncontrolled animations
// it helps seeking and even going forward
- QList<int> actualDuration;
+ QVector<int> actualDuration;
void restart();
int lastLoop;
diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h
index 8a6524a594..4340a187a2 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
@@ -59,7 +59,7 @@ public:
typedef QPair<qreal, QVariant> KeyValue;
typedef QVector<KeyValue> KeyValues;
- QVariantAnimation(QObject *parent = 0);
+ QVariantAnimation(QObject *parent = Q_NULLPTR);
~QVariantAnimation();
QVariant startValue() const;
@@ -88,7 +88,7 @@ Q_SIGNALS:
void valueChanged(const QVariant &value);
protected:
- QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent = 0);
+ QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent = Q_NULLPTR);
bool event(QEvent *event) Q_DECL_OVERRIDE;
void updateCurrentTime(int) Q_DECL_OVERRIDE;
diff --git a/src/corelib/codecs/qbig5codec.cpp b/src/corelib/codecs/qbig5codec.cpp
index 6fd87bdfc9..6e6e3143bb 100644
--- a/src/corelib/codecs/qbig5codec.cpp
+++ b/src/corelib/codecs/qbig5codec.cpp
@@ -1794,7 +1794,7 @@ QByteArray QBig5Codec::convertFromUnicode(const QChar *uc, int len, ConverterSta
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
@@ -1916,7 +1916,7 @@ QByteArray QBig5hkscsCodec::convertFromUnicode(const QChar *uc, int len, Convert
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
diff --git a/src/corelib/codecs/qeucjpcodec.cpp b/src/corelib/codecs/qeucjpcodec.cpp
index af218c1ab0..7b9665f1a0 100644
--- a/src/corelib/codecs/qeucjpcodec.cpp
+++ b/src/corelib/codecs/qeucjpcodec.cpp
@@ -92,7 +92,7 @@ QEucJpCodec::QEucJpCodec() : conv(QJpUnicodeConv::newConverter(QJpUnicodeConv::D
*/
QEucJpCodec::~QEucJpCodec()
{
- delete (QJpUnicodeConv*)conv;
+ delete (const QJpUnicodeConv*)conv;
conv = 0;
}
@@ -139,7 +139,7 @@ QByteArray QEucJpCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
diff --git a/src/corelib/codecs/qeuckrcodec.cpp b/src/corelib/codecs/qeuckrcodec.cpp
index 52776efa4d..9ef9e13ebb 100644
--- a/src/corelib/codecs/qeuckrcodec.cpp
+++ b/src/corelib/codecs/qeuckrcodec.cpp
@@ -108,7 +108,7 @@ QByteArray QEucKrCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
@@ -3421,7 +3421,7 @@ QByteArray QCP949Codec::convertFromUnicode(const QChar *uc, int len, ConverterSt
}
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
diff --git a/src/corelib/codecs/qgb18030codec.cpp b/src/corelib/codecs/qgb18030codec.cpp
index feb485807f..f498072948 100644
--- a/src/corelib/codecs/qgb18030codec.cpp
+++ b/src/corelib/codecs/qgb18030codec.cpp
@@ -138,7 +138,7 @@ QByteArray QGb18030Codec::convertFromUnicode(const QChar *uc, int len, Converter
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
@@ -415,7 +415,7 @@ QByteArray QGbkCodec::convertFromUnicode(const QChar *uc, int len, ConverterStat
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
@@ -566,7 +566,7 @@ QByteArray QGb2312Codec::convertFromUnicode(const QChar *uc, int len, ConverterS
++invalid;
}
}
- rstr.resize(cursor - (uchar*)rstr.constData());
+ rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
diff --git a/src/corelib/codecs/qjiscodec.cpp b/src/corelib/codecs/qjiscodec.cpp
index 25d8cf0cff..ac1b47a944 100644
--- a/src/corelib/codecs/qjiscodec.cpp
+++ b/src/corelib/codecs/qjiscodec.cpp
@@ -97,7 +97,7 @@ QJisCodec::QJisCodec() : conv(QJpUnicodeConv::newConverter(QJpUnicodeConv::Defau
*/
QJisCodec::~QJisCodec()
{
- delete (QJpUnicodeConv*)conv;
+ delete (const QJpUnicodeConv*)conv;
conv = 0;
}
diff --git a/src/corelib/codecs/qsjiscodec.cpp b/src/corelib/codecs/qsjiscodec.cpp
index 58b91b9d9d..5164d9e4ce 100644
--- a/src/corelib/codecs/qsjiscodec.cpp
+++ b/src/corelib/codecs/qsjiscodec.cpp
@@ -73,7 +73,7 @@ QSjisCodec::QSjisCodec() : conv(QJpUnicodeConv::newConverter(QJpUnicodeConv::Def
*/
QSjisCodec::~QSjisCodec()
{
- delete (QJpUnicodeConv*)conv;
+ delete (const QJpUnicodeConv*)conv;
conv = 0;
}
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index c6d5c7388d..c55f93b949 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -993,7 +993,7 @@ QString QTextDecoder::toUnicode(const char *chars, int len)
}
// in qstring.cpp:
-void qt_from_latin1(ushort *dst, const char *str, size_t size);
+void qt_from_latin1(ushort *dst, const char *str, size_t size) Q_DECL_NOTHROW;
/*! \overload
@@ -1155,7 +1155,6 @@ QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)
function returns 0 (the default), tr() assumes Latin-1.
*/
-
/*!
\internal
\since 4.3
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index 1d5e25efcc..3e73872d64 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -88,7 +88,7 @@ public:
struct Q_CORE_EXPORT ConverterState {
ConverterState(ConversionFlags f = DefaultConversion)
- : flags(f), remainingChars(0), invalidChars(0), d(0) { state_data[0] = state_data[1] = state_data[2] = 0; }
+ : flags(f), remainingChars(0), invalidChars(0), d(Q_NULLPTR) { state_data[0] = state_data[1] = state_data[2] = 0; }
~ConverterState();
ConversionFlags flags;
int remainingChars;
@@ -99,9 +99,9 @@ public:
Q_DISABLE_COPY(ConverterState)
};
- QString toUnicode(const char *in, int length, ConverterState *state = 0) const
+ QString toUnicode(const char *in, int length, ConverterState *state = Q_NULLPTR) const
{ return convertToUnicode(in, length, state); }
- QByteArray fromUnicode(const QChar *in, int length, ConverterState *state = 0) const
+ QByteArray fromUnicode(const QChar *in, int length, ConverterState *state = Q_NULLPTR) const
{ return convertFromUnicode(in, length, state); }
QTextDecoder* makeDecoder(ConversionFlags flags = DefaultConversion) const;
diff --git a/src/corelib/codecs/qutfcodec.cpp b/src/corelib/codecs/qutfcodec.cpp
index a33c1bc9ce..476990fb7a 100644
--- a/src/corelib/codecs/qutfcodec.cpp
+++ b/src/corelib/codecs/qutfcodec.cpp
@@ -296,7 +296,6 @@ QString QUtf8::convertToUnicode(const char *chars, int len, QTextCodec::Converte
{
bool headerdone = false;
ushort replacement = QChar::ReplacementCharacter;
- int need = 0;
int invalid = 0;
int res;
uchar ch = 0;
@@ -311,7 +310,7 @@ QString QUtf8::convertToUnicode(const char *chars, int len, QTextCodec::Converte
// 1 of 2 bytes invalid continuation +1 (need to insert replacement and restart)
// 2 of 3 bytes same +1 (same)
// 3 of 4 bytes same +1 (same)
- QString result(need + len + 1, Qt::Uninitialized);
+ QString result(len + 1, Qt::Uninitialized);
ushort *dst = reinterpret_cast<ushort *>(const_cast<QChar *>(result.constData()));
const uchar *src = reinterpret_cast<const uchar *>(chars);
diff --git a/src/corelib/codecs/qutfcodec_p.h b/src/corelib/codecs/qutfcodec_p.h
index 99887352c9..d97145c6fc 100644
--- a/src/corelib/codecs/qutfcodec_p.h
+++ b/src/corelib/codecs/qutfcodec_p.h
@@ -217,8 +217,6 @@ namespace QUtf8Functions
return Traits::Error;
if (bytesAvailable > 1 && !isContinuationByte(Traits::peekByte(src, 1)))
return Traits::Error;
- if (bytesAvailable > 2 && !isContinuationByte(Traits::peekByte(src, 2)))
- return Traits::Error;
return Traits::EndOfString;
}
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index 2d78041752..5cd0bde87b 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -13,9 +13,6 @@ irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
CONFIG += optimize_full
-# otherwise mingw headers do not declare common functions like putenv
-mingw:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
-
QMAKE_DOCS = $$PWD/doc/qtcore.qdocconf
ANDROID_JAR_DEPENDENCIES = \
@@ -48,6 +45,9 @@ include(statemachine/statemachine.pri)
include(mimetypes/mimetypes.pri)
include(xml/xml.pri)
+# otherwise mingw headers do not declare common functions like putenv
+mingw: CONFIG -= strict_c++
+
mac|darwin {
!ios {
LIBS_PRIVATE += -framework ApplicationServices
diff --git a/src/corelib/doc/qtcore.qdocconf b/src/corelib/doc/qtcore.qdocconf
index 3d64708def..e98f06d47d 100644
--- a/src/corelib/doc/qtcore.qdocconf
+++ b/src/corelib/doc/qtcore.qdocconf
@@ -4,7 +4,7 @@ project = QtCore
description = Qt Core Reference Documentation
version = $QT_VERSION
-examplesinstallpath = corelib
+examplesinstallpath = qtbase/corelib
qhp.projects = QtCore
diff --git a/src/corelib/doc/snippets/code/doc_src_containers.cpp b/src/corelib/doc/snippets/code/doc_src_containers.cpp
index 00971d69b9..395e48bc89 100644
--- a/src/corelib/doc/snippets/code/doc_src_containers.cpp
+++ b/src/corelib/doc/snippets/code/doc_src_containers.cpp
@@ -176,7 +176,7 @@ QMap<int, int> map;
...
QMap<int, int>::const_iterator i;
for (i = map.constBegin(); i != map.constEnd(); ++i)
- qDebug() << i.key() << ":" << i.value();
+ qDebug() << i.key() << ':' << i.value();
//! [13]
@@ -236,7 +236,7 @@ foreach (const QString &str, list) {
QMap<QString, int> map;
...
foreach (const QString &str, map.keys())
- qDebug() << str << ":" << map.value(str);
+ qDebug() << str << ':' << map.value(str);
//! [19]
@@ -245,7 +245,7 @@ QMultiMap<QString, int> map;
...
foreach (const QString &str, map.uniqueKeys()) {
foreach (int i, map.values(str))
- qDebug() << str << ":" << i;
+ qDebug() << str << ':' << i;
}
//! [20]
diff --git a/src/corelib/doc/snippets/code/src_corelib_codecs_qtextcodec.cpp b/src/corelib/doc/snippets/code/src_corelib_codecs_qtextcodec.cpp
index e2cf761ff8..eacc94b19f 100644
--- a/src/corelib/doc/snippets/code/src_corelib_codecs_qtextcodec.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_codecs_qtextcodec.cpp
@@ -63,13 +63,3 @@ while (new_data_available()) {
}
delete decoder;
//! [2]
-
-
-//! [3]
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- QTextCodec::setCodecForTr(QTextCodec::codecForName("eucKR"));
- ...
-}
-//! [3]
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp
index b0048014a4..8846437b7c 100644
--- a/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp
@@ -418,17 +418,17 @@ QString example = tr("Example");
//! [40]
//! [41]
-QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildOnly);
+QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildrenOnly);
//! [41]
//! [42]
-QListWidget *list = parentWidget->findChild<QListWidget *>(QString(), Qt::FindDirectChildOnly);
+QListWidget *list = parentWidget->findChild<QListWidget *>(QString(), Qt::FindDirectChildrenOnly);
//! [42]
//! [43]
-QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(QString(), Qt::FindDirectChildOnly);
+QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(QString(), Qt::FindDirectChildrenOnly);
//! [43]
//! [44]
@@ -486,6 +486,33 @@ QObject::connect(socket, &QTcpSocket::connected, this, [=] () {
}, Qt::AutoConnection);
//! [51]
+//! [52]
+class MyClass : public QWidget
+{
+ Q_OBJECT
+
+public:
+ MyClass(QWidget *parent = 0);
+ ~MyClass();
+
+ bool event(QEvent* ev)
+ {
+ if (ev->type() == QEvent::PolishRequest) {
+ // overwrite handling of PolishRequest if any
+ doThings();
+ return true;
+ } else if (ev->type() == QEvent::Show) {
+ // complement handling of Show if any
+ doThings2();
+ QWidget::event(ev);
+ return true;
+ }
+ // Make sure the rest of events are handled
+ return QWidget::event(ev);
+ }
+};
+//! [52]
+
//! [meta data]
//: This is a comment for the translator.
//= qtn_foo_bar
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp
index 43d64fc08e..0976488a48 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp
@@ -220,7 +220,7 @@ for (i = hash.begin(); i != hash.end(); ++i)
//! [19]
QHash<QString, int>::iterator i = hash.begin();
while (i != hash.end()) {
- if (i.key().startsWith("_"))
+ if (i.key().startsWith('_'))
i = hash.erase(i);
else
++i;
@@ -233,7 +233,7 @@ QHash<QString, int>::iterator i = hash.begin();
while (i != hash.end()) {
QHash<QString, int>::iterator prev = i;
++i;
- if (prev.key().startsWith("_"))
+ if (prev.key().startsWith('_'))
hash.erase(prev);
}
//! [20]
@@ -242,7 +242,7 @@ while (i != hash.end()) {
//! [21]
// WRONG
while (i != hash.end()) {
- if (i.key().startsWith("_"))
+ if (i.key().startsWith('_'))
hash.erase(i);
++i;
}
@@ -298,6 +298,25 @@ while (i != hash.end() && i.key() == "plenty") {
}
//! [26]
+//! [27]
+for (QHash<int, QString>::const_iterator it = hash.cbegin(), end = hash.cend(); it != end; ++it) {
+ cout << "The key: " << it.key() << endl
+ cout << "The value: " << it.value() << endl;
+ cout << "Also the value: " << (*it) << endl;
+}
+//! [27]
+
+//! [28]
+// Inefficient, keys() is expensive
+QList<int> keys = hash.keys();
+int numPrimes = std::count_if(keys.cbegin(), keys.cend(), isPrimeNumber);
+qDeleteAll(hash2.keys());
+
+// Efficient, no memory allocation needed
+int numPrimes = std::count_if(hash.keyBegin(), hash.keyEnd(), isPrimeNumber);
+qDeleteAll(hash2.keyBegin(), hash2.keyEnd());
+//! [28]
+
//! [qhashbits]
inline uint qHash(const std::vector<int> &key, uint seed = 0)
{
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qlinkedlist.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qlinkedlist.cpp
index 014af8b0ee..f1cf644df6 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qlinkedlist.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qlinkedlist.cpp
@@ -128,7 +128,7 @@ QLinkedList<QString> list;
...
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
- if ((*i).startsWith("_"))
+ if ((*i).startsWith('_'))
i = list.erase(i);
else
++i;
@@ -141,7 +141,7 @@ QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
QLinkedList<QString>::iterator previous = i;
++i;
- if ((*previous).startsWith("_"))
+ if ((*previous).startsWith('_'))
list.erase(previous);
}
//! [11]
@@ -150,7 +150,7 @@ while (i != list.end()) {
//! [12]
// WRONG
while (i != list.end()) {
- if ((*i).startsWith("_"))
+ if ((*i).startsWith('_'))
list.erase(i);
++i;
}
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qmap.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qmap.cpp
index 7580b6bbaf..3241991129 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qmap.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qmap.cpp
@@ -234,7 +234,7 @@ for (i = map.begin(); i != map.end(); ++i)
//! [20]
QMap<QString, int>::iterator i = map.begin();
while (i != map.end()) {
- if (i.key().startsWith("_"))
+ if (i.key().startsWith('_'))
i = map.erase(i);
else
++i;
@@ -247,7 +247,7 @@ QMap<QString, int>::iterator i = map.begin();
while (i != map.end()) {
QMap<QString, int>::iterator prev = i;
++i;
- if (prev.key().startsWith("_"))
+ if (prev.key().startsWith('_'))
map.erase(prev);
}
//! [21]
@@ -256,7 +256,7 @@ while (i != map.end()) {
//! [22]
// WRONG
while (i != map.end()) {
- if (i.key().startsWith("_"))
+ if (i.key().startsWith('_'))
map.erase(i);
++i;
}
@@ -311,3 +311,22 @@ while (i != map.end() && i.key() == "plenty") {
++i;
}
//! [27]
+
+//! [keyiterator1]
+for (QMap<int, QString>::const_iterator it = map.cbegin(), end = map.cend(); it != end; ++it) {
+ cout << "The key: " << it.key() << endl
+ cout << "The value: " << it.value() << endl;
+ cout << "Also the value: " << (*it) << endl;
+}
+//! [keyiterator1]
+
+//! [keyiterator2]
+// Inefficient, keys() is expensive
+QList<int> keys = map.keys();
+int numPrimes = std::count_if(map.cbegin(), map.cend(), isPrimeNumber);
+qDeleteAll(map2.keys());
+
+// Efficient, no memory allocation needed
+int numPrimes = std::count_if(map.keyBegin(), map.keyEnd(), isPrimeNumber);
+qDeleteAll(map2.keyBegin(), map2.keyEnd());
+//! [keyiterator2]
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qvector.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qvector.cpp
index 77b34c95fc..5def361b83 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qvector.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qvector.cpp
@@ -84,14 +84,27 @@ for (int i = 0; i < 10; ++i)
//! [7]
-QVector<QString> vector(0);
+QVector<QString> vector;
vector.append("one");
vector.append("two");
-vector.append("three");
+QString three = "three";
+vector.append(three);
// vector: ["one", "two", "three"]
+// three: "three"
//! [7]
+//! [move-append]
+QVector<QString> vector;
+vector.append("one");
+vector.append("two");
+QString three = "three";
+vector.append(std::move(three));
+// vector: ["one", "two", "three"]
+// three: ""
+//! [move-append]
+
+
//! [8]
QVector<QString> vector;
vector.prepend("one");
diff --git a/src/corelib/doc/snippets/qstring/main.cpp b/src/corelib/doc/snippets/qstring/main.cpp
index e03e705a0b..07ff9301bf 100644
--- a/src/corelib/doc/snippets/qstring/main.cpp
+++ b/src/corelib/doc/snippets/qstring/main.cpp
@@ -408,12 +408,12 @@ void Widget::firstIndexOfFunction()
str.indexOf(QRegularExpression("m[aeiou]"), 0); // returns 4
//! [93]
- //! [97]
+ //! [99]
QString str = "the minimum";
QRegularExpressionMatch match;
str.indexOf(QRegularExpression("m[aeiou]"), 0, &match); // returns 4
// match.captured() == mi
- //! [97]
+ //! [99]
}
void Widget::insertFunction()
@@ -465,12 +465,12 @@ void Widget::lastIndexOfFunction()
str.lastIndexOf(QRegularExpression("m[aeiou]")); // returns 8
//! [94]
- //! [98]
+ //! [100]
QString str = "the minimum";
QRegularExpressionMatch match;
str.lastIndexOf(QRegularExpression("m[aeiou]"), -1, &match); // returns 8
// match.captured() == mu
- //! [98]
+ //! [100]
}
void Widget::leftFunction()
@@ -777,10 +777,10 @@ void Widget::splitCaseSensitiveFunction()
//! [62]
QString str = "a,,b,c";
- QStringList list1 = str.split(",");
+ QStringList list1 = str.split(',');
// list1: [ "a", "", "b", "c" ]
- QStringList list2 = str.split(",", QString::SkipEmptyParts);
+ QStringList list2 = str.split(',', QString::SkipEmptyParts);
// list2: [ "a", "b", "c" ]
//! [62]
}
diff --git a/src/corelib/doc/snippets/qstringlist/main.cpp b/src/corelib/doc/snippets/qstringlist/main.cpp
index 64f2061786..04d4dc8a89 100644
--- a/src/corelib/doc/snippets/qstringlist/main.cpp
+++ b/src/corelib/doc/snippets/qstringlist/main.cpp
@@ -82,7 +82,7 @@ Widget::Widget(QWidget *parent)
//! [5] //! [6]
QStringList list;
//! [5]
- list = str.split(",");
+ list = str.split(',');
// list: ["Arial", "Helvetica", "Times", "Courier"]
//! [6]
diff --git a/src/corelib/doc/src/containers.qdoc b/src/corelib/doc/src/containers.qdoc
index f8d0d3eb05..0ae3817ac7 100644
--- a/src/corelib/doc/src/containers.qdoc
+++ b/src/corelib/doc/src/containers.qdoc
@@ -169,8 +169,8 @@
convenience, the containers are forward declared in \c
<QtContainerFwd>.
- \keyword assignable data type
- \keyword assignable data types
+ \target assignable data type
+ \target assignable data types
The values stored in the various containers can be of any
\e{assignable data type}. To qualify, a type must provide a
@@ -220,7 +220,7 @@
\codeline
\snippet streaming/main.cpp 2
- \keyword default-constructed value
+ \target default-constructed value
The documentation of certain container class functions refer to
\e{default-constructed values}; for example, QVector
@@ -546,7 +546,7 @@
The above example only shows a problem with QVector, but
the problem exists for all the implicitly shared Qt containers.
- \keyword foreach
+ \target foreach
\section1 The foreach Keyword
If you just want to iterate over all the items in a container
@@ -655,11 +655,11 @@
To describe algorithmic complexity, we use the following
terminology, based on the "big Oh" notation:
- \keyword constant time
- \keyword logarithmic time
- \keyword linear time
- \keyword linear-logarithmic time
- \keyword quadratic time
+ \target constant time
+ \target logarithmic time
+ \target linear time
+ \target linear-logarithmic time
+ \target quadratic time
\list
\li \b{Constant time:} O(1). A function is said to run in constant
diff --git a/src/corelib/doc/src/eventsandfilters.qdoc b/src/corelib/doc/src/eventsandfilters.qdoc
index a4710eb288..99a40bb1b8 100644
--- a/src/corelib/doc/src/eventsandfilters.qdoc
+++ b/src/corelib/doc/src/eventsandfilters.qdoc
@@ -100,7 +100,7 @@
event delivery mechanisms are flexible. The documentation for
QCoreApplication::notify() concisely tells the whole story; the
\e{Qt Quarterly} article
- \l{http://doc.qt.digia.com/qq/qq11-events.html}{Another Look at Events}
+ \l{http://doc.qt.io/archives/qq/qq11-events.html}{Another Look at Events}
rehashes it less concisely. Here we will explain enough for 95%
of applications.
diff --git a/src/corelib/doc/src/external-resources.qdoc b/src/corelib/doc/src/external-resources.qdoc
index ec4715c933..3d01b9ee2d 100644
--- a/src/corelib/doc/src/external-resources.qdoc
+++ b/src/corelib/doc/src/external-resources.qdoc
@@ -57,12 +57,11 @@
*/
/*!
- \externalpage http://doc-snapshot.qt-project.org/qt5-5.4/qtdesigner-manual.html
- \title Using a Designer UI File in Your Application
+ \externalpage http://marcmutz.wordpress.com/effective-qt/containers/#containers-qlist
+ \title Pros and Cons of Using QList
*/
/*!
- \externalpage http://doc-snapshot.qt-project.org/qt5-5.4/designer-widget-mode.html#the-property-editor
- \title Qt Designer's Widget Editing Mode#The Property Editor
-*/
+ \externalpage http://marcmutz.wordpress.com/effective-qt/containers/
+ \title Understand the Qt Containers
*/
diff --git a/src/corelib/doc/src/implicit-sharing.qdoc b/src/corelib/doc/src/implicit-sharing.qdoc
index 57ebf55c17..d5a8e327ac 100644
--- a/src/corelib/doc/src/implicit-sharing.qdoc
+++ b/src/corelib/doc/src/implicit-sharing.qdoc
@@ -71,8 +71,8 @@
data. The shared data is deleted when the reference count becomes
zero.
- \keyword deep copy
- \keyword shallow copy
+ \target deep copy
+ \target shallow copy
When dealing with shared objects, there are two ways of copying an
object. We usually speak about \e deep and \e shallow copies. A deep
@@ -142,6 +142,6 @@
(QMap, QVector, etc.) while you use
\l{STL-style iterators}{STL-style iterator}. See \l{Implicit sharing iterator problem}.
- \keyword implicitly shared classes
+ \target implicitly shared classes
\annotatedlist shared
*/
diff --git a/src/corelib/doc/src/objectmodel/metaobjects.qdoc b/src/corelib/doc/src/objectmodel/metaobjects.qdoc
index a482c5cc8b..52c134c517 100644
--- a/src/corelib/doc/src/objectmodel/metaobjects.qdoc
+++ b/src/corelib/doc/src/objectmodel/metaobjects.qdoc
@@ -32,7 +32,7 @@
\ingroup qt-basic-concepts
\keyword meta-object
- \target Meta-Object System
+ \keyword Meta-Object System
Qt's meta-object system provides the signals and slots mechanism for
inter-object communication, run-time type information, and the dynamic
diff --git a/src/corelib/doc/src/objectmodel/properties.qdoc b/src/corelib/doc/src/objectmodel/properties.qdoc
index abb0720fe9..28be328e3a 100644
--- a/src/corelib/doc/src/objectmodel/properties.qdoc
+++ b/src/corelib/doc/src/objectmodel/properties.qdoc
@@ -31,7 +31,7 @@
\brief An overview of Qt's property system.
\ingroup qt-basic-concepts
- \target Qt's Property System
+ \keyword Qt's Property System
Qt provides a sophisticated property system similar to the ones
supplied by some compiler vendors. However, as a compiler- and
@@ -160,13 +160,8 @@
Because QDate is user-defined, you must include the \c{<QDate>}
header file with the property declaration.
- For QMap, QList, and QValueList properties, the property value is
- a QVariant whose value is the entire list or map. Note that the
- Q_PROPERTY string cannot contain commas, because commas separate
- macro arguments. Therefore, you must use \c QMap as the property
- type instead of \c QMap<QString,QVariant>. For consistency, also
- use \c QList and \c QValueList instead of \c QList<QVariant> and
- \c QValueList<QVariant>.
+ For historical reasons, \a QMap and \a QList as property types
+ are synonym of \a QVariantMap and \a QVariantList.
\section1 Reading and Writing Properties with the Meta-Object System
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 6a8104bee2..aa4945f90e 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -17,7 +17,8 @@ HEADERS += \
global/qisenum.h \
global/qtypetraits.h \
global/qflags.h \
- global/qhooks_p.h
+ global/qhooks_p.h \
+ global/qversiontagging.h
SOURCES += \
global/archdetect.cpp \
@@ -27,7 +28,8 @@ SOURCES += \
global/qmalloc.cpp \
global/qnumeric.cpp \
global/qlogging.cpp \
- global/qhooks.cpp
+ global/qhooks.cpp \
+ global/qversiontagging.cpp
# qlibraryinfo.cpp includes qconfig.cpp
INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global
@@ -54,3 +56,7 @@ journald {
PKGCONFIG_PRIVATE += libsystemd-journal
DEFINES += QT_USE_JOURNALD
}
+
+syslog {
+ DEFINES += QT_USE_SYSLOG
+}
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index 9f79b3e70c..ba830977ad 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -914,6 +914,13 @@
//# define Q_COMPILER_UNIFORM_INIT
# define Q_COMPILER_UNRESTRICTED_UNIONS
# endif
+# if _MSC_FULL_VER >= 190023419
+# define Q_COMPILER_ATTRIBUTES
+// Almost working, see https://connect.microsoft.com/VisualStudio/feedback/details/2011648
+//# define Q_COMPILER_CONSTEXPR
+# define Q_COMPILER_THREADSAFE_STATICS
+# define Q_COMPILER_UNIFORM_INIT
+# endif
# endif /* __cplusplus */
#endif /* Q_CC_MSVC */
@@ -922,24 +929,26 @@
# if defined(Q_OS_QNX)
// QNX: test if we are using libcpp (Dinkumware-based).
// Older versions (QNX 650) do not support C++11 features
-// _HAS_CPP0X is defined by toolchains that actually include
+// _HAS_* macros are set to 1 by toolchains that actually include
// Dinkum C++11 libcpp.
-# if defined(_HAS_DINKUM_CLIB) && !defined(_HAS_CPP0X)
+# if !__GLIBCXX__
+# if !_HAS_CPP0X
// Disable C++11 features that depend on library support
# undef Q_COMPILER_INITIALIZER_LISTS
# undef Q_COMPILER_RVALUE_REFS
# undef Q_COMPILER_REF_QUALIFIERS
# undef Q_COMPILER_UNICODE_STRINGS
# undef Q_COMPILER_NOEXCEPT
-# endif
-# if defined(_HAS_DINKUM_CLIB) && !defined(_HAS_NULLPTR_T)
+# endif // !_HAS_CPP0X
+# if !_HAS_NULLPTR_T
# undef Q_COMPILER_NULLPTR
-# endif
-# if defined(_HAS_DINKUM_CLIB) && !defined(_HAS_CONSTEXPR)
+# endif //!_HAS_NULLPTR_T
+# if !_HAS_CONSTEXPR
// The libcpp is missing constexpr keywords on important functions like std::numeric_limits<>::min()
// Disable constexpr support on QNX even if the compiler supports it
# undef Q_COMPILER_CONSTEXPR
-# endif
+# endif // !_HAS_CONSTEXPR
+# endif // !__GLIBCXX__
# endif // Q_OS_QNX
# if (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) && defined(Q_OS_MAC) && defined(__GNUC_LIBSTD__) \
&& ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402)
@@ -1143,7 +1152,7 @@
# define QT_WARNING_PUSH QT_DO_PRAGMA(clang diagnostic push)
# define QT_WARNING_POP QT_DO_PRAGMA(clang diagnostic pop)
# define QT_WARNING_DISABLE_CLANG(text) QT_DO_PRAGMA(clang diagnostic ignored text)
-# define QT_WARNING_DISABLE_GCC(text) QT_DO_PRAGMA(GCC diagnostic ignored text) // GCC directives work in Clang too
+# define QT_WARNING_DISABLE_GCC(text)
# define QT_WARNING_DISABLE_INTEL(number)
# define QT_WARNING_DISABLE_MSVC(number)
#elif defined(Q_CC_GNU) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h
index d3b9c3f5a7..f434e87c85 100644
--- a/src/corelib/global/qflags.h
+++ b/src/corelib/global/qflags.h
@@ -109,7 +109,7 @@ public:
inline QFlags &operator=(const QFlags &other);
#endif
Q_DECL_CONSTEXPR inline QFlags(Enum f) Q_DECL_NOTHROW : i(Int(f)) {}
- Q_DECL_CONSTEXPR inline QFlags(Zero = 0) Q_DECL_NOTHROW : i(0) {}
+ Q_DECL_CONSTEXPR inline QFlags(Zero = Q_NULLPTR) Q_DECL_NOTHROW : i(0) {}
Q_DECL_CONSTEXPR inline QFlags(QFlag f) Q_DECL_NOTHROW : i(f) {}
#ifdef Q_COMPILER_INITIALIZER_LISTS
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index b5bdcedaa1..e8c50dff2b 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -42,6 +42,7 @@
#include <private/qlocale_tools_p.h>
#include <private/qsystemlibrary_p.h>
+#include <qmutex.h>
#ifndef QT_NO_QOBJECT
#include <private/qthread_p.h>
@@ -64,14 +65,14 @@
# endif
#endif
+#ifdef Q_OS_WINRT
+#include <Ws2tcpip.h>
+#endif // Q_OS_WINRT
+
#if defined(Q_OS_VXWORKS) && defined(_WRS_KERNEL)
# include <envLib.h>
#endif
-#if defined(Q_OS_MACX)
-#include <CoreServices/CoreServices.h>
-#endif
-
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
#include <private/qjni_p.h>
#endif
@@ -89,6 +90,10 @@
#include <private/qcore_unix_p.h>
#endif
+#ifdef Q_OS_BSD4
+#include <sys/sysctl.h>
+#endif
+
#include "archdetect.cpp"
QT_BEGIN_NAMESPACE
@@ -105,7 +110,7 @@ Q_CORE_EXPORT void *qMemSet(void *dest, int c, size_t n);
// (if this list becomes too long, consider factoring into a separate file)
Q_STATIC_ASSERT_X(sizeof(int) == 4, "Qt assumes that int is 32 bits");
Q_STATIC_ASSERT_X(UCHAR_MAX == 255, "Qt assumes that char is 8 bits");
-
+Q_STATIC_ASSERT_X(QT_POINTER_SIZE == sizeof(void *), "QT_POINTER_SIZE defined incorrectly");
/*!
\class QFlag
@@ -1846,25 +1851,6 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include "qnamespace.h"
QT_END_INCLUDE_NAMESPACE
-#if defined(Q_OS_OSX)
-
-Q_CORE_EXPORT OSErr qt_mac_create_fsref(const QString &file, FSRef *fsref)
-{
- return FSPathMakeRef(reinterpret_cast<const UInt8 *>(file.toUtf8().constData()), fsref, 0);
-}
-
-Q_CORE_EXPORT void qt_mac_to_pascal_string(QString s, Str255 str, TextEncoding encoding=0, int len=-1)
-{
- Q_UNUSED(encoding);
- Q_UNUSED(len);
- CFStringGetPascalString(QCFString(s), str, 256, CFStringGetSystemEncoding());
-}
-
-Q_CORE_EXPORT QString qt_mac_from_pascal_string(const Str255 pstr) {
- return QCFString(CFStringCreateWithPascalString(0, pstr, CFStringGetSystemEncoding()));
-}
-#endif // defined(Q_OS_OSX)
-
QSysInfo::MacVersion QSysInfo::macVersion()
{
const QAppleOperatingSystemVersion version = qt_apple_os_version(); // qtcore_mac_objc.mm
@@ -1884,93 +1870,97 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include "qt_windows.h"
QT_END_INCLUDE_NAMESPACE
-#ifndef Q_OS_WINRT
-
-# ifndef Q_OS_WINCE
-
-// Determine Windows versions >= 8 by querying the version of kernel32.dll.
-static inline bool determineWinOsVersionPost8(OSVERSIONINFO *result)
+# ifndef QT_BOOTSTRAPPED
+class QWindowsSockInit
{
- typedef WORD (WINAPI* PtrGetFileVersionInfoSizeW)(LPCWSTR, LPDWORD);
- typedef BOOL (WINAPI* PtrVerQueryValueW)(LPCVOID, LPCWSTR, LPVOID, PUINT);
- typedef BOOL (WINAPI* PtrGetFileVersionInfoW)(LPCWSTR, DWORD, DWORD, LPVOID);
+public:
+ QWindowsSockInit();
+ ~QWindowsSockInit();
+ int version;
+};
- QSystemLibrary versionLib(QStringLiteral("version"));
- if (!versionLib.load())
- return false;
- PtrGetFileVersionInfoSizeW getFileVersionInfoSizeW = (PtrGetFileVersionInfoSizeW)versionLib.resolve("GetFileVersionInfoSizeW");
- PtrVerQueryValueW verQueryValueW = (PtrVerQueryValueW)versionLib.resolve("VerQueryValueW");
- PtrGetFileVersionInfoW getFileVersionInfoW = (PtrGetFileVersionInfoW)versionLib.resolve("GetFileVersionInfoW");
- if (!getFileVersionInfoSizeW || !verQueryValueW || !getFileVersionInfoW)
- return false;
+QWindowsSockInit::QWindowsSockInit()
+: version(0)
+{
+ //### should we try for 2.2 on all platforms ??
+ WSAData wsadata;
- const wchar_t kernel32Dll[] = L"kernel32.dll";
- DWORD handle;
- const DWORD size = getFileVersionInfoSizeW(kernel32Dll, &handle);
- if (!size)
- return false;
- QScopedArrayPointer<BYTE> versionInfo(new BYTE[size]);
- if (!getFileVersionInfoW(kernel32Dll, handle, size, versionInfo.data()))
- return false;
- UINT uLen;
- VS_FIXEDFILEINFO *fileInfo = Q_NULLPTR;
- if (!verQueryValueW(versionInfo.data(), L"\\", (LPVOID *)&fileInfo, &uLen))
- return false;
- const DWORD fileVersionMS = fileInfo->dwFileVersionMS;
- const DWORD fileVersionLS = fileInfo->dwFileVersionLS;
- result->dwMajorVersion = HIWORD(fileVersionMS);
- result->dwMinorVersion = LOWORD(fileVersionMS);
- result->dwBuildNumber = HIWORD(fileVersionLS);
- return true;
+ // IPv6 requires Winsock v2.0 or better.
+ if (WSAStartup(MAKEWORD(2,0), &wsadata) != 0) {
+ qWarning("QTcpSocketAPI: WinSock v2.0 initialization failed.");
+ } else {
+ version = 0x20;
+ }
}
-// Fallback for determining Windows versions >= 8 by looping using the
-// version check macros. Note that it will return build number=0 to avoid
-// inefficient looping.
-static inline void determineWinOsVersionFallbackPost8(OSVERSIONINFO *result)
+QWindowsSockInit::~QWindowsSockInit()
{
- result->dwBuildNumber = 0;
- DWORDLONG conditionMask = 0;
- VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
- VER_SET_CONDITION(conditionMask, VER_PLATFORMID, VER_EQUAL);
- OSVERSIONINFOEX checkVersion = { sizeof(OSVERSIONINFOEX), result->dwMajorVersion, 0,
- result->dwBuildNumber, result->dwPlatformId, {'\0'}, 0, 0, 0, 0, 0 };
- for ( ; VerifyVersionInfo(&checkVersion, VER_MAJORVERSION | VER_PLATFORMID, conditionMask); ++checkVersion.dwMajorVersion)
- result->dwMajorVersion = checkVersion.dwMajorVersion;
- conditionMask = 0;
- checkVersion.dwMajorVersion = result->dwMajorVersion;
- checkVersion.dwMinorVersion = 0;
- VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_EQUAL);
- VER_SET_CONDITION(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
- VER_SET_CONDITION(conditionMask, VER_PLATFORMID, VER_EQUAL);
- for ( ; VerifyVersionInfo(&checkVersion, VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID, conditionMask); ++checkVersion.dwMinorVersion)
- result->dwMinorVersion = checkVersion.dwMinorVersion;
+ WSACleanup();
}
+Q_GLOBAL_STATIC(QWindowsSockInit, winsockInit)
+# endif // QT_BOOTSTRAPPED
-# endif // !Q_OS_WINCE
+#ifdef Q_OS_WINRT
+static inline HMODULE moduleHandleForFunction(LPCVOID address)
+{
+ // This is a widely used, decades-old technique for retrieving the handle
+ // of a module and is effectively equivalent to GetModuleHandleEx
+ // (which is unavailable on WinRT)
+ MEMORY_BASIC_INFORMATION mbi = { 0, 0, 0, 0, 0, 0, 0 };
+ if (VirtualQuery(address, &mbi, sizeof(mbi)) == 0)
+ return 0;
+ return reinterpret_cast<HMODULE>(mbi.AllocationBase);
+}
+#endif
static inline OSVERSIONINFO winOsVersion()
{
OSVERSIONINFO result = { sizeof(OSVERSIONINFO), 0, 0, 0, 0, {'\0'}};
+
+#ifndef Q_OS_WINCE
+#define GetProcAddressA GetProcAddress
+#endif
+
+ // GetModuleHandle is not supported in WinRT and linking to it at load time
+ // will not pass the Windows App Certification Kit... but it exists and is functional,
+ // so use some unusual but widely used techniques to get a pointer to it
+#ifdef Q_OS_WINRT
+ // 1. Get HMODULE of kernel32.dll, using the address of some function exported by that DLL
+ HMODULE kernelModule = moduleHandleForFunction(reinterpret_cast<LPCVOID>(VirtualQuery));
+ if (Q_UNLIKELY(!kernelModule))
+ return result;
+
+ // 2. Get pointer to GetModuleHandle so we can then load other arbitrary modules (DLLs)
+ typedef HMODULE(WINAPI *GetModuleHandleFunction)(LPCWSTR);
+ GetModuleHandleFunction pGetModuleHandle = reinterpret_cast<GetModuleHandleFunction>(
+ GetProcAddressA(kernelModule, "GetModuleHandleW"));
+ if (Q_UNLIKELY(!pGetModuleHandle))
+ return result;
+#else
+#define pGetModuleHandle GetModuleHandleW
+#endif
+
+ HMODULE ntdll = pGetModuleHandle(L"ntdll.dll");
+ if (Q_UNLIKELY(!ntdll))
+ return result;
+
+ // NTSTATUS is not defined on WinRT
+ typedef LONG NTSTATUS;
+ typedef NTSTATUS (NTAPI *RtlGetVersionFunction)(LPOSVERSIONINFO);
+
+ // RtlGetVersion is documented public API but we must load it dynamically
+ // because linking to it at load time will not pass the Windows App Certification Kit
+ // https://msdn.microsoft.com/en-us/library/windows/hardware/ff561910.aspx
+ RtlGetVersionFunction pRtlGetVersion = reinterpret_cast<RtlGetVersionFunction>(
+ GetProcAddressA(ntdll, "RtlGetVersion"));
+ if (Q_UNLIKELY(!pRtlGetVersion))
+ return result;
+
// GetVersionEx() has been deprecated in Windows 8.1 and will return
- // only Windows 8 from that version on.
-# if defined(_MSC_VER) && _MSC_VER >= 1800
-# pragma warning( push )
-# pragma warning( disable : 4996 )
-# endif
- GetVersionEx(&result);
-# if defined(_MSC_VER) && _MSC_VER >= 1800
-# pragma warning( pop )
-# endif
-# ifndef Q_OS_WINCE
- if (result.dwMajorVersion == 6 && result.dwMinorVersion == 2) {
- if (!determineWinOsVersionPost8(&result))
- determineWinOsVersionFallbackPost8(&result);
- }
-# endif // !Q_OS_WINCE
+ // only Windows 8 from that version on, so use the kernel API function.
+ pRtlGetVersion(&result); // always returns STATUS_SUCCESS
return result;
}
-#endif // !Q_OS_WINRT
QSysInfo::WinVersion QSysInfo::windowsVersion()
{
@@ -1990,11 +1980,10 @@ QSysInfo::WinVersion QSysInfo::windowsVersion()
static QSysInfo::WinVersion winver;
if (winver)
return winver;
-#ifdef Q_OS_WINRT
- winver = QSysInfo::WV_WINDOWS8_1;
-#else
winver = QSysInfo::WV_NT;
const OSVERSIONINFO osver = winOsVersion();
+ if (osver.dwMajorVersion == 0)
+ return QSysInfo::WV_None;
#ifdef Q_OS_WINCE
DWORD qt_cever = 0;
qt_cever = osver.dwMajorVersion * 100;
@@ -2074,7 +2063,6 @@ QSysInfo::WinVersion QSysInfo::windowsVersion()
}
}
#endif
-#endif // !Q_OS_WINRT
return winver;
}
@@ -2545,10 +2533,7 @@ QString QSysInfo::kernelType()
*/
QString QSysInfo::kernelVersion()
{
-#ifdef Q_OS_WINRT
- // TBD
- return QString();
-#elif defined(Q_OS_WIN)
+#ifdef Q_OS_WIN
const OSVERSIONINFO osver = winOsVersion();
return QString::number(int(osver.dwMajorVersion)) + QLatin1Char('.') + QString::number(int(osver.dwMinorVersion))
+ QLatin1Char('.') + QString::number(int(osver.dwBuildNumber));
@@ -2774,6 +2759,46 @@ QString QSysInfo::prettyProductName()
return unknownText();
}
+#ifndef QT_BOOTSTRAPPED
+/*!
+ \since 5.6
+
+ Returns this machine's host name, if one is configured. Note that hostnames
+ are not guaranteed to be globally unique, especially if they were
+ configured automatically.
+
+ This function does not guarantee the returned host name is a Fully
+ Qualified Domain Name (FQDN). For that, use QHostInfo to resolve the
+ returned name to an FQDN.
+
+ This function returns the same as QHostInfo::localHostName().
+
+ \sa QHostInfo::localDomainName
+ */
+QString QSysInfo::machineHostName()
+{
+#if defined(Q_OS_LINUX)
+ // gethostname(3) on Linux just calls uname(2), so do it ourselves
+ // and avoid a memcpy
+ struct utsname u;
+ if (uname(&u) == 0)
+ return QString::fromLocal8Bit(u.nodename);
+#else
+# ifdef Q_OS_WIN
+ // Important: QtNetwork depends on machineHostName() initializing ws2_32.dll
+ winsockInit();
+# endif
+
+ char hostName[512];
+ if (gethostname(hostName, sizeof(hostName)) == -1)
+ return QString();
+ hostName[sizeof(hostName) - 1] = '\0';
+ return QString::fromLocal8Bit(hostName);
+#endif
+ return QString();
+}
+#endif // QT_BOOTSTRAPPED
+
/*!
\macro void Q_ASSERT(bool test)
\relates <QtGlobal>
@@ -2885,12 +2910,15 @@ QString QSysInfo::prettyProductName()
\macro void Q_CHECK_PTR(void *pointer)
\relates <QtGlobal>
- If \a pointer is 0, prints a warning message containing the source
+ If \a pointer is 0, prints a message containing the source
code's file name and line number, saying that the program ran out
- of memory.
+ of memory and aborts program execution. It throws \c std::bad_alloc instead
+ if exceptions are enabled.
- Q_CHECK_PTR does nothing if \c QT_NO_DEBUG was defined during
- compilation.
+ Q_CHECK_PTR does nothing if \c QT_NO_DEBUG and \c QT_NO_EXCEPTIONS were
+ defined during compilation. Therefore you must not use Q_CHECK_PTR to check
+ for successful memory allocations because the check will be disabled in
+ some cases.
Example:
@@ -3020,7 +3048,7 @@ namespace {
// depending on the return type
static inline Q_DECL_UNUSED QString fromstrerror_helper(int, const QByteArray &buf)
{
- return QString::fromLocal8Bit(buf);
+ return QString::fromLocal8Bit(buf.constData());
}
static inline Q_DECL_UNUSED QString fromstrerror_helper(const char *str, const QByteArray &)
{
@@ -3098,6 +3126,10 @@ QString qt_error_string(int errorCode)
return ret.trimmed();
}
+// In the C runtime on all platforms access to the environment is not thread-safe. We
+// add thread-safety for the Qt wrappers.
+static QBasicMutex environmentMutex;
+
// getenv is declared as deprecated in VS2005. This function
// makes use of the new secure getenv function.
/*!
@@ -3115,6 +3147,7 @@ QString qt_error_string(int errorCode)
*/
QByteArray qgetenv(const char *varName)
{
+ QMutexLocker locker(&environmentMutex);
#if defined(_MSC_VER) && _MSC_VER >= 1400
size_t requiredSize = 0;
QByteArray buffer;
@@ -3148,6 +3181,7 @@ QByteArray qgetenv(const char *varName)
*/
bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT
{
+ QMutexLocker locker(&environmentMutex);
#if defined(_MSC_VER) && _MSC_VER >= 1400
// we provide a buffer that can only hold the empty string, so
// when the env.var isn't empty, we'll get an ERANGE error (buffer
@@ -3179,6 +3213,7 @@ bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT
*/
int qEnvironmentVariableIntValue(const char *varName, bool *ok) Q_DECL_NOEXCEPT
{
+ QMutexLocker locker(&environmentMutex);
#if defined(_MSC_VER) && _MSC_VER >= 1400
// we provide a buffer that can hold any int value:
static const int NumBinaryDigitsPerOctalDigit = 3;
@@ -3227,6 +3262,7 @@ int qEnvironmentVariableIntValue(const char *varName, bool *ok) Q_DECL_NOEXCEPT
*/
bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT
{
+ QMutexLocker locker(&environmentMutex);
#if defined(_MSC_VER) && _MSC_VER >= 1400
size_t requiredSize = 0;
(void)getenv_s(&requiredSize, 0, 0, varName);
@@ -3256,6 +3292,7 @@ bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT
*/
bool qputenv(const char *varName, const QByteArray& value)
{
+ QMutexLocker locker(&environmentMutex);
#if defined(_MSC_VER) && _MSC_VER >= 1400
return _putenv_s(varName, value.constData()) == 0;
#elif (defined(_POSIX_VERSION) && (_POSIX_VERSION-0) >= 200112L) || defined(Q_OS_HAIKU)
@@ -3286,6 +3323,7 @@ bool qputenv(const char *varName, const QByteArray& value)
*/
bool qunsetenv(const char *varName)
{
+ QMutexLocker locker(&environmentMutex);
#if defined(_MSC_VER) && _MSC_VER >= 1400
return _putenv_s(varName, "") == 0;
#elif (defined(_POSIX_VERSION) && (_POSIX_VERSION-0) >= 200112L) || defined(Q_OS_BSD4) || defined(Q_OS_HAIKU)
@@ -3749,7 +3787,8 @@ int qrand()
independent copy of the object.
\li \c Q_MOVABLE_TYPE specifies that \a Type has a constructor
and/or a destructor but can be moved in memory using \c
- memcpy().
+ memcpy(). Note: despite the name, this has nothing to do with move
+ constructors or C++ move semantics.
\li \c Q_COMPLEX_TYPE (the default) specifies that \a Type has
constructors and/or a destructor and that it may not be moved
in memory.
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 97c5f37cab..2551dcb5d3 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -41,11 +41,10 @@
#include <stddef.h>
-#define QT_VERSION_STR "5.5.1"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/
-#define QT_VERSION 0x050501
+#define QT_VERSION QT_VERSION_CHECK(QT_VERSION_MAJOR, QT_VERSION_MINOR, QT_VERSION_PATCH)
/*
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
@@ -55,6 +54,7 @@
#include <QtCore/qconfig.h>
#include <QtCore/qfeatures.h>
#endif
+
#ifdef _MSC_VER
# define QT_SUPPORTS(FEATURE) (!defined QT_NO_##FEATURE)
#else
@@ -193,18 +193,6 @@ typedef unsigned long long quint64; /* 64 bit unsigned */
typedef qint64 qlonglong;
typedef quint64 qulonglong;
-#ifndef QT_POINTER_SIZE
-# if defined(Q_OS_WIN64) || (defined(Q_OS_WINRT) && defined(_M_X64))
-# define QT_POINTER_SIZE 8
-# elif defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_WINRT)
-# define QT_POINTER_SIZE 4
-# elif defined(Q_OS_ANDROID)
-# define QT_POINTER_SIZE 4 // ### Add auto-detection to Windows configure
-# elif !defined(QT_BOOTSTRAPPED)
-# error could not determine QT_POINTER_SIZE
-# endif
-#endif
-
/*
Useful type definitions for Qt
*/
@@ -322,6 +310,15 @@ typedef double qreal;
#endif
/*
+ Some classes do not permit copies to be made of an object. These
+ classes contains a private copy constructor and assignment
+ operator to disable copying (the compiler gives an error message).
+*/
+#define Q_DISABLE_COPY(Class) \
+ Class(const Class &) Q_DECL_EQ_DELETE;\
+ Class &operator=(const Class &) Q_DECL_EQ_DELETE;
+
+/*
No, this is not an evil backdoor. QT_BUILD_INTERNAL just exports more symbols
for Qt's internal unit tests. If you want slower loading times and more
symbols that can vanish from version to version, feel free to define QT_BUILD_INTERNAL.
@@ -439,6 +436,9 @@ template <> struct QIntegerForSize<1> { typedef quint8 Unsigned; typedef qin
template <> struct QIntegerForSize<2> { typedef quint16 Unsigned; typedef qint16 Signed; };
template <> struct QIntegerForSize<4> { typedef quint32 Unsigned; typedef qint32 Signed; };
template <> struct QIntegerForSize<8> { typedef quint64 Unsigned; typedef qint64 Signed; };
+#if defined(Q_CC_GNU) && defined(__SIZEOF_INT128__)
+template <> struct QIntegerForSize<16> { __extension__ typedef unsigned __int128 Unsigned; __extension__ typedef __int128 Signed; };
+#endif
template <class T> struct QIntegerForSizeof: QIntegerForSize<sizeof(T)> { };
typedef QIntegerForSize<Q_PROCESSOR_WORDSIZE>::Signed qregisterint;
typedef QIntegerForSize<Q_PROCESSOR_WORDSIZE>::Unsigned qregisteruint;
@@ -487,10 +487,13 @@ typedef qptrdiff qintptr;
#ifdef Q_CC_MSVC
# define Q_NEVER_INLINE __declspec(noinline)
+# define Q_ALWAYS_INLINE __forceinline
#elif defined(Q_CC_GNU)
# define Q_NEVER_INLINE __attribute__((noinline))
+# define Q_ALWAYS_INLINE inline __attribute__((always_inline))
#else
# define Q_NEVER_INLINE
+# define Q_ALWAYS_INLINE inline
#endif
//defines the type for the WNDPROC on windows
@@ -543,7 +546,21 @@ 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
+#ifndef Q_FORWARD_DECLARE_OBJC_CLASS
+# ifdef __OBJC__
+# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) @class classname
+# else
+# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) typedef struct objc_object classname
+# endif
+#endif
+#ifndef Q_FORWARD_DECLARE_CF_TYPE
+# define Q_FORWARD_DECLARE_CF_TYPE(type) typedef const struct __ ## type * type ## Ref
+#endif
+#ifndef Q_FORWARD_DECLARE_MUTABLE_CF_TYPE
+# define Q_FORWARD_DECLARE_MUTABLE_CF_TYPE(type) typedef struct __ ## type * type ## Ref
+#endif
+
+#ifdef Q_OS_MAC
# define QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) \
((defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && osx != __MAC_NA && __MAC_OS_X_VERSION_MAX_ALLOWED >= osx) || \
(defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && ios != __IPHONE_NA && __IPHONE_OS_VERSION_MAX_ALLOWED >= ios))
@@ -561,7 +578,23 @@ Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max
QT_MAC_DEPLOYMENT_TARGET_BELOW(__MAC_NA, ios)
# define QT_OSX_DEPLOYMENT_TARGET_BELOW(osx) \
QT_MAC_DEPLOYMENT_TARGET_BELOW(osx, __IPHONE_NA)
-#endif
+
+QT_END_NAMESPACE
+Q_FORWARD_DECLARE_OBJC_CLASS(NSAutoreleasePool);
+QT_BEGIN_NAMESPACE
+
+// Implemented in qcore_mac_objc.mm
+class Q_CORE_EXPORT QMacAutoReleasePool
+{
+public:
+ QMacAutoReleasePool();
+ ~QMacAutoReleasePool();
+private:
+ Q_DISABLE_COPY(QMacAutoReleasePool)
+ NSAutoreleasePool *pool;
+};
+
+#endif // Q_OS_MAC
/*
Data stream functions are provided by many classes (defined in qdatastream.h)
@@ -578,7 +611,6 @@ class QDataStream;
#if defined(Q_OS_WINRT)
# define QT_NO_FILESYSTEMWATCHER
-# define QT_NO_GETADDRINFO
# define QT_NO_NETWORKPROXY
# define QT_NO_PROCESS
# define QT_NO_SOCKETNOTIFIER
@@ -727,7 +759,7 @@ inline T *q_check_ptr(T *p) { Q_CHECK_PTR(p); return p; }
typedef void (*QFunctionPointer)();
#if !defined(Q_UNIMPLEMENTED)
-# define Q_UNIMPLEMENTED() qWarning("%s:%d: %s: Unimplemented code.", __FILE__, __LINE__, Q_FUNC_INFO)
+# define Q_UNIMPLEMENTED() qWarning("Unimplemented code.")
#endif
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;
@@ -1033,15 +1065,6 @@ Q_CORE_EXPORT QString qtTrId(const char *id, int n = -1);
{ return T::dynamic_cast_will_always_fail_because_rtti_is_disabled; }
#endif
-/*
- Some classes do not permit copies to be made of an object. These
- classes contains a private copy constructor and assignment
- operator to disable copying (the compiler gives an error message).
-*/
-#define Q_DISABLE_COPY(Class) \
- Class(const Class &) Q_DECL_EQ_DELETE;\
- Class &operator=(const Class &) Q_DECL_EQ_DELETE;
-
class QByteArray;
Q_CORE_EXPORT QByteArray qgetenv(const char *varName);
Q_CORE_EXPORT bool qputenv(const char *varName, const QByteArray& value);
@@ -1049,7 +1072,7 @@ 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;
-Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=0) Q_DECL_NOEXCEPT;
+Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=Q_NULLPTR) Q_DECL_NOEXCEPT;
inline int qIntCast(double f) { return int(f); }
inline int qIntCast(float f) { return int(f); }
@@ -1077,20 +1100,6 @@ template <bool B, typename T, typename F> struct QConditional { typedef T Type;
template <typename T, typename F> struct QConditional<false, T, F> { typedef F Type; };
}
-#ifndef Q_FORWARD_DECLARE_OBJC_CLASS
-# ifdef __OBJC__
-# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) @class classname
-# else
-# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) typedef struct objc_object classname
-# endif
-#endif
-#ifndef Q_FORWARD_DECLARE_CF_TYPE
-# define Q_FORWARD_DECLARE_CF_TYPE(type) typedef const struct __ ## type * type ## Ref
-#endif
-#ifndef Q_FORWARD_DECLARE_MUTABLE_CF_TYPE
-# define Q_FORWARD_DECLARE_MUTABLE_CF_TYPE(type) typedef struct __ ## type * type ## Ref
-#endif
-
QT_END_NAMESPACE
// We need to keep QTypeInfo, QSysInfo, QFlags, qDebug & family in qglobal.h for compatibility with Qt 4.
@@ -1104,6 +1113,7 @@ QT_END_NAMESPACE
#include <QtCore/qatomic.h>
#include <QtCore/qglobalstatic.h>
#include <QtCore/qnumeric.h>
+#include <QtCore/qversiontagging.h>
#endif /* __cplusplus */
diff --git a/src/corelib/global/qhooks_p.h b/src/corelib/global/qhooks_p.h
index 12a59a1399..3ff4980abe 100644
--- a/src/corelib/global/qhooks_p.h
+++ b/src/corelib/global/qhooks_p.h
@@ -35,6 +35,17 @@
#ifndef QHOOKS_H
#define QHOOKS_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/qglobal.h>
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index fca8656f9b..20c31f7ef8 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -65,6 +65,9 @@
# include <systemd/sd-journal.h>
# include <syslog.h>
#endif
+#if defined(QT_USE_SYSLOG) && !defined(QT_BOOTSTRAPPED)
+# include <syslog.h>
+#endif
#ifdef Q_OS_UNIX
# include <sys/types.h>
# include <sys/stat.h>
@@ -1436,6 +1439,32 @@ static void systemd_default_message_handler(QtMsgType type,
}
#endif
+#ifdef QT_USE_SYSLOG
+static void syslog_default_message_handler(QtMsgType type, const char *message)
+{
+ int priority = LOG_INFO; // Informational
+ switch (type) {
+ case QtDebugMsg:
+ priority = LOG_DEBUG; // Debug-level messages
+ break;
+ case QtInfoMsg:
+ priority = LOG_INFO; // Informational conditions
+ break;
+ case QtWarningMsg:
+ priority = LOG_WARNING; // Warning conditions
+ break;
+ case QtCriticalMsg:
+ priority = LOG_CRIT; // Critical conditions
+ break;
+ case QtFatalMsg:
+ priority = LOG_ALERT; // Action must be taken immediately
+ break;
+ }
+
+ syslog(priority, "%s", message);
+}
+#endif
+
#ifdef Q_OS_ANDROID
static void android_default_message_handler(QtMsgType type,
const QMessageLogContext &context,
@@ -1481,6 +1510,9 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con
#elif defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED)
systemd_default_message_handler(type, context, logMessage);
return;
+#elif defined(QT_USE_SYSLOG) && !defined(QT_BOOTSTRAPPED)
+ syslog_default_message_handler(type, logMessage.toUtf8().constData());
+ return;
#elif defined(Q_OS_ANDROID)
android_default_message_handler(type, context, logMessage);
return;
diff --git a/src/corelib/global/qlogging.h b/src/corelib/global/qlogging.h
index 679afddb20..c63346086a 100644
--- a/src/corelib/global/qlogging.h
+++ b/src/corelib/global/qlogging.h
@@ -57,7 +57,8 @@ class QMessageLogContext
{
Q_DISABLE_COPY(QMessageLogContext)
public:
- Q_DECL_CONSTEXPR QMessageLogContext() : version(2), line(0), file(0), function(0), category(0) {}
+ Q_DECL_CONSTEXPR QMessageLogContext()
+ : version(2), line(0), file(Q_NULLPTR), function(Q_NULLPTR), category(Q_NULLPTR) {}
Q_DECL_CONSTEXPR QMessageLogContext(const char *fileName, int lineNumber, const char *functionName, const char *categoryName)
: version(2), line(lineNumber), file(fileName), function(functionName), category(categoryName) {}
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 82b383e69c..c4f5415a01 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -496,6 +496,8 @@ public:
AA_UseSoftwareOpenGL = 17,
AA_ShareOpenGLContexts = 18,
AA_SetPalette = 19,
+ AA_EnableHighDpiScaling = 20,
+ AA_DisableHighDpiScaling = 21,
// Add new attributes before this line
AA_AttributeCount
@@ -1326,6 +1328,7 @@ public:
ImAbsolutePosition = 0x400,
ImTextBeforeCursor = 0x800,
ImTextAfterCursor = 0x1000,
+ ImEnterKeyType = 0x2000,
ImPlatformData = 0x80000000,
ImQueryInput = ImCursorRectangle | ImCursorPosition | ImSurroundingText |
@@ -1365,6 +1368,17 @@ public:
};
Q_DECLARE_FLAGS(InputMethodHints, InputMethodHint)
+ enum EnterKeyType {
+ EnterKeyDefault,
+ EnterKeyReturn,
+ EnterKeyDone,
+ EnterKeyGo,
+ EnterKeySend,
+ EnterKeySearch,
+ EnterKeyNext,
+ EnterKeyPrevious
+ };
+
enum ToolButtonStyle {
ToolButtonIconOnly,
ToolButtonTextOnly,
@@ -1449,7 +1463,10 @@ public:
ItemIsDropEnabled = 8,
ItemIsUserCheckable = 16,
ItemIsEnabled = 32,
- ItemIsTristate = 64,
+ ItemIsAutoTristate = 64,
+#if QT_DEPRECATED_SINCE(5, 6)
+ ItemIsTristate = ItemIsAutoTristate,
+#endif
ItemNeverHasChildren = 128,
ItemIsUserTristate = 256
};
@@ -1520,9 +1537,16 @@ public:
TitleBarArea // For move
};
+#if defined(Q_COMPILER_CLASS_ENUM) && defined(Q_COMPILER_CONSTEXPR)
+ enum class Initialization {
+ Uninitialized
+ };
+ static constexpr Q_DECL_UNUSED Initialization Uninitialized = Initialization::Uninitialized;
+#else
enum Initialization {
Uninitialized
};
+#endif
enum CoordinateSystem {
DeviceCoordinates,
@@ -1610,7 +1634,8 @@ public:
enum MouseEventSource {
MouseEventNotSynthesized,
MouseEventSynthesizedBySystem,
- MouseEventSynthesizedByQt
+ MouseEventSynthesizedByQt,
+ MouseEventSynthesizedByApplication
};
enum MouseEventFlag {
@@ -1685,6 +1710,7 @@ public:
QT_Q_ENUM(InputMethodHint)
QT_Q_ENUM(InputMethodQuery)
QT_Q_FLAG(InputMethodHints)
+ QT_Q_ENUM(EnterKeyType)
QT_Q_FLAG(InputMethodQueries)
QT_Q_FLAG(TouchPointStates)
QT_Q_ENUM(ScreenOrientation)
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 2323ee2cb0..7c5263ddbd 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -28,7 +28,7 @@
/*!
\namespace Qt
\inmodule QtCore
- \target Qt Namespace
+ \keyword Qt Namespace
\brief The Qt namespace contains miscellaneous identifiers
used throughout the Qt library.
@@ -137,16 +137,14 @@
attribute is true, Qt will not do the flip. \l QKeySequence::StandardKey
will also flip accordingly (i.e., QKeySequence::Copy will be
Command+C on the keyboard regardless of the value set, though what is output for
- QKeySequence::toString(QKeySequence::PortableText) will be different).
+ QKeySequence::toString() will be different).
\value AA_Use96Dpi Assume the screen has a resolution of 96 DPI rather
than using the OS-provided resolution. This will cause font rendering
to be consistent in pixels-per-point across devices rather than
defining 1 point as 1/72 inch.
- \value AA_X11InitThreads Calls \c XInitThreads() as part of the QApplication
- construction in order to make Xlib calls thread-safe. This
- attribute must be set before QApplication is constructed.
+ \value AA_X11InitThreads This value is obsolete and has no effect.
\value AA_SynthesizeTouchForUnhandledMouseEvents All mouse events
that are not accepted by the application will be translated
@@ -170,12 +168,13 @@
\value AA_UseDesktopOpenGL Forces the usage of desktop OpenGL (for example,
\e opengl32.dll or \e libGL.so) on platforms that use dynamic loading
- of the OpenGL implementation.
- This value has been added in Qt 5.3.
+ of the OpenGL implementation. This value has been added in Qt 5.3.
+ This attribute must be set before Q(Gui)Application is constructed.
\value AA_UseOpenGLES Forces the usage of OpenGL ES 2.0 or higher on
platforms that use dynamic loading of the OpenGL implementation.
- This value has been added in Qt 5.3.
+ This value has been added in Qt 5.3. This attribute must be set
+ before Q(Gui)Application is constructed.
\value AA_UseSoftwareOpenGL Forces the usage of a software based OpenGL
implementation on platforms that use dynamic loading of the OpenGL
@@ -186,17 +185,36 @@
\c opengl32sw.dll and can be overridden by setting the environment
variable \e QT_OPENGL_DLL. See the platform-specific pages, for
instance \l{Qt for Windows}, for more information. This value has
- been added in Qt 5.4.
+ been added in Qt 5.4. This attribute must be set before
+ Q(Gui)Application is constructed.
\value AA_ShareOpenGLContexts Enables resource sharing between the OpenGL
contexts used by classes like QOpenGLWidget and QQuickWidget. This
allows sharing OpenGL resources, like textures, between QOpenGLWidget
instances that belong to different top-level windows. This value has
- been added in Qt 5.4.
+ been added in Qt 5.4. This attribute must be set before
+ Q(Gui)Application is constructed.
\value AA_SetPalette Indicates whether a palette was explicitly set on the
QApplication/QGuiApplication. This value has been added in Qt 5.5.
+ \value AA_EnableHighDpiScaling. Enables high-DPI scaling in Qt on supported
+ platforms (see also \l{High DPI Displays}). Supported platforms are
+ X11, Windows and Android. Enabling makes Qt scale the main (device
+ independent) coordinate system according to display scale factors
+ provided by the operating system. This corresponds to setting the
+ QT_AUTO_SCREEN_SCALE_FACTOR environment variable to 1. This value
+ has been added in Qt 5.6. This attribute must be set before
+ Q(Gui)Application is constructed.
+
+ \value AA_DisableHighDpiScaling Disables high-DPI scaling in Qt, exposing window
+ system coordinates. Note that the window system may do its own scaling,
+ so this does not guarantee that QPaintDevice::devicePixelRatio() will
+ be equal to 1. In addition, scale factors set by QT_SCALE_FACTOR will not
+ be affected. This corresponds to setting the QT_AUTO_SCREEN_SCALE_FACTOR
+ environment variable to 0. This value has been added in Qt 5.6. This
+ attribute must be set before Q(Gui)Application is constructed.
+
The following values are obsolete:
\value AA_ImmediateWidgetCreation This attribute is no longer fully
@@ -764,7 +782,7 @@
\value UI_FadeTooltip Show tooltip fading effects.
\value UI_AnimateToolBox Reserved
- \sa QApplication::setEffectEnabled(), QApplication::setDesktopSettingsAware()
+ \sa QApplication::setEffectEnabled(), QGuiApplication::setDesktopSettingsAware()
*/
/*! \enum Qt::AspectRatioMode
@@ -1670,12 +1688,22 @@
\value Key_Blue
\value Key_ChannelUp
\value Key_ChannelDown
+ \value Key_Guide
+ \value Key_Info
+ \value Key_Settings
+ \value Key_MicVolumeUp
+ \value Key_MicVolumeDown
+ \value Key_New
+ \value Key_Open
+ \value Key_Find
+ \value Key_Undo
+ \value Key_Redo
\value Key_MediaLast
\value Key_unknown
\value Key_Call A key to answer or initiate a call (see Qt::Key_ToggleCallHangup for a key to toggle current call state)
- \value Key_Camera A key to activate the camera shutter
- \value Key_CameraFocus A key to focus the camera
+ \value Key_Camera A key to activate the camera shutter. On Windows Runtime, the environment variable QT_QPA_ENABLE_CAMERA_KEYS must be set to receive the event.
+ \value Key_CameraFocus A key to focus the camera. On Windows Runtime, the environment variable QT_QPA_ENABLE_CAMERA_KEYS must be set to receive the event.
\value Key_Context1
\value Key_Context2
\value Key_Context3
@@ -1694,6 +1722,7 @@
\value Key_Play
\value Key_Sleep
\value Key_Zoom
+ \value Key_Exit
\value Key_Cancel
\value Key_MicVolumeUp
\value Key_Find
@@ -2397,7 +2426,7 @@
\value WhatsThisCursor \inlineimage cursor-whatsthis.png
An arrow with a question mark, typically used to indicate
the presence of What's This? help for a widget.
- \value BusyCursor \inlineimage cursor-wait.png
+ \value BusyCursor \inlineimage cursor-busy.png
An hourglass or watch cursor, usually shown during
operations that allow the user to interact with
the application while they are performed in the
@@ -2435,7 +2464,7 @@
When LayoutDirectionAuto is used in conjunction with text layouting, it will imply that the text
directionality is determined from the content of the string to be layouted.
- \sa QApplication::setLayoutDirection(), QWidget::setLayoutDirection(), QTextOption::setTextDirection(), QString::isRightToLeft()
+ \sa QGuiApplication::setLayoutDirection(), QWidget::setLayoutDirection(), QTextOption::setTextDirection(), QString::isRightToLeft()
*/
/*!
@@ -2527,6 +2556,7 @@
but \b{must} not return an empty string unless the cursor is at the start of the document.
\value ImTextAfterCursor The plain text after the cursor. The widget can decide how much text to return,
but \b{must} not return an empty string unless the cursor is at the end of the document.
+ \value ImEnterKeyType The Enter key type.
Masks:
@@ -2537,6 +2567,37 @@
*/
/*!
+ \enum Qt::EnterKeyType
+
+ This can be used to alter the appearance of the Return key on an on-screen keyboard.
+
+ \note Not all of these values are supported on all platforms.
+ For unsupported values the default key will be used instead.
+
+ \value EnterKeyDefault The default Enter key.
+ This can either be a button closing the keyboard, or a Return button
+ causing a new line in case of a multi-line input field.
+ \value EnterKeyReturn Show a Return button that inserts a new line.
+ The keyboard will not close when this button is pressed.
+ \value EnterKeyDone Show a "Done" button.
+ The keyboard will close when this button is pressed.
+ \value EnterKeyGo Show a "Go" button.
+ Typically used in an address bar when entering a URL; the keyboard
+ will close when this button is pressed.
+ \value EnterKeySend Show a "Send" button.
+ The keyboard will close when this button is pressed.
+ \value EnterKeySearch Show a "Search" button.
+ The keyboard will close when this button is pressed.
+ \value EnterKeyNext Show a "Next" button.
+ Typically used in a form to allow navigating to the next input field;
+ the keyboard will not close when this button is pressed.
+ \value EnterKeyPrevious Show a "Previous" button.
+ The keyboard will not close when this button is pressed.
+
+ \since 5.6
+*/
+
+/*!
\enum Qt::ItemDataRole
Each item in the model has a set of data elements associated with
@@ -2611,10 +2672,12 @@
\value ItemIsDropEnabled It can be used as a drop target.
\value ItemIsUserCheckable It can be checked or unchecked by the user.
\value ItemIsEnabled The user can interact with the item.
- \value ItemIsTristate The item can show three separate states.
+ \value ItemIsAutoTristate The item's state depends on the state of its children.
This enables automatic management of the state of parent items in QTreeWidget
(checked if all children are checked, unchecked if all children are unchecked,
or partially checked if only some children are checked).
+ \value ItemIsTristate \e{This enum value is deprecated.} Use Qt::ItemIsAutoTristate
+ instead.
\value ItemNeverHasChildren The item never has child items.
This is used for optimization purposes only.
\value ItemIsUserTristate The user can cycle through three separate states.
@@ -2673,7 +2736,7 @@
"\l{http://bugreports.qt.io/browse/QTWEBSITE-13}{http://bugreports.qt.../QTWEBSITE-13/}"),
whereas Qt::ElideRight is appropriate
for other strings (e.g.,
- "\l{http://doc.qt.digia.com/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
+ "\l{http://doc.qt.io/archives/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
\sa QAbstractItemView::textElideMode, QFontMetrics::elidedText(), AlignmentFlag, QTabBar::elideMode
*/
@@ -3035,6 +3098,12 @@
\value MouseEventSynthesizedByQt Indicates that the mouse event was
synthesized from an unhandled touch event by Qt.
+ \value MouseEventSynthesizedByApplication Indicates that the mouse
+ event was synthesized by the application. This allows
+ distinguishing application-generated mouse events from the ones
+ that are coming from the system or are synthesized by Qt. This
+ value was introduced in Qt 5.6
+
\sa Qt::AA_SynthesizeMouseForUnhandledTouchEvents
*/
diff --git a/src/corelib/global/qnumeric_p.h b/src/corelib/global/qnumeric_p.h
index 5fa0a881a3..b18d521d05 100644
--- a/src/corelib/global/qnumeric_p.h
+++ b/src/corelib/global/qnumeric_p.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2015 Intel Corporation.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -47,6 +48,18 @@
#include "QtCore/qglobal.h"
+#include <limits>
+
+#if defined(Q_CC_MSVC) && !defined(Q_OS_WINCE)
+# include <intrin.h>
+#elif defined(Q_CC_INTEL)
+# include <immintrin.h> // for _addcarry_u<nn>
+#endif
+
+#ifndef __has_builtin
+# define __has_builtin(x) 0
+#endif
+
QT_BEGIN_NAMESPACE
#if !defined(Q_CC_MIPS)
@@ -188,6 +201,110 @@ static inline bool qt_is_finite(float d)
}
}
+//
+// Overflow math
+//
+namespace {
+template <typename T> inline typename QtPrivate::QEnableIf<QtPrivate::is_unsigned<T>::value, bool>::Type
+add_overflow(T v1, T v2, T *r)
+{
+ // unsigned additions are well-defined
+ *r = v1 + v2;
+ return v1 > T(v1 + v2);
+}
+
+template <typename T> inline typename QtPrivate::QEnableIf<QtPrivate::is_unsigned<T>::value, bool>::Type
+mul_overflow(T v1, T v2, T *r)
+{
+ // use the next biggest type
+ // Note: for 64-bit systems where __int128 isn't supported, this will cause an error.
+ // A fallback is present below.
+ typedef typename QIntegerForSize<sizeof(T) * 2>::Unsigned Larger;
+ Larger lr = Larger(v1) * Larger(v2);
+ *r = T(lr);
+ return lr > std::numeric_limits<T>::max();
+}
+
+#if defined(__SIZEOF_INT128__)
+# define HAVE_MUL64_OVERFLOW
+#endif
+
+// GCC 5 and Clang have builtins to detect overflows
+#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || __has_builtin(__builtin_uadd_overflow)
+template <> inline bool add_overflow(unsigned v1, unsigned v2, unsigned *r)
+{ return __builtin_uadd_overflow(v1, v2, r); }
+#endif
+#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || __has_builtin(__builtin_uaddl_overflow)
+template <> inline bool add_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
+{ return __builtin_uaddl_overflow(v1, v2, r); }
+#endif
+#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || __has_builtin(__builtin_uaddll_overflow)
+template <> inline bool add_overflow(unsigned long long v1, unsigned long long v2, unsigned long long *r)
+{ return __builtin_uaddll_overflow(v1, v2, r); }
+#endif
+
+#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || __has_builtin(__builtin_umul_overflow)
+template <> inline bool mul_overflow(unsigned v1, unsigned v2, unsigned *r)
+{ return __builtin_umul_overflow(v1, v2, r); }
+#endif
+#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || __has_builtin(__builtin_umull_overflow)
+template <> inline bool mul_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
+{ return __builtin_umull_overflow(v1, v2, r); }
+#endif
+#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || __has_builtin(__builtin_umulll_overflow)
+template <> inline bool mul_overflow(unsigned long long v1, unsigned long long v2, unsigned long long *r)
+{ return __builtin_umulll_overflow(v1, v2, r); }
+# define HAVE_MUL64_OVERFLOW
+#endif
+
+#if ((defined(Q_CC_MSVC) && _MSC_VER >= 1800) || defined(Q_CC_INTEL)) && defined(Q_PROCESSOR_X86)
+template <> inline bool add_overflow(unsigned v1, unsigned v2, unsigned *r)
+{ return _addcarry_u32(0, v1, v2, r); }
+# ifdef Q_CC_MSVC // longs are 32-bit
+template <> inline bool add_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
+{ return _addcarry_u32(0, v1, v2, reinterpret_cast<unsigned *>(r)); }
+# endif
+#endif
+#if ((defined(Q_CC_MSVC) && _MSC_VER >= 1800) || defined(Q_CC_INTEL)) && defined(Q_PROCESSOR_X86_64)
+template <> inline bool add_overflow(quint64 v1, quint64 v2, quint64 *r)
+{ return _addcarry_u64(0, v1, v2, reinterpret_cast<unsigned __int64 *>(r)); }
+# ifndef Q_CC_MSVC // longs are 64-bit
+template <> inline bool add_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
+{ return _addcarry_u64(0, v1, v2, reinterpret_cast<unsigned __int64 *>(r)); }
+# endif
+#endif
+
+#if defined(Q_CC_MSVC) && (defined(Q_PROCESSOR_X86_64) || defined(Q_PROCESSOR_IA64))
+#pragma intrinsic(_umul128)
+template <> inline bool mul_overflow(quint64 v1, quint64 v2, quint64 *r)
+{
+ // use 128-bit multiplication with the _umul128 intrinsic
+ // https://msdn.microsoft.com/en-us/library/3dayytw9.aspx
+ quint64 high;
+ *r = _umul128(v1, v2, &high);
+ return high;
+}
+# define HAVE_MUL64_OVERFLOW
+#endif
+
+#if !defined(HAVE_MUL64_OVERFLOW) && defined(__LP64__)
+// no 128-bit multiplication, we need to figure out with a slow division
+template <> inline bool mul_overflow(quint64 v1, quint64 v2, quint64 *r)
+{
+ if (v2 && v1 > std::numeric_limits<quint64>::max() / v2)
+ return true;
+ *r = v1 * v2;
+ return false;
+}
+template <> inline bool mul_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
+{
+ return mul_overflow<quint64>(v1, v2, reinterpret_cast<quint64 *>(r));
+}
+#else
+# undef HAVE_MUL64_OVERFLOW
+#endif
+}
+
QT_END_NAMESPACE
#endif // QNUMERIC_P_H
diff --git a/src/corelib/global/qprocessordetection.h b/src/corelib/global/qprocessordetection.h
index a026224021..f80e9c1535 100644
--- a/src/corelib/global/qprocessordetection.h
+++ b/src/corelib/global/qprocessordetection.h
@@ -88,43 +88,51 @@
auto-detection implemented below.
*/
#if defined(__arm__) || defined(__TARGET_ARCH_ARM) || defined(_M_ARM) || defined(__aarch64__)
-# define Q_PROCESSOR_ARM
# if defined(__aarch64__)
# define Q_PROCESSOR_ARM_64
+# define Q_PROCESSOR_WORDSIZE 8
# else
# define Q_PROCESSOR_ARM_32
# endif
-# if defined(__ARM64_ARCH_8__)
-# define Q_PROCESSOR_ARM_V8
-# define Q_PROCESSOR_ARM_V7
-# define Q_PROCESSOR_ARM_V6
-# define Q_PROCESSOR_ARM_V5
+# if defined(__ARM_ARCH) && __ARM_ARCH > 1
+# define Q_PROCESSOR_ARM __ARM_ARCH
+# elif defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM > 1
+# define Q_PROCESSOR_ARM __TARGET_ARCH_ARM
+# elif defined(_M_ARM) && _M_ARM > 1
+# define Q_PROCESSOR_ARM _M_ARM
+# elif defined(__ARM64_ARCH_8__)
+# define Q_PROCESSOR_ARM 8
# elif defined(__ARM_ARCH_7__) \
|| defined(__ARM_ARCH_7A__) \
|| defined(__ARM_ARCH_7R__) \
|| defined(__ARM_ARCH_7M__) \
|| defined(__ARM_ARCH_7S__) \
- || defined(_ARM_ARCH_7) \
- || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 7) \
- || (defined(_M_ARM) && _M_ARM-0 >= 7)
-# define Q_PROCESSOR_ARM_V7
-# define Q_PROCESSOR_ARM_V6
-# define Q_PROCESSOR_ARM_V5
+ || defined(_ARM_ARCH_7)
+# define Q_PROCESSOR_ARM 7
# elif defined(__ARM_ARCH_6__) \
|| defined(__ARM_ARCH_6J__) \
|| defined(__ARM_ARCH_6T2__) \
|| defined(__ARM_ARCH_6Z__) \
|| defined(__ARM_ARCH_6K__) \
|| defined(__ARM_ARCH_6ZK__) \
- || defined(__ARM_ARCH_6M__) \
- || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 6) \
- || (defined(_M_ARM) && _M_ARM-0 >= 6)
-# define Q_PROCESSOR_ARM_V6
-# define Q_PROCESSOR_ARM_V5
+ || defined(__ARM_ARCH_6M__)
+# define Q_PROCESSOR_ARM 6
# 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)
+ || defined(__ARM_ARCH_5TE__)
+# define Q_PROCESSOR_ARM 5
+# else
+# define Q_PROCESSOR_ARM 0
+# endif
+# if Q_PROCESSOR_ARM >= 8
+# define Q_PROCESSOR_ARM_V8
+# endif
+# if Q_PROCESSOR_ARM >= 7
+# define Q_PROCESSOR_ARM_V7
+# endif
+# if Q_PROCESSOR_ARM >= 6
+# define Q_PROCESSOR_ARM_V6
+# endif
+# if Q_PROCESSOR_ARM >= 5
# define Q_PROCESSOR_ARM_V5
# endif
# if defined(__ARMEL__)
@@ -228,6 +236,7 @@
# endif
# if defined(_MIPS_ARCH_MIPS64) || defined(__mips64)
# define Q_PROCESSOR_MIPS_64
+# define Q_PROCESSOR_WORDSIZE 8
# endif
# if defined(__MIPSEL__)
# define Q_BYTE_ORDER Q_LITTLE_ENDIAN
@@ -252,6 +261,7 @@
# define Q_PROCESSOR_POWER
# if defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__)
# define Q_PROCESSOR_POWER_64
+# define Q_PROCESSOR_WORDSIZE 8
# else
# define Q_PROCESSOR_POWER_32
# endif
@@ -323,6 +333,28 @@
#endif
/*
+ Size of a pointer and the machine register size. We detect a 64-bit system by:
+ * GCC and compatible compilers (Clang, ICC on OS X and Windows) always define
+ __SIZEOF_POINTER__. This catches all known cases of ILP32 builds on 64-bit
+ processors.
+ * Most other Unix compilers define __LP64__ or _LP64 on 64-bit mode
+ (Long and Pointer 64-bit)
+ * If Q_PROCESSOR_WORDSIZE was defined above, it's assumed to match the pointer
+ size.
+ Otherwise, we assume to be 32-bit and then check in qglobal.cpp that it is right.
+*/
+
+#if defined __SIZEOF_POINTER__
+# define QT_POINTER_SIZE __SIZEOF_POINTER__
+#elif defined(__LP64__) || defined(_LP64)
+# define QT_POINTER_SIZE 8
+#elif defined(Q_PROCESSOR_WORDSIZE)
+# define QT_POINTER_SIZE Q_PROCESSOR_WORDSIZE
+#else
+# define QT_POINTER_SIZE 4
+#endif
+
+/*
Define Q_PROCESSOR_WORDSIZE to be the size of the machine's word (usually,
the size of the register). On some architectures where a pointer could be
smaller than the register, the macro is defined above.
@@ -330,14 +362,8 @@
Falls back to QT_POINTER_SIZE if not set explicitly for the platform.
*/
#ifndef Q_PROCESSOR_WORDSIZE
-# ifdef __SIZEOF_POINTER__
- /* GCC & friends define this */
-# define Q_PROCESSOR_WORDSIZE __SIZEOF_POINTER__
-# elif defined(_LP64) || defined(__LP64__) || defined(WIN64) || defined(_WIN64)
-# define Q_PROCESSOR_WORDSIZE 8
-# else
-# define Q_PROCESSOR_WORDSIZE QT_POINTER_SIZE
-# endif
+# define Q_PROCESSOR_WORDSIZE QT_POINTER_SIZE
#endif
+
#endif // QPROCESSORDETECTION_H
diff --git a/src/corelib/global/qsysinfo.h b/src/corelib/global/qsysinfo.h
index 625b366cc6..27a285fd36 100644
--- a/src/corelib/global/qsysinfo.h
+++ b/src/corelib/global/qsysinfo.h
@@ -125,19 +125,19 @@ public:
MV_Unknown = 0x0000,
/* version */
- MV_9 = 0x0001,
- MV_10_0 = 0x0002,
- MV_10_1 = 0x0003,
- MV_10_2 = 0x0004,
- MV_10_3 = 0x0005,
- MV_10_4 = 0x0006,
- MV_10_5 = 0x0007,
- MV_10_6 = 0x0008,
- MV_10_7 = 0x0009,
- MV_10_8 = 0x000A,
- MV_10_9 = 0x000B,
- MV_10_10 = 0x000C,
- MV_10_11 = 0x000D,
+ MV_9 = Q_MV_OSX(9, 0),
+ MV_10_0 = Q_MV_OSX(10, 0),
+ MV_10_1 = Q_MV_OSX(10, 1),
+ MV_10_2 = Q_MV_OSX(10, 2),
+ MV_10_3 = Q_MV_OSX(10, 3),
+ MV_10_4 = Q_MV_OSX(10, 4),
+ MV_10_5 = Q_MV_OSX(10, 5),
+ MV_10_6 = Q_MV_OSX(10, 6),
+ MV_10_7 = Q_MV_OSX(10, 7),
+ MV_10_8 = Q_MV_OSX(10, 8),
+ MV_10_9 = Q_MV_OSX(10, 9),
+ MV_10_10 = Q_MV_OSX(10, 10),
+ MV_10_11 = Q_MV_OSX(10, 11),
/* codenames */
MV_CHEETAH = MV_10_0,
@@ -186,6 +186,8 @@ public:
static QString productType();
static QString productVersion();
static QString prettyProductName();
+
+ static QString machineHostName();
};
QT_END_NAMESPACE
diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h
index 562427e4b9..751c6a9a0e 100644
--- a/src/corelib/global/qsystemdetection.h
+++ b/src/corelib/global/qsystemdetection.h
@@ -94,7 +94,7 @@
# else
# define Q_OS_DARWIN32
# endif
-#elif defined(ANDROID)
+#elif defined(__ANDROID__) || defined(ANDROID)
# define Q_OS_ANDROID
# define Q_OS_LINUX
#elif defined(__CYGWIN__)
@@ -109,7 +109,7 @@
# if defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
# define Q_OS_WINPHONE
# define Q_OS_WINRT
-# elif WINAPI_FAMILY==WINAPI_FAMILY_APP
+# elif WINAPI_FAMILY==WINAPI_FAMILY_PC_APP
# define Q_OS_WINRT
# else
# define Q_OS_WIN32
diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h
index 90ac8c6a0c..b42e5998fc 100644
--- a/src/corelib/global/qtypeinfo.h
+++ b/src/corelib/global/qtypeinfo.h
@@ -32,6 +32,7 @@
****************************************************************************/
#include <QtCore/qtypetraits.h>
+#include <QtCore/qisenum.h>
#ifndef QTYPEINFO_H
#define QTYPEINFO_H
@@ -55,6 +56,7 @@ public:
isIntegral = QtPrivate::is_integral<T>::value,
isComplex = true,
isStatic = true,
+ isRelocatable = Q_IS_ENUM(T),
isLarge = (sizeof(T)>sizeof(void*)),
isDummy = false, //### Qt6: remove
sizeOf = sizeof(T)
@@ -70,6 +72,7 @@ public:
isIntegral = false,
isComplex = false,
isStatic = false,
+ isRelocatable = false,
isLarge = false,
isDummy = false,
sizeOf = 0
@@ -85,6 +88,7 @@ public:
isIntegral = false,
isComplex = false,
isStatic = false,
+ isRelocatable = true,
isLarge = false,
isDummy = false,
sizeOf = sizeof(T*)
@@ -92,6 +96,32 @@ public:
};
/*!
+ \class QTypeInfoQuery
+ \inmodule QtCore
+ \internal
+ \brief QTypeInfoQuery is used to query the values of a given QTypeInfo<T>
+
+ We use it because there may be some QTypeInfo<T> specializations in user
+ code that don't provide certain flags that we added after Qt 5.0. They are:
+ \list
+ \li isRelocatable: defaults to !isStatic
+ \endlist
+
+ DO NOT specialize this class elsewhere.
+*/
+// apply defaults for a generic QTypeInfo<T> that didn't provide the new values
+template <typename T, typename = void>
+struct QTypeInfoQuery : QTypeInfo<T>
+{
+ enum { isRelocatable = !QTypeInfo<T>::isStatic };
+};
+
+// if QTypeInfo<T>::isRelocatable exists, use it
+template <typename T>
+struct QTypeInfoQuery<T, typename QtPrivate::QEnableIf<QTypeInfo<T>::isRelocatable || true>::Type> : QTypeInfo<T>
+{};
+
+/*!
\class QTypeInfoMerger
\inmodule QtCore
\internal
@@ -116,8 +146,12 @@ class QTypeInfoMerger
{
public:
enum {
- isComplex = QTypeInfo<T1>::isComplex || QTypeInfo<T2>::isComplex || QTypeInfo<T3>::isComplex || QTypeInfo<T4>::isComplex,
- isStatic = QTypeInfo<T1>::isStatic || QTypeInfo<T2>::isStatic || QTypeInfo<T3>::isStatic || QTypeInfo<T4>::isStatic,
+ isComplex = QTypeInfoQuery<T1>::isComplex || QTypeInfoQuery<T2>::isComplex
+ || QTypeInfoQuery<T3>::isComplex || QTypeInfoQuery<T4>::isComplex,
+ isStatic = QTypeInfoQuery<T1>::isStatic || QTypeInfoQuery<T2>::isStatic
+ || QTypeInfoQuery<T3>::isStatic || QTypeInfoQuery<T4>::isStatic,
+ isRelocatable = QTypeInfoQuery<T1>::isRelocatable && QTypeInfoQuery<T2>::isRelocatable
+ && QTypeInfoQuery<T3>::isRelocatable && QTypeInfoQuery<T4>::isRelocatable,
isLarge = sizeof(T) > sizeof(void*),
isPointer = false,
isIntegral = false,
@@ -136,19 +170,20 @@ public: \
isPointer = false, \
isIntegral = false, \
isComplex = true, \
+ isRelocatable = true, \
isStatic = false, \
isLarge = (sizeof(CONTAINER<T>) > sizeof(void*)), \
isDummy = false, \
sizeOf = sizeof(CONTAINER<T>) \
}; \
-};
+}
-Q_DECLARE_MOVABLE_CONTAINER(QList)
-Q_DECLARE_MOVABLE_CONTAINER(QVector)
-Q_DECLARE_MOVABLE_CONTAINER(QQueue)
-Q_DECLARE_MOVABLE_CONTAINER(QStack)
-Q_DECLARE_MOVABLE_CONTAINER(QLinkedList)
-Q_DECLARE_MOVABLE_CONTAINER(QSet)
+Q_DECLARE_MOVABLE_CONTAINER(QList);
+Q_DECLARE_MOVABLE_CONTAINER(QVector);
+Q_DECLARE_MOVABLE_CONTAINER(QQueue);
+Q_DECLARE_MOVABLE_CONTAINER(QStack);
+Q_DECLARE_MOVABLE_CONTAINER(QLinkedList);
+Q_DECLARE_MOVABLE_CONTAINER(QSet);
#undef Q_DECLARE_MOVABLE_CONTAINER
@@ -164,8 +199,9 @@ enum { /* TYPEINFO flags */
Q_COMPLEX_TYPE = 0,
Q_PRIMITIVE_TYPE = 0x1,
Q_STATIC_TYPE = 0,
- Q_MOVABLE_TYPE = 0x2,
- Q_DUMMY_TYPE = 0x4
+ Q_MOVABLE_TYPE = 0x2, // ### Qt6: merge movable and relocatable once QList no longer depends on it
+ Q_DUMMY_TYPE = 0x4,
+ Q_RELOCATABLE_TYPE = 0x8
};
#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS) \
@@ -175,6 +211,7 @@ public: \
enum { \
isComplex = (((FLAGS) & Q_PRIMITIVE_TYPE) == 0), \
isStatic = (((FLAGS) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), \
+ isRelocatable = !isStatic || ((FLAGS) & Q_RELOCATABLE_TYPE), \
isLarge = (sizeof(TYPE)>sizeof(void*)), \
isPointer = false, \
isIntegral = QtPrivate::is_integral< TYPE >::value, \
@@ -201,13 +238,22 @@ Q_DECLARE_TYPEINFO_BODY(QFlags<T>, Q_PRIMITIVE_TYPE);
where 'type' is the name of the type to specialize. NOTE: shared
types must define a member-swap, and be defined in the same
namespace as Qt for this to work.
+
+ If the type was already released without Q_DECLARE_SHARED applied,
+ _and_ without an explicit Q_DECLARE_TYPEINFO(type, Q_MOVABLE_TYPE),
+ then use Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(type) to mark the
+ type shared (incl. swap()), without marking it movable (which
+ would change the memory layout of QList, a BiC change.
*/
-#define Q_DECLARE_SHARED(TYPE) \
-Q_DECLARE_TYPEINFO(TYPE, Q_MOVABLE_TYPE); \
+#define Q_DECLARE_SHARED_IMPL(TYPE, FLAGS) \
+Q_DECLARE_TYPEINFO(TYPE, FLAGS); \
inline void swap(TYPE &value1, TYPE &value2) \
Q_DECL_NOEXCEPT_EXPR(noexcept(value1.swap(value2))) \
{ value1.swap(value2); }
+#define Q_DECLARE_SHARED(TYPE) Q_DECLARE_SHARED_IMPL(TYPE, Q_MOVABLE_TYPE)
+#define Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(TYPE) \
+ Q_DECLARE_SHARED_IMPL(TYPE, QT_VERSION >= QT_VERSION_CHECK(6,0,0) ? Q_MOVABLE_TYPE : Q_RELOCATABLE_TYPE)
/*
QTypeInfo primitive specializations
diff --git a/src/corelib/global/qversiontagging.cpp b/src/corelib/global/qversiontagging.cpp
new file mode 100644
index 0000000000..e7524f39ef
--- /dev/null
+++ b/src/corelib/global/qversiontagging.cpp
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Intel Corporation.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qglobal.h"
+
+#define SYM QT_MANGLE_NAMESPACE(qt_version_tag)
+//#define SSYM QT_STRINGIFY(SYM)
+
+#if defined(Q_CC_GNU) && defined(Q_OF_ELF) && !defined(Q_OS_ANDROID)
+# define make_versioned_symbol2(sym, m, n, separator) \
+ Q_CORE_EXPORT extern const char sym ## _ ## m ## _ ## n = 0; \
+ asm(".symver " QT_STRINGIFY(sym) "_" QT_STRINGIFY(m) "_" QT_STRINGIFY(n) ", " \
+ QT_STRINGIFY(sym) separator "Qt_" QT_STRINGIFY(m) "." QT_STRINGIFY(n))
+#else
+# define make_versioned_symbol2(sym, m, n, separator)
+#endif
+#define make_versioned_symbol(sym, m, n, separator) make_versioned_symbol2(sym, m, n, separator)
+
+extern "C" {
+#if QT_VERSION_MINOR > 0
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 0, "@");
+#endif
+#if QT_VERSION_MINOR > 1
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 1, "@");
+#endif
+#if QT_VERSION_MINOR > 2
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 2, "@");
+#endif
+#if QT_VERSION_MINOR > 3
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 3, "@");
+#endif
+#if QT_VERSION_MINOR > 4
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 4, "@");
+#endif
+#if QT_VERSION_MINOR > 5
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 5, "@");
+#endif
+#if QT_VERSION_MINOR > 6
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 6, "@");
+#endif
+#if QT_VERSION_MINOR > 7
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 7, "@");
+#endif
+#if QT_VERSION_MINOR > 8
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 8, "@");
+#endif
+#if QT_VERSION_MINOR > 9
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 9, "@");
+#endif
+#if QT_VERSION_MINOR > 10
+# error "Please update this file with more Qt versions."
+#endif
+
+// the default version:
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, QT_VERSION_MINOR, "@@");
+}
diff --git a/src/corelib/global/qversiontagging.h b/src/corelib/global/qversiontagging.h
new file mode 100644
index 0000000000..4a1c01c89d
--- /dev/null
+++ b/src/corelib/global/qversiontagging.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Intel Corporation.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// qglobal.h includes this header, so keep it outside of our include guards
+#include <QtCore/qglobal.h>
+
+#if !defined(QVERSIONTAGGING_H)
+#define QVERSIONTAGGING_H
+
+QT_BEGIN_NAMESPACE
+
+/*
+ * Ugly hack warning and explanation:
+ *
+ * This file causes all ELF modules, be they libraries or applications, to use the
+ * qt_version_tag symbol that is present in QtCore. Such symbol is versioned,
+ * so the linker will automatically pull the current Qt version and add it to
+ * the ELF header of the library/application. The assembly produces one section
+ * called ".qtversion" containing two pointer-sized values. The first is a
+ * relocation to the qt_version_tag symbol (which is what causes the ELF
+ * version to get used). The second value is the current Qt version at the time
+ * of compilation.
+ *
+ * There will only be one copy of the section in the output library or application.
+ */
+
+#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING)
+// don't make tags in QtCore, bootstrapped systems or if the user asked not to
+#elif defined(Q_CC_GNU) && !defined(Q_OS_ANDROID)
+# if defined(Q_PROCESSOR_X86) && (defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD_KERNEL))
+# ifdef __LP64__
+# define QT_VERSION_TAG_RELOC(sym) ".quad " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOTPCREL\n"
+# elif defined(Q_PROCESSOR_X86_64) // x32
+# define QT_VERSION_TAG_RELOC(sym) ".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOTPCREL\n"
+# else // x86
+# define QT_VERSION_TAG_RELOC(sym) ".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(sym)) "@GOT\n"
+# endif
+# define QT_VERSION_TAG(sym) \
+ asm ( \
+ ".section .qtversion, \"aG\", @progbits, qt_version_tag, comdat\n" \
+ ".align 8\n" \
+ QT_VERSION_TAG_RELOC(sym) \
+ ".long " QT_STRINGIFY(QT_VERSION) "\n" \
+ ".align 8\n" \
+ ".previous" \
+ )
+# endif
+#endif
+
+#if defined(QT_VERSION_TAG)
+QT_VERSION_TAG(qt_version_tag);
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QVERSIONTAGGING_H
diff --git a/src/corelib/io/forkfd_qt.cpp b/src/corelib/io/forkfd_qt.cpp
index d282c08fbd..b226332cc1 100644
--- a/src/corelib/io/forkfd_qt.cpp
+++ b/src/corelib/io/forkfd_qt.cpp
@@ -32,22 +32,6 @@
****************************************************************************/
// these might be defined via precompiled headers
-#ifndef _POSIX_C_SOURCE
-# define _POSIX_C_SOURCE 200809L
-#endif
-#if !defined(_XOPEN_SOURCE) && !defined(__QNXNTO__) && !defined(ANDROID)
-# define _XOPEN_SOURCE 700
-#endif
-
-// Define BSD visibility macros. These are also defined in forkfd.c, but the
-// headers using them may be included before forkfd.c itself.
-#ifndef _NETBSD_SOURCE
-# define _NETBSD_SOURCE 1
-#endif
-#ifndef __BSD_VISIBLE
-# define __BSD_VISIBLE 1
-#endif
-
#include <QtCore/qatomic.h>
#include "qprocess_p.h"
diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri
index f496d037d8..b2bcbdf727 100644
--- a/src/corelib/io/io.pri
+++ b/src/corelib/io/io.pri
@@ -160,6 +160,7 @@ win32 {
} else:ios {
OBJECTIVE_SOURCES += io/qstandardpaths_ios.mm
SOURCES += io/qstorageinfo_mac.cpp
+ LIBS += -framework MobileCoreServices
} else {
SOURCES += io/qstandardpaths_unix.cpp
}
diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp
index 07270eb790..2ab789e0af 100644
--- a/src/corelib/io/qabstractfileengine.cpp
+++ b/src/corelib/io/qabstractfileengine.cpp
@@ -891,7 +891,6 @@ bool QAbstractFileEngine::unmap(uchar *address)
/*!
\typedef QAbstractFileEngine::Iterator
\since 4.3
- \relates QAbstractFileEngine
Synonym for QAbstractFileEngineIterator.
*/
diff --git a/src/corelib/io/qbuffer.h b/src/corelib/io/qbuffer.h
index 1b2758d040..233c702213 100644
--- a/src/corelib/io/qbuffer.h
+++ b/src/corelib/io/qbuffer.h
@@ -51,8 +51,8 @@ class Q_CORE_EXPORT QBuffer : public QIODevice
public:
#ifndef QT_NO_QOBJECT
- explicit QBuffer(QObject *parent = 0);
- QBuffer(QByteArray *buf, QObject *parent = 0);
+ explicit QBuffer(QObject *parent = Q_NULLPTR);
+ QBuffer(QByteArray *buf, QObject *parent = Q_NULLPTR);
#else
QBuffer();
explicit QBuffer(QByteArray *buf);
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index 48672db2e9..675178ea80 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -526,6 +526,7 @@ void QDataStream::setByteOrder(ByteOrder bo)
\value Qt_5_3 Same as Qt_5_2
\value Qt_5_4 Version 16 (Qt 5.4)
\value Qt_5_5 Same as Qt_5_4
+ \value Qt_5_6 Version 17 (Qt 5.6)
\omitvalue Qt_DefaultCompiledVersion
\sa setVersion(), version()
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h
index 436bf8dd57..5730c12907 100644
--- a/src/corelib/io/qdatastream.h
+++ b/src/corelib/io/qdatastream.h
@@ -83,10 +83,11 @@ public:
Qt_5_3 = Qt_5_2,
Qt_5_4 = 16,
Qt_5_5 = Qt_5_4,
-#if QT_VERSION >= 0x050600
+ Qt_5_6 = 17,
+#if QT_VERSION >= 0x050700
#error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion
#endif
- Qt_DefaultCompiledVersion = Qt_5_5
+ Qt_DefaultCompiledVersion = Qt_5_6
};
enum ByteOrder {
diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp
index 6b8f832eed..81af96b96b 100644
--- a/src/corelib/io/qdebug.cpp
+++ b/src/corelib/io/qdebug.cpp
@@ -351,6 +351,7 @@ QDebug &QDebug::resetFormat()
stream->space = true;
if (stream->context.version > 1)
stream->flags = 0;
+ stream->setVerbosity(Stream::defaultVerbosity);
return *this;
}
@@ -444,6 +445,32 @@ QDebug &QDebug::resetFormat()
*/
/*!
+ \fn int QDebug::verbosity() const
+ \since 5.6
+
+ Returns the verbosity of the debug stream.
+
+ Streaming operators can check the value to decide whether
+ verbose output is desired and print more information depending on the
+ level. Higher values indicate that more information is desired.
+
+ The allowed range is from 0 to 7. The default value is 2.
+
+ \sa setVerbosity()
+*/
+
+/*!
+ \fn void QDebug::setVerbosity(int verbosityLevel)
+ \since 5.6
+
+ Sets the verbosity of the stream to \a verbosityLevel.
+
+ The allowed range is from 0 to 7. The default value is 2.
+
+ \sa verbosity()
+*/
+
+/*!
\fn QDebug &QDebug::operator<<(QChar t)
Writes the character, \a t, to the stream and returns a reference to the
@@ -726,7 +753,7 @@ QDebug &QDebug::resetFormat()
/*!
\class QDebugStateSaver
-
+ \inmodule QtCore
\brief Convenience class for custom QDebug operators
Saves the settings used by QDebug, and restores them upon destruction,
diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h
index 7c75608e2a..b1a0396f35 100644
--- a/src/corelib/io/qdebug.h
+++ b/src/corelib/io/qdebug.h
@@ -53,9 +53,14 @@ 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), flags(0) {}
- Stream(QString *string) : ts(string, QIODevice::WriteOnly), ref(1), type(QtDebugMsg), space(true), message_output(false), flags(0) {}
- Stream(QtMsgType t) : ts(&buffer, QIODevice::WriteOnly), ref(1), type(t), space(true), message_output(true), flags(0) {}
+ enum { defaultVerbosity = 2, verbosityShift = 29, verbosityMask = 0x7 };
+
+ Stream(QIODevice *device) : ts(device), ref(1), type(QtDebugMsg),
+ space(true), message_output(false), flags(defaultVerbosity << verbosityShift) {}
+ Stream(QString *string) : ts(string, QIODevice::WriteOnly), ref(1), type(QtDebugMsg),
+ space(true), message_output(false), flags(defaultVerbosity << verbosityShift) {}
+ Stream(QtMsgType t) : ts(&buffer, QIODevice::WriteOnly), ref(1), type(t),
+ space(true), message_output(true), flags(defaultVerbosity << verbosityShift) {}
QTextStream ts;
QString buffer;
int ref;
@@ -64,7 +69,7 @@ class Q_CORE_EXPORT QDebug
bool message_output;
QMessageLogContext context;
- enum FormatFlag {
+ enum FormatFlag { // Note: Bits 29..31 are reserved for the verbose level introduced in 5.6.
NoQuotes = 0x1
};
@@ -72,7 +77,15 @@ class Q_CORE_EXPORT QDebug
bool testFlag(FormatFlag flag) const { return (context.version > 1) ? (flags & flag) : false; }
void setFlag(FormatFlag flag) { if (context.version > 1) { flags |= flag; } }
void unsetFlag(FormatFlag flag) { if (context.version > 1) { flags &= ~flag; } }
-
+ int verbosity() const
+ { return context.version > 1 ? (flags >> verbosityShift) & verbosityMask : int(Stream::defaultVerbosity); }
+ void setVerbosity(int v)
+ {
+ if (context.version > 1) {
+ flags &= ~(verbosityMask << verbosityShift);
+ flags |= (v & verbosityMask) << verbosityShift;
+ }
+ }
// added in 5.4
int flags;
} *stream;
@@ -96,6 +109,8 @@ public:
inline QDebug &space() { stream->space = true; stream->ts << ' '; return *this; }
inline QDebug &nospace() { stream->space = false; return *this; }
inline QDebug &maybeSpace() { if (stream->space) stream->ts << ' '; return *this; }
+ int verbosity() const { return stream->verbosity(); }
+ void setVerbosity(int verbosityLevel) { stream->setVerbosity(verbosityLevel); }
bool autoInsertSpaces() const { return stream->space; }
void setAutoInsertSpaces(bool b) { stream->space = b; }
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index f6e132708e..4d2b36632f 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -138,7 +138,7 @@ inline QChar QDirPrivate::getFilterSepChar(const QString &nameFilter)
// static
inline QStringList QDirPrivate::splitFilters(const QString &nameFilter, QChar sep)
{
- if (sep == 0)
+ if (sep.isNull())
sep = getFilterSepChar(nameFilter);
QStringList ret = nameFilter.split(sep);
for (int i = 0; i < ret.count(); ++i)
@@ -1836,6 +1836,8 @@ QFileInfoList QDir::drives()
underlying operating system. If you want to display paths to the
user using their operating system's separator use
toNativeSeparators().
+
+ \sa listSeparator()
*/
QChar QDir::separator()
{
@@ -1847,6 +1849,16 @@ QChar QDir::separator()
}
/*!
+ \fn QDir::listSeparator()
+ \since 5.6
+
+ Returns the native path list separator: ':' under Unix
+ and ';' under Windows.
+
+ \sa separator()
+*/
+
+/*!
Sets the application's current working directory to \a path.
Returns \c true if the directory was successfully changed; otherwise
returns \c false.
diff --git a/src/corelib/io/qdir.h b/src/corelib/io/qdir.h
index e622011f98..ab3a331229 100644
--- a/src/corelib/io/qdir.h
+++ b/src/corelib/io/qdir.h
@@ -101,11 +101,10 @@ public:
QDir &operator=(const QDir &);
QDir &operator=(const QString &path);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QDir &operator=(QDir &&other)
- { qSwap(d_ptr, other.d_ptr); return *this; }
+ QDir &operator=(QDir &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
- inline void swap(QDir &other)
+ void swap(QDir &other) Q_DECL_NOTHROW
{ qSwap(d_ptr, other.d_ptr); }
void setPath(const QString &path);
@@ -177,7 +176,16 @@ public:
static QFileInfoList drives();
- static QChar separator();
+ Q_DECL_CONSTEXPR static inline QChar listSeparator() Q_DECL_NOTHROW
+ {
+#if defined(Q_OS_WIN)
+ return QLatin1Char(';');
+#else
+ return QLatin1Char(':');
+#endif
+ }
+
+ static QChar separator(); // ### Qt6: Make it inline
static bool setCurrent(const QString &path);
static inline QDir current() { return QDir(currentPath()); }
diff --git a/src/corelib/io/qfile.h b/src/corelib/io/qfile.h
index 35a73680af..4eac710d4c 100644
--- a/src/corelib/io/qfile.h
+++ b/src/corelib/io/qfile.h
@@ -134,7 +134,7 @@ protected:
#ifdef QT_NO_QOBJECT
QFile(QFilePrivate &dd);
#else
- QFile(QFilePrivate &dd, QObject *parent = 0);
+ QFile(QFilePrivate &dd, QObject *parent = Q_NULLPTR);
#endif
private:
diff --git a/src/corelib/io/qfiledevice.cpp b/src/corelib/io/qfiledevice.cpp
index 2d6be5fb80..8531d32523 100644
--- a/src/corelib/io/qfiledevice.cpp
+++ b/src/corelib/io/qfiledevice.cpp
@@ -481,7 +481,7 @@ bool QFileDevicePrivate::putCharHelper(char c)
#else
// Cutoff for code that doesn't only touch the buffer.
- int writeBufferSize = writeBuffer.size();
+ qint64 writeBufferSize = writeBuffer.size();
if ((openMode & QIODevice::Unbuffered) || writeBufferSize + 1 >= QFILE_WRITEBUFFER_SIZE
#ifdef Q_OS_WIN
|| ((openMode & QIODevice::Text) && c == '\n' && writeBufferSize + 2 >= QFILE_WRITEBUFFER_SIZE)
diff --git a/src/corelib/io/qfiledevice.h b/src/corelib/io/qfiledevice.h
index e9320d8d31..afa42bd86b 100644
--- a/src/corelib/io/qfiledevice.h
+++ b/src/corelib/io/qfiledevice.h
@@ -119,7 +119,7 @@ protected:
QFileDevice(QFileDevicePrivate &dd);
#else
explicit QFileDevice(QObject *parent);
- QFileDevice(QFileDevicePrivate &dd, QObject *parent = 0);
+ QFileDevice(QFileDevicePrivate &dd, QObject *parent = Q_NULLPTR);
#endif
qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
diff --git a/src/corelib/io/qfileinfo.h b/src/corelib/io/qfileinfo.h
index 58cf9a5c0f..59d12c3883 100644
--- a/src/corelib/io/qfileinfo.h
+++ b/src/corelib/io/qfileinfo.h
@@ -62,11 +62,10 @@ public:
QFileInfo &operator=(const QFileInfo &fileinfo);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QFileInfo&operator=(QFileInfo &&other)
- { qSwap(d_ptr, other.d_ptr); return *this; }
+ QFileInfo &operator=(QFileInfo &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
- inline void swap(QFileInfo &other)
+ void swap(QFileInfo &other) Q_DECL_NOTHROW
{ qSwap(d_ptr, other.d_ptr); }
bool operator==(const QFileInfo &fileinfo) const;
diff --git a/src/corelib/io/qfileselector.cpp b/src/corelib/io/qfileselector.cpp
index af8d9b2b36..52ac414645 100644
--- a/src/corelib/io/qfileselector.cpp
+++ b/src/corelib/io/qfileselector.cpp
@@ -227,9 +227,9 @@ QString QFileSelector::select(const QString &filePath) const
static bool isLocalScheme(const QString &file)
{
- bool local = file == QStringLiteral("qrc");
+ bool local = file == QLatin1String("qrc");
#ifdef Q_OS_ANDROID
- local |= file == QStringLiteral("assets");
+ local |= file == QLatin1String("assets");
#endif
return local;
}
diff --git a/src/corelib/io/qfileselector.h b/src/corelib/io/qfileselector.h
index 967d5eee75..9ee3588780 100644
--- a/src/corelib/io/qfileselector.h
+++ b/src/corelib/io/qfileselector.h
@@ -44,7 +44,7 @@ class Q_CORE_EXPORT QFileSelector : public QObject
{
Q_OBJECT
public:
- explicit QFileSelector(QObject *parent = 0);
+ explicit QFileSelector(QObject *parent = Q_NULLPTR);
~QFileSelector();
QString select(const QString &filePath) const;
diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp
index df41457a18..a49d69d447 100644
--- a/src/corelib/io/qfilesystemengine.cpp
+++ b/src/corelib/io/qfilesystemengine.cpp
@@ -152,7 +152,7 @@ static bool _q_resolveEntryAndCreateLegacyEngine_recursive(QFileSystemEntry &ent
const QStringList &paths = QDir::searchPaths(filePath.left(prefixSeparator));
for (int i = 0; i < paths.count(); i++) {
- entry = QFileSystemEntry(QDir::cleanPath(paths.at(i) % QLatin1Char('/') % filePath.mid(prefixSeparator + 1)));
+ entry = QFileSystemEntry(QDir::cleanPath(paths.at(i) % QLatin1Char('/') % filePath.midRef(prefixSeparator + 1)));
// Recurse!
if (_q_resolveEntryAndCreateLegacyEngine_recursive(entry, data, engine, true))
return true;
@@ -264,7 +264,7 @@ void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer)
// Attributes
entryFlags |= QFileSystemMetaData::ExistsAttribute;
size_ = statBuffer.st_size;
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
if (statBuffer.st_flags & UF_HIDDEN) {
entryFlags |= QFileSystemMetaData::HiddenAttribute;
knownFlagsMask |= QFileSystemMetaData::HiddenAttribute;
diff --git a/src/corelib/io/qfilesystemengine_p.h b/src/corelib/io/qfilesystemengine_p.h
index 06d5db637a..6db9319836 100644
--- a/src/corelib/io/qfilesystemengine_p.h
+++ b/src/corelib/io/qfilesystemengine_p.h
@@ -76,7 +76,7 @@ public:
static QString resolveGroupName(uint groupId);
#endif
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
static QString bundleName(const QFileSystemEntry &entry);
#else
static QString bundleName(const QFileSystemEntry &entry) { Q_UNUSED(entry) return QString(); }
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 2c9fed530b..7bc2293b0d 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -51,26 +51,38 @@
# include <CoreFoundation/CFBundle.h>
#endif
+#ifdef Q_OS_OSX
+#include <CoreServices/CoreServices.h>
+#endif
+
+#ifdef Q_OS_IOS
+#include <MobileCoreServices/MobileCoreServices.h>
+#endif
+
QT_BEGIN_NAMESPACE
-#if defined(Q_OS_MACX)
-static inline bool _q_isMacHidden(const char *nativePath)
+#if defined(Q_OS_DARWIN)
+static inline bool hasResourcePropertyFlag(const QFileSystemMetaData &data,
+ const QFileSystemEntry &entry,
+ CFStringRef key)
{
- OSErr err;
-
- FSRef fsRef;
- err = FSPathMakeRefWithOptions(reinterpret_cast<const UInt8 *>(nativePath),
- kFSPathMakeRefDoNotFollowLeafSymlink, &fsRef, 0);
- if (err != noErr)
+ QCFString path = CFStringCreateWithFileSystemRepresentation(0,
+ entry.nativeFilePath().constData());
+ if (!path)
return false;
- FSCatalogInfo catInfo;
- err = FSGetCatalogInfo(&fsRef, kFSCatInfoFinderInfo, &catInfo, NULL, NULL, NULL);
- if (err != noErr)
+ QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(0, path, kCFURLPOSIXPathStyle,
+ data.hasFlags(QFileSystemMetaData::DirectoryType));
+ if (!url)
return false;
- FileInfo * const fileInfo = reinterpret_cast<FileInfo*>(&catInfo.finderInfo);
- return (fileInfo->finderFlags & kIsInvisible);
+ CFBooleanRef value;
+ if (CFURLCopyResourcePropertyForKey(url, key, &value, NULL)) {
+ if (value == kCFBooleanTrue)
+ return true;
+ }
+
+ return false;
}
static bool isPackage(const QFileSystemMetaData &data, const QFileSystemEntry &entry)
@@ -97,6 +109,7 @@ static bool isPackage(const QFileSystemMetaData &data, const QFileSystemEntry &e
if (CFBundleGetPackageInfoInDirectory(url, &type, &creator))
return true;
+#ifdef Q_OS_OSX
// Find if an application other than Finder claims to know how to handle the package
QCFType<CFURLRef> application;
LSGetApplicationForURL(url,
@@ -111,30 +124,11 @@ static bool isPackage(const QFileSystemMetaData &data, const QFileSystemEntry &e
if (applicationId != QLatin1String("com.apple.finder"))
return true;
}
+#endif
}
// Third step: check if the directory has the package bit set
- FSRef packageRef;
- FSPathMakeRef((UInt8 *)entry.nativeFilePath().constData(), &packageRef, NULL);
-
- FSCatalogInfo catalogInfo;
- FSGetCatalogInfo(&packageRef,
- kFSCatInfoFinderInfo,
- &catalogInfo,
- NULL,
- NULL,
- NULL);
-
- FolderInfo *folderInfo = reinterpret_cast<FolderInfo *>(catalogInfo.finderInfo);
- return folderInfo->finderFlags & kHasBundle;
-}
-
-#else
-static inline bool _q_isMacHidden(const char *nativePath)
-{
- Q_UNUSED(nativePath);
- // no-op
- return false;
+ return hasResourcePropertyFlag(data, entry, kCFURLIsPackageKey);
}
#endif
@@ -194,21 +188,34 @@ QFileSystemEntry QFileSystemEngine::getLinkTarget(const QFileSystemEntry &link,
ret.chop(1);
return QFileSystemEntry(ret);
}
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
{
- FSRef fref;
- if (FSPathMakeRef((const UInt8 *)QFile::encodeName(QDir::cleanPath(link.filePath())).data(), &fref, 0) == noErr) {
- // TODO get the meta data info from the QFileSystemMetaData object
- Boolean isAlias, isFolder;
- if (FSResolveAliasFile(&fref, true, &isFolder, &isAlias) == noErr && isAlias) {
- AliasHandle alias;
- if (FSNewAlias(0, &fref, &alias) == noErr && alias) {
- QCFString cfstr;
- if (FSCopyAliasInfo(alias, 0, 0, &cfstr, 0, 0) == noErr)
- return QFileSystemEntry(QCFString::toQString(cfstr));
- }
- }
- }
+ QCFString path = CFStringCreateWithFileSystemRepresentation(0,
+ QFile::encodeName(QDir::cleanPath(link.filePath())).data());
+ if (!path)
+ return QFileSystemEntry();
+
+ QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(0, path, kCFURLPOSIXPathStyle,
+ data.hasFlags(QFileSystemMetaData::DirectoryType));
+ if (!url)
+ return QFileSystemEntry();
+
+ QCFType<CFDataRef> bookmarkData = CFURLCreateBookmarkDataFromFile(0, url, NULL);
+ if (!bookmarkData)
+ return QFileSystemEntry();
+
+ QCFType<CFURLRef> resolvedUrl = CFURLCreateByResolvingBookmarkData(0,
+ bookmarkData,
+ (CFURLBookmarkResolutionOptions)(kCFBookmarkResolutionWithoutUIMask
+ | kCFBookmarkResolutionWithoutMountingMask), NULL, NULL, NULL, NULL);
+ if (!resolvedUrl)
+ return QFileSystemEntry();
+
+ QCFString cfstr(CFURLCopyFileSystemPath(resolvedUrl, kCFURLPOSIXPathStyle));
+ if (!cfstr)
+ return QFileSystemEntry();
+
+ return QFileSystemEntry(QCFString::toQString(cfstr));
}
#endif
return QFileSystemEntry();
@@ -226,31 +233,14 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
return QFileSystemEntry(slowCanonicalized(absoluteName(entry).filePath()));
#else
char *ret = 0;
-# if defined(Q_OS_MACX)
- // When using -mmacosx-version-min=10.4, we get the legacy realpath implementation,
- // which does not work properly with the realpath(X,0) form. See QTBUG-28282.
- if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) {
- ret = (char*)malloc(PATH_MAX + 1);
- if (ret && realpath(entry.nativeFilePath().constData(), (char*)ret) == 0) {
- const int savedErrno = errno; // errno is checked below, and free() might change it
- free(ret);
- errno = savedErrno;
- ret = 0;
- }
- } else {
- // on 10.5 we can use FSRef to resolve the file path.
- QString path = QDir::cleanPath(entry.filePath());
- FSRef fsref;
- if (FSPathMakeRef((const UInt8 *)path.toUtf8().data(), &fsref, 0) == noErr) {
- CFURLRef urlref = CFURLCreateFromFSRef(NULL, &fsref);
- CFStringRef canonicalPath = CFURLCopyFileSystemPath(urlref, kCFURLPOSIXPathStyle);
- QString ret = QCFString::toQString(canonicalPath);
- CFRelease(canonicalPath);
- CFRelease(urlref);
- return QFileSystemEntry(ret);
- }
+# if defined(Q_OS_DARWIN)
+ ret = (char*)malloc(PATH_MAX + 1);
+ if (ret && realpath(entry.nativeFilePath().constData(), (char*)ret) == 0) {
+ const int savedErrno = errno; // errno is checked below, and free() might change it
+ free(ret);
+ errno = savedErrno;
+ ret = 0;
}
-
# elif defined(Q_OS_ANDROID)
// On some Android versions, realpath() will return a path even if it does not exist
// To work around this, we check existence in advance.
@@ -406,7 +396,7 @@ QString QFileSystemEngine::resolveGroupName(uint groupId)
return QString();
}
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
//static
QString QFileSystemEngine::bundleName(const QFileSystemEntry &entry)
{
@@ -426,7 +416,7 @@ QString QFileSystemEngine::bundleName(const QFileSystemEntry &entry)
bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data,
QFileSystemMetaData::MetaDataFlags what)
{
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
if (what & QFileSystemMetaData::BundleType) {
if (!data.hasFlags(QFileSystemMetaData::DirectoryType))
what |= QFileSystemMetaData::DirectoryType;
@@ -435,7 +425,7 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
// OS X >= 10.5: st_flags & UF_HIDDEN
what |= QFileSystemMetaData::PosixStatFlags;
}
-#endif // defined(Q_OS_MACX)
+#endif // defined(Q_OS_DARWIN)
if (what & QFileSystemMetaData::PosixStatFlags)
what |= QFileSystemMetaData::PosixStatFlags;
@@ -496,19 +486,11 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
| QFileSystemMetaData::ExistsAttribute;
}
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
if (what & QFileSystemMetaData::AliasType)
{
- if (entryExists) {
- FSRef fref;
- if (FSPathMakeRef((const UInt8 *)nativeFilePath, &fref, NULL) == noErr) {
- Boolean isAlias, isFolder;
- if (FSIsAliasFile(&fref, &isAlias, &isFolder) == noErr) {
- if (isAlias)
- data.entryFlags |= QFileSystemMetaData::AliasType;
- }
- }
- }
+ if (entryExists && hasResourcePropertyFlag(data, entry, kCFURLIsAliasFileKey))
+ data.entryFlags |= QFileSystemMetaData::AliasType;
data.knownFlagsMask |= QFileSystemMetaData::AliasType;
}
#endif
@@ -537,12 +519,15 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
&& !data.isHidden()) {
QString fileName = entry.fileName();
if ((fileName.size() > 0 && fileName.at(0) == QLatin1Char('.'))
- || (entryExists && _q_isMacHidden(nativeFilePath)))
+#if defined(Q_OS_DARWIN)
+ || (entryExists && hasResourcePropertyFlag(data, entry, kCFURLIsHiddenKey))
+#endif
+ )
data.entryFlags |= QFileSystemMetaData::HiddenAttribute;
data.knownFlagsMask |= QFileSystemMetaData::HiddenAttribute;
}
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
if (what & QFileSystemMetaData::BundleType) {
if (entryExists && isPackage(data, entry))
data.entryFlags |= QFileSystemMetaData::BundleType;
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp
index d62c120d7e..379095a83d 100644
--- a/src/corelib/io/qfilesystemengine_win.cpp
+++ b/src/corelib/io/qfilesystemengine_win.cpp
@@ -407,7 +407,7 @@ static QString readLink(const QFileSystemEntry &link)
Q_UNUSED(link);
return QString();
#endif // QT_NO_LIBRARY
-#else
+#elif !defined(QT_NO_WINCE_SHELLSDK)
wchar_t target[MAX_PATH];
QString result;
if (SHGetShortcutTarget((wchar_t*)QFileInfo(link.filePath()).absoluteFilePath().replace(QLatin1Char('/'),QLatin1Char('\\')).utf16(), target, MAX_PATH)) {
@@ -418,6 +418,9 @@ static QString readLink(const QFileSystemEntry &link)
result.remove(result.size()-1,1);
}
return result;
+#else // QT_NO_WINCE_SHELLSDK
+ Q_UNUSED(link);
+ return QString();
#endif // Q_OS_WINCE
}
diff --git a/src/corelib/io/qfilesystementry.cpp b/src/corelib/io/qfilesystementry.cpp
index 79f16a0839..709970e3ac 100644
--- a/src/corelib/io/qfilesystementry.cpp
+++ b/src/corelib/io/qfilesystementry.cpp
@@ -53,8 +53,7 @@ static bool isUncRoot(const QString &server)
if (idx == -1 || idx + 1 == localPath.length())
return true;
- localPath = localPath.right(localPath.length() - idx - 1).trimmed();
- return localPath.isEmpty();
+ return localPath.rightRef(localPath.length() - idx - 1).trimmed().isEmpty();
}
static inline QString fixIfRelativeUncPath(const QString &path)
diff --git a/src/corelib/io/qfilesystemmetadata_p.h b/src/corelib/io/qfilesystemmetadata_p.h
index da9576b5f8..828b5b329c 100644
--- a/src/corelib/io/qfilesystemmetadata_p.h
+++ b/src/corelib/io/qfilesystemmetadata_p.h
@@ -93,7 +93,7 @@ public:
LinkType = 0x00010000,
FileType = 0x00020000,
DirectoryType = 0x00040000,
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
BundleType = 0x00080000,
AliasType = 0x08000000,
#else
@@ -243,7 +243,7 @@ private:
Q_DECLARE_OPERATORS_FOR_FLAGS(QFileSystemMetaData::MetaDataFlags)
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_DARWIN)
inline bool QFileSystemMetaData::isBundle() const { return (entryFlags & BundleType); }
inline bool QFileSystemMetaData::isAlias() const { return (entryFlags & AliasType); }
#else
diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp
index 7fc3049f46..354e4931b9 100644
--- a/src/corelib/io/qfilesystemwatcher.cpp
+++ b/src/corelib/io/qfilesystemwatcher.cpp
@@ -177,7 +177,7 @@ void QFileSystemWatcherPrivate::_q_directoryChanged(const QString &path, bool re
\note The act of monitoring files and directories for
modifications consumes system resources. This implies there is a
limit to the number of files and directories your process can
- monitor simultaneously. On Mac OS X 10.4 and all BSD variants, for
+ monitor simultaneously. On all BSD variants, for
example, an open file descriptor is required for each monitored
file. Some system limits the number of open file descriptors to 256
by default. This means that addPath() and addPaths() will fail if
@@ -185,7 +185,7 @@ void QFileSystemWatcherPrivate::_q_directoryChanged(const QString &path, bool re
the file system monitor. Also note that your process may have
other file descriptors open in addition to the ones for files
being monitored, and these other open descriptors also count in
- the total. Mac OS X 10.5 and up use a different backend and do not
+ the total. OS X uses a different backend and does not
suffer from this issue.
@@ -296,7 +296,9 @@ QStringList QFileSystemWatcher::addPaths(const QStringList &paths)
QFileSystemWatcherEngine *engine = 0;
- if(!objectName().startsWith(QLatin1String("_qt_autotest_force_engine_"))) {
+ const QString on = objectName();
+
+ if (!on.startsWith(QLatin1String("_qt_autotest_force_engine_"))) {
// Normal runtime case - search intelligently for best engine
if(d->native) {
engine = d->native;
@@ -307,7 +309,7 @@ QStringList QFileSystemWatcher::addPaths(const QStringList &paths)
} else {
// Autotest override case - use the explicitly selected engine only
- QString forceName = objectName().mid(26);
+ const QStringRef forceName = on.midRef(26);
if(forceName == QLatin1String("poller")) {
qDebug() << "QFileSystemWatcher: skipping native engine, using only polling engine";
d_func()->initPollerEngine();
diff --git a/src/corelib/io/qfilesystemwatcher.h b/src/corelib/io/qfilesystemwatcher.h
index 13d1782913..095b50d1e5 100644
--- a/src/corelib/io/qfilesystemwatcher.h
+++ b/src/corelib/io/qfilesystemwatcher.h
@@ -49,8 +49,8 @@ class Q_CORE_EXPORT QFileSystemWatcher : public QObject
Q_DECLARE_PRIVATE(QFileSystemWatcher)
public:
- QFileSystemWatcher(QObject *parent = 0);
- QFileSystemWatcher(const QStringList &paths, QObject *parent = 0);
+ QFileSystemWatcher(QObject *parent = Q_NULLPTR);
+ QFileSystemWatcher(const QStringList &paths, QObject *parent = Q_NULLPTR);
~QFileSystemWatcher();
bool addPath(const QString &file);
diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm
index 8a028c91e1..7656530a46 100644
--- a/src/corelib/io/qfilesystemwatcher_fsevents.mm
+++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm
@@ -56,25 +56,6 @@
QT_BEGIN_NAMESPACE
-namespace {
-class RaiiAutoreleasePool
-{
- Q_DISABLE_COPY(RaiiAutoreleasePool)
-
-public:
- RaiiAutoreleasePool()
- : pool([[NSAutoreleasePool alloc] init])
- {}
-
- ~RaiiAutoreleasePool()
- { [pool release]; }
-
-private:
- NSAutoreleasePool *pool;
-};
-#define Q_AUTORELEASE_POOL(pool) RaiiAutoreleasePool pool; Q_UNUSED(pool);
-}
-
static void callBackFunction(ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
@@ -82,7 +63,7 @@ static void callBackFunction(ConstFSEventStreamRef streamRef,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
{
- Q_AUTORELEASE_POOL(pool)
+ QMacAutoReleasePool pool;
char **paths = static_cast<char **>(eventPaths);
QFseventsFileSystemWatcherEngine *engine = static_cast<QFseventsFileSystemWatcherEngine *>(clientCallBackInfo);
@@ -297,7 +278,7 @@ void QFseventsFileSystemWatcherEngine::doEmitDirectoryChanged(const QString &pat
void QFseventsFileSystemWatcherEngine::restartStream()
{
- Q_AUTORELEASE_POOL(pool)
+ QMacAutoReleasePool pool;
QMutexLocker locker(&lock);
stopStream();
startStream();
@@ -328,7 +309,7 @@ QFseventsFileSystemWatcherEngine::QFseventsFileSystemWatcherEngine(QObject *pare
QFseventsFileSystemWatcherEngine::~QFseventsFileSystemWatcherEngine()
{
- Q_AUTORELEASE_POOL(pool)
+ QMacAutoReleasePool pool;
if (stream)
FSEventStreamStop(stream);
@@ -344,7 +325,7 @@ QStringList QFseventsFileSystemWatcherEngine::addPaths(const QStringList &paths,
QStringList *files,
QStringList *directories)
{
- Q_AUTORELEASE_POOL(pool)
+ QMacAutoReleasePool pool;
if (stream) {
DEBUG("Flushing, last id is %llu", FSEventStreamGetLatestEventId(stream));
@@ -432,7 +413,7 @@ QStringList QFseventsFileSystemWatcherEngine::removePaths(const QStringList &pat
QStringList *files,
QStringList *directories)
{
- Q_AUTORELEASE_POOL(pool)
+ QMacAutoReleasePool pool;
QMutexLocker locker(&lock);
@@ -489,7 +470,7 @@ QStringList QFseventsFileSystemWatcherEngine::removePaths(const QStringList &pat
bool QFseventsFileSystemWatcherEngine::startStream()
{
Q_ASSERT(stream == 0);
- Q_AUTORELEASE_POOL(pool)
+ QMacAutoReleasePool pool;
if (stream) // This shouldn't happen, but let's be nice and handle it.
stopStream();
diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp
index 4907a20a5f..410753868e 100644
--- a/src/corelib/io/qfilesystemwatcher_win.cpp
+++ b/src/corelib/io/qfilesystemwatcher_win.cpp
@@ -186,7 +186,7 @@ QStringList QWindowsFileSystemWatcherEngine::addPaths(const QStringList &paths,
}
if (!found) {
QWindowsFileSystemWatcherEngineThread *thread = new QWindowsFileSystemWatcherEngineThread();
- DEBUG() << " ###Creating new thread" << thread << "(" << (threads.count()+1) << "threads)";
+ DEBUG() << " ###Creating new thread" << thread << '(' << (threads.count()+1) << "threads)";
thread->handles.append(handle.handle);
thread->handleForDir.insert(QFileSystemWatcherPathKey(absolutePath), handle);
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index 8ba05fa8b9..0a7f551672 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -199,7 +199,6 @@ public:
bool closeFileHandle;
mutable uint is_sequential : 2;
- mutable uint could_stat : 1;
mutable uint tried_stat : 1;
#if !defined(Q_OS_WINCE)
mutable uint need_lstat : 1;
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index 19343f22ff..cfd50955a6 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -711,7 +711,7 @@ bool QFSFileEngine::link(const QString &newName)
Q_UNUSED(newName);
return false;
#endif // QT_NO_LIBRARY
-#elif defined(Q_OS_WINCE)
+#elif defined(Q_OS_WINCE) && !defined(QT_NO_WINCE_SHELLSDK)
QString linkName = newName;
linkName.replace(QLatin1Char('/'), QLatin1Char('\\'));
if (!linkName.endsWith(QLatin1String(".lnk")))
@@ -724,7 +724,7 @@ bool QFSFileEngine::link(const QString &newName)
if (!ret)
setError(QFile::RenameError, qt_error_string());
return ret;
-#else // Q_OS_WINCE
+#else // Q_OS_WINCE && !QT_NO_WINCE_SHELLSDK
Q_UNUSED(newName);
Q_UNIMPLEMENTED();
return false;
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index cd448ad9cf..3c7a7d69e4 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -39,6 +39,7 @@
#include "qfile.h"
#include "qstringlist.h"
#include "qdir.h"
+#include "private/qbytearray_p.h"
#include <algorithm>
@@ -144,7 +145,6 @@ QIODevicePrivate::QIODevicePrivate()
: openMode(QIODevice::NotOpen), buffer(QIODEVICE_BUFFERSIZE),
pos(0), devicePos(0)
, baseReadLineDataCalled(false)
- , firstRead(true)
, accessMode(Unset)
#ifdef QT_NO_QOBJECT
, q_ptr(0)
@@ -469,7 +469,6 @@ void QIODevice::setOpenMode(OpenMode openMode)
#endif
d->openMode = openMode;
d->accessMode = QIODevicePrivate::Unset;
- d->firstRead = true;
if (!isReadable())
d->buffer.clear();
}
@@ -561,7 +560,6 @@ bool QIODevice::open(OpenMode mode)
d->pos = (mode & Append) ? size() : qint64(0);
d->buffer.clear();
d->accessMode = QIODevicePrivate::Unset;
- d->firstRead = true;
#if defined QIODEVICE_DEBUG
printf("%p QIODevice::open(0x%x)\n", this, quint32(mode));
#endif
@@ -591,7 +589,6 @@ void QIODevice::close()
d->errorString.clear();
d->pos = 0;
d->buffer.clear();
- d->firstRead = true;
}
/*!
@@ -698,12 +695,13 @@ bool QIODevice::seek(qint64 pos)
bool QIODevice::atEnd() const
{
Q_D(const QIODevice);
+ const bool result = (d->openMode == NotOpen || (d->buffer.isEmpty()
+ && bytesAvailable() == 0));
#if defined QIODEVICE_DEBUG
printf("%p QIODevice::atEnd() returns %s, d->openMode == %d, d->pos == %lld\n", this,
- (d->openMode == NotOpen || d->pos == size()) ? "true" : "false", int(d->openMode),
- d->pos);
+ result ? "true" : "false", int(d->openMode), d->pos);
#endif
- return d->openMode == NotOpen || (d->buffer.isEmpty() && bytesAvailable() == 0);
+ return result;
}
/*!
@@ -820,12 +818,7 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
bufferReadChunkSize, readSoFar - bufferReadChunkSize);
#endif
} else {
- if (d->firstRead) {
- // this is the first time the file has been read, check it's valid and set up pos pointers
- // for fast pos updates.
- CHECK_READABLE(read, qint64(-1));
- d->firstRead = false;
- }
+ CHECK_READABLE(read, qint64(-1));
}
if (maxSize > 0 && !deviceAtEof) {
@@ -947,9 +940,9 @@ QByteArray QIODevice::read(qint64 maxSize)
Q_UNUSED(d);
#endif
- if (quint64(maxSize) >= QByteArray::MaxSize) {
+ if (maxSize >= MaxByteArraySize) {
checkWarnMessage(this, "read", "maxSize argument exceeds QByteArray size limit");
- maxSize = QByteArray::MaxSize - 1;
+ maxSize = MaxByteArraySize - 1;
}
qint64 readBytes = 0;
@@ -980,7 +973,7 @@ QByteArray QIODevice::read(qint64 maxSize)
/*!
\overload
- Reads all available data from the device, and returns it as a
+ Reads all remaining data from the device, and returns it as a
byte array.
This function has no way of reporting errors; returning an empty
@@ -996,40 +989,31 @@ QByteArray QIODevice::readAll()
#endif
QByteArray result;
- qint64 readBytes = 0;
- const bool sequential = d->isSequential();
-
- // flush internal read buffer
- if (!(d->openMode & Text) && !d->buffer.isEmpty()) {
- if (quint64(d->buffer.size()) >= QByteArray::MaxSize)
- return QByteArray();
- result = d->buffer.readAll();
- readBytes = result.size();
- if (!sequential)
- d->pos += readBytes;
- }
-
- qint64 theSize;
- if (sequential || (theSize = size()) == 0) {
+ qint64 readBytes = (d->isSequential() ? Q_INT64_C(0) : size());
+ if (readBytes == 0) {
// Size is unknown, read incrementally.
+ qint64 readChunkSize = qMax(d->buffer.size(), QIODEVICE_BUFFERSIZE);
qint64 readResult;
do {
- if (quint64(readBytes) + QIODEVICE_BUFFERSIZE > QByteArray::MaxSize) {
+ if (readBytes + readChunkSize >= MaxByteArraySize) {
// If resize would fail, don't read more, return what we have.
break;
}
- result.resize(readBytes + QIODEVICE_BUFFERSIZE);
- readResult = read(result.data() + readBytes, QIODEVICE_BUFFERSIZE);
- if (readResult > 0 || readBytes == 0)
+ result.resize(readBytes + readChunkSize);
+ readResult = read(result.data() + readBytes, readChunkSize);
+ if (readResult > 0 || readBytes == 0) {
readBytes += readResult;
+ readChunkSize = QIODEVICE_BUFFERSIZE;
+ }
} while (readResult > 0);
} else {
// Read it all in one go.
// If resize fails, don't read anything.
- if (quint64(readBytes + theSize - d->pos) > QByteArray::MaxSize)
+ readBytes -= d->pos;
+ if (readBytes >= MaxByteArraySize)
return QByteArray();
- result.resize(int(readBytes + theSize - d->pos));
- readBytes += read(result.data() + readBytes, result.size() - readBytes);
+ result.resize(readBytes);
+ readBytes = read(result.data(), readBytes);
}
if (readBytes <= 0)
@@ -1184,9 +1168,9 @@ QByteArray QIODevice::readLine(qint64 maxSize)
Q_UNUSED(d);
#endif
- if (quint64(maxSize) >= QByteArray::MaxSize) {
+ if (maxSize >= MaxByteArraySize) {
qWarning("QIODevice::read: maxSize argument exceeds QByteArray size limit");
- maxSize = QByteArray::MaxSize - 1;
+ maxSize = MaxByteArraySize - 1;
}
result.resize(int(maxSize));
@@ -1194,7 +1178,7 @@ QByteArray QIODevice::readLine(qint64 maxSize)
if (!result.size()) {
// If resize fails or maxSize == 0, read incrementally
if (maxSize == 0)
- maxSize = QByteArray::MaxSize - 1;
+ maxSize = MaxByteArraySize - 1;
// The first iteration needs to leave an extra byte for the terminating null
result.resize(1);
@@ -1305,6 +1289,7 @@ qint64 QIODevice::write(const char *data, qint64 maxSize)
const char *startOfBlock = data;
qint64 writtenSoFar = 0;
+ const qint64 savedPos = d->pos;
forever {
const char *endOfBlock = startOfBlock;
@@ -1316,7 +1301,7 @@ qint64 QIODevice::write(const char *data, qint64 maxSize)
qint64 ret = writeData(startOfBlock, blockSize);
if (ret <= 0) {
if (writtenSoFar && !sequential)
- d->buffer.skip(writtenSoFar);
+ d->buffer.skip(d->pos - savedPos);
return writtenSoFar ? writtenSoFar : ret;
}
if (!sequential) {
@@ -1332,7 +1317,7 @@ qint64 QIODevice::write(const char *data, qint64 maxSize)
qint64 ret = writeData("\r\n", 2);
if (ret <= 0) {
if (writtenSoFar && !sequential)
- d->buffer.skip(writtenSoFar);
+ d->buffer.skip(d->pos - savedPos);
return writtenSoFar ? writtenSoFar : ret;
}
if (!sequential) {
@@ -1345,7 +1330,7 @@ qint64 QIODevice::write(const char *data, qint64 maxSize)
}
if (writtenSoFar && !sequential)
- d->buffer.skip(writtenSoFar);
+ d->buffer.skip(d->pos - savedPos);
return writtenSoFar;
}
#endif
diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h
index 4f45805fca..b62c8d266c 100644
--- a/src/corelib/io/qiodevice.h
+++ b/src/corelib/io/qiodevice.h
@@ -140,7 +140,7 @@ protected:
#ifdef QT_NO_QOBJECT
QIODevice(QIODevicePrivate &dd);
#else
- QIODevice(QIODevicePrivate &dd, QObject *parent = 0);
+ QIODevice(QIODevicePrivate &dd, QObject *parent = Q_NULLPTR);
#endif
virtual qint64 readData(char *data, qint64 maxlen) = 0;
virtual qint64 readLineData(char *data, qint64 maxlen);
diff --git a/src/corelib/io/qiodevice_p.h b/src/corelib/io/qiodevice_p.h
index 8342176cff..6ab1de27e0 100644
--- a/src/corelib/io/qiodevice_p.h
+++ b/src/corelib/io/qiodevice_p.h
@@ -216,7 +216,6 @@ public:
qint64 pos;
qint64 devicePos;
bool baseReadLineDataCalled;
- bool firstRead;
virtual bool putCharHelper(char c);
diff --git a/src/corelib/io/qlockfile_unix.cpp b/src/corelib/io/qlockfile_unix.cpp
index 667b108ba0..623968b869 100644
--- a/src/corelib/io/qlockfile_unix.cpp
+++ b/src/corelib/io/qlockfile_unix.cpp
@@ -202,6 +202,13 @@ QLockFile::LockError QLockFilePrivate::tryLock_sys()
// We hold the lock, continue.
fileHandle = fd;
+ // Sync to disk if possible. Ignore errors (e.g. not supported).
+#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
+ fdatasync(fileHandle);
+#else
+ fsync(fileHandle);
+#endif
+
return QLockFile::NoError;
}
@@ -283,6 +290,7 @@ QString QLockFilePrivate::processNameByPid(qint64 pid)
free(proc);
return name;
#else
+ Q_UNUSED(pid);
return QString();
#endif
}
diff --git a/src/corelib/io/qloggingcategory.cpp b/src/corelib/io/qloggingcategory.cpp
index e6bc7caaeb..b51085ef42 100644
--- a/src/corelib/io/qloggingcategory.cpp
+++ b/src/corelib/io/qloggingcategory.cpp
@@ -147,8 +147,17 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
\c QT_LOGGING_CONF, and rules set by \c QT_LOGGING_RULES.
+ Since Qt 5.6, \c QT_LOGGING_RULES may contain multiple rules separated
+ by semicolons:
+
+ \code
+ QT_LOGGING_RULES="*.debug=false;driver.usb.debug=true"
+ \endcode
+
+
Order of evaluation:
\list
+ \li [QLibraryInfo::DataPath]/qtlogging.ini
\li QtProject/qtlogging.ini
\li \l setFilterRules()
\li \c QT_LOGGING_CONF
diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp
index 880e567562..b53e251102 100644
--- a/src/corelib/io/qloggingregistry.cpp
+++ b/src/corelib/io/qloggingregistry.cpp
@@ -34,6 +34,7 @@
#include "qloggingregistry_p.h"
#include <QtCore/qfile.h>
+#include <QtCore/qlibraryinfo.h>
#include <QtCore/qstandardpaths.h>
#include <QtCore/qtextstream.h>
#include <QtCore/qdir.h>
@@ -208,7 +209,7 @@ void QLoggingSettingsParser::setContent(QTextStream &stream)
continue;
}
- if (_section == QLatin1String("Rules")) {
+ if (_section.toLower() == QLatin1String("rules")) {
int equalPos = line.indexOf(QLatin1Char('='));
if (equalPos != -1) {
if (line.lastIndexOf(QLatin1Char('=')) == equalPos) {
@@ -247,6 +248,21 @@ static bool qtLoggingDebug()
return debugEnv;
}
+static QVector<QLoggingRule> loadRulesFromFile(const QString &filePath)
+{
+ QFile file(filePath);
+ if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ if (qtLoggingDebug())
+ debugMsg("Loading \"%s\" ...",
+ QDir::toNativeSeparators(file.fileName()).toUtf8().constData());
+ QTextStream stream(&file);
+ QLoggingSettingsParser parser;
+ parser.setContent(stream);
+ return parser.rules();
+ }
+ return QVector<QLoggingRule>();
+}
+
/*!
\internal
Initializes the rules database by loading
@@ -256,19 +272,10 @@ void QLoggingRegistry::init()
{
// get rules from environment
const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF");
- if (!rulesFilePath.isEmpty()) {
- QFile file(QFile::decodeName(rulesFilePath));
- if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- if (qtLoggingDebug())
- debugMsg("Loading \"%s\" ...",
- QDir::toNativeSeparators(file.fileName()).toUtf8().constData());
- QTextStream stream(&file);
- QLoggingSettingsParser parser;
- parser.setContent(stream);
- envRules = parser.rules();
- }
- }
- const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES");
+ if (!rulesFilePath.isEmpty())
+ envRules = loadRulesFromFile(QFile::decodeName(rulesFilePath));
+
+ const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES").replace(';', '\n');
if (!rulesSrc.isEmpty()) {
QTextStream stream(rulesSrc);
QLoggingSettingsParser parser;
@@ -277,23 +284,22 @@ void QLoggingRegistry::init()
envRules += parser.rules();
}
- // get rules from qt configuration
- QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation,
- QStringLiteral("QtProject/qtlogging.ini"));
- if (!envPath.isEmpty()) {
- QFile file(envPath);
- if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- if (qtLoggingDebug())
- debugMsg("Loading \"%s\" ...",
- QDir::toNativeSeparators(envPath).toUtf8().constData());
- QTextStream stream(&file);
- QLoggingSettingsParser parser;
- parser.setContent(stream);
- configRules = parser.rules();
- }
- }
+ const QString configFileName = QStringLiteral("qtlogging.ini");
+
+#if !defined(QT_BOOTSTRAPPED)
+ // get rules from Qt data configuration path
+ const QString qtConfigPath
+ = QDir(QLibraryInfo::location(QLibraryInfo::DataPath)).absoluteFilePath(configFileName);
+ qtConfigRules = loadRulesFromFile(qtConfigPath);
+#endif
+
+ // get rules from user's/system configuration
+ const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation,
+ QString::fromLatin1("QtProject/") + configFileName);
+ if (!envPath.isEmpty())
+ configRules = loadRulesFromFile(envPath);
- if (!envRules.isEmpty() || !configRules.isEmpty()) {
+ if (!envRules.isEmpty() || !qtConfigRules.isEmpty() || !configRules.isEmpty()) {
QMutexLocker locker(&registryMutex);
updateRules();
}
@@ -356,7 +362,7 @@ void QLoggingRegistry::updateRules()
if (categoryFilter != defaultCategoryFilter)
return;
- rules = configRules + apiRules + envRules;
+ rules = qtConfigRules + configRules + apiRules + envRules;
foreach (QLoggingCategory *cat, categories.keys())
(*categoryFilter)(cat);
diff --git a/src/corelib/io/qloggingregistry_p.h b/src/corelib/io/qloggingregistry_p.h
index 718e09d9bb..bb32a4996d 100644
--- a/src/corelib/io/qloggingregistry_p.h
+++ b/src/corelib/io/qloggingregistry_p.h
@@ -122,6 +122,7 @@ private:
QMutex registryMutex;
+ QVector<QLoggingRule> qtConfigRules;
QVector<QLoggingRule> configRules;
QVector<QLoggingRule> envRules;
QVector<QLoggingRule> apiRules;
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index c29b97b535..952116b9db 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -101,6 +101,19 @@ QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
/*!
+ \since 5.6
+
+ \macro QT_NO_PROCESS_COMBINED_ARGUMENT_START
+ \relates QProcess
+
+ Disables the QProcess::start() overload taking a single string.
+ In most cases where it is used, the user intends for the first argument
+ to be treated atomically as per the other overload.
+
+ \sa QProcess::start()
+*/
+
+/*!
\class QProcessEnvironment
\inmodule QtCore
@@ -110,7 +123,6 @@ QT_BEGIN_NAMESPACE
\ingroup io
\ingroup misc
\ingroup shared
- \mainclass
\reentrant
\since 4.6
@@ -144,16 +156,8 @@ QStringList QProcessEnvironmentPrivate::toList() const
{
QStringList result;
result.reserve(hash.size());
- Hash::ConstIterator it = hash.constBegin(),
- end = hash.constEnd();
- for ( ; it != end; ++it) {
- QString data = nameToString(it.key());
- QString value = valueToString(it.value());
- data.reserve(data.length() + value.length() + 1);
- data.append(QLatin1Char('='));
- data.append(value);
- result << data;
- }
+ for (Hash::const_iterator it = hash.cbegin(), end = hash.cend(); it != end; ++it)
+ result << nameToString(it.key()) + QLatin1Char('=') + valueToString(it.value());
return result;
}
@@ -265,11 +269,16 @@ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const
{
if (d == other.d)
return true;
- if (d && other.d) {
- QProcessEnvironmentPrivate::OrderedMutexLocker locker(d, other.d);
- return d->hash == other.d->hash;
+ if (d) {
+ if (other.d) {
+ QProcessEnvironmentPrivate::OrderedMutexLocker locker(d, other.d);
+ return d->hash == other.d->hash;
+ } else {
+ return isEmpty();
+ }
+ } else {
+ return other.isEmpty();
}
- return false;
}
/*!
@@ -498,8 +507,8 @@ void QProcessPrivate::Channel::clear()
the process as arguments, and you can also call exitCode() to
obtain the exit code of the last process that finished, and
exitStatus() to obtain its exit status. If an error occurs at
- any point in time, QProcess will emit the error() signal. You
- can also call error() to find the type of error that occurred
+ any point in time, QProcess will emit the errorOccurred() signal.
+ You can also call error() to find the type of error that occurred
last, and state() to find the current process state.
\section1 Communicating via Channels
@@ -736,6 +745,14 @@ void QProcessPrivate::Channel::clear()
/*!
\fn void QProcess::error(QProcess::ProcessError error)
+ \obsolete
+
+ Use errorOccurred() instead.
+*/
+
+/*!
+ \fn void QProcess::errorOccurred(QProcess::ProcessError error)
+ \since 5.6
This signal is emitted when an error occurs with the process. The
specified \a error describes the type of error that occurred.
@@ -898,6 +915,50 @@ void QProcessPrivate::cleanup()
/*!
\internal
+*/
+void QProcessPrivate::setError(QProcess::ProcessError error, const QString &description)
+{
+ processError = error;
+ if (description.isEmpty()) {
+ switch (error) {
+ case QProcess::FailedToStart:
+ errorString = QProcess::tr("Process failed to start");
+ break;
+ case QProcess::Crashed:
+ errorString = QProcess::tr("Process crashed");
+ break;
+ case QProcess::Timedout:
+ errorString = QProcess::tr("Process operation timed out");
+ break;
+ case QProcess::ReadError:
+ errorString = QProcess::tr("Error reading from process");
+ break;
+ case QProcess::WriteError:
+ errorString = QProcess::tr("Error writing to process");
+ break;
+ case QProcess::UnknownError:
+ errorString.clear();
+ break;
+ }
+ } else {
+ errorString = description;
+ }
+}
+
+/*!
+ \internal
+*/
+void QProcessPrivate::setErrorAndEmit(QProcess::ProcessError error, const QString &description)
+{
+ Q_Q(QProcess);
+ Q_ASSERT(error != QProcess::UnknownError);
+ setError(error, description);
+ emit q->errorOccurred(processError);
+ emit q->error(processError);
+}
+
+/*!
+ \internal
Returns true if we emitted readyRead().
*/
bool QProcessPrivate::tryReadFromChannel(Channel *channel)
@@ -919,9 +980,7 @@ bool QProcessPrivate::tryReadFromChannel(Channel *channel)
return false;
}
if (readBytes == -1) {
- processError = QProcess::ReadError;
- q->setErrorString(QProcess::tr("Error reading from process"));
- emit q->error(processError);
+ setErrorAndEmit(QProcess::ReadError);
#if defined QPROCESS_DEBUG
qDebug("QProcessPrivate::tryReadFromChannel(%d), failed to read from the process", channel - &stdinChannel);
#endif
@@ -1005,9 +1064,7 @@ bool QProcessPrivate::_q_canWrite()
stdinChannel.buffer.nextDataBlockSize());
if (written < 0) {
closeChannel(&stdinChannel);
- processError = QProcess::WriteError;
- q->setErrorString(QProcess::tr("Error writing to process"));
- emit q->error(processError);
+ setErrorAndEmit(QProcess::WriteError);
return false;
}
@@ -1051,7 +1108,7 @@ bool QProcessPrivate::_q_processDied()
// the process may have died before it got a chance to report that it was
// either running or stopped, so we will call _q_startupNotification() and
- // give it a chance to emit started() or error(FailedToStart).
+ // give it a chance to emit started() or errorOccurred(FailedToStart).
if (processState == QProcess::Starting) {
if (!_q_startupNotification())
return true;
@@ -1076,9 +1133,7 @@ bool QProcessPrivate::_q_processDied()
if (crashed) {
exitStatus = QProcess::CrashExit;
- processError = QProcess::Crashed;
- q->setErrorString(QProcess::tr("Process crashed"));
- emit q->error(processError);
+ setErrorAndEmit(QProcess::Crashed);
} else {
#ifdef QPROCESS_USE_SPAWN
// if we're using posix_spawn, waitForStarted always succeeds.
@@ -1086,8 +1141,8 @@ bool QProcessPrivate::_q_processDied()
// 127 if anything prevents the target program from starting.
// http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_spawn.html
if (exitStatus == QProcess::NormalExit && exitCode == 127) {
- processError = QProcess::FailedToStart;
- q->setErrorString(QProcess::tr("Process failed to start (spawned process exited with code 127)"));
+ setError(QProcess::FailedToStart,
+ QProcess::tr("Process failed to start (spawned process exited with code 127)"));
}
#endif
}
@@ -1124,15 +1179,15 @@ bool QProcessPrivate::_q_startupNotification()
if (startupSocketNotifier)
startupSocketNotifier->setEnabled(false);
- if (processStarted()) {
+ QString errorMessage;
+ if (processStarted(&errorMessage)) {
q->setProcessState(QProcess::Running);
emit q->started(QProcess::QPrivateSignal());
return true;
}
q->setProcessState(QProcess::NotRunning);
- processError = QProcess::FailedToStart;
- emit q->error(processError);
+ setErrorAndEmit(QProcess::FailedToStart, errorMessage);
#ifdef Q_OS_UNIX
// make sure the process manager removes this entry
waitForDeadChild();
@@ -1911,12 +1966,12 @@ qint64 QProcess::readData(char *data, qint64 maxlen)
return 1;
}
- qint64 bytesToRead = qint64(qMin(readBuffer->size(), (int)maxlen));
+ qint64 bytesToRead = qMin(readBuffer->size(), maxlen);
qint64 readSoFar = 0;
while (readSoFar < bytesToRead) {
const char *ptr = readBuffer->readPointer();
- int bytesToReadFromThisBlock = qMin<qint64>(bytesToRead - readSoFar,
- readBuffer->nextDataBlockSize());
+ qint64 bytesToReadFromThisBlock = qMin(bytesToRead - readSoFar,
+ readBuffer->nextDataBlockSize());
memcpy(data + readSoFar, ptr, bytesToReadFromThisBlock);
readSoFar += bytesToReadFromThisBlock;
readBuffer->free(bytesToReadFromThisBlock);
@@ -1940,9 +1995,7 @@ qint64 QProcess::writeData(const char *data, qint64 len)
#if defined(Q_OS_WINCE)
Q_UNUSED(data);
Q_UNUSED(len);
- d->processError = QProcess::WriteError;
- setErrorString(tr("Error writing to process"));
- emit error(d->processError);
+ d->setErrorAndEmit(QProcess::WriteError);
return -1;
#endif
@@ -2033,10 +2086,10 @@ QByteArray QProcess::readAllStandardError()
The QProcess object will immediately enter the Starting state. If the
process starts successfully, QProcess will emit started(); otherwise,
- error() will be emitted.
+ errorOccurred() will be emitted.
\note Processes are started asynchronously, which means the started()
- and error() signals may be delayed. Call waitForStarted() to make
+ and errorOccurred() signals may be delayed. Call waitForStarted() to make
sure the process has started (or has failed to start) and those signals
have been emitted.
@@ -2045,7 +2098,9 @@ QByteArray QProcess::readAllStandardError()
\b{Windows:} The arguments are quoted and joined into a command line
that is compatible with the \c CommandLineToArgvW() Windows function.
For programs that have different command line quoting requirements,
- you need to use setNativeArguments().
+ you need to use setNativeArguments(). One notable program that does
+ not follow the \c CommandLineToArgvW() rules is cmd.exe and, by
+ consequence, all batch scripts.
The OpenMode is set to \a mode.
@@ -2147,6 +2202,16 @@ void QProcessPrivate::start(QIODevice::OpenMode mode)
mode &= ~QIODevice::ReadOnly; // not open for reading
if (mode == 0)
mode = QIODevice::Unbuffered;
+#ifndef Q_OS_WINCE
+ if ((mode & QIODevice::ReadOnly) == 0) {
+ if (stdoutChannel.type == QProcessPrivate::Channel::Normal)
+ q->setStandardOutputFile(q->nullDevice());
+ if (stderrChannel.type == QProcessPrivate::Channel::Normal
+ && processChannelMode != QProcess::MergedChannels)
+ q->setStandardErrorFile(q->nullDevice());
+ }
+#endif
+
q->QIODevice::open(mode);
stdinChannel.closed = false;
@@ -2226,15 +2291,26 @@ static QStringList parseCombinedArgString(const QString &program)
After the \a command string has been split and unquoted, this function
behaves like the overload which takes the arguments as a string list.
+ You can disable this overload by defining \c
+ QT_NO_PROCESS_COMBINED_ARGUMENT_START when you compile your applications.
+ This can be useful if you want to ensure that you are not splitting arguments
+ unintentionally, for example. In virtually all cases, using the other overload
+ is the preferred method.
+
+ On operating systems where the system API for passing command line
+ arguments to a subprocess natively uses a single string (Windows), one can
+ conceive command lines which cannot be passed via QProcess's portable
+ list-based API. In these rare cases you need to use setProgram() and
+ setNativeArguments() instead of this function.
+
*/
+#if !defined(QT_NO_PROCESS_COMBINED_ARGUMENT_START)
void QProcess::start(const QString &command, OpenMode mode)
{
QStringList args = parseCombinedArgString(command);
if (args.isEmpty()) {
Q_D(QProcess);
- d->processError = QProcess::FailedToStart;
- setErrorString(tr("No program defined"));
- emit error(d->processError);
+ d->setErrorAndEmit(QProcess::FailedToStart, tr("No program defined"));
return;
}
@@ -2243,6 +2319,7 @@ void QProcess::start(const QString &command, OpenMode mode)
start(prog, args, mode);
}
+#endif
/*!
\since 5.0
diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h
index 078217ea0b..f95358250e 100644
--- a/src/corelib/io/qprocess.h
+++ b/src/corelib/io/qprocess.h
@@ -60,9 +60,12 @@ public:
QProcessEnvironment();
QProcessEnvironment(const QProcessEnvironment &other);
~QProcessEnvironment();
+#ifdef Q_COMPILER_RVALUE_REFS
+ QProcessEnvironment &operator=(QProcessEnvironment && other) Q_DECL_NOTHROW { swap(other); return *this; }
+#endif
QProcessEnvironment &operator=(const QProcessEnvironment &other);
- inline void swap(QProcessEnvironment &other) { qSwap(d, other.d); }
+ void swap(QProcessEnvironment &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
bool operator==(const QProcessEnvironment &other) const;
inline bool operator!=(const QProcessEnvironment &other) const
@@ -104,15 +107,21 @@ public:
WriteError,
UnknownError
};
+ Q_ENUM(ProcessError)
+
enum ProcessState {
NotRunning,
Starting,
Running
};
+ Q_ENUM(ProcessState)
+
enum ProcessChannel {
StandardOutput,
StandardError
};
+ Q_ENUM(ProcessChannel)
+
enum ProcessChannelMode {
SeparateChannels,
MergedChannels,
@@ -120,20 +129,27 @@ public:
ForwardedOutputChannel,
ForwardedErrorChannel
};
+ Q_ENUM(ProcessChannelMode)
+
enum InputChannelMode {
ManagedInputChannel,
ForwardedInputChannel
};
+ Q_ENUM(InputChannelMode)
+
enum ExitStatus {
NormalExit,
CrashExit
};
+ Q_ENUM(ExitStatus)
- explicit QProcess(QObject *parent = 0);
+ explicit QProcess(QObject *parent = Q_NULLPTR);
virtual ~QProcess();
void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite);
+#if !defined(QT_NO_PROCESS_COMBINED_ARGUMENT_START)
void start(const QString &command, OpenMode mode = ReadWrite);
+#endif
void start(OpenMode mode = ReadWrite);
bool open(OpenMode mode = ReadWrite) Q_DECL_OVERRIDE;
@@ -208,7 +224,7 @@ public:
#if defined(Q_QDOC)
= QString()
#endif
- , qint64 *pid = 0);
+ , qint64 *pid = Q_NULLPTR);
#if !defined(Q_QDOC)
static bool startDetached(const QString &program, const QStringList &arguments); // ### Qt6: merge overloads
#endif
@@ -226,7 +242,10 @@ Q_SIGNALS:
void started(QPrivateSignal);
void finished(int exitCode); // ### Qt 6: merge the two signals with a default value
void finished(int exitCode, QProcess::ExitStatus exitStatus);
- void error(QProcess::ProcessError error);
+#if QT_DEPRECATED_SINCE(5,6)
+ QT_MOC_COMPAT void error(QProcess::ProcessError error);
+#endif
+ void errorOccurred(QProcess::ProcessError error);
void stateChanged(QProcess::ProcessState state, QPrivateSignal);
void readyReadStandardOutput(QPrivateSignal);
diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h
index f6bd64fb87..d3f251c399 100644
--- a/src/corelib/io/qprocess_p.h
+++ b/src/corelib/io/qprocess_p.h
@@ -352,7 +352,7 @@ public:
#elif defined(QPROCESS_USE_SPAWN)
pid_t spawnChild(pid_t *ppid, const char *workingDirectory, char **argv, char **envp);
#endif
- bool processStarted();
+ bool processStarted(QString *errorMessage = Q_NULLPTR);
void terminateProcess();
void killProcess();
void findExitCode();
@@ -383,6 +383,8 @@ public:
qint64 writeToStdin(const char *data, qint64 maxlen);
void cleanup();
+ void setError(QProcess::ProcessError error, const QString &description = QString());
+ void setErrorAndEmit(QProcess::ProcessError error, const QString &description = QString());
#ifdef Q_OS_BLACKBERRY
QList<QSocketNotifier *> defaultNotifiers() const;
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 7b6da90b04..8eb5ac9564 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -92,8 +92,8 @@ QT_END_NAMESPACE
#include <private/qthread_p.h>
#include <qfile.h>
#include <qfileinfo.h>
+#include <qdir.h>
#include <qlist.h>
-#include <qhash.h>
#include <qmutex.h>
#include <qsemaphore.h>
#include <qsocketnotifier.h>
@@ -204,8 +204,8 @@ bool QProcessPrivate::openChannel(Channel &channel)
channel.pipe[1] = -1;
if ( (channel.pipe[0] = qt_safe_open(fname, O_RDONLY)) != -1)
return true; // success
-
- q->setErrorString(QProcess::tr("Could not open input redirection for reading"));
+ setErrorAndEmit(QProcess::FailedToStart,
+ QProcess::tr("Could not open input redirection for reading"));
} else {
int mode = O_WRONLY | O_CREAT;
if (channel.append)
@@ -217,12 +217,9 @@ bool QProcessPrivate::openChannel(Channel &channel)
if ( (channel.pipe[1] = qt_safe_open(fname, mode, 0666)) != -1)
return true; // success
- q->setErrorString(QProcess::tr("Could not open output redirection for writing"));
+ setErrorAndEmit(QProcess::FailedToStart,
+ QProcess::tr("Could not open input redirection for reading"));
}
-
- // could not open file
- processError = QProcess::FailedToStart;
- emit q->error(processError);
cleanup();
return false;
} else {
@@ -331,9 +328,7 @@ void QProcessPrivate::startProcess()
!openChannel(stdoutChannel) ||
!openChannel(stderrChannel) ||
qt_create_pipe(childStartedPipe) != 0) {
- processError = QProcess::FailedToStart;
- q->setErrorString(qt_error_string(errno));
- emit q->error(processError);
+ setErrorAndEmit(QProcess::FailedToStart, qt_error_string(errno));
cleanup();
return;
}
@@ -368,11 +363,14 @@ void QProcessPrivate::startProcess()
static QBasicMutex cfbundleMutex;
QMutexLocker lock(&cfbundleMutex);
QCFType<CFBundleRef> bundle = CFBundleCreate(0, url);
- url = CFBundleCopyExecutableURL(bundle);
+ // 'executableURL' can be either relative or absolute ...
+ QCFType<CFURLRef> executableURL = CFBundleCopyExecutableURL(bundle);
+ // not to depend on caching - make sure it's always absolute.
+ url = CFURLCopyAbsoluteURL(executableURL);
}
if (url) {
- QCFString str = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
- encodedProgramName += "/Contents/MacOS/" + QCFString::toQString(str).toUtf8();
+ const QCFString str = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
+ encodedProgramName += (QDir::separator() + QDir(program).relativeFilePath(QCFString::toQString(str))).toUtf8();
}
}
#endif
@@ -406,7 +404,7 @@ void QProcessPrivate::startProcess()
char **path = 0;
int pathc = 0;
if (!program.contains(QLatin1Char('/'))) {
- const QString pathEnv = QString::fromLocal8Bit(::getenv("PATH"));
+ const QString pathEnv = QString::fromLocal8Bit(qgetenv("PATH"));
if (!pathEnv.isEmpty()) {
QStringList pathEntries = pathEnv.split(QLatin1Char(':'), QString::SkipEmptyParts);
if (!pathEntries.isEmpty()) {
@@ -459,9 +457,8 @@ void QProcessPrivate::startProcess()
qDebug("fork failed: %s", qPrintable(qt_error_string(lastForkErrno)));
#endif
q->setProcessState(QProcess::NotRunning);
- processError = QProcess::FailedToStart;
- q->setErrorString(QProcess::tr("Resource error (fork failure): %1").arg(qt_error_string(lastForkErrno)));
- emit q->error(processError);
+ setErrorAndEmit(QProcess::FailedToStart,
+ QProcess::tr("Resource error (fork failure): %1").arg(qt_error_string(lastForkErrno)));
cleanup();
return;
}
@@ -679,9 +676,9 @@ void QProcessPrivate::execChild(const char *workingDir, char **path, char **argv
qt_safe_close(childStartedPipe[0]);
// enter the working directory
- if (workingDir) {
- if (QT_CHDIR(workingDir) == -1)
- qWarning("QProcessPrivate::execChild() failed to chdir to %s", workingDir);
+ if (workingDir && QT_CHDIR(workingDir) == -1) {
+ // failed, stop the process
+ goto report_errno;
}
// this is a virtual call, and it base behavior is to do nothing.
@@ -710,6 +707,7 @@ void QProcessPrivate::execChild(const char *workingDir, char **path, char **argv
}
// notify failure
+report_errno:
QString error = qt_error_string(errno);
#if defined (QPROCESS_DEBUG)
fprintf(stderr, "QProcessPrivate::execChild() failed (%s), notifying parent process\n", qPrintable(error));
@@ -720,7 +718,7 @@ void QProcessPrivate::execChild(const char *workingDir, char **path, char **argv
}
#endif
-bool QProcessPrivate::processStarted()
+bool QProcessPrivate::processStarted(QString *errorMessage)
{
ushort buf[errorBufferMax];
int i = qt_safe_read(childStartedPipe[0], &buf, sizeof buf);
@@ -737,8 +735,8 @@ bool QProcessPrivate::processStarted()
#endif
// did we read an error message?
- if (i > 0)
- q_func()->setErrorString(QString((const QChar *)buf, i / sizeof(QChar)));
+ if ((i > 0) && errorMessage)
+ *errorMessage = QString((const QChar *)buf, i / sizeof(QChar));
return i <= 0;
}
@@ -809,8 +807,6 @@ void QProcessPrivate::killProcess()
bool QProcessPrivate::waitForStarted(int msecs)
{
- Q_Q(QProcess);
-
#if defined (QPROCESS_DEBUG)
qDebug("QProcessPrivate::waitForStarted(%d) waiting for child to start (fd = %d)", msecs,
childStartedPipe[0]);
@@ -820,8 +816,7 @@ bool QProcessPrivate::waitForStarted(int msecs)
FD_ZERO(&fds);
FD_SET(childStartedPipe[0], &fds);
if (qt_select_msecs(childStartedPipe[0] + 1, &fds, 0, msecs) == 0) {
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
#if defined (QPROCESS_DEBUG)
qDebug("QProcessPrivate::waitForStarted(%d) == false (timed out)", msecs);
#endif
@@ -848,7 +843,6 @@ QList<QSocketNotifier *> QProcessPrivate::defaultNotifiers() const
bool QProcessPrivate::waitForReadyRead(int msecs)
{
- Q_Q(QProcess);
#if defined (QPROCESS_DEBUG)
qDebug("QProcessPrivate::waitForReadyRead(%d)", msecs);
#endif
@@ -891,8 +885,7 @@ bool QProcessPrivate::waitForReadyRead(int msecs)
break;
}
if (ret == 0) {
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
@@ -928,7 +921,6 @@ bool QProcessPrivate::waitForReadyRead(int msecs)
bool QProcessPrivate::waitForBytesWritten(int msecs)
{
- Q_Q(QProcess);
#if defined (QPROCESS_DEBUG)
qDebug("QProcessPrivate::waitForBytesWritten(%d)", msecs);
#endif
@@ -973,8 +965,7 @@ bool QProcessPrivate::waitForBytesWritten(int msecs)
}
if (ret == 0) {
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
@@ -1003,7 +994,6 @@ bool QProcessPrivate::waitForBytesWritten(int msecs)
bool QProcessPrivate::waitForFinished(int msecs)
{
- Q_Q(QProcess);
#if defined (QPROCESS_DEBUG)
qDebug("QProcessPrivate::waitForFinished(%d)", msecs);
#endif
@@ -1047,8 +1037,7 @@ bool QProcessPrivate::waitForFinished(int msecs)
break;
}
if (ret == 0) {
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
@@ -1188,7 +1177,7 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a
argv[arguments.size() + 1] = 0;
if (!program.contains(QLatin1Char('/'))) {
- const QString path = QString::fromLocal8Bit(::getenv("PATH"));
+ const QString path = QString::fromLocal8Bit(qgetenv("PATH"));
if (!path.isEmpty()) {
QStringList pathEntries = path.split(QLatin1Char(':'));
for (int k = 0; k < pathEntries.size(); ++k) {
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp
index eb88ded2c9..80e6d5bb61 100644
--- a/src/corelib/io/qprocess_win.cpp
+++ b/src/corelib/io/qprocess_win.cpp
@@ -217,7 +217,8 @@ bool QProcessPrivate::openChannel(Channel &channel)
if (channel.pipe[0] != INVALID_Q_PIPE)
return true;
- q->setErrorString(QProcess::tr("Could not open input redirection for reading"));
+ setErrorAndEmit(QProcess::FailedToStart,
+ QProcess::tr("Could not open input redirection for reading"));
} else {
// open in write mode
channel.pipe[0] = INVALID_Q_PIPE;
@@ -237,12 +238,9 @@ bool QProcessPrivate::openChannel(Channel &channel)
return true;
}
- q->setErrorString(QProcess::tr("Could not open output redirection for writing"));
+ setErrorAndEmit(QProcess::FailedToStart,
+ QProcess::tr("Could not open output redirection for writing"));
}
-
- // could not open file
- processError = QProcess::FailedToStart;
- emit q->error(processError);
cleanup();
return false;
} else {
@@ -504,9 +502,10 @@ void QProcessPrivate::startProcess()
environment.isEmpty() ? 0 : envlist.data(),
workingDirectory.isEmpty() ? 0 : (wchar_t*)QDir::toNativeSeparators(workingDirectory).utf16(),
&startupInfo, pid);
+ QString errorString;
if (!success) {
// Capture the error string before we do CloseHandle below
- q->setErrorString(QProcess::tr("Process failed to start: %1").arg(qt_error_string()));
+ errorString = QProcess::tr("Process failed to start: %1").arg(qt_error_string());
}
if (stdinChannel.pipe[0] != INVALID_Q_PIPE) {
@@ -524,8 +523,7 @@ void QProcessPrivate::startProcess()
if (!success) {
cleanup();
- processError = QProcess::FailedToStart;
- emit q->error(processError);
+ setErrorAndEmit(QProcess::FailedToStart, errorString);
q->setProcessState(QProcess::NotRunning);
return;
}
@@ -545,7 +543,7 @@ void QProcessPrivate::startProcess()
_q_startupNotification();
}
-bool QProcessPrivate::processStarted()
+bool QProcessPrivate::processStarted(QString * /*errorMessage*/)
{
return processState == QProcess::Running;
}
@@ -595,16 +593,13 @@ void QProcessPrivate::killProcess()
bool QProcessPrivate::waitForStarted(int)
{
- Q_Q(QProcess);
-
if (processStarted())
return true;
if (processError == QProcess::FailedToStart)
return false;
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
@@ -636,8 +631,6 @@ bool QProcessPrivate::drainOutputPipes()
bool QProcessPrivate::waitForReadyRead(int msecs)
{
- Q_Q(QProcess);
-
QIncrementalSleepTimer timer(msecs);
forever {
@@ -652,7 +645,7 @@ bool QProcessPrivate::waitForReadyRead(int msecs)
if (!pid)
return false;
- if (WaitForSingleObject(pid->hProcess, 0) == WAIT_OBJECT_0) {
+ if (WaitForSingleObjectEx(pid->hProcess, 0, false) == WAIT_OBJECT_0) {
bool readyReadEmitted = drainOutputPipes();
_q_processDied();
return readyReadEmitted;
@@ -663,15 +656,12 @@ bool QProcessPrivate::waitForReadyRead(int msecs)
break;
}
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
bool QProcessPrivate::waitForBytesWritten(int msecs)
{
- Q_Q(QProcess);
-
QIncrementalSleepTimer timer(msecs);
forever {
@@ -723,7 +713,7 @@ bool QProcessPrivate::waitForBytesWritten(int msecs)
// Wait for the process to signal any change in its state,
// such as incoming data, or if the process died.
- if (WaitForSingleObject(pid->hProcess, 0) == WAIT_OBJECT_0) {
+ if (WaitForSingleObjectEx(pid->hProcess, 0, false) == WAIT_OBJECT_0) {
_q_processDied();
return false;
}
@@ -733,14 +723,12 @@ bool QProcessPrivate::waitForBytesWritten(int msecs)
break;
}
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
bool QProcessPrivate::waitForFinished(int msecs)
{
- Q_Q(QProcess);
#if defined QPROCESS_DEBUG
qDebug("QProcessPrivate::waitForFinished(%d)", msecs);
#endif
@@ -772,8 +760,7 @@ bool QProcessPrivate::waitForFinished(int msecs)
break;
}
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
@@ -816,13 +803,10 @@ qint64 QProcessPrivate::writeToStdin(const char *data, qint64 maxlen)
bool QProcessPrivate::waitForWrite(int msecs)
{
- Q_Q(QProcess);
-
if (!stdinChannel.writer || stdinChannel.writer->waitForWrite(msecs))
return true;
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
diff --git a/src/corelib/io/qprocess_wince.cpp b/src/corelib/io/qprocess_wince.cpp
index 53767758c2..acacdb8540 100644
--- a/src/corelib/io/qprocess_wince.cpp
+++ b/src/corelib/io/qprocess_wince.cpp
@@ -138,8 +138,7 @@ void QProcessPrivate::startProcess()
if (!success) {
cleanup();
- processError = QProcess::FailedToStart;
- emit q->error(processError);
+ setErrorAndEmit(QProcess::FailedToStart);
q->setProcessState(QProcess::NotRunning);
return;
}
@@ -161,7 +160,7 @@ void QProcessPrivate::startProcess()
_q_startupNotification();
}
-bool QProcessPrivate::processStarted()
+bool QProcessPrivate::processStarted(QString * /*errorMessage*/)
{
return processState == QProcess::Running;
}
@@ -210,8 +209,7 @@ bool QProcessPrivate::waitForStarted(int)
if (processError == QProcess::FailedToStart)
return false;
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+ setError(QProcess::Timedout);
return false;
}
@@ -237,22 +235,15 @@ bool QProcessPrivate::waitForFinished(int msecs)
qDebug("QProcessPrivate::waitForFinished(%d)", msecs);
#endif
- QIncrementalSleepTimer timer(msecs);
-
- forever {
- if (!pid)
- return true;
-
- if (WaitForSingleObject(pid->hProcess, timer.nextSleepTime()) == WAIT_OBJECT_0) {
- _q_processDied();
- return true;
- }
+ if (!pid)
+ return true;
- if (timer.hasTimedOut())
- break;
+ if (WaitForSingleObject(pid->hProcess, msecs == -1 ? INFINITE : msecs) == WAIT_OBJECT_0) {
+ _q_processDied();
+ return true;
}
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
+
+ setError(QProcess::Timedout);
return false;
}
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index 6671333ffb..0674ef34e0 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -35,7 +35,6 @@
#include "qresource_p.h"
#include "qresource_iterator_p.h"
#include "qset.h"
-#include "qhash.h"
#include "qmutex.h"
#include "qdebug.h"
#include "qlocale.h"
@@ -791,6 +790,7 @@ QStringList QResourceRoot::children(int node) const
offset += 4;
const int child_off = (tree[offset+0] << 24) + (tree[offset+1] << 16) +
(tree[offset+2] << 8) + (tree[offset+3] << 0);
+ ret.reserve(child_count);
for(int i = child_off; i < child_off+child_count; ++i)
ret << name(i);
}
@@ -800,8 +800,8 @@ bool QResourceRoot::mappingRootSubdir(const QString &path, QString *match) const
{
const QString root = mappingRoot();
if(!root.isEmpty()) {
- const QStringList root_segments = root.split(QLatin1Char('/'), QString::SkipEmptyParts),
- path_segments = path.split(QLatin1Char('/'), QString::SkipEmptyParts);
+ const QVector<QStringRef> root_segments = root.splitRef(QLatin1Char('/'), QString::SkipEmptyParts),
+ path_segments = path.splitRef(QLatin1Char('/'), QString::SkipEmptyParts);
if(path_segments.size() <= root_segments.size()) {
int matched = 0;
for(int i = 0; i < path_segments.size(); ++i) {
@@ -811,7 +811,7 @@ bool QResourceRoot::mappingRootSubdir(const QString &path, QString *match) const
}
if(matched == path_segments.size()) {
if(match && root_segments.size() > matched)
- *match = root_segments.at(matched);
+ *match = root_segments.at(matched).toString();
return true;
}
}
diff --git a/src/corelib/io/qsavefile.h b/src/corelib/io/qsavefile.h
index 3f5f09bf5c..085378ed4e 100644
--- a/src/corelib/io/qsavefile.h
+++ b/src/corelib/io/qsavefile.h
@@ -58,7 +58,7 @@ class Q_CORE_EXPORT QSaveFile : public QFileDevice
public:
explicit QSaveFile(const QString &name);
- explicit QSaveFile(QObject *parent = 0);
+ explicit QSaveFile(QObject *parent = Q_NULLPTR);
explicit QSaveFile(const QString &name, QObject *parent);
~QSaveFile();
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp
index 52bcb153ae..1c7ceed3c1 100644
--- a/src/corelib/io/qsettings.cpp
+++ b/src/corelib/io/qsettings.cpp
@@ -127,6 +127,7 @@ struct QConfFileCustomFormat
QSettings::WriteFunc writeFunc;
Qt::CaseSensitivity caseSensitivity;
};
+Q_DECLARE_TYPEINFO(QConfFileCustomFormat, Q_MOVABLE_TYPE);
typedef QHash<QString, QConfFile *> ConfFileHash;
typedef QCache<QString, QConfFile> ConfFileCache;
@@ -299,7 +300,7 @@ QSettingsPrivate *QSettingsPrivate::create(const QString &fileName, QSettings::F
}
#endif
-void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMap<QString, QString> &result)
+void QSettingsPrivate::processChild(QStringRef key, ChildSpec spec, QStringList &result)
{
if (spec != AllKeys) {
int slashPos = key.indexOf(QLatin1Char('/'));
@@ -312,7 +313,7 @@ void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMap<QString, Q
key.truncate(slashPos);
}
}
- result.insert(key, QString());
+ result.append(key.toString());
}
void QSettingsPrivate::beginGroupOrArray(const QSettingsGroup &group)
@@ -357,6 +358,7 @@ void QSettingsPrivate::requestUpdate()
QStringList QSettingsPrivate::variantListToStringList(const QVariantList &l)
{
QStringList result;
+ result.reserve(l.count());
QVariantList::const_iterator it = l.constBegin();
for (; it != l.constEnd(); ++it)
result.append(variantToString(*it));
@@ -374,7 +376,9 @@ QVariant QSettingsPrivate::stringListToVariantList(const QStringList &l)
outStringList[i].remove(0, 1);
} else {
QVariantList variantList;
- for (int j = 0; j < l.count(); ++j)
+ const int stringCount = l.count();
+ variantList.reserve(stringCount);
+ for (int j = 0; j < stringCount; ++j)
variantList.append(stringToVariant(l.at(j)));
return variantList;
}
@@ -449,14 +453,23 @@ QString QSettingsPrivate::variantToString(const QVariant &v)
default: {
#ifndef QT_NO_DATASTREAM
+ QDataStream::Version version;
+ const char *typeSpec;
+ if (v.type() == QVariant::DateTime) {
+ version = QDataStream::Qt_5_6;
+ typeSpec = "@DateTime(";
+ } else {
+ version = QDataStream::Qt_4_0;
+ typeSpec = "@Variant(";
+ }
QByteArray a;
{
QDataStream s(&a, QIODevice::WriteOnly);
- s.setVersion(QDataStream::Qt_4_0);
+ s.setVersion(version);
s << v;
}
- result = QLatin1String("@Variant(");
+ result = QLatin1String(typeSpec);
result += QString::fromLatin1(a.constData(), a.size());
result += QLatin1Char(')');
#else
@@ -475,12 +488,22 @@ QVariant QSettingsPrivate::stringToVariant(const QString &s)
if (s.startsWith(QLatin1Char('@'))) {
if (s.endsWith(QLatin1Char(')'))) {
if (s.startsWith(QLatin1String("@ByteArray("))) {
- return QVariant(s.toLatin1().mid(11, s.size() - 12));
- } else if (s.startsWith(QLatin1String("@Variant("))) {
+ return QVariant(s.midRef(11, s.size() - 12).toLatin1());
+ } else if (s.startsWith(QLatin1String("@Variant("))
+ || s.startsWith(QLatin1String("@DateTime("))) {
#ifndef QT_NO_DATASTREAM
- QByteArray a(s.toLatin1().mid(9));
+ QDataStream::Version version;
+ int offset;
+ if (s.at(1) == QLatin1Char('D')) {
+ version = QDataStream::Qt_5_6;
+ offset = 10;
+ } else {
+ version = QDataStream::Qt_4_0;
+ offset = 9;
+ }
+ QByteArray a = s.midRef(offset).toLatin1();
QDataStream stream(&a, QIODevice::ReadOnly);
- stream.setVersion(QDataStream::Qt_4_0);
+ stream.setVersion(version);
QVariant result;
stream >> result;
return result;
@@ -609,8 +632,9 @@ void QSettingsPrivate::iniEscapedString(const QString &str, QByteArray &result,
int startPos = result.size();
result.reserve(startPos + str.size() * 3 / 2);
+ const QChar *unicode = str.unicode();
for (i = 0; i < str.size(); ++i) {
- uint ch = str.at(i).unicode();
+ uint ch = unicode[i].unicode();
if (ch == ';' || ch == ',' || ch == '=')
needsQuotes = true;
@@ -664,7 +688,7 @@ void QSettingsPrivate::iniEscapedString(const QString &str, QByteArray &result,
#ifndef QT_NO_TEXTCODEC
} else if (useCodec) {
// slow
- result += codec->fromUnicode(str.at(i));
+ result += codec->fromUnicode(&unicode[i], 1);
#endif
} else {
result += (char)ch;
@@ -1052,12 +1076,12 @@ static void initDefaultPaths(QMutexLocker *locker)
// Non XDG platforms (OS X, iOS, Blackberry, Android...) have used this code path erroneously
// for some time now. Moving away from that would require migrating existing settings.
QString userPath;
- char *env = getenv("XDG_CONFIG_HOME");
- if (env == 0) {
+ QByteArray env = qgetenv("XDG_CONFIG_HOME");
+ if (env.isEmpty()) {
userPath = QDir::homePath();
userPath += QLatin1Char('/');
userPath += QLatin1String(".config");
- } else if (*env == '/') {
+ } else if (env.startsWith('/')) {
userPath = QFile::decodeName(env);
} else {
userPath = QDir::homePath();
@@ -1269,7 +1293,7 @@ bool QConfFileSettingsPrivate::get(const QString &key, QVariant *value) const
QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec spec) const
{
- QMap<QString, QString> result;
+ QStringList result;
ParsedSettingsMap::const_iterator j;
QSettingsKey thePrefix(prefix, caseSensitivity);
@@ -1289,14 +1313,14 @@ QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec
&confFile->originalKeys)->lowerBound( thePrefix);
while (j != confFile->originalKeys.constEnd() && j.key().startsWith(thePrefix)) {
if (!confFile->removedKeys.contains(j.key()))
- processChild(j.key().originalCaseKey().mid(startPos), spec, result);
+ processChild(j.key().originalCaseKey().midRef(startPos), spec, result);
++j;
}
j = const_cast<const ParsedSettingsMap *>(
&confFile->addedKeys)->lowerBound(thePrefix);
while (j != confFile->addedKeys.constEnd() && j.key().startsWith(thePrefix)) {
- processChild(j.key().originalCaseKey().mid(startPos), spec, result);
+ processChild(j.key().originalCaseKey().midRef(startPos), spec, result);
++j;
}
@@ -1304,7 +1328,10 @@ QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec
break;
}
}
- return result.keys();
+ std::sort(result.begin(), result.end());
+ result.erase(std::unique(result.begin(), result.end()),
+ result.end());
+ return result;
}
void QConfFileSettingsPrivate::clear()
@@ -1759,6 +1786,7 @@ public:
int position;
};
+Q_DECLARE_TYPEINFO(QSettingsIniKey, Q_MOVABLE_TYPE);
static bool operator<(const QSettingsIniKey &k1, const QSettingsIniKey &k2)
{
diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h
index f7a7bdbb19..8f41273ffa 100644
--- a/src/corelib/io/qsettings.h
+++ b/src/corelib/io/qsettings.h
@@ -105,13 +105,13 @@ public:
#ifndef QT_NO_QOBJECT
explicit QSettings(const QString &organization,
- const QString &application = QString(), QObject *parent = 0);
+ const QString &application = QString(), QObject *parent = Q_NULLPTR);
QSettings(Scope scope, const QString &organization,
- const QString &application = QString(), QObject *parent = 0);
+ const QString &application = QString(), QObject *parent = Q_NULLPTR);
QSettings(Format format, Scope scope, const QString &organization,
- const QString &application = QString(), QObject *parent = 0);
- QSettings(const QString &fileName, Format format, QObject *parent = 0);
- explicit QSettings(QObject *parent = 0);
+ const QString &application = QString(), QObject *parent = Q_NULLPTR);
+ QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR);
+ explicit QSettings(QObject *parent = Q_NULLPTR);
#else
explicit QSettings(const QString &organization,
const QString &application = QString());
diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp
index 51321c49e7..e0b317b4c2 100644
--- a/src/corelib/io/qsettings_mac.cpp
+++ b/src/corelib/io/qsettings_mac.cpp
@@ -386,7 +386,7 @@ QMacSettingsPrivate::QMacSettingsPrivate(QSettings::Scope scope, const QString &
if (main_bundle_identifier != NULL) {
QString bundle_identifier(qtKey(main_bundle_identifier));
// CFBundleGetIdentifier returns identifier separated by slashes rather than periods.
- QStringList bundle_identifier_components = bundle_identifier.split(QLatin1String("/"));
+ QStringList bundle_identifier_components = bundle_identifier.split(QLatin1Char('/'));
// pre-reverse them so that when they get reversed again below, they are in the com.company.product format.
QStringList bundle_identifier_components_reversed;
for (int i=0; i<bundle_identifier_components.size(); ++i) {
@@ -403,11 +403,11 @@ QMacSettingsPrivate::QMacSettingsPrivate(QSettings::Scope scope, const QString &
}
while ((nextDot = domainName.indexOf(QLatin1Char('.'), curPos)) != -1) {
- javaPackageName.prepend(domainName.mid(curPos, nextDot - curPos));
+ javaPackageName.prepend(domainName.midRef(curPos, nextDot - curPos));
javaPackageName.prepend(QLatin1Char('.'));
curPos = nextDot + 1;
}
- javaPackageName.prepend(domainName.mid(curPos));
+ javaPackageName.prepend(domainName.midRef(curPos));
javaPackageName = javaPackageName.toLower();
if (curPos == 0)
javaPackageName.prepend(QLatin1String("com."));
@@ -491,7 +491,7 @@ bool QMacSettingsPrivate::get(const QString &key, QVariant *value) const
QStringList QMacSettingsPrivate::children(const QString &prefix, ChildSpec spec) const
{
- QMap<QString, QString> result;
+ QStringList result;
int startPos = prefix.size();
for (int i = 0; i < numDomains; ++i) {
@@ -505,7 +505,7 @@ QStringList QMacSettingsPrivate::children(const QString &prefix, ChildSpec spec)
QString currentKey =
qtKey(static_cast<CFStringRef>(CFArrayGetValueAtIndex(cfarray, k)));
if (currentKey.startsWith(prefix))
- processChild(currentKey.mid(startPos), spec, result);
+ processChild(currentKey.midRef(startPos), spec, result);
}
}
}
@@ -513,7 +513,10 @@ QStringList QMacSettingsPrivate::children(const QString &prefix, ChildSpec spec)
if (!fallbacks)
break;
}
- return result.keys();
+ std::sort(result.begin(), result.end());
+ result.erase(std::unique(result.begin(), result.end()),
+ result.end());
+ return result;
}
void QMacSettingsPrivate::clear()
diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h
index 93d63fd411..5a3eb58a58 100644
--- a/src/corelib/io/qsettings_p.h
+++ b/src/corelib/io/qsettings_p.h
@@ -127,6 +127,7 @@ public:
int num;
int maxNum;
};
+Q_DECLARE_TYPEINFO(QSettingsGroup, Q_MOVABLE_TYPE);
inline QString QSettingsGroup::toString() const
{
@@ -211,7 +212,7 @@ public:
const QString &organization, const QString &application);
static QSettingsPrivate *create(const QString &fileName, QSettings::Format format);
- static void processChild(QString key, ChildSpec spec, QMap<QString, QString> &result);
+ static void processChild(QStringRef key, ChildSpec spec, QStringList &result);
// Variant streaming functions
static QStringList variantListToStringList(const QVariantList &l);
diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp
index 60b15f41a0..1546219c3b 100644
--- a/src/corelib/io/qsettings_win.cpp
+++ b/src/corelib/io/qsettings_win.cpp
@@ -319,11 +319,11 @@ private:
};
RegistryKey::RegistryKey(HKEY parent_handle, const QString &key, bool read_only)
+ : m_parent_handle(parent_handle),
+ m_handle(0),
+ m_key(key),
+ m_read_only(read_only)
{
- m_parent_handle = parent_handle;
- m_handle = 0;
- m_read_only = read_only;
- m_key = key;
}
QString RegistryKey::key() const
diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp
index 74252d1f0a..8828e09e8f 100644
--- a/src/corelib/io/qstandardpaths.cpp
+++ b/src/corelib/io/qstandardpaths.cpp
@@ -35,7 +35,6 @@
#include <qdir.h>
#include <qfileinfo.h>
-#include <qhash.h>
#ifndef QT_BOOTSTRAPPED
#include <qobject.h>
@@ -183,7 +182,7 @@ QT_BEGIN_NAMESPACE
\li "C:/Users/<USER>/AppData/Local/<APPNAME>/cache"
\row \li GenericDataLocation
\li "~/Library/Application Support", "/Library/Application Support"
- \li "C:/Users/<USER>/AppData/Local", "C:/ProgramData"
+ \li "C:/Users/<USER>/AppData/Local", "C:/ProgramData", "<APPDIR>", "<APPDIR>/data"
\row \li RuntimeLocation
\li "~/Library/Application Support"
\li "C:/Users/<USER>"
@@ -523,13 +522,8 @@ QString QStandardPaths::findExecutable(const QString &executableName, const QStr
QStringList searchPaths = paths;
if (paths.isEmpty()) {
QByteArray pEnv = qgetenv("PATH");
-#if defined(Q_OS_WIN)
- const QLatin1Char pathSep(';');
-#else
- const QLatin1Char pathSep(':');
-#endif
// Remove trailing slashes, which occur on Windows.
- const QStringList rawPaths = QString::fromLocal8Bit(pEnv.constData()).split(pathSep, QString::SkipEmptyParts);
+ const QStringList rawPaths = QString::fromLocal8Bit(pEnv.constData()).split(QDir::listSeparator(), QString::SkipEmptyParts);
searchPaths.reserve(rawPaths.size());
foreach (const QString &rawPath, rawPaths) {
QString cleanPath = QDir::cleanPath(rawPath);
diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp
index ed2faa742a..78f75482ea 100644
--- a/src/corelib/io/qstandardpaths_unix.cpp
+++ b/src/corelib/io/qstandardpaths_unix.cpp
@@ -113,21 +113,33 @@ QString QStandardPaths::writableLocation(StandardLocation type)
{
const uid_t myUid = geteuid();
// http://standards.freedesktop.org/basedir-spec/latest/
+ QFileInfo fileInfo;
QString xdgRuntimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR"));
if (xdgRuntimeDir.isEmpty()) {
const QString userName = QFileSystemEngine::resolveUserName(myUid);
xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
- QDir dir(xdgRuntimeDir);
- if (!dir.exists()) {
+ fileInfo.setFile(xdgRuntimeDir);
+ if (!fileInfo.isDir()) {
if (!QDir().mkdir(xdgRuntimeDir)) {
qWarning("QStandardPaths: error creating runtime directory %s: %s", qPrintable(xdgRuntimeDir), qPrintable(qt_error_string(errno)));
return QString();
}
}
qWarning("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '%s'", qPrintable(xdgRuntimeDir));
+ } else {
+ fileInfo.setFile(xdgRuntimeDir);
+ if (!fileInfo.exists()) {
+ qWarning("QStandardPaths: XDG_RUNTIME_DIR points to non-existing path '%s', "
+ "please create it with 0700 permissions.", qPrintable(xdgRuntimeDir));
+ return QString();
+ }
+ if (!fileInfo.isDir()) {
+ qWarning("QStandardPaths: XDG_RUNTIME_DIR points to '%s' which is not a directory",
+ qPrintable(xdgRuntimeDir));
+ return QString();
+ }
}
// "The directory MUST be owned by the user"
- QFileInfo fileInfo(xdgRuntimeDir);
if (fileInfo.ownerId() != myUid) {
qWarning("QStandardPaths: wrong ownership on runtime directory %s, %d instead of %d", qPrintable(xdgRuntimeDir),
fileInfo.ownerId(), myUid);
@@ -135,13 +147,15 @@ QString QStandardPaths::writableLocation(StandardLocation type)
}
// "and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700."
// since the current user is the owner, set both xxxUser and xxxOwner
- QFile file(xdgRuntimeDir);
const QFile::Permissions wantedPerms = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser
| QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner;
- if (file.permissions() != wantedPerms && !file.setPermissions(wantedPerms)) {
- qWarning("QStandardPaths: could not set correct permissions on runtime directory %s: %s",
- qPrintable(xdgRuntimeDir), qPrintable(file.errorString()));
- return QString();
+ if (fileInfo.permissions() != wantedPerms) {
+ QFile file(xdgRuntimeDir);
+ if (!file.setPermissions(wantedPerms)) {
+ qWarning("QStandardPaths: could not set correct permissions on runtime directory %s: %s",
+ qPrintable(xdgRuntimeDir), qPrintable(file.errorString()));
+ return QString();
+ }
}
return xdgRuntimeDir;
}
diff --git a/src/corelib/io/qstandardpaths_win.cpp b/src/corelib/io/qstandardpaths_win.cpp
index 615f85a279..ed1c14ad8a 100644
--- a/src/corelib/io/qstandardpaths_win.cpp
+++ b/src/corelib/io/qstandardpaths_win.cpp
@@ -212,10 +212,8 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
}
dirs.append(result);
#ifndef QT_BOOTSTRAPPED
- if (type != GenericDataLocation) {
- dirs.append(QCoreApplication::applicationDirPath());
- dirs.append(QCoreApplication::applicationDirPath() + QLatin1String("/data"));
- }
+ dirs.append(QCoreApplication::applicationDirPath());
+ dirs.append(QCoreApplication::applicationDirPath() + QLatin1String("/data"));
#endif
}
break;
diff --git a/src/corelib/io/qstandardpaths_winrt.cpp b/src/corelib/io/qstandardpaths_winrt.cpp
index b1e51c5082..cb4d1dd152 100644
--- a/src/corelib/io/qstandardpaths_winrt.cpp
+++ b/src/corelib/io/qstandardpaths_winrt.cpp
@@ -123,7 +123,8 @@ QString QStandardPaths::writableLocation(StandardLocation type)
QStringList QStandardPaths::standardLocations(StandardLocation type)
{
- return QStringList(writableLocation(type));
+ const QString writable = writableLocation(type);
+ return writable.isEmpty() ? QStringList() : QStringList(writable);
}
QT_END_NAMESPACE
diff --git a/src/corelib/io/qstorageinfo.cpp b/src/corelib/io/qstorageinfo.cpp
index 337a9c7cef..99a2a1a42a 100644
--- a/src/corelib/io/qstorageinfo.cpp
+++ b/src/corelib/io/qstorageinfo.cpp
@@ -222,6 +222,18 @@ qint64 QStorageInfo::bytesTotal() const
}
/*!
+ \since 5.6
+ Returns the optimal transfer block size for this filesystem.
+
+ Returns -1 if QStorageInfo could not determine the size or if the QStorageInfo
+ object is not valid.
+ */
+int QStorageInfo::blockSize() const
+{
+ return d->blockSize;
+}
+
+/*!
Returns the type name of the filesystem.
This is a platform-dependent function, and filesystem names can vary
diff --git a/src/corelib/io/qstorageinfo.h b/src/corelib/io/qstorageinfo.h
index 848278e69f..c7a558bb4e 100644
--- a/src/corelib/io/qstorageinfo.h
+++ b/src/corelib/io/qstorageinfo.h
@@ -55,11 +55,10 @@ public:
QStorageInfo &operator=(const QStorageInfo &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QStorageInfo &operator=(QStorageInfo &&other)
- { qSwap(d, other.d); return *this; }
+ QStorageInfo &operator=(QStorageInfo &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
- inline void swap(QStorageInfo &other)
+ inline void swap(QStorageInfo &other) Q_DECL_NOTHROW
{ qSwap(d, other.d); }
void setPath(const QString &path);
@@ -73,6 +72,7 @@ public:
qint64 bytesTotal() const;
qint64 bytesFree() const;
qint64 bytesAvailable() const;
+ int blockSize() const;
inline bool isRoot() const;
bool isReadOnly() const;
diff --git a/src/corelib/io/qstorageinfo_mac.cpp b/src/corelib/io/qstorageinfo_mac.cpp
index 539af33c5d..64ca6d7175 100644
--- a/src/corelib/io/qstorageinfo_mac.cpp
+++ b/src/corelib/io/qstorageinfo_mac.cpp
@@ -76,6 +76,7 @@ void QStorageInfoPrivate::retrievePosixInfo()
device = QByteArray(statfs_buf.f_mntfromname);
readOnly = (statfs_buf.f_flags & MNT_RDONLY) != 0;
fileSystemType = QByteArray(statfs_buf.f_fstypename);
+ blockSize = statfs_buf.f_bsize;
}
}
@@ -146,32 +147,24 @@ void QStorageInfoPrivate::retrieveUrlProperties(bool initRootPath)
void QStorageInfoPrivate::retrieveLabel()
{
-#if !defined(Q_OS_IOS)
- // deprecated since 10.8
- FSRef ref;
- FSPathMakeRef(reinterpret_cast<const UInt8*>(QFile::encodeName(rootPath).constData()),
- &ref,
- Q_NULLPTR);
-
- // deprecated since 10.8
- FSCatalogInfo catalogInfo;
- OSErr error;
- error = FSGetCatalogInfo(&ref, kFSCatInfoVolume, &catalogInfo, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
- if (error != noErr)
+ QCFString path = CFStringCreateWithFileSystemRepresentation(0,
+ QFile::encodeName(rootPath).constData());
+ if (!path)
return;
- // deprecated (use CFURLCopyResourcePropertiesForKeys for 10.7 and higher)
- HFSUniStr255 volumeName;
- error = FSGetVolumeInfo(catalogInfo.volume,
- 0,
- Q_NULLPTR,
- kFSVolInfoFSInfo,
- Q_NULLPTR,
- &volumeName,
- Q_NULLPTR);
- if (error == noErr)
- name = QCFString(FSCreateStringFromHFSUniStr(Q_NULLPTR, &volumeName));
-#endif
+ QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(0, path, kCFURLPOSIXPathStyle, true);
+ if (!url)
+ return;
+
+ QCFType<CFURLRef> volumeUrl;
+ if (!CFURLCopyResourcePropertyForKey(url, kCFURLVolumeURLKey, &volumeUrl, NULL))
+ return;
+
+ QCFString volumeName;
+ if (!CFURLCopyResourcePropertyForKey(url, kCFURLNameKey, &volumeName, NULL))
+ return;
+
+ name = volumeName;
}
QList<QStorageInfo> QStorageInfoPrivate::mountedVolumes()
diff --git a/src/corelib/io/qstorageinfo_p.h b/src/corelib/io/qstorageinfo_p.h
index 564321bedd..fb3bd8bd5b 100644
--- a/src/corelib/io/qstorageinfo_p.h
+++ b/src/corelib/io/qstorageinfo_p.h
@@ -53,7 +53,7 @@ class QStorageInfoPrivate : public QSharedData
{
public:
inline QStorageInfoPrivate() : QSharedData(),
- bytesTotal(-1), bytesFree(-1), bytesAvailable(-1),
+ bytesTotal(-1), bytesFree(-1), bytesAvailable(-1), blockSize(-1),
readOnly(false), ready(false), valid(false)
{}
@@ -84,6 +84,7 @@ public:
qint64 bytesTotal;
qint64 bytesFree;
qint64 bytesAvailable;
+ int blockSize;
bool readOnly;
bool ready;
diff --git a/src/corelib/io/qstorageinfo_unix.cpp b/src/corelib/io/qstorageinfo_unix.cpp
index 6ae3338cbd..e365d8d7e6 100644
--- a/src/corelib/io/qstorageinfo_unix.cpp
+++ b/src/corelib/io/qstorageinfo_unix.cpp
@@ -49,7 +49,7 @@
# include <sys/mount.h>
# include <sys/vfs.h>
# include <mntent.h>
-#elif defined(Q_OS_LINUX)
+#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
# include <mntent.h>
# include <sys/statvfs.h>
#elif defined(Q_OS_SOLARIS)
@@ -145,7 +145,7 @@ private:
QByteArray m_rootPath;
QByteArray m_fileSystemType;
QByteArray m_device;
-#elif defined(Q_OS_LINUX)
+#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
FILE *fp;
mntent mnt;
QByteArray buffer;
@@ -238,7 +238,7 @@ inline QByteArray QStorageIterator::device() const
#elif defined(Q_OS_ANDROID)
-static const char pathMounted[] = "/proc/mounts";
+static const QLatin1String pathMounted("/proc/mounts");
inline QStorageIterator::QStorageIterator()
{
@@ -287,10 +287,11 @@ inline QByteArray QStorageIterator::device() const
return m_device;
}
-#elif defined(Q_OS_LINUX)
+#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
static const char pathMounted[] = "/etc/mtab";
-static const int bufferSize = 3*PATH_MAX; // 2 paths (mount point+device) and metainfo
+static const int bufferSize = 1024; // 2 paths (mount point+device) and metainfo;
+ // should be enough
inline QStorageIterator::QStorageIterator() :
buffer(QByteArray(bufferSize, 0))
@@ -515,6 +516,7 @@ void QStorageInfoPrivate::retrieveVolumeInfo()
bytesFree = statfs_buf.f_bfree * statfs_buf.f_frsize;
bytesAvailable = statfs_buf.f_bavail * statfs_buf.f_frsize;
#endif
+ blockSize = statfs_buf.f_bsize;
#if defined(Q_OS_ANDROID) || defined (Q_OS_BSD4)
#if defined(_STATFS_F_FLAGS)
readOnly = (statfs_buf.f_flags & ST_RDONLY) != 0;
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index 0beda22f24..71436c6497 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -38,6 +38,7 @@
#include "qdiriterator.h"
#include "qplatformdefs.h"
#include <QDebug>
+#include <QPair>
#if defined(QT_BUILD_CORE_LIB)
#include "qcoreapplication.h"
@@ -48,6 +49,10 @@
#include <private/qfilesystemengine_p.h>
#endif
+#if !defined(Q_OS_WIN)
+#include <errno.h>
+#endif
+
QT_BEGIN_NAMESPACE
//************* QTemporaryDirPrivate
@@ -59,7 +64,7 @@ public:
void create(const QString &templateName);
- QString path;
+ QString pathOrError;
bool autoRemove;
bool success;
};
@@ -97,7 +102,7 @@ static int nextRand(int &v)
return r;
}
-static char *q_mkdtemp(char *templateName)
+QPair<QString, bool> q_mkdtemp(char *templateName)
{
static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
@@ -105,8 +110,7 @@ static char *q_mkdtemp(char *templateName)
char *XXXXXX = templateName + length - 6;
- if ((length < 6u) || strncmp(XXXXXX, "XXXXXX", 6))
- return 0;
+ Q_ASSERT((length >= 6u) && strncmp(XXXXXX, "XXXXXX", 6) == 0);
for (int i = 0; i < 256; ++i) {
int v = qrand();
@@ -133,17 +137,27 @@ static char *q_mkdtemp(char *templateName)
qWarning() << "Unable to remove unused directory" << templateNameStr;
continue;
}
- return templateName;
+ return qMakePair(QFile::decodeName(templateName), true);
}
+# ifdef Q_OS_WIN
+ const int exists = ERROR_ALREADY_EXISTS;
+ int code = GetLastError();
+# else
+ const int exists = EEXIST;
+ int code = errno;
+# endif
+ if (code != exists)
+ return qMakePair(qt_error_string(code), false);
}
- return 0;
+ return qMakePair(qt_error_string(), false);
}
#else // defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
-static char *q_mkdtemp(char *templateName)
+QPair<QString, bool> q_mkdtemp(char *templateName)
{
- return mkdtemp(templateName);
+ bool ok = (mkdtemp(templateName) != 0);
+ return qMakePair(ok ? QFile::decodeName(templateName) : qt_error_string(), ok);
}
#endif
@@ -153,10 +167,9 @@ void QTemporaryDirPrivate::create(const QString &templateName)
QByteArray buffer = QFile::encodeName(templateName);
if (!buffer.endsWith("XXXXXX"))
buffer += "XXXXXX";
- if (q_mkdtemp(buffer.data())) { // modifies buffer
- success = true;
- path = QFile::decodeName(buffer.constData());
- }
+ QPair<QString, bool> result = q_mkdtemp(buffer.data()); // modifies buffer
+ pathOrError = result.first;
+ success = result.second;
}
//************* QTemporaryDir
@@ -256,12 +269,24 @@ bool QTemporaryDir::isValid() const
}
/*!
+ \since 5.6
+
+ If isValid() returns \c false, this function returns the error string that
+ explains why the creation of the temporary directory failed. Otherwise, this
+ function return an empty string.
+*/
+QString QTemporaryDir::errorString() const
+{
+ return d_ptr->success ? QString() : d_ptr->pathOrError;
+}
+
+/*!
Returns the path to the temporary directory.
Empty if the QTemporaryDir could not be created.
*/
QString QTemporaryDir::path() const
{
- return d_ptr->path;
+ return d_ptr->success ? d_ptr->pathOrError : QString();
}
/*!
diff --git a/src/corelib/io/qtemporarydir.h b/src/corelib/io/qtemporarydir.h
index 8b98226529..ab6d841cdf 100644
--- a/src/corelib/io/qtemporarydir.h
+++ b/src/corelib/io/qtemporarydir.h
@@ -52,6 +52,7 @@ public:
~QTemporaryDir();
bool isValid() const;
+ QString errorString() const;
bool autoRemove() const;
void setAutoRemove(bool b);
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp
index 68ac85fffd..e8e8d8c878 100644
--- a/src/corelib/io/qtemporaryfile.cpp
+++ b/src/corelib/io/qtemporaryfile.cpp
@@ -236,9 +236,9 @@ QTemporaryFileEngine::~QTemporaryFileEngine()
QFSFileEngine::close();
}
-bool QTemporaryFileEngine::isReallyOpen()
+bool QTemporaryFileEngine::isReallyOpen() const
{
- Q_D(QFSFileEngine);
+ Q_D(const QFSFileEngine);
if (!((0 == d->fh) && (-1 == d->fd)
#if defined Q_OS_WIN
diff --git a/src/corelib/io/qtemporaryfile_p.h b/src/corelib/io/qtemporaryfile_p.h
index 2d4468fcf8..8002990270 100644
--- a/src/corelib/io/qtemporaryfile_p.h
+++ b/src/corelib/io/qtemporaryfile_p.h
@@ -91,7 +91,7 @@ public:
}
~QTemporaryFileEngine();
- bool isReallyOpen();
+ bool isReallyOpen() const;
void setFileName(const QString &file);
void setFileTemplate(const QString &fileTemplate);
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp
index aa14f545ec..a8fd2dd7ab 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/io/qtextstream.cpp
@@ -121,7 +121,7 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384;
digits of the generated number. Some extra number formatting
options are also available through setNumberFlags().
- \keyword QTextStream manipulators
+ \target QTextStream manipulators
Like \c <iostream> in the standard C++ library, QTextStream also
defines several global manipulator functions:
@@ -222,6 +222,8 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384;
#include "qbuffer.h"
#include "qfile.h"
#include "qnumeric.h"
+#include "qvarlengtharray.h"
+
#ifndef Q_OS_WINCE
#include <locale.h>
#endif
@@ -845,6 +847,21 @@ inline void QTextStreamPrivate::write(QChar ch)
/*!
\internal
*/
+void QTextStreamPrivate::write(QLatin1String data)
+{
+ if (string) {
+ // ### What about seek()??
+ string->append(data);
+ } else {
+ writeBuffer += data;
+ if (writeBuffer.size() > QTEXTSTREAM_BUFFERSIZE)
+ flushWriteBuffer();
+ }
+}
+
+/*!
+ \internal
+*/
inline bool QTextStreamPrivate::getChar(QChar *ch)
{
if ((string && stringOffset == string->size())
@@ -891,45 +908,97 @@ inline void QTextStreamPrivate::putChar(QChar ch)
write(ch);
}
+
+/*!
+ \internal
+*/
+QTextStreamPrivate::PaddingResult QTextStreamPrivate::padding(int len) const
+{
+ Q_ASSERT(params.fieldWidth > len); // calling padding() when no padding is needed is an error
+
+ // Do NOT break NRVO in this function or kittens will die!
+
+ PaddingResult result;
+
+ const int padSize = params.fieldWidth - len;
+
+ result.padding.resize(padSize);
+ std::fill_n(result.padding.begin(), padSize, params.padChar);
+
+ switch (params.fieldAlignment) {
+ case QTextStream::AlignLeft:
+ result.left = 0;
+ result.right = padSize;
+ break;
+ case QTextStream::AlignRight:
+ case QTextStream::AlignAccountingStyle:
+ result.left = padSize;
+ result.right = 0;
+ break;
+ case QTextStream::AlignCenter:
+ result.left = padSize/2;
+ result.right = padSize - padSize/2;
+ break;
+ }
+
+ return result;
+}
+
/*!
\internal
*/
void QTextStreamPrivate::putString(const QChar *data, int len, bool number)
{
- QString pad;
- int padLeft = 0, padRight = 0;
+ if (Q_UNLIKELY(params.fieldWidth > len)) {
- // handle padding
- int padSize = params.fieldWidth - len;
- if (padSize > 0) {
- pad = QString(padSize, params.padChar);
- switch (params.fieldAlignment) {
- case QTextStream::AlignLeft:
- padRight = padSize;
- break;
- case QTextStream::AlignRight:
- case QTextStream::AlignAccountingStyle:
- padLeft = padSize;
- if (params.fieldAlignment == QTextStream::AlignAccountingStyle && number) {
- const QChar sign = len > 0 ? data[0] : QChar();
- if (sign == locale.negativeSign() || sign == locale.positiveSign()) {
- // write the sign before the padding, then skip it later
- write(&sign, 1);
- ++data;
- --len;
- }
+ // handle padding:
+
+ const PaddingResult pad = padding(len);
+
+ if (params.fieldAlignment == QTextStream::AlignAccountingStyle && number) {
+ const QChar sign = len > 0 ? data[0] : QChar();
+ if (sign == locale.negativeSign() || sign == locale.positiveSign()) {
+ // write the sign before the padding, then skip it later
+ write(&sign, 1);
+ ++data;
+ --len;
}
- break;
- case QTextStream::AlignCenter:
- padLeft = padSize/2;
- padRight = padSize - padSize/2;
- break;
}
+
+ write(pad.padding.constData(), pad.left);
+ write(data, len);
+ write(pad.padding.constData(), pad.right);
+ } else {
+ write(data, len);
}
+}
+
+/*!
+ \internal
+*/
+void QTextStreamPrivate::putString(QLatin1String data, bool number)
+{
+ if (Q_UNLIKELY(params.fieldWidth > data.size())) {
- write(pad.constData(), padLeft);
- write(data, len);
- write(pad.constData(), padRight);
+ // handle padding
+
+ const PaddingResult pad = padding(data.size());
+
+ if (params.fieldAlignment == QTextStream::AlignAccountingStyle && number) {
+ const QChar sign = data.size() > 0 ? QLatin1Char(*data.data()) : QChar();
+ if (sign == locale.negativeSign() || sign == locale.positiveSign()) {
+ // write the sign before the padding, then skip it later
+ write(&sign, 1);
+ data = QLatin1String(data.data() + 1, data.size() - 1);
+ }
+ }
+
+ write(pad.padding.constData(), pad.left);
+ write(data);
+ write(pad.padding.constData(), pad.right);
+ } else {
+ write(data);
+ }
}
/*!
@@ -2503,14 +2572,28 @@ QTextStream &QTextStream::operator<<(const QString &string)
\overload
Writes \a string to the stream, and returns a reference to the
- QTextStream. The contents of \a string are converted with the
- QString constructor that takes a QLatin1String as argument.
+ QTextStream.
*/
QTextStream &QTextStream::operator<<(QLatin1String string)
{
Q_D(QTextStream);
CHECK_VALID_STREAM(*this);
- d->putString(QString(string));
+ d->putString(string);
+ return *this;
+}
+
+/*!
+ \since 5.6
+ \overload
+
+ Writes \a string to the stream, and returns a reference to the
+ QTextStream.
+*/
+QTextStream &QTextStream::operator<<(const QStringRef &string)
+{
+ Q_D(QTextStream);
+ CHECK_VALID_STREAM(*this);
+ d->putString(string.data(), string.size());
return *this;
}
@@ -2800,7 +2883,7 @@ QTextStream &scientific(QTextStream &stream)
Calls QTextStream::setFieldAlignment(QTextStream::AlignLeft)
on \a stream and returns \a stream.
- \sa right(), center(), {QTextStream manipulators}
+ \sa {QTextStream::}{right()}, {QTextStream::}{center()}, {QTextStream manipulators}
*/
QTextStream &left(QTextStream &stream)
{
@@ -2814,7 +2897,7 @@ QTextStream &left(QTextStream &stream)
Calls QTextStream::setFieldAlignment(QTextStream::AlignRight)
on \a stream and returns \a stream.
- \sa left(), center(), {QTextStream manipulators}
+ \sa {QTextStream::}{left()}, {QTextStream::}{center()}, {QTextStream manipulators}
*/
QTextStream &right(QTextStream &stream)
{
@@ -2828,7 +2911,7 @@ QTextStream &right(QTextStream &stream)
Calls QTextStream::setFieldAlignment(QTextStream::AlignCenter)
on \a stream and returns \a stream.
- \sa left(), right(), {QTextStream manipulators}
+ \sa {QTextStream::}{left()}, {QTextStream::}{right()}, {QTextStream manipulators}
*/
QTextStream &center(QTextStream &stream)
{
diff --git a/src/corelib/io/qtextstream.h b/src/corelib/io/qtextstream.h
index e5f429ae4d..d7566e6f7b 100644
--- a/src/corelib/io/qtextstream.h
+++ b/src/corelib/io/qtextstream.h
@@ -179,6 +179,7 @@ public:
QTextStream &operator<<(double f);
QTextStream &operator<<(const QString &s);
QTextStream &operator<<(QLatin1String s);
+ QTextStream &operator<<(const QStringRef &s);
QTextStream &operator<<(const QByteArray &array);
QTextStream &operator<<(const char *c);
QTextStream &operator<<(const void *ptr);
@@ -205,8 +206,8 @@ typedef void (QTextStream::*QTSMFC)(QChar); // manipulator w/QChar argument
class Q_CORE_EXPORT QTextStreamManipulator
{
public:
- QTextStreamManipulator(QTSMFI m, int a) { mf = m; mc = 0; arg = a; }
- QTextStreamManipulator(QTSMFC m, QChar c) { mf = 0; mc = m; ch = c; arg = -1; }
+ Q_DECL_CONSTEXPR QTextStreamManipulator(QTSMFI m, int a) Q_DECL_NOTHROW : mf(m), mc(Q_NULLPTR), arg(a), ch() {}
+ Q_DECL_CONSTEXPR QTextStreamManipulator(QTSMFC m, QChar c) Q_DECL_NOTHROW : mf(Q_NULLPTR), mc(m), arg(-1), ch(c) {}
void exec(QTextStream &s) { if (mf) { (s.*mf)(arg); } else { (s.*mc)(ch); } }
private:
diff --git a/src/corelib/io/qtextstream_p.h b/src/corelib/io/qtextstream_p.h
index 01289d7dc6..115408a6dd 100644
--- a/src/corelib/io/qtextstream_p.h
+++ b/src/corelib/io/qtextstream_p.h
@@ -168,11 +168,21 @@ public:
inline void write(const QString &data) { write(data.begin(), data.length()); }
inline void write(QChar ch);
void write(const QChar *data, int len);
+ void write(QLatin1String data);
inline void putString(const QString &ch, bool number = false) { putString(ch.constData(), ch.length(), number); }
void putString(const QChar *data, int len, bool number = false);
+ void putString(QLatin1String data, bool number = false);
inline void putChar(QChar ch);
void putNumber(qulonglong number, bool negative);
+ struct PaddingResult {
+ enum { PreallocatedPadding = 80 }; // typical line length
+
+ int left, right;
+ QVarLengthArray<QChar, PreallocatedPadding> padding;
+ };
+ PaddingResult padding(int len) const;
+
// buffers
bool fillReadBuffer(qint64 maxBytes = -1);
void resetReadBuffer();
diff --git a/src/corelib/io/qtldurl.cpp b/src/corelib/io/qtldurl.cpp
index 2e787a1bc5..265055083e 100644
--- a/src/corelib/io/qtldurl.cpp
+++ b/src/corelib/io/qtldurl.cpp
@@ -37,7 +37,6 @@
#include "private/qtldurl_p.h"
#include "QtCore/qstring.h"
#include "QtCore/qvector.h"
-#include "QtCore/qhash.h"
QT_BEGIN_NAMESPACE
@@ -100,19 +99,14 @@ Q_CORE_EXPORT bool qIsEffectiveTLD(const QString &domain)
if (containsTLDEntry(domain))
return true;
- if (domain.contains(QLatin1Char('.'))) {
- int count = domain.size() - domain.indexOf(QLatin1Char('.'));
- QString wildCardDomain;
- wildCardDomain.reserve(count + 1);
- wildCardDomain.append(QLatin1Char('*'));
- wildCardDomain.append(domain.right(count));
+ const int dot = domain.indexOf(QLatin1Char('.'));
+ if (dot >= 0) {
+ int count = domain.size() - dot;
+ QString wildCardDomain = QLatin1Char('*') + domain.rightRef(count);
// 2. if table contains '*.bar.com',
// test if table contains '!foo.bar.com'
if (containsTLDEntry(wildCardDomain)) {
- QString exceptionDomain;
- exceptionDomain.reserve(domain.size() + 1);
- exceptionDomain.append(QLatin1Char('!'));
- exceptionDomain.append(domain);
+ QString exceptionDomain = QLatin1Char('!') + domain;
return (! containsTLDEntry(exceptionDomain));
}
}
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 89f5aad97f..775a870a27 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -2411,8 +2411,8 @@ void QUrl::setPort(int port)
d->clearError();
if (port < -1 || port > 65535) {
- port = -1;
d->setError(QUrlPrivate::InvalidPortError, QString::number(port), 0);
+ port = -1;
}
d->port = port;
@@ -2470,8 +2470,10 @@ void QUrl::setPath(const QString &path, ParsingMode mode)
mode = TolerantMode;
}
- data = qt_normalizePathSegments(data, false);
- d->setPath(data, 0, data.length());
+ int from = 0;
+ while (from < data.length() - 2 && data.midRef(from, 2) == QLatin1String("//"))
+ ++from;
+ d->setPath(data, from, data.length());
// optimized out, since there is no path delimiter
// if (path.isNull())
diff --git a/src/corelib/io/qurlidna.cpp b/src/corelib/io/qurlidna.cpp
index f9a0acf41a..46553d38a5 100644
--- a/src/corelib/io/qurlidna.cpp
+++ b/src/corelib/io/qurlidna.cpp
@@ -1503,7 +1503,7 @@ static bool isMappedToNothing(uint uc)
static bool containsProhibitedOuptut(const QString *str, int from)
{
const ushort *in = reinterpret_cast<const ushort *>(str->begin() + from);
- const ushort *end = (ushort *)str->data() + str->size();
+ const ushort *end = (const ushort *)str->data() + str->size();
for ( ; in < end; ++in) {
uint uc = *in;
if (QChar(uc).isHighSurrogate() && in < end - 1) {
diff --git a/src/corelib/io/qurlquery.cpp b/src/corelib/io/qurlquery.cpp
index 77d1ab3e24..2b695a4f7b 100644
--- a/src/corelib/io/qurlquery.cpp
+++ b/src/corelib/io/qurlquery.cpp
@@ -34,6 +34,7 @@
#include "qurlquery.h"
#include "qurl_p.h"
+#include <QtCore/qhashfunctions.h>
#include <QtCore/qstringlist.h>
QT_BEGIN_NAMESPACE
@@ -407,6 +408,7 @@ bool QUrlQuery::operator ==(const QUrlQuery &other) const
if (d == other.d)
return true;
if (d && other.d)
+ // keep in sync with qHash(QUrlQuery):
return d->valueDelimiter == other.d->valueDelimiter &&
d->pairDelimiter == other.d->pairDelimiter &&
d->itemList == other.d->itemList;
@@ -414,6 +416,25 @@ bool QUrlQuery::operator ==(const QUrlQuery &other) const
}
/*!
+ \since 5.6
+ \relates QUrlQuery
+
+ Returns the hash value for \a key,
+ using \a seed to seed the calculation.
+*/
+uint qHash(const QUrlQuery &key, uint seed) Q_DECL_NOTHROW
+{
+ if (const QUrlQueryPrivate *d = key.d) {
+ QtPrivate::QHashCombine hash;
+ // keep in sync with operator==:
+ seed = hash(seed, d->valueDelimiter);
+ seed = hash(seed, d->pairDelimiter);
+ seed = hash(seed, d->itemList);
+ }
+ return seed;
+}
+
+/*!
Returns \c true if this QUrlQuery object contains no key-value pairs, such as
after being default-constructed or after parsing an empty query string.
@@ -621,6 +642,7 @@ QList<QPair<QString, QString> > QUrlQuery::queryItems(QUrl::ComponentFormattingO
QList<QPair<QString, QString> > result;
Map::const_iterator it = d->itemList.constBegin();
Map::const_iterator end = d->itemList.constEnd();
+ result.reserve(d->itemList.count());
for ( ; it != end; ++it)
result << qMakePair(d->recodeToUser(it->first, encoding),
d->recodeToUser(it->second, encoding));
diff --git a/src/corelib/io/qurlquery.h b/src/corelib/io/qurlquery.h
index 77a0b4a82d..8fcc1b13d5 100644
--- a/src/corelib/io/qurlquery.h
+++ b/src/corelib/io/qurlquery.h
@@ -44,6 +44,8 @@
QT_BEGIN_NAMESPACE
+Q_CORE_EXPORT uint qHash(const QUrlQuery &key, uint seed = 0) Q_DECL_NOTHROW;
+
class QUrlQueryPrivate;
class Q_CORE_EXPORT QUrlQuery
{
@@ -54,8 +56,7 @@ public:
QUrlQuery(const QUrlQuery &other);
QUrlQuery &operator=(const QUrlQuery &other);
#ifdef Q_COMPILER_RVALUE_REFS
- QUrlQuery &operator=(QUrlQuery &&other)
- { qSwap(d, other.d); return *this; }
+ QUrlQuery &operator=(QUrlQuery &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
~QUrlQuery();
@@ -63,7 +64,7 @@ public:
bool operator!=(const QUrlQuery &other) const
{ return !(*this == other); }
- void swap(QUrlQuery &other) { qSwap(d, other.d); }
+ void swap(QUrlQuery &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
bool isEmpty() const;
bool isDetached() const;
@@ -95,6 +96,7 @@ public:
private:
friend class QUrl;
+ friend Q_CORE_EXPORT uint qHash(const QUrlQuery &key, uint seed) Q_DECL_NOTHROW;
QSharedDataPointer<QUrlQueryPrivate> d;
public:
typedef QSharedDataPointer<QUrlQueryPrivate> DataPtr;
@@ -119,7 +121,7 @@ inline QStringList QUrl::allQueryItemValues(const QString &key) const
inline void QUrl::removeQueryItem(const QString &key)
{ QUrlQuery q(*this); q.removeQueryItem(key); setQuery(q); }
inline void QUrl::removeAllQueryItems(const QString &key)
-{ QUrlQuery q(*this); q.removeAllQueryItems(key); }
+{ QUrlQuery q(*this); q.removeAllQueryItems(key); setQuery(q); }
inline void QUrl::addEncodedQueryItem(const QByteArray &key, const QByteArray &value)
{ QUrlQuery q(*this); q.addQueryItem(fromEncodedComponent_helper(key), fromEncodedComponent_helper(value)); setQuery(q); }
@@ -130,7 +132,7 @@ inline QByteArray QUrl::encodedQueryItemValue(const QByteArray &key) const
inline void QUrl::removeEncodedQueryItem(const QByteArray &key)
{ QUrlQuery q(*this); q.removeQueryItem(fromEncodedComponent_helper(key)); setQuery(q); }
inline void QUrl::removeAllEncodedQueryItems(const QByteArray &key)
-{ QUrlQuery q(*this); q.removeAllQueryItems(fromEncodedComponent_helper(key)); }
+{ QUrlQuery q(*this); q.removeAllQueryItems(fromEncodedComponent_helper(key)); setQuery(q); }
inline void QUrl::setEncodedQueryItems(const QList<QPair<QByteArray, QByteArray> > &qry)
{
diff --git a/src/corelib/io/qwindowspipereader.cpp b/src/corelib/io/qwindowspipereader.cpp
index 3200a70c94..f0d6417483 100644
--- a/src/corelib/io/qwindowspipereader.cpp
+++ b/src/corelib/io/qwindowspipereader.cpp
@@ -136,12 +136,12 @@ qint64 QWindowsPipeReader::read(char *data, qint64 maxlen)
actualReadBufferSize--;
readSoFar = 1;
} else {
- qint64 bytesToRead = qMin(qint64(actualReadBufferSize), maxlen);
+ qint64 bytesToRead = qMin(actualReadBufferSize, maxlen);
readSoFar = 0;
while (readSoFar < bytesToRead) {
const char *ptr = readBuffer.readPointer();
- int bytesToReadFromThisBlock = qMin(bytesToRead - readSoFar,
- qint64(readBuffer.nextDataBlockSize()));
+ qint64 bytesToReadFromThisBlock = qMin(bytesToRead - readSoFar,
+ readBuffer.nextDataBlockSize());
memcpy(data + readSoFar, ptr, bytesToReadFromThisBlock);
readSoFar += bytesToReadFromThisBlock;
readBuffer.free(bytesToReadFromThisBlock);
diff --git a/src/corelib/io/qwindowspipereader_p.h b/src/corelib/io/qwindowspipereader_p.h
index 2c32eeb9ce..c8a66d9511 100644
--- a/src/corelib/io/qwindowspipereader_p.h
+++ b/src/corelib/io/qwindowspipereader_p.h
@@ -96,7 +96,7 @@ private:
QWinOverlappedIoNotifier *dataReadNotifier;
qint64 readBufferMaxSize;
QRingBuffer readBuffer;
- int actualReadBufferSize;
+ qint64 actualReadBufferSize;
bool stopped;
bool readSequenceStarted;
bool pipeBroken;
diff --git a/src/corelib/io/qwinoverlappedionotifier.cpp b/src/corelib/io/qwinoverlappedionotifier.cpp
index 8b7d70cf71..0cefa374fa 100644
--- a/src/corelib/io/qwinoverlappedionotifier.cpp
+++ b/src/corelib/io/qwinoverlappedionotifier.cpp
@@ -102,7 +102,8 @@ public:
OVERLAPPED *waitForAnyNotified(int msecs);
void notify(DWORD numberOfBytes, DWORD errorCode, OVERLAPPED *overlapped);
- OVERLAPPED *_q_notified();
+ void _q_notified();
+ OVERLAPPED *dispatchNextIoResult();
static QWinIoCompletionPort *iocp;
static HANDLE iocpInstanceLock;
@@ -302,8 +303,7 @@ OVERLAPPED *QWinOverlappedIoNotifierPrivate::waitForAnyNotified(int msecs)
const DWORD wfso = WaitForSingleObject(hSemaphore, msecs == -1 ? INFINITE : DWORD(msecs));
switch (wfso) {
case WAIT_OBJECT_0:
- ReleaseSemaphore(hSemaphore, 1, NULL);
- return _q_notified();
+ return dispatchNextIoResult();
case WAIT_TIMEOUT:
return 0;
default:
@@ -385,17 +385,20 @@ void QWinOverlappedIoNotifierPrivate::notify(DWORD numberOfBytes, DWORD errorCod
emit q->_q_notify();
}
-OVERLAPPED *QWinOverlappedIoNotifierPrivate::_q_notified()
+void QWinOverlappedIoNotifierPrivate::_q_notified()
+{
+ if (WaitForSingleObject(hSemaphore, 0) == WAIT_OBJECT_0)
+ dispatchNextIoResult();
+}
+
+OVERLAPPED *QWinOverlappedIoNotifierPrivate::dispatchNextIoResult()
{
Q_Q(QWinOverlappedIoNotifier);
- if (WaitForSingleObject(hSemaphore, 0) == WAIT_OBJECT_0) {
- WaitForSingleObject(hResultsMutex, INFINITE);
- IOResult ioresult = results.dequeue();
- ReleaseMutex(hResultsMutex);
- emit q->notified(ioresult.numberOfBytes, ioresult.errorCode, ioresult.overlapped);
- return ioresult.overlapped;
- }
- return 0;
+ WaitForSingleObject(hResultsMutex, INFINITE);
+ IOResult ioresult = results.dequeue();
+ ReleaseMutex(hResultsMutex);
+ emit q->notified(ioresult.numberOfBytes, ioresult.errorCode, ioresult.overlapped);
+ return ioresult.overlapped;
}
QT_END_NAMESPACE
diff --git a/src/corelib/io/qwinoverlappedionotifier_p.h b/src/corelib/io/qwinoverlappedionotifier_p.h
index 863f87353e..41945d6556 100644
--- a/src/corelib/io/qwinoverlappedionotifier_p.h
+++ b/src/corelib/io/qwinoverlappedionotifier_p.h
@@ -58,7 +58,7 @@ class Q_CORE_EXPORT QWinOverlappedIoNotifier : public QObject
Q_OBJECT
Q_DISABLE_COPY(QWinOverlappedIoNotifier)
Q_DECLARE_PRIVATE(QWinOverlappedIoNotifier)
- Q_PRIVATE_SLOT(d_func(), OVERLAPPED *_q_notified())
+ Q_PRIVATE_SLOT(d_func(), void _q_notified())
friend class QWinIoCompletionPort;
public:
QWinOverlappedIoNotifier(QObject *parent = 0);
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp
index 60ac75133c..90297b9115 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.cpp
+++ b/src/corelib/itemmodels/qabstractitemmodel.cpp
@@ -479,6 +479,11 @@ public:
Q_GLOBAL_STATIC(QEmptyItemModel, qEmptyModel)
+
+QAbstractItemModelPrivate::~QAbstractItemModelPrivate()
+{
+}
+
QAbstractItemModel *QAbstractItemModelPrivate::staticEmptyModel()
{
return qEmptyModel();
@@ -3217,6 +3222,7 @@ QModelIndexList QAbstractItemModel::persistentIndexList() const
{
Q_D(const QAbstractItemModel);
QModelIndexList result;
+ result.reserve(d->persistent.indexes.count());
for (QHash<QModelIndex, QPersistentModelIndexData *>::const_iterator it = d->persistent.indexes.constBegin();
it != d->persistent.indexes.constEnd(); ++it) {
QPersistentModelIndexData *data = *it;
diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h
index 5ca7bd0123..096e67c513 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.h
+++ b/src/corelib/itemmodels/qabstractitemmodel.h
@@ -49,7 +49,7 @@ class Q_CORE_EXPORT QModelIndex
{
friend class QAbstractItemModel;
public:
- Q_DECL_CONSTEXPR inline QModelIndex() Q_DECL_NOTHROW : r(-1), c(-1), i(0), m(0) {}
+ Q_DECL_CONSTEXPR inline QModelIndex() Q_DECL_NOTHROW : r(-1), c(-1), i(0), m(Q_NULLPTR) {}
// compiler-generated copy/move ctors/assignment operators are fine!
Q_DECL_CONSTEXPR inline int row() const Q_DECL_NOTHROW { return r; }
Q_DECL_CONSTEXPR inline int column() const Q_DECL_NOTHROW { return c; }
@@ -61,7 +61,7 @@ public:
inline QVariant data(int role = Qt::DisplayRole) const;
inline Qt::ItemFlags flags() const;
Q_DECL_CONSTEXPR inline const QAbstractItemModel *model() const Q_DECL_NOTHROW { return m; }
- Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW { return (r >= 0) && (c >= 0) && (m != 0); }
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW { return (r >= 0) && (c >= 0) && (m != Q_NULLPTR); }
Q_DECL_CONSTEXPR inline bool operator==(const QModelIndex &other) const Q_DECL_NOTHROW
{ return (other.r == r) && (other.i == i) && (other.c == c) && (other.m == m); }
Q_DECL_CONSTEXPR inline bool operator!=(const QModelIndex &other) const Q_DECL_NOTHROW
@@ -161,7 +161,7 @@ class Q_CORE_EXPORT QAbstractItemModel : public QObject
friend class QIdentityProxyModel;
public:
- explicit QAbstractItemModel(QObject *parent = 0);
+ explicit QAbstractItemModel(QObject *parent = Q_NULLPTR);
virtual ~QAbstractItemModel();
Q_INVOKABLE bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const;
@@ -276,9 +276,9 @@ protected Q_SLOTS:
void resetInternalData();
protected:
- QAbstractItemModel(QAbstractItemModelPrivate &dd, QObject *parent = 0);
+ QAbstractItemModel(QAbstractItemModelPrivate &dd, QObject *parent = Q_NULLPTR);
- inline QModelIndex createIndex(int row, int column, void *data = 0) const;
+ inline QModelIndex createIndex(int row, int column, void *data = Q_NULLPTR) const;
inline QModelIndex createIndex(int row, int column, quintptr id) const;
void encodeData(const QModelIndexList &indexes, QDataStream &stream) const;
@@ -357,7 +357,7 @@ class Q_CORE_EXPORT QAbstractTableModel : public QAbstractItemModel
Q_OBJECT
public:
- explicit QAbstractTableModel(QObject *parent = 0);
+ explicit QAbstractTableModel(QObject *parent = Q_NULLPTR);
~QAbstractTableModel();
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
@@ -383,7 +383,7 @@ class Q_CORE_EXPORT QAbstractListModel : public QAbstractItemModel
Q_OBJECT
public:
- explicit QAbstractListModel(QObject *parent = 0);
+ explicit QAbstractListModel(QObject *parent = Q_NULLPTR);
~QAbstractListModel();
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
@@ -420,7 +420,7 @@ inline QVariant QModelIndex::data(int arole) const
{ return m ? m->data(*this, arole) : QVariant(); }
inline Qt::ItemFlags QModelIndex::flags() const
-{ return m ? m->flags(*this) : Qt::ItemFlags(0); }
+{ return m ? m->flags(*this) : Qt::ItemFlags(); }
inline uint qHash(const QModelIndex &index) Q_DECL_NOTHROW
{ return uint((index.row() << 4) + index.column() + index.internalId()); }
diff --git a/src/corelib/itemmodels/qabstractitemmodel_p.h b/src/corelib/itemmodels/qabstractitemmodel_p.h
index 075e6a9018..c2cbaf5298 100644
--- a/src/corelib/itemmodels/qabstractitemmodel_p.h
+++ b/src/corelib/itemmodels/qabstractitemmodel_p.h
@@ -71,6 +71,8 @@ class Q_CORE_EXPORT QAbstractItemModelPrivate : public QObjectPrivate
public:
QAbstractItemModelPrivate() : QObjectPrivate(), supportedDragActions(-1), roleNames(defaultRoleNames()) {}
+ ~QAbstractItemModelPrivate();
+
void removePersistentIndexData(QPersistentModelIndexData *data);
void movePersistentIndexes(const QVector<QPersistentModelIndexData *> &indexes, int change, const QModelIndex &parent, Qt::Orientation orientation);
void rowsAboutToBeInserted(const QModelIndex &parent, int first, int last);
@@ -162,6 +164,7 @@ public:
QHash<int,QByteArray> roleNames;
static const QHash<int,QByteArray> &defaultRoleNames();
};
+Q_DECLARE_TYPEINFO(QAbstractItemModelPrivate::Change, Q_MOVABLE_TYPE);
QT_END_NAMESPACE
diff --git a/src/corelib/itemmodels/qabstractproxymodel.cpp b/src/corelib/itemmodels/qabstractproxymodel.cpp
index 4d08306d28..dbbbbb8ff4 100644
--- a/src/corelib/itemmodels/qabstractproxymodel.cpp
+++ b/src/corelib/itemmodels/qabstractproxymodel.cpp
@@ -379,6 +379,7 @@ QMimeData* QAbstractProxyModel::mimeData(const QModelIndexList &indexes) const
{
Q_D(const QAbstractProxyModel);
QModelIndexList list;
+ list.reserve(indexes.count());
foreach(const QModelIndex &index, indexes)
list << mapToSource(index);
return d->model->mimeData(list);
diff --git a/src/corelib/itemmodels/qabstractproxymodel.h b/src/corelib/itemmodels/qabstractproxymodel.h
index dc8d2d4dc8..a4cb74830b 100644
--- a/src/corelib/itemmodels/qabstractproxymodel.h
+++ b/src/corelib/itemmodels/qabstractproxymodel.h
@@ -50,7 +50,7 @@ class Q_CORE_EXPORT QAbstractProxyModel : public QAbstractItemModel
Q_PROPERTY(QAbstractItemModel* sourceModel READ sourceModel WRITE setSourceModel NOTIFY sourceModelChanged)
public:
- explicit QAbstractProxyModel(QObject *parent = 0);
+ explicit QAbstractProxyModel(QObject *parent = Q_NULLPTR);
~QAbstractProxyModel();
virtual void setSourceModel(QAbstractItemModel *sourceModel);
diff --git a/src/corelib/itemmodels/qidentityproxymodel.cpp b/src/corelib/itemmodels/qidentityproxymodel.cpp
index f773219aeb..f46fd135ca 100644
--- a/src/corelib/itemmodels/qidentityproxymodel.cpp
+++ b/src/corelib/itemmodels/qidentityproxymodel.cpp
@@ -212,6 +212,7 @@ QItemSelection QIdentityProxyModel::mapSelectionFromSource(const QItemSelection&
QItemSelection::const_iterator it = selection.constBegin();
const QItemSelection::const_iterator end = selection.constEnd();
+ proxySelection.reserve(selection.count());
for ( ; it != end; ++it) {
Q_ASSERT(it->model() == d->model);
const QItemSelectionRange range(mapFromSource(it->topLeft()), mapFromSource(it->bottomRight()));
@@ -234,6 +235,7 @@ QItemSelection QIdentityProxyModel::mapSelectionToSource(const QItemSelection& s
QItemSelection::const_iterator it = selection.constBegin();
const QItemSelection::const_iterator end = selection.constEnd();
+ sourceSelection.reserve(selection.count());
for ( ; it != end; ++it) {
Q_ASSERT(it->model() == this);
const QItemSelectionRange range(mapToSource(it->topLeft()), mapToSource(it->bottomRight()));
@@ -269,6 +271,7 @@ QModelIndexList QIdentityProxyModel::match(const QModelIndex& start, int role, c
QModelIndexList::const_iterator it = sourceList.constBegin();
const QModelIndexList::const_iterator end = sourceList.constEnd();
QModelIndexList proxyList;
+ proxyList.reserve(sourceList.count());
for ( ; it != end; ++it)
proxyList.append(mapFromSource(*it));
return proxyList;
diff --git a/src/corelib/itemmodels/qidentityproxymodel.h b/src/corelib/itemmodels/qidentityproxymodel.h
index e4587cb386..7578f8d380 100644
--- a/src/corelib/itemmodels/qidentityproxymodel.h
+++ b/src/corelib/itemmodels/qidentityproxymodel.h
@@ -48,7 +48,7 @@ class Q_CORE_EXPORT QIdentityProxyModel : public QAbstractProxyModel
{
Q_OBJECT
public:
- explicit QIdentityProxyModel(QObject* parent = 0);
+ explicit QIdentityProxyModel(QObject* parent = Q_NULLPTR);
~QIdentityProxyModel();
int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp
index de28953fb5..51c670f79e 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.cpp
+++ b/src/corelib/itemmodels/qitemselectionmodel.cpp
@@ -104,6 +104,14 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \fn QItemSelectionRange::swap(QItemSelectionRange &other)
+ \since 5.6
+
+ Swaps this selection range's contents with \a other.
+ This function is very fast and never fails.
+*/
+
+/*!
\fn int QItemSelectionRange::top() const
Returns the row index corresponding to the uppermost selected row in the
@@ -721,11 +729,11 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare
deselected.append(*it);
it = ranges.erase(it);
} else if (start <= it->top() && it->top() <= end) { // Top intersection
- deselected.append(QItemSelectionRange(it->topLeft(), model->index(end, it->left(), it->parent())));
+ deselected.append(QItemSelectionRange(it->topLeft(), model->index(end, it->right(), it->parent())));
*it = QItemSelectionRange(model->index(end + 1, it->left(), it->parent()), it->bottomRight());
++it;
} else if (start <= it->bottom() && it->bottom() <= end) { // Bottom intersection
- deselected.append(QItemSelectionRange(model->index(start, it->right(), it->parent()), it->bottomRight()));
+ deselected.append(QItemSelectionRange(model->index(start, it->left(), it->parent()), it->bottomRight()));
*it = QItemSelectionRange(it->topLeft(), model->index(start - 1, it->right(), it->parent()));
++it;
} else if (it->top() < start && end < it->bottom()) { // Middle intersection
@@ -733,8 +741,8 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare
// and [4, 5] is removed, we need to split [3, 4, 5, 6] into [3], [4, 5] and [6].
// [4, 5] is appended to deselected, and [3] and [6] remain part of the selection
// in ranges.
- const QItemSelectionRange removedRange(model->index(start, it->right(), it->parent()),
- model->index(end, it->left(), it->parent()));
+ const QItemSelectionRange removedRange(model->index(start, it->left(), it->parent()),
+ model->index(end, it->right(), it->parent()));
deselected.append(removedRange);
QItemSelection::split(*it, removedRange, &newParts);
it = ranges.erase(it);
@@ -1770,7 +1778,7 @@ const QAbstractItemModel *QItemSelectionModel::model() const
/*!
\since 5.5
- Sets the model. The modelChanged() signal will be emitted.
+ Sets the model to \a model. The modelChanged() signal will be emitted.
\sa model(), modelChanged()
*/
diff --git a/src/corelib/itemmodels/qitemselectionmodel.h b/src/corelib/itemmodels/qitemselectionmodel.h
index 4fe836c098..09b710175e 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.h
+++ b/src/corelib/itemmodels/qitemselectionmodel.h
@@ -48,12 +48,28 @@ class Q_CORE_EXPORT QItemSelectionRange
{
public:
- inline QItemSelectionRange() {}
+ inline QItemSelectionRange() : tl(), br() {}
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ // ### Qt 6: remove them all, the compiler-generated ones are fine
inline QItemSelectionRange(const QItemSelectionRange &other)
: tl(other.tl), br(other.br) {}
- inline QItemSelectionRange(const QModelIndex &topLeft, const QModelIndex &bottomRight);
- explicit inline QItemSelectionRange(const QModelIndex &index)
- { tl = index; br = tl; }
+# ifdef Q_COMPILER_RVALUE_REFS
+ QItemSelectionRange(QItemSelectionRange &&other) Q_DECL_NOTHROW
+ : tl(std::move(other.tl)), br(std::move(other.br)) {}
+ QItemSelectionRange &operator=(QItemSelectionRange &&other) Q_DECL_NOTHROW
+ { tl = std::move(other.tl); br = std::move(other.br); return *this; }
+# endif
+ QItemSelectionRange &operator=(const QItemSelectionRange &other)
+ { tl = other.tl; br = other.br; return *this; }
+#endif // Qt < 6
+ QItemSelectionRange(const QModelIndex &topL, const QModelIndex &bottomR) : tl(topL), br(bottomR) {}
+ explicit QItemSelectionRange(const QModelIndex &index) : tl(index), br(tl) {}
+
+ void swap(QItemSelectionRange &other) Q_DECL_NOTHROW
+ {
+ qSwap(tl, other.tl);
+ qSwap(br, other.br);
+ }
inline int top() const { return tl.row(); }
inline int left() const { return tl.column(); }
@@ -133,10 +149,6 @@ private:
};
Q_DECLARE_TYPEINFO(QItemSelectionRange, Q_MOVABLE_TYPE);
-inline QItemSelectionRange::QItemSelectionRange(const QModelIndex &atopLeft,
- const QModelIndex &abottomRight)
-{ tl = atopLeft; br = abottomRight; }
-
class QItemSelection;
class QItemSelectionModelPrivate;
@@ -170,7 +182,7 @@ public:
Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
Q_FLAG(SelectionFlags)
- explicit QItemSelectionModel(QAbstractItemModel *model = 0);
+ explicit QItemSelectionModel(QAbstractItemModel *model = Q_NULLPTR);
explicit QItemSelectionModel(QAbstractItemModel *model, QObject *parent);
virtual ~QItemSelectionModel();
@@ -235,8 +247,11 @@ inline uint qHash(const QItemSelectionRange &) { return 0; }
class Q_CORE_EXPORT QItemSelection : public QList<QItemSelectionRange>
{
public:
- QItemSelection() {}
+ QItemSelection() Q_DECL_NOTHROW : QList<QItemSelectionRange>() {}
QItemSelection(const QModelIndex &topLeft, const QModelIndex &bottomRight);
+
+ // reusing QList::swap() here is OK!
+
void select(const QModelIndex &topLeft, const QModelIndex &bottomRight);
bool contains(const QModelIndex &index) const;
QModelIndexList indexes() const;
@@ -245,6 +260,7 @@ public:
const QItemSelectionRange &other,
QItemSelection *result);
};
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QItemSelection)
#ifndef QT_NO_DEBUG_STREAM
Q_CORE_EXPORT QDebug operator<<(QDebug, const QItemSelectionRange &);
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 6853cbd38f..0771fd0e30 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -272,6 +272,7 @@ public:
QModelIndexPairList store_persistent_indexes();
void update_persistent_indexes(const QModelIndexPairList &source_indexes);
+ void filter_about_to_be_changed(const QModelIndex &source_parent = QModelIndex());
void filter_changed(const QModelIndex &source_parent = QModelIndex());
QSet<int> handle_filter_changed(
QVector<int> &source_to_proxy, QVector<int> &proxy_to_source,
@@ -1011,6 +1012,7 @@ QModelIndexPairList QSortFilterProxyModelPrivate::store_persistent_indexes()
{
Q_Q(QSortFilterProxyModel);
QModelIndexPairList source_indexes;
+ source_indexes.reserve(persistent.indexes.count());
foreach (QPersistentModelIndexData *data, persistent.indexes) {
QModelIndex proxy_index = data->index;
QModelIndex source_index = q->mapToSource(proxy_index);
@@ -1030,7 +1032,10 @@ void QSortFilterProxyModelPrivate::update_persistent_indexes(
{
Q_Q(QSortFilterProxyModel);
QModelIndexList from, to;
- for (int i = 0; i < source_indexes.count(); ++i) {
+ const int numSourceIndexes = source_indexes.count();
+ from.reserve(numSourceIndexes);
+ to.reserve(numSourceIndexes);
+ for (int i = 0; i < numSourceIndexes; ++i) {
QModelIndex source_index = source_indexes.at(i).second;
QModelIndex old_proxy_index = source_indexes.at(i).first;
create_mapping(source_index.parent());
@@ -1041,6 +1046,19 @@ void QSortFilterProxyModelPrivate::update_persistent_indexes(
q->changePersistentIndexList(from, to);
}
+/*!
+ \internal
+
+ Updates the source_index mapping in case it's invalid and we
+ need it because we have a valid filter
+*/
+void QSortFilterProxyModelPrivate::filter_about_to_be_changed(const QModelIndex &source_parent)
+{
+ if (!filter_regexp.pattern().isEmpty() &&
+ source_index_mapping.constFind(source_parent) == source_index_mapping.constEnd())
+ create_mapping(source_parent);
+}
+
/*!
\internal
@@ -2013,7 +2031,9 @@ QMimeData *QSortFilterProxyModel::mimeData(const QModelIndexList &indexes) const
{
Q_D(const QSortFilterProxyModel);
QModelIndexList source_indexes;
- for (int i = 0; i < indexes.count(); ++i)
+ const int numIndexes = indexes.count();
+ source_indexes.reserve(numIndexes);
+ for (int i = 0; i < numIndexes; ++i)
source_indexes << mapToSource(indexes.at(i));
return d->model->mimeData(source_indexes);
}
@@ -2108,6 +2128,7 @@ bool QSortFilterProxyModel::removeRows(int row, int count, const QModelIndex &pa
// remove corresponding source intervals
// ### if this proves to be slow, we can switch to single-row removal
QVector<int> rows;
+ rows.reserve(count);
for (int i = row; i < row + count; ++i)
rows.append(m->source_rows.at(i));
std::sort(rows.begin(), rows.end());
@@ -2147,6 +2168,7 @@ bool QSortFilterProxyModel::removeColumns(int column, int count, const QModelInd
}
// remove corresponding source intervals
QVector<int> columns;
+ columns.reserve(count);
for (int i = column; i < column + count; ++i)
columns.append(m->source_columns.at(i));
@@ -2298,6 +2320,7 @@ QRegExp QSortFilterProxyModel::filterRegExp() const
void QSortFilterProxyModel::setFilterRegExp(const QRegExp &regExp)
{
Q_D(QSortFilterProxyModel);
+ d->filter_about_to_be_changed();
d->filter_regexp = regExp;
d->filter_changed();
}
@@ -2319,6 +2342,7 @@ int QSortFilterProxyModel::filterKeyColumn() const
void QSortFilterProxyModel::setFilterKeyColumn(int column)
{
Q_D(QSortFilterProxyModel);
+ d->filter_about_to_be_changed();
d->filter_column = column;
d->filter_changed();
}
@@ -2344,6 +2368,7 @@ void QSortFilterProxyModel::setFilterCaseSensitivity(Qt::CaseSensitivity cs)
Q_D(QSortFilterProxyModel);
if (cs == d->filter_regexp.caseSensitivity())
return;
+ d->filter_about_to_be_changed();
d->filter_regexp.setCaseSensitivity(cs);
d->filter_changed();
}
@@ -2409,6 +2434,7 @@ void QSortFilterProxyModel::setSortLocaleAware(bool on)
void QSortFilterProxyModel::setFilterRegExp(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
+ d->filter_about_to_be_changed();
d->filter_regexp.setPatternSyntax(QRegExp::RegExp);
d->filter_regexp.setPattern(pattern);
d->filter_changed();
@@ -2423,6 +2449,7 @@ void QSortFilterProxyModel::setFilterRegExp(const QString &pattern)
void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
+ d->filter_about_to_be_changed();
d->filter_regexp.setPatternSyntax(QRegExp::Wildcard);
d->filter_regexp.setPattern(pattern);
d->filter_changed();
@@ -2437,6 +2464,7 @@ void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)
void QSortFilterProxyModel::setFilterFixedString(const QString &pattern)
{
Q_D(QSortFilterProxyModel);
+ d->filter_about_to_be_changed();
d->filter_regexp.setPatternSyntax(QRegExp::FixedString);
d->filter_regexp.setPattern(pattern);
d->filter_changed();
@@ -2516,6 +2544,7 @@ void QSortFilterProxyModel::setFilterRole(int role)
Q_D(QSortFilterProxyModel);
if (d->filter_role == role)
return;
+ d->filter_about_to_be_changed();
d->filter_role = role;
d->filter_changed();
}
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.h b/src/corelib/itemmodels/qsortfilterproxymodel.h
index a08d7c6416..4be5aedd48 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.h
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.h
@@ -63,7 +63,7 @@ class Q_CORE_EXPORT QSortFilterProxyModel : public QAbstractProxyModel
Q_PROPERTY(int filterRole READ filterRole WRITE setFilterRole)
public:
- explicit QSortFilterProxyModel(QObject *parent = 0);
+ explicit QSortFilterProxyModel(QObject *parent = Q_NULLPTR);
~QSortFilterProxyModel();
void setSourceModel(QAbstractItemModel *sourceModel) Q_DECL_OVERRIDE;
diff --git a/src/corelib/itemmodels/qstringlistmodel.cpp b/src/corelib/itemmodels/qstringlistmodel.cpp
index 2853be3fda..dad736b445 100644
--- a/src/corelib/itemmodels/qstringlistmodel.cpp
+++ b/src/corelib/itemmodels/qstringlistmodel.cpp
@@ -257,7 +257,9 @@ void QStringListModel::sort(int, Qt::SortOrder order)
emit layoutAboutToBeChanged(QList<QPersistentModelIndex>(), VerticalSortHint);
QList<QPair<QString, int> > list;
- for (int i = 0; i < lst.count(); ++i)
+ const int lstCount = lst.count();
+ list.reserve(lstCount);
+ for (int i = 0; i < lstCount; ++i)
list.append(QPair<QString, int>(lst.at(i), i));
if (order == Qt::AscendingOrder)
diff --git a/src/corelib/itemmodels/qstringlistmodel.h b/src/corelib/itemmodels/qstringlistmodel.h
index 973007995b..a1cb923dbb 100644
--- a/src/corelib/itemmodels/qstringlistmodel.h
+++ b/src/corelib/itemmodels/qstringlistmodel.h
@@ -46,8 +46,8 @@ class Q_CORE_EXPORT QStringListModel : public QAbstractListModel
{
Q_OBJECT
public:
- explicit QStringListModel(QObject *parent = 0);
- explicit QStringListModel(const QStringList &strings, QObject *parent = 0);
+ explicit QStringListModel(QObject *parent = Q_NULLPTR);
+ explicit QStringListModel(const QStringList &strings, QObject *parent = Q_NULLPTR);
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h
index 17f49d41c8..7f5a2d88a1 100644
--- a/src/corelib/json/qjson_p.h
+++ b/src/corelib/json/qjson_p.h
@@ -280,7 +280,7 @@ static inline int compressedNumber(double d)
if (non_int)
return INT_MAX;
- bool neg = (val >> 63);
+ bool neg = (val >> 63) != 0;
val &= fraction_mask;
val |= ((quint64)1 << 52);
int res = (int)(val >> (52 - exp));
@@ -543,7 +543,7 @@ public:
offset tableOffset;
// content follows here
- inline bool isObject() const { return is_object; }
+ inline bool isObject() const { return !!is_object; }
inline bool isArray() const { return !isObject(); }
inline offset *table() const { return (offset *) (((char *) this) + tableOffset); }
diff --git a/src/corelib/json/qjsonarray.cpp b/src/corelib/json/qjsonarray.cpp
index 77a3d0a2b8..bb33dbde74 100644
--- a/src/corelib/json/qjsonarray.cpp
+++ b/src/corelib/json/qjsonarray.cpp
@@ -271,6 +271,7 @@ QVariantList QJsonArray::toVariantList() const
QVariantList list;
if (a) {
+ list.reserve(a->length);
for (int i = 0; i < (int)a->length; ++i)
list.append(QJsonValue(d, a, a->at(i)).toVariant());
}
@@ -532,8 +533,8 @@ bool QJsonArray::contains(const QJsonValue &value) const
\a i must be a valid index position in the array (i.e., \c{0 <= i <
size()}).
- The return value is of type \keyword QJsonValueRef, a helper class for QJsonArray
- and QJsonObject. When you get an object of type \keyword QJsonValueRef, you can
+ The return value is of type QJsonValueRef, a helper class for QJsonArray
+ and QJsonObject. When you get an object of type QJsonValueRef, you can
use it as if it were a reference to a QJsonValue. If you assign to it,
the assignment will apply to the character in the QJsonArray of QJsonObject
from which you got the reference.
@@ -738,8 +739,8 @@ bool QJsonArray::operator!=(const QJsonArray &other) const
You can change the value of an item by using operator*() on the
left side of an assignment.
- The return value is of type \keyword QJsonValueRef, a helper class for QJsonArray
- and QJsonObject. When you get an object of type \keyword QJsonValueRef, you can
+ The return value is of type QJsonValueRef, a helper class for QJsonArray
+ and QJsonObject. When you get an object of type QJsonValueRef, you can
use it as if it were a reference to a QJsonValue. If you assign to it,
the assignment will apply to the character in the QJsonArray of QJsonObject
from which you got the reference.
@@ -758,8 +759,8 @@ bool QJsonArray::operator!=(const QJsonArray &other) const
This function is provided to make QJsonArray iterators behave like C++
pointers.
- The return value is of type \keyword QJsonValueRef, a helper class for QJsonArray
- and QJsonObject. When you get an object of type \keyword QJsonValueRef, you can
+ The return value is of type QJsonValueRef, a helper class for QJsonArray
+ and QJsonObject. When you get an object of type QJsonValueRef, you can
use it as if it were a reference to a QJsonValue. If you assign to it,
the assignment will apply to the character in the QJsonArray of QJsonObject
from which you got the reference.
diff --git a/src/corelib/json/qjsonarray.h b/src/corelib/json/qjsonarray.h
index 6148642106..611e1f4193 100644
--- a/src/corelib/json/qjsonarray.h
+++ b/src/corelib/json/qjsonarray.h
@@ -107,7 +107,7 @@ public:
typedef QJsonValueRef reference;
typedef QJsonValueRefPtr pointer;
- inline iterator() : a(0), i(0) { }
+ inline iterator() : a(Q_NULLPTR), i(0) { }
explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { }
inline QJsonValueRef operator*() const { return QJsonValueRef(a, i); }
@@ -152,9 +152,11 @@ public:
typedef QJsonValue reference;
typedef QJsonValuePtr pointer;
- inline const_iterator() : a(0), i(0) { }
+ inline const_iterator() : a(Q_NULLPTR), i(0) { }
explicit inline const_iterator(const QJsonArray *array, int index) : a(array), i(index) { }
- inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {} // ### Qt 6: Removed so class can be trivially-copyable
+#endif
inline const_iterator(const iterator &o) : a(o.a), i(o.i) {}
inline QJsonValue operator*() const { return a->at(i); }
diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp
index f5bad32233..3ef006d82d 100644
--- a/src/corelib/json/qjsondocument.cpp
+++ b/src/corelib/json/qjsondocument.cpp
@@ -574,7 +574,7 @@ QDebug operator<<(QDebug dbg, const QJsonDocument &o)
QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(o.d->header->root()), json, 0, true);
dbg.nospace() << "QJsonDocument("
<< json.constData() // print as utf-8 string without extra quotation marks
- << ")";
+ << ')';
return dbg;
}
#endif
diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h
index 285b42c6c8..d7a88b2f15 100644
--- a/src/corelib/json/qjsondocument.h
+++ b/src/corelib/json/qjsondocument.h
@@ -106,7 +106,7 @@ public:
Compact
};
- static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0);
+ static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR);
#ifdef Q_QDOC
QByteArray toJson(JsonFormat format = Indented) const;
diff --git a/src/corelib/json/qjsonobject.cpp b/src/corelib/json/qjsonobject.cpp
index ae44cd9ff9..c225606717 100644
--- a/src/corelib/json/qjsonobject.cpp
+++ b/src/corelib/json/qjsonobject.cpp
@@ -274,7 +274,7 @@ QStringList QJsonObject::keys() const
return QStringList();
QStringList keys;
-
+ keys.reserve(o->length);
for (uint i = 0; i < o->length; ++i) {
QJsonPrivate::Entry *e = o->entryAt(i);
keys.append(e->key());
@@ -693,6 +693,11 @@ QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const
\internal
*/
+/*! \typedef QJsonObject::iterator::pointer
+
+ \internal
+*/
+
/*! \fn QJsonObject::iterator::iterator()
Constructs an uninitialized iterator.
@@ -895,6 +900,11 @@ QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const
\internal
*/
+/*! \typedef QJsonObject::const_iterator::pointer
+
+ \internal
+*/
+
/*! \fn QJsonObject::const_iterator::const_iterator()
Constructs an uninitialized iterator.
diff --git a/src/corelib/json/qjsonobject.h b/src/corelib/json/qjsonobject.h
index 5f24ac3ac8..5b475f52ae 100644
--- a/src/corelib/json/qjsonobject.h
+++ b/src/corelib/json/qjsonobject.h
@@ -104,8 +104,9 @@ public:
typedef int difference_type;
typedef QJsonValue value_type;
typedef QJsonValueRef reference;
+ typedef QJsonValuePtr pointer;
- Q_DECL_CONSTEXPR inline iterator() : o(0), i(0) {}
+ Q_DECL_CONSTEXPR inline iterator() : o(Q_NULLPTR), i(0) {}
Q_DECL_CONSTEXPR inline iterator(QJsonObject *obj, int index) : o(obj), i(index) {}
inline QString key() const { return o->keyAt(i); }
@@ -146,8 +147,9 @@ public:
typedef int difference_type;
typedef QJsonValue value_type;
typedef QJsonValue reference;
+ typedef QJsonValuePtr pointer;
- Q_DECL_CONSTEXPR inline const_iterator() : o(0), i(0) {}
+ Q_DECL_CONSTEXPR inline const_iterator() : o(Q_NULLPTR), i(0) {}
Q_DECL_CONSTEXPR inline const_iterator(const QJsonObject *obj, int index)
: o(obj), i(index) {}
inline const_iterator(const iterator &other)
diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp
index ae6a3678bd..76e5ae562f 100644
--- a/src/corelib/json/qjsonvalue.cpp
+++ b/src/corelib/json/qjsonvalue.cpp
@@ -173,7 +173,7 @@ QJsonValue::QJsonValue(int n)
QJsonValue::QJsonValue(qint64 n)
: d(0), t(Double)
{
- this->dbl = n;
+ this->dbl = double(n);
}
/*!
@@ -420,6 +420,18 @@ QJsonValue QJsonValue::fromVariant(const QVariant &variant)
return QJsonValue(QJsonObject::fromVariantMap(variant.toMap()));
case QVariant::Hash:
return QJsonValue(QJsonObject::fromVariantHash(variant.toHash()));
+#ifndef QT_BOOTSTRAPPED
+ case QMetaType::QJsonValue:
+ return variant.toJsonValue();
+ case QMetaType::QJsonObject:
+ return variant.toJsonObject();
+ case QMetaType::QJsonArray:
+ return variant.toJsonArray();
+ case QMetaType::QJsonDocument: {
+ QJsonDocument doc = variant.toJsonDocument();
+ return doc.isArray() ? QJsonValue(doc.array()) : QJsonValue(doc.object());
+ }
+#endif
default:
break;
}
@@ -515,7 +527,7 @@ bool QJsonValue::toBool(bool defaultValue) const
int QJsonValue::toInt(int defaultValue) const
{
if (t == Double && int(dbl) == dbl)
- return dbl;
+ return int(dbl);
return defaultValue;
}
@@ -738,23 +750,23 @@ QDebug operator<<(QDebug dbg, const QJsonValue &o)
dbg << "QJsonValue(null)";
break;
case QJsonValue::Bool:
- dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ")";
+ dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ')';
break;
case QJsonValue::Double:
- dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ")";
+ dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ')';
break;
case QJsonValue::String:
- dbg.nospace() << "QJsonValue(string, " << o.toString() << ")";
+ dbg.nospace() << "QJsonValue(string, " << o.toString() << ')';
break;
case QJsonValue::Array:
dbg.nospace() << "QJsonValue(array, ";
dbg << o.toArray();
- dbg << ")";
+ dbg << ')';
break;
case QJsonValue::Object:
dbg.nospace() << "QJsonValue(object, ";
dbg << o.toObject();
- dbg << ")";
+ dbg << ')';
break;
}
return dbg;
diff --git a/src/corelib/json/qjsonwriter.cpp b/src/corelib/json/qjsonwriter.cpp
index 99f83554c2..45a05e93a3 100644
--- a/src/corelib/json/qjsonwriter.cpp
+++ b/src/corelib/json/qjsonwriter.cpp
@@ -137,13 +137,13 @@ static void valueToJson(const QJsonPrivate::Base *b, const QJsonPrivate::Value &
json += compact ? "[" : "[\n";
arrayContentToJson(static_cast<QJsonPrivate::Array *>(v.base(b)), json, indent + (compact ? 0 : 1), compact);
json += QByteArray(4*indent, ' ');
- json += "]";
+ json += ']';
break;
case QJsonValue::Object:
json += compact ? "{" : "{\n";
objectContentToJson(static_cast<QJsonPrivate::Object *>(v.base(b)), json, indent + (compact ? 0 : 1), compact);
json += QByteArray(4*indent, ' ');
- json += "}";
+ json += '}';
break;
case QJsonValue::Null:
default:
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index 65dc44def2..bc93791c2e 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -88,6 +88,7 @@ wince {
SOURCES += \
kernel/qfunctions_wince.cpp
HEADERS += \
+ kernel/qfunctions_fake_env_p.h \
kernel/qfunctions_wince.h
}
@@ -95,26 +96,33 @@ winrt {
SOURCES += \
kernel/qfunctions_winrt.cpp
HEADERS += \
+ kernel/qfunctions_fake_env_p.h \
kernel/qfunctions_winrt.h
}
mac {
HEADERS += \
- kernel/qcore_mac_p.h
+ kernel/qcfsocketnotifier_p.h \
+ kernel/qcore_mac_p.h \
+ kernel/qeventdispatcher_cf_p.h
SOURCES += \
+ kernel/qcfsocketnotifier.cpp \
kernel/qcoreapplication_mac.cpp \
kernel/qcore_mac.cpp
OBJECTIVE_SOURCES += \
- kernel/qcore_mac_objc.mm
+ kernel/qcore_mac_objc.mm \
+ kernel/qeventdispatcher_cf.mm
LIBS_PRIVATE += -framework Foundation
- osx: LIBS_PRIVATE += -framework CoreServices
+ osx: LIBS_PRIVATE += -framework CoreServices -framework AppKit
- # We need UIKit for UIDevice
- ios: LIBS_PRIVATE += -framework UIKit
+ ios {
+ # We need UIKit for UIDevice
+ LIBS_PRIVATE += -framework UIKit
+ }
}
nacl {
diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h
index c80f7d3d08..eb357cefe5 100644
--- a/src/corelib/kernel/qabstracteventdispatcher.h
+++ b/src/corelib/kernel/qabstracteventdispatcher.h
@@ -64,10 +64,10 @@ public:
{ }
};
- explicit QAbstractEventDispatcher(QObject *parent = 0);
+ explicit QAbstractEventDispatcher(QObject *parent = Q_NULLPTR);
~QAbstractEventDispatcher();
- static QAbstractEventDispatcher *instance(QThread *thread = 0);
+ static QAbstractEventDispatcher *instance(QThread *thread = Q_NULLPTR);
virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0;
virtual bool hasPendingEvents() = 0; // ### Qt6: remove, mark final or make protected
diff --git a/src/corelib/kernel/qcfsocketnotifier.cpp b/src/corelib/kernel/qcfsocketnotifier.cpp
new file mode 100644
index 0000000000..7f4c26d978
--- /dev/null
+++ b/src/corelib/kernel/qcfsocketnotifier.cpp
@@ -0,0 +1,307 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qcfsocketnotifier_p.h"
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/qsocketnotifier.h>
+#include <QtCore/qthread.h>
+
+QT_BEGIN_NAMESPACE
+
+/**************************************************************************
+ Socket Notifiers
+ *************************************************************************/
+void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CFDataRef,
+ const void *, void *info)
+{
+
+ QCFSocketNotifier *cfSocketNotifier = static_cast<QCFSocketNotifier *>(info);
+ int nativeSocket = CFSocketGetNative(s);
+ MacSocketInfo *socketInfo = cfSocketNotifier->macSockets.value(nativeSocket);
+ QEvent notifierEvent(QEvent::SockAct);
+
+ // There is a race condition that happen where we disable the notifier and
+ // the kernel still has a notification to pass on. We then get this
+ // notification after we've successfully disabled the CFSocket, but our Qt
+ // notifier is now gone. The upshot is we have to check the notifier
+ // every time.
+ if (callbackType == kCFSocketReadCallBack) {
+ if (socketInfo->readNotifier && socketInfo->readEnabled) {
+ socketInfo->readEnabled = false;
+ QCoreApplication::sendEvent(socketInfo->readNotifier, &notifierEvent);
+ }
+ } else if (callbackType == kCFSocketWriteCallBack) {
+ if (socketInfo->writeNotifier && socketInfo->writeEnabled) {
+ socketInfo->writeEnabled = false;
+ QCoreApplication::sendEvent(socketInfo->writeNotifier, &notifierEvent);
+ }
+ }
+
+ if (cfSocketNotifier->maybeCancelWaitForMoreEvents)
+ cfSocketNotifier->maybeCancelWaitForMoreEvents(cfSocketNotifier->eventDispatcher);
+}
+
+/*
+ Adds a loop source for the given socket to the current run loop.
+*/
+CFRunLoopSourceRef qt_mac_add_socket_to_runloop(const CFSocketRef socket)
+{
+ CFRunLoopSourceRef loopSource = CFSocketCreateRunLoopSource(kCFAllocatorDefault, socket, 0);
+ if (!loopSource)
+ return 0;
+
+ CFRunLoopAddSource(CFRunLoopGetMain(), loopSource, kCFRunLoopCommonModes);
+ return loopSource;
+}
+
+/*
+ Removes the loop source for the given socket from the current run loop.
+*/
+void qt_mac_remove_socket_from_runloop(const CFSocketRef socket, CFRunLoopSourceRef runloop)
+{
+ Q_ASSERT(runloop);
+ CFRunLoopRemoveSource(CFRunLoopGetMain(), runloop, kCFRunLoopCommonModes);
+ CFSocketDisableCallBacks(socket, kCFSocketReadCallBack);
+ CFSocketDisableCallBacks(socket, kCFSocketWriteCallBack);
+}
+
+QCFSocketNotifier::QCFSocketNotifier()
+ : eventDispatcher(0)
+ , maybeCancelWaitForMoreEvents(0)
+ , enableNotifiersObserver(0)
+{
+
+}
+
+QCFSocketNotifier::~QCFSocketNotifier()
+{
+
+}
+
+void QCFSocketNotifier::setHostEventDispatcher(QAbstractEventDispatcher *hostEventDispacher)
+{
+ eventDispatcher = hostEventDispacher;
+}
+
+void QCFSocketNotifier::setMaybeCancelWaitForMoreEventsCallback(MaybeCancelWaitForMoreEventsFn callBack)
+{
+ maybeCancelWaitForMoreEvents = callBack;
+}
+
+void QCFSocketNotifier::registerSocketNotifier(QSocketNotifier *notifier)
+{
+ Q_ASSERT(notifier);
+ int nativeSocket = notifier->socket();
+ int type = notifier->type();
+#ifndef QT_NO_DEBUG
+ if (nativeSocket < 0 || nativeSocket > FD_SETSIZE) {
+ qWarning("QSocketNotifier: Internal error");
+ return;
+ } else if (notifier->thread() != eventDispatcher->thread()
+ || eventDispatcher->thread() != QThread::currentThread()) {
+ qWarning("QSocketNotifier: socket notifiers cannot be enabled from another thread");
+ return;
+ }
+#endif
+
+ if (type == QSocketNotifier::Exception) {
+ qWarning("QSocketNotifier::Exception is not supported on iOS");
+ return;
+ }
+
+ // Check if we have a CFSocket for the native socket, create one if not.
+ MacSocketInfo *socketInfo = macSockets.value(nativeSocket);
+ if (!socketInfo) {
+ socketInfo = new MacSocketInfo();
+
+ // Create CFSocket, specify that we want both read and write callbacks (the callbacks
+ // are enabled/disabled later on).
+ const int callbackTypes = kCFSocketReadCallBack | kCFSocketWriteCallBack;
+ CFSocketContext context = {0, this, 0, 0, 0};
+ socketInfo->socket = CFSocketCreateWithNative(kCFAllocatorDefault, nativeSocket, callbackTypes, qt_mac_socket_callback, &context);
+ if (CFSocketIsValid(socketInfo->socket) == false) {
+ qWarning("QEventDispatcherMac::registerSocketNotifier: Failed to create CFSocket");
+ return;
+ }
+
+ CFOptionFlags flags = CFSocketGetSocketFlags(socketInfo->socket);
+ // QSocketNotifier doesn't close the socket upon destruction/invalidation
+ flags &= ~kCFSocketCloseOnInvalidate;
+ // Expicitly disable automatic re-enable, as we do that manually on each runloop pass
+ flags &= ~(kCFSocketAutomaticallyReenableWriteCallBack | kCFSocketAutomaticallyReenableReadCallBack);
+ CFSocketSetSocketFlags(socketInfo->socket, flags);
+
+ macSockets.insert(nativeSocket, socketInfo);
+ }
+
+ if (type == QSocketNotifier::Read) {
+ Q_ASSERT(socketInfo->readNotifier == 0);
+ socketInfo->readNotifier = notifier;
+ socketInfo->readEnabled = false;
+ } else if (type == QSocketNotifier::Write) {
+ Q_ASSERT(socketInfo->writeNotifier == 0);
+ socketInfo->writeNotifier = notifier;
+ socketInfo->writeEnabled = false;
+ }
+
+ if (!enableNotifiersObserver) {
+ // Create a run loop observer which enables the socket notifiers on each
+ // pass of the run loop, before any sources are processed.
+ CFRunLoopObserverContext context = {};
+ context.info = this;
+ enableNotifiersObserver = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopBeforeSources,
+ true, 0, enableSocketNotifiers, &context);
+ Q_ASSERT(enableNotifiersObserver);
+ CFRunLoopAddObserver(CFRunLoopGetMain(), enableNotifiersObserver, kCFRunLoopCommonModes);
+ }
+}
+
+void QCFSocketNotifier::unregisterSocketNotifier(QSocketNotifier *notifier)
+{
+ Q_ASSERT(notifier);
+ int nativeSocket = notifier->socket();
+ int type = notifier->type();
+#ifndef QT_NO_DEBUG
+ if (nativeSocket < 0 || nativeSocket > FD_SETSIZE) {
+ qWarning("QSocketNotifier: Internal error");
+ return;
+ } else if (notifier->thread() != eventDispatcher->thread() || eventDispatcher->thread() != QThread::currentThread()) {
+ qWarning("QSocketNotifier: socket notifiers cannot be disabled from another thread");
+ return;
+ }
+#endif
+
+ if (type == QSocketNotifier::Exception) {
+ qWarning("QSocketNotifier::Exception is not supported on iOS");
+ return;
+ }
+ MacSocketInfo *socketInfo = macSockets.value(nativeSocket);
+ if (!socketInfo) {
+ qWarning("QEventDispatcherMac::unregisterSocketNotifier: Tried to unregister a not registered notifier");
+ return;
+ }
+
+ // Decrement read/write counters and disable callbacks if necessary.
+ if (type == QSocketNotifier::Read) {
+ Q_ASSERT(notifier == socketInfo->readNotifier);
+ socketInfo->readNotifier = 0;
+ socketInfo->readEnabled = false;
+ CFSocketDisableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
+ } else if (type == QSocketNotifier::Write) {
+ Q_ASSERT(notifier == socketInfo->writeNotifier);
+ socketInfo->writeNotifier = 0;
+ socketInfo->writeEnabled = false;
+ CFSocketDisableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
+ }
+
+ // Remove CFSocket from runloop if this was the last QSocketNotifier.
+ if (socketInfo->readNotifier == 0 && socketInfo->writeNotifier == 0) {
+ unregisterSocketInfo(socketInfo);
+ delete socketInfo;
+ macSockets.remove(nativeSocket);
+ }
+}
+
+void QCFSocketNotifier::removeSocketNotifiers()
+{
+ // Remove CFSockets from the runloop.
+ foreach (MacSocketInfo *socketInfo, macSockets) {
+ unregisterSocketInfo(socketInfo);
+ delete socketInfo;
+ }
+
+ macSockets.clear();
+
+ destroyRunLoopObserver();
+}
+
+void QCFSocketNotifier::destroyRunLoopObserver()
+{
+ if (!enableNotifiersObserver)
+ return;
+
+ CFRunLoopObserverInvalidate(enableNotifiersObserver);
+ CFRelease(enableNotifiersObserver);
+ enableNotifiersObserver = 0;
+}
+
+void QCFSocketNotifier::unregisterSocketInfo(MacSocketInfo *socketInfo)
+{
+ if (socketInfo->runloop) {
+ if (CFSocketIsValid(socketInfo->socket))
+ qt_mac_remove_socket_from_runloop(socketInfo->socket, socketInfo->runloop);
+ CFRunLoopSourceInvalidate(socketInfo->runloop);
+ CFRelease(socketInfo->runloop);
+ }
+ CFSocketInvalidate(socketInfo->socket);
+ CFRelease(socketInfo->socket);
+}
+
+void QCFSocketNotifier::enableSocketNotifiers(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info)
+{
+ Q_UNUSED(ref);
+ Q_UNUSED(activity);
+
+ QCFSocketNotifier *that = static_cast<QCFSocketNotifier *>(info);
+
+ foreach (MacSocketInfo *socketInfo, that->macSockets) {
+ if (!CFSocketIsValid(socketInfo->socket))
+ continue;
+
+ if (!socketInfo->runloop) {
+ // Add CFSocket to runloop.
+ if (!(socketInfo->runloop = qt_mac_add_socket_to_runloop(socketInfo->socket))) {
+ qWarning("QEventDispatcherMac::registerSocketNotifier: Failed to add CFSocket to runloop");
+ CFSocketInvalidate(socketInfo->socket);
+ continue;
+ }
+
+ if (!socketInfo->readNotifier)
+ CFSocketDisableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
+ if (!socketInfo->writeNotifier)
+ CFSocketDisableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
+ }
+
+ if (socketInfo->readNotifier && !socketInfo->readEnabled) {
+ socketInfo->readEnabled = true;
+ CFSocketEnableCallBacks(socketInfo->socket, kCFSocketReadCallBack);
+ }
+ if (socketInfo->writeNotifier && !socketInfo->writeEnabled) {
+ socketInfo->writeEnabled = true;
+ CFSocketEnableCallBacks(socketInfo->socket, kCFSocketWriteCallBack);
+ }
+ }
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/corelib/kernel/qcfsocketnotifier_p.h b/src/corelib/kernel/qcfsocketnotifier_p.h
new file mode 100644
index 0000000000..947efecca3
--- /dev/null
+++ b/src/corelib/kernel/qcfsocketnotifier_p.h
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QCFSOCKETNOTIFIER_P_H
+#define QCFSOCKETNOTIFIER_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/qabstracteventdispatcher.h>
+#include <QtCore/qhash.h>
+
+#include <CoreFoundation/CoreFoundation.h>
+
+QT_BEGIN_NAMESPACE
+
+struct MacSocketInfo {
+ MacSocketInfo() : socket(0), runloop(0), readNotifier(0), writeNotifier(0),
+ readEnabled(false), writeEnabled(false) {}
+ CFSocketRef socket;
+ CFRunLoopSourceRef runloop;
+ QObject *readNotifier;
+ QObject *writeNotifier;
+ bool readEnabled;
+ bool writeEnabled;
+};
+typedef QHash<int, MacSocketInfo *> MacSocketHash;
+
+typedef void (*MaybeCancelWaitForMoreEventsFn)(QAbstractEventDispatcher *hostEventDispacher);
+
+// The CoreFoundationSocketNotifier class implements socket notifiers support using
+// CFSocket for event dispatchers running on top of the Core Foundation run loop system.
+// (currently Mac and iOS)
+//
+// The principal functions are registerSocketNotifier() and unregisterSocketNotifier().
+//
+// setHostEventDispatcher() should be called at startup.
+// removeSocketNotifiers() should be called at shutdown.
+//
+class Q_CORE_EXPORT QCFSocketNotifier
+{
+public:
+ QCFSocketNotifier();
+ ~QCFSocketNotifier();
+ void setHostEventDispatcher(QAbstractEventDispatcher *hostEventDispacher);
+ void setMaybeCancelWaitForMoreEventsCallback(MaybeCancelWaitForMoreEventsFn callBack);
+ void registerSocketNotifier(QSocketNotifier *notifier);
+ void unregisterSocketNotifier(QSocketNotifier *notifier);
+ void removeSocketNotifiers();
+
+private:
+ void destroyRunLoopObserver();
+
+ static void unregisterSocketInfo(MacSocketInfo *socketInfo);
+ static void enableSocketNotifiers(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info);
+
+ MacSocketHash macSockets;
+ QAbstractEventDispatcher *eventDispatcher;
+ MaybeCancelWaitForMoreEventsFn maybeCancelWaitForMoreEvents;
+ CFRunLoopObserverRef enableNotifiersObserver;
+
+ friend void qt_mac_socket_callback(CFSocketRef, CFSocketCallBackType, CFDataRef, const void *, void *);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/corelib/kernel/qcore_mac_objc.mm b/src/corelib/kernel/qcore_mac_objc.mm
index a215557aed..14c0f803b9 100644
--- a/src/corelib/kernel/qcore_mac_objc.mm
+++ b/src/corelib/kernel/qcore_mac_objc.mm
@@ -131,5 +131,22 @@ QAppleOperatingSystemVersion qt_apple_os_version()
return v;
}
+// -------------------------------------------------------------------------
+
+QMacAutoReleasePool::QMacAutoReleasePool()
+ : pool([[NSAutoreleasePool alloc] init])
+{
+}
+
+QMacAutoReleasePool::~QMacAutoReleasePool()
+{
+ // Drain behaves the same as release, with the advantage that
+ // if we're ever used in a garbage-collected environment, the
+ // drain acts as a hint to the garbage collector to collect.
+ [pool drain];
+}
+
+// -------------------------------------------------------------------------
+
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
index 4834c14ca8..16156d0f2c 100644
--- a/src/corelib/kernel/qcore_mac_p.h
+++ b/src/corelib/kernel/qcore_mac_p.h
@@ -57,10 +57,6 @@
#include "qglobal.h"
-#ifdef Q_OS_MACX
-#include <CoreServices/CoreServices.h>
-#endif
-
#ifdef __OBJC__
#include <Foundation/Foundation.h>
#endif
diff --git a/src/corelib/kernel/qcore_unix_p.h b/src/corelib/kernel/qcore_unix_p.h
index fa083a3f44..f80dcb5a50 100644
--- a/src/corelib/kernel/qcore_unix_p.h
+++ b/src/corelib/kernel/qcore_unix_p.h
@@ -47,6 +47,7 @@
#include "qplatformdefs.h"
#include "qatomic.h"
+#include "qhash.h"
#ifndef Q_OS_UNIX
# error "qcore_unix_p.h included on a non-Unix system"
@@ -67,24 +68,6 @@
struct sockaddr;
-#if defined(Q_OS_LINUX) && defined(O_CLOEXEC)
-# define QT_UNIX_SUPPORTS_THREADSAFE_CLOEXEC 1
-QT_BEGIN_NAMESPACE
-namespace QtLibcSupplement {
- inline int accept4(int, sockaddr *, QT_SOCKLEN_T *, int)
- { errno = ENOSYS; return -1; }
- inline int dup3(int, int, int)
- { errno = ENOSYS; return -1; }
- inline int pipe2(int [], int )
- { errno = ENOSYS; return -1; }
-}
-QT_END_NAMESPACE
-using namespace QT_PREPEND_NAMESPACE(QtLibcSupplement);
-
-#else
-# define QT_UNIX_SUPPORTS_THREADSAFE_CLOEXEC 0
-#endif
-
#define EINTR_LOOP(var, cmd) \
do { \
var = cmd; \
@@ -179,22 +162,14 @@ static inline int qt_safe_open(const char *pathname, int flags, mode_t mode = 07
// call qt_safe_pipe
static inline int qt_safe_pipe(int pipefd[2], int flags = 0)
{
-#ifdef O_CLOEXEC
- Q_ASSERT((flags & ~(O_CLOEXEC | O_NONBLOCK)) == 0);
-#else
Q_ASSERT((flags & ~O_NONBLOCK) == 0);
-#endif
- int ret;
-#if QT_UNIX_SUPPORTS_THREADSAFE_CLOEXEC && defined(O_CLOEXEC)
+#ifdef QT_THREADSAFE_CLOEXEC
// use pipe2
flags |= O_CLOEXEC;
- ret = ::pipe2(pipefd, flags); // pipe2 is Linux-specific and is documented not to return EINTR
- if (ret == 0 || errno != ENOSYS)
- return ret;
-#endif
-
- ret = ::pipe(pipefd);
+ return ::pipe2(pipefd, flags); // pipe2 is documented not to return EINTR
+#else
+ int ret = ::pipe(pipefd);
if (ret == -1)
return -1;
@@ -208,6 +183,7 @@ static inline int qt_safe_pipe(int pipefd[2], int flags = 0)
}
return 0;
+#endif
}
#endif // Q_OS_VXWORKS
@@ -217,22 +193,19 @@ static inline int qt_safe_dup(int oldfd, int atleast = 0, int flags = FD_CLOEXEC
{
Q_ASSERT(flags == FD_CLOEXEC || flags == 0);
- int ret;
#ifdef F_DUPFD_CLOEXEC
- // use this fcntl
- if (flags & FD_CLOEXEC) {
- ret = ::fcntl(oldfd, F_DUPFD_CLOEXEC, atleast);
- if (ret != -1 || errno != EINVAL)
- return ret;
- }
-#endif
-
+ int cmd = F_DUPFD;
+ if (flags & FD_CLOEXEC)
+ cmd = F_DUPFD_CLOEXEC;
+ return ::fcntl(oldfd, cmd, atleast);
+#else
// use F_DUPFD
- ret = ::fcntl(oldfd, F_DUPFD, atleast);
+ int ret = ::fcntl(oldfd, F_DUPFD, atleast);
if (flags && ret != -1)
::fcntl(ret, F_SETFD, flags);
return ret;
+#endif
}
// don't call dup2
@@ -242,14 +215,11 @@ static inline int qt_safe_dup2(int oldfd, int newfd, int flags = FD_CLOEXEC)
Q_ASSERT(flags == FD_CLOEXEC || flags == 0);
int ret;
-#if QT_UNIX_SUPPORTS_THREADSAFE_CLOEXEC && defined(O_CLOEXEC)
+#ifdef QT_THREADSAFE_CLOEXEC
// use dup3
- if (flags & FD_CLOEXEC) {
- EINTR_LOOP(ret, ::dup3(oldfd, newfd, O_CLOEXEC));
- if (ret == 0 || errno != ENOSYS)
- return ret;
- }
-#endif
+ EINTR_LOOP(ret, ::dup3(oldfd, newfd, flags ? O_CLOEXEC : 0));
+ return ret;
+#else
EINTR_LOOP(ret, ::dup2(oldfd, newfd));
if (ret == -1)
return -1;
@@ -257,6 +227,7 @@ static inline int qt_safe_dup2(int oldfd, int newfd, int flags = FD_CLOEXEC)
if (flags)
::fcntl(newfd, F_SETFD, flags);
return 0;
+#endif
}
static inline qint64 qt_safe_read(int fd, void *data, qint64 maxlen)
@@ -352,6 +323,19 @@ union qt_semun {
unsigned short *array; /* array for GETALL, SETALL */
};
+#ifndef QT_POSIX_IPC
+#ifndef QT_NO_SHAREDMEMORY
+#ifndef Q_OS_ANDROID
+static inline key_t qt_safe_ftok(const QByteArray &filename, int proj_id)
+{
+ // Unfortunately ftok can return colliding keys even for different files.
+ // Try to add some more entropy via qHash.
+ return ::ftok(filename.constData(), qHash(filename, proj_id));
+}
+#endif // !Q_OS_ANDROID
+#endif // !QT_NO_SHAREDMEMORY
+#endif // !QT_POSIX_IPC
+
QT_END_NAMESPACE
#endif
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 24427bd1af..abc5af94cb 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2015 Intel Corporation.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -45,7 +46,6 @@
#include <qdir.h>
#include <qfile.h>
#include <qfileinfo.h>
-#include <qhash.h>
#include <qmutex.h>
#include <private/qloggingregistry_p.h>
#include <qstandardpaths.h>
@@ -70,6 +70,9 @@
# include "qeventdispatcher_blackberry_p.h"
# include <process.h>
# include <unistd.h>
+# elif defined(Q_OS_OSX)
+# include "qeventdispatcher_cf_p.h"
+# include "qeventdispatcher_unix_p.h"
# else
# if !defined(QT_NO_GLIB)
# include "qeventdispatcher_glib_p.h"
@@ -323,15 +326,9 @@ uint QCoreApplicationPrivate::attribs = (1 << Qt::AA_SynthesizeMouseForUnhandled
struct QCoreApplicationData {
QCoreApplicationData() Q_DECL_NOTHROW {
-#ifndef QT_NO_LIBRARY
- app_libpaths = 0;
-#endif
applicationNameSet = false;
}
~QCoreApplicationData() {
-#ifndef QT_NO_LIBRARY
- delete app_libpaths;
-#endif
#ifndef QT_NO_QOBJECT
// cleanup the QAdoptedThread created for the main() thread
if (QCoreApplicationPrivate::theMainThread) {
@@ -353,7 +350,7 @@ struct QCoreApplicationData {
QFile metafile(QStringLiteral("app/META-INF/MANIFEST.MF"));
if (!metafile.open(QIODevice::ReadOnly)) {
- qWarning() << Q_FUNC_INFO << "Could not open application metafile for reading";
+ qWarning("Could not open application metafile for reading")
} else {
while (!metafile.atEnd() && (application.isEmpty() || applicationVersion.isEmpty() || orgName.isEmpty())) {
QByteArray line = metafile.readLine();
@@ -375,7 +372,8 @@ struct QCoreApplicationData {
bool applicationNameSet; // true if setApplicationName was called
#ifndef QT_NO_LIBRARY
- QStringList *app_libpaths;
+ QScopedPointer<QStringList> app_libpaths;
+ QScopedPointer<QStringList> manual_libpaths;
#endif
};
@@ -510,12 +508,19 @@ void QCoreApplicationPrivate::createEventDispatcher()
#if defined(Q_OS_UNIX)
# if defined(Q_OS_BLACKBERRY)
eventDispatcher = new QEventDispatcherBlackberry(q);
-# else
-# if !defined(QT_NO_GLIB)
+# elif defined(Q_OS_OSX)
+ bool ok = false;
+ int value = qEnvironmentVariableIntValue("QT_EVENT_DISPATCHER_CORE_FOUNDATION", &ok);
+ if (ok && value > 0)
+ eventDispatcher = new QEventDispatcherCoreFoundation(q);
+ else
+ eventDispatcher = new QEventDispatcherUNIX(q);
+# elif !defined(QT_NO_GLIB)
if (qEnvironmentVariableIsEmpty("QT_NO_GLIB") && QEventDispatcherGlib::versionSupported())
eventDispatcher = new QEventDispatcherGlib(q);
else
-# endif
+ eventDispatcher = new QEventDispatcherUNIX(q);
+# else
eventDispatcher = new QEventDispatcherUNIX(q);
# endif
#elif defined(Q_OS_WINRT)
@@ -538,6 +543,14 @@ QThread *QCoreApplicationPrivate::mainThread()
return theMainThread.load();
}
+bool QCoreApplicationPrivate::threadRequiresCoreApplication()
+{
+ QThreadData *data = QThreadData::current(false);
+ if (!data)
+ return true; // default setting
+ return data->requiresCoreApplication;
+}
+
void QCoreApplicationPrivate::checkReceiverThread(QObject *receiver)
{
QThread *currentThread = QThread::currentThread();
@@ -560,9 +573,9 @@ void QCoreApplicationPrivate::checkReceiverThread(QObject *receiver)
void QCoreApplicationPrivate::appendApplicationPathToLibraryPaths()
{
#ifndef QT_NO_LIBRARY
- QStringList *app_libpaths = coreappdata()->app_libpaths;
+ QStringList *app_libpaths = coreappdata()->app_libpaths.data();
if (!app_libpaths)
- coreappdata()->app_libpaths = app_libpaths = new QStringList;
+ coreappdata()->app_libpaths.reset(app_libpaths = new QStringList);
QString app_location = QCoreApplication::applicationFilePath();
app_location.truncate(app_location.lastIndexOf(QLatin1Char('/')));
#ifdef Q_OS_WINRT
@@ -612,7 +625,7 @@ void QCoreApplicationPrivate::initLocale()
\section1 The Event Loop and Event Handling
- The event loop is started with a call to exec(). Long running
+ The event loop is started with a call to exec(). Long-running
operations can call processEvents() to keep the application
responsive.
@@ -648,8 +661,9 @@ void QCoreApplicationPrivate::initLocale()
The command line arguments which are passed to QCoreApplication's
constructor should be accessed using the arguments() function.
- Note that some arguments supplied by the user may have been
- processed and removed by QCoreApplication.
+
+ \note QCoreApplication removes option \c -qmljsdebugger="...". It parses the
+ argument of \c qmljsdebugger, and then removes this option plus its argument.
For more advanced command line option handling, create a QCommandLineParser.
@@ -693,7 +707,7 @@ QCoreApplication::QCoreApplication(QCoreApplicationPrivate &p)
#ifndef QT_NO_QOBJECT
/*!
- Flushes the platform specific event queues.
+ Flushes the platform-specific event queues.
If you are doing graphical changes inside a loop that does not
return to the event loop on asynchronous window systems like X11
@@ -711,9 +725,9 @@ void QCoreApplication::flush()
#endif
/*!
- Constructs a Qt kernel application. Kernel applications are
- applications without a graphical user interface. These type of
- applications are used at the console or as server processes.
+ Constructs a Qt core application. Core applications are applications without
+ a graphical user interface. Such applications are used at the console or as
+ server processes.
The \a argc and \a argv arguments are processed by the application,
and made available in a more convenient form by the arguments()
@@ -759,6 +773,36 @@ void QCoreApplication::init()
QLoggingRegistry::instance()->init();
+#ifndef QT_NO_LIBRARY
+ // Reset the lib paths, so that they will be recomputed, taking the availability of argv[0]
+ // into account. If necessary, recompute right away and replay the manual changes on top of the
+ // new lib paths.
+ QStringList *appPaths = coreappdata()->app_libpaths.take();
+ QStringList *manualPaths = coreappdata()->manual_libpaths.take();
+ if (appPaths) {
+ if (manualPaths) {
+ // Replay the delta. As paths can only be prepended to the front or removed from
+ // anywhere in the list, we can just linearly scan the lists and find the items that
+ // have been removed. Once the original list is exhausted we know all the remaining
+ // items have been added.
+ QStringList newPaths(libraryPaths());
+ for (int i = manualPaths->length(), j = appPaths->length(); i > 0 || j > 0; qt_noop()) {
+ if (--j < 0) {
+ newPaths.prepend((*manualPaths)[--i]);
+ } else if (--i < 0) {
+ newPaths.removeAll((*appPaths)[j]);
+ } else if ((*manualPaths)[i] != (*appPaths)[j]) {
+ newPaths.removeAll((*appPaths)[j]);
+ ++i; // try again with next item.
+ }
+ }
+ delete manualPaths;
+ coreappdata()->manual_libpaths.reset(new QStringList(newPaths));
+ }
+ delete appPaths;
+ }
+#endif
+
#ifndef QT_NO_QOBJECT
// use the event dispatcher created by the app programmer (if any)
if (!QCoreApplicationPrivate::eventDispatcher)
@@ -777,11 +821,6 @@ void QCoreApplication::init()
d->eventDispatcherReady();
#endif
-#ifndef QT_NO_LIBRARY
- if (coreappdata()->app_libpaths)
- d->appendApplicationPathToLibraryPaths();
-#endif
-
#ifdef QT_EVAL
extern void qt_core_eval_init(QCoreApplicationPrivate::Type);
qt_core_eval_init(d->application_type);
@@ -834,8 +873,8 @@ QCoreApplication::~QCoreApplication()
#endif
#ifndef QT_NO_LIBRARY
- delete coreappdata()->app_libpaths;
- coreappdata()->app_libpaths = 0;
+ coreappdata()->app_libpaths.reset();
+ coreappdata()->manual_libpaths.reset();
#endif
}
@@ -909,31 +948,21 @@ bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)
/*!
\property QCoreApplication::quitLockEnabled
- Returns \c true if the use of the QEventLoopLocker feature can cause the
- application to quit, otherwise returns \c false.
+ \brief Whether the use of the QEventLoopLocker feature can cause the
+ application to quit.
+
+ The default is \c true.
\sa QEventLoopLocker
*/
-/*!
- Returns \c true if the use of the QEventLoopLocker feature can cause the
- application to quit, otherwise returns \c false.
-
- \sa QEventLoopLocker
- */
bool QCoreApplication::isQuitLockEnabled()
{
return quitLockRefEnabled;
}
-/*!
- Enables the ability of the QEventLoopLocker feature to quit
- the application.
+static bool doNotify(QObject *, QEvent *);
- If disabled, the use of QEventLoopLocker will not quit the application.
-
- \sa QEventLoopLocker
- */
void QCoreApplication::setQuitLockEnabled(bool enabled)
{
quitLockRefEnabled = enabled;
@@ -941,12 +970,29 @@ void QCoreApplication::setQuitLockEnabled(bool enabled)
/*!
\internal
+ \deprecated
This function is here to make it possible for Qt extensions to
hook into event notification without subclassing QApplication
*/
bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event)
{
+ return notifyInternal2(receiver, event);
+}
+
+/*!
+ \internal
+ \since 5.6
+
+ This function is here to make it possible for Qt extensions to
+ hook into event notification without subclassing QApplication.
+*/
+bool QCoreApplication::notifyInternal2(QObject *receiver, QEvent *event)
+{
+ bool selfRequired = QCoreApplicationPrivate::threadRequiresCoreApplication();
+ if (!self && selfRequired)
+ return false;
+
// Make it possible for Qt Script to hook into events even
// though QApplication is subclassed...
bool result = false;
@@ -962,10 +1008,11 @@ bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event)
QObjectPrivate *d = receiver->d_func();
QThreadData *threadData = d->threadData;
QScopedLoopLevelCounter loopLevelCounter(threadData);
- return notify(receiver, event);
+ if (!selfRequired)
+ return doNotify(receiver, event);
+ return self->notify(receiver, event);
}
-
/*!
Sends \a event to \a receiver: \a {receiver}->event(\a event).
Returns the value that is returned from the receiver's event
@@ -1021,26 +1068,32 @@ bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event)
bool QCoreApplication::notify(QObject *receiver, QEvent *event)
{
- Q_D(QCoreApplication);
// no events are delivered after ~QCoreApplication() has started
if (QCoreApplicationPrivate::is_app_closing)
return true;
+ return doNotify(receiver, event);
+}
+static bool doNotify(QObject *receiver, QEvent *event)
+{
if (receiver == 0) { // serious error
qWarning("QCoreApplication::notify: Unexpected null receiver");
return true;
}
#ifndef QT_NO_DEBUG
- d->checkReceiverThread(receiver);
+ QCoreApplicationPrivate::checkReceiverThread(receiver);
#endif
- return receiver->isWidgetType() ? false : d->notify_helper(receiver, event);
+ return receiver->isWidgetType() ? false : QCoreApplicationPrivate::notify_helper(receiver, event);
}
bool QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject *receiver, QEvent *event)
{
- if (receiver->d_func()->threadData == this->threadData && extraData) {
+ // We can't access the application event filters outside of the main thread (race conditions)
+ Q_ASSERT(receiver->d_func()->threadData->thread == mainThread());
+
+ if (extraData) {
// application event filters are only called for objects in the GUI thread
for (int i = 0; i < extraData->eventFilters.size(); ++i) {
QObject *obj = extraData->eventFilters.at(i);
@@ -1059,8 +1112,7 @@ bool QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject *receiv
bool QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject *receiver, QEvent *event)
{
- Q_Q(QCoreApplication);
- if (receiver != q && receiver->d_func()->extraData) {
+ if (receiver != QCoreApplication::instance() && receiver->d_func()->extraData) {
for (int i = 0; i < receiver->d_func()->extraData->eventFilters.size(); ++i) {
QObject *obj = receiver->d_func()->extraData->eventFilters.at(i);
if (!obj)
@@ -1079,12 +1131,14 @@ bool QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject *receiver, Q
/*!
\internal
- Helper function called by notify()
+ Helper function called by QCoreApplicationPrivate::notify() and qapplication.cpp
*/
bool QCoreApplicationPrivate::notify_helper(QObject *receiver, QEvent * event)
{
- // send to all application event filters
- if (sendThroughApplicationEventFilters(receiver, event))
+ // send to all application event filters (only does anything in the main thread)
+ if (QCoreApplication::self
+ && receiver->d_func()->threadData->thread == mainThread()
+ && QCoreApplication::self->d_func()->sendThroughApplicationEventFilters(receiver, event))
return true;
// send to all receiver event filters
if (sendThroughObjectEventFilters(receiver, event))
@@ -1155,7 +1209,7 @@ void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags)
milliseconds or until there are no more events to process,
whichever is shorter.
- You can call this function occasionally when you program is busy
+ You can call this function occasionally when your program is busy
doing a long operation (e.g. copying a file).
Calling this function processes events only for the calling thread.
@@ -1182,9 +1236,9 @@ void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int m
*****************************************************************************/
/*!
- Enters the main event loop and waits until exit() is called.
- Returns the value that was set to exit() (which is 0 if exit() is
- called via quit()).
+ Enters the main event loop and waits until exit() is called. Returns
+ the value that was passed to exit() (which is 0 if exit() is called via
+ quit()).
It is necessary to call this function to start event handling. The
main event loop receives events from the window system and
@@ -1440,7 +1494,8 @@ bool QCoreApplication::compressEvent(QEvent *event, QObject *receiver, QPostEven
If \a receiver is null, the events of \a event_type are sent for all
objects. If \a event_type is 0, all the events are sent for \a receiver.
- \note This method must be called from the same thread as its QObject parameter, \a receiver.
+ \note This method must be called from the thread in which its QObject
+ parameter, \a receiver, lives.
\sa flush(), postEvent()
*/
@@ -1764,7 +1819,7 @@ void QCoreApplicationPrivate::maybeQuit()
Tells the application to exit with return code 0 (success).
Equivalent to calling QCoreApplication::exit(0).
- It's common to connect the QApplication::lastWindowClosed() signal
+ It's common to connect the QGuiApplication::lastWindowClosed() signal
to quit(), and you also often connect e.g. QAbstractButton::clicked() or
signals in QAction, QMenu, or QMenuBar to it.
@@ -1772,7 +1827,7 @@ void QCoreApplicationPrivate::maybeQuit()
\snippet code/src_corelib_kernel_qcoreapplication.cpp 1
- \sa exit(), aboutToQuit(), QApplication::lastWindowClosed()
+ \sa exit(), aboutToQuit(), QGuiApplication::lastWindowClosed()
*/
void QCoreApplication::quit()
@@ -1786,7 +1841,7 @@ void QCoreApplication::quit()
This signal is emitted when the application is about to quit the
main event loop, e.g. when the event loop level drops to zero.
This may happen either after a call to quit() from inside the
- application or when the users shuts down the entire desktop session.
+ application or when the user shuts down the entire desktop session.
The signal is particularly useful if your application has to do some
last-second cleanup. Note that no user interaction is possible in
@@ -2016,8 +2071,8 @@ void QCoreApplicationPrivate::setApplicationFilePath(const QString &path)
directory, and you run the \c{regexp} example, this function will
return "C:/Qt/examples/tools/regexp".
- On OS X and iOS this will point to the directory actually containing the
- executable, which may be inside of an application bundle (if the
+ On OS X and iOS this will point to the directory actually containing
+ the executable, which may be inside an application bundle (if the
application is bundled).
\warning On Linux, this function will try to get the path from the
@@ -2468,28 +2523,17 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMutex, libraryPathMutex, (QMutex::Recursive))
QStringList QCoreApplication::libraryPaths()
{
QMutexLocker locker(libraryPathMutex());
- if (!coreappdata()->app_libpaths) {
- QStringList *app_libpaths = coreappdata()->app_libpaths = new QStringList;
- QString installPathPlugins = QLibraryInfo::location(QLibraryInfo::PluginsPath);
- if (QFile::exists(installPathPlugins)) {
- // Make sure we convert from backslashes to slashes.
- installPathPlugins = QDir(installPathPlugins).canonicalPath();
- if (!app_libpaths->contains(installPathPlugins))
- app_libpaths->append(installPathPlugins);
- }
- // If QCoreApplication is not yet instantiated,
- // make sure we add the application path when we construct the QCoreApplication
- if (self) self->d_func()->appendApplicationPathToLibraryPaths();
+ if (coreappdata()->manual_libpaths)
+ return *(coreappdata()->manual_libpaths);
+
+ if (!coreappdata()->app_libpaths) {
+ QStringList *app_libpaths = new QStringList;
+ coreappdata()->app_libpaths.reset(app_libpaths);
const QByteArray libPathEnv = qgetenv("QT_PLUGIN_PATH");
if (!libPathEnv.isEmpty()) {
-#if defined(Q_OS_WIN)
- QLatin1Char pathSep(';');
-#else
- QLatin1Char pathSep(':');
-#endif
- QStringList paths = QFile::decodeName(libPathEnv).split(pathSep, QString::SkipEmptyParts);
+ QStringList paths = QFile::decodeName(libPathEnv).split(QDir::listSeparator(), QString::SkipEmptyParts);
for (QStringList::const_iterator it = paths.constBegin(); it != paths.constEnd(); ++it) {
QString canonicalPath = QDir(*it).canonicalPath();
if (!canonicalPath.isEmpty()
@@ -2498,6 +2542,18 @@ QStringList QCoreApplication::libraryPaths()
}
}
}
+
+ QString installPathPlugins = QLibraryInfo::location(QLibraryInfo::PluginsPath);
+ if (QFile::exists(installPathPlugins)) {
+ // Make sure we convert from backslashes to slashes.
+ installPathPlugins = QDir(installPathPlugins).canonicalPath();
+ if (!app_libpaths->contains(installPathPlugins))
+ app_libpaths->append(installPathPlugins);
+ }
+
+ // If QCoreApplication is not yet instantiated,
+ // make sure we add the application path when we construct the QCoreApplication
+ if (self) self->d_func()->appendApplicationPathToLibraryPaths();
}
return *(coreappdata()->app_libpaths);
}
@@ -2510,14 +2566,26 @@ QStringList QCoreApplication::libraryPaths()
\a paths. All existing paths will be deleted and the path list
will consist of the paths given in \a paths.
+ The library paths are reset to the default when an instance of
+ QCoreApplication is destructed.
+
\sa libraryPaths(), addLibraryPath(), removeLibraryPath(), QLibrary
*/
void QCoreApplication::setLibraryPaths(const QStringList &paths)
{
QMutexLocker locker(libraryPathMutex());
+
+ // setLibraryPaths() is considered a "remove everything and then add some new ones" operation.
+ // When the application is constructed it should still amend the paths. So we keep the originals
+ // around, and even create them if they don't exist, yet.
if (!coreappdata()->app_libpaths)
- coreappdata()->app_libpaths = new QStringList;
- *(coreappdata()->app_libpaths) = paths;
+ libraryPaths();
+
+ if (coreappdata()->manual_libpaths)
+ *(coreappdata()->manual_libpaths) = paths;
+ else
+ coreappdata()->manual_libpaths.reset(new QStringList(paths));
+
locker.unlock();
QFactoryLoader::refreshAll();
}
@@ -2532,6 +2600,9 @@ void QCoreApplication::setLibraryPaths(const QStringList &paths)
is \c INSTALL/plugins, where \c INSTALL is the directory where Qt was
installed.
+ The library paths are reset to the default when an instance of
+ QCoreApplication is destructed.
+
\sa removeLibraryPath(), libraryPaths(), setLibraryPaths()
*/
void QCoreApplication::addLibraryPath(const QString &path)
@@ -2539,24 +2610,38 @@ void QCoreApplication::addLibraryPath(const QString &path)
if (path.isEmpty())
return;
+ QString canonicalPath = QDir(path).canonicalPath();
+ if (canonicalPath.isEmpty())
+ return;
+
QMutexLocker locker(libraryPathMutex());
- // make sure that library paths is initialized
- libraryPaths();
+ QStringList *libpaths = coreappdata()->manual_libpaths.data();
+ if (libpaths) {
+ if (libpaths->contains(canonicalPath))
+ return;
+ } else {
+ // make sure that library paths are initialized
+ libraryPaths();
+ QStringList *app_libpaths = coreappdata()->app_libpaths.data();
+ if (app_libpaths->contains(canonicalPath))
+ return;
- QString canonicalPath = QDir(path).canonicalPath();
- if (!canonicalPath.isEmpty()
- && !coreappdata()->app_libpaths->contains(canonicalPath)) {
- coreappdata()->app_libpaths->prepend(canonicalPath);
- locker.unlock();
- QFactoryLoader::refreshAll();
+ coreappdata()->manual_libpaths.reset(libpaths = new QStringList(*app_libpaths));
}
+
+ libpaths->prepend(canonicalPath);
+ locker.unlock();
+ QFactoryLoader::refreshAll();
}
/*!
Removes \a path from the library path list. If \a path is empty or not
in the path list, the list is not changed.
+ The library paths are reset to the default when an instance of
+ QCoreApplication is destructed.
+
\sa addLibraryPath(), libraryPaths(), setLibraryPaths()
*/
void QCoreApplication::removeLibraryPath(const QString &path)
@@ -2564,13 +2649,28 @@ void QCoreApplication::removeLibraryPath(const QString &path)
if (path.isEmpty())
return;
+ QString canonicalPath = QDir(path).canonicalPath();
+ if (canonicalPath.isEmpty())
+ return;
+
QMutexLocker locker(libraryPathMutex());
- // make sure that library paths is initialized
- libraryPaths();
+ QStringList *libpaths = coreappdata()->manual_libpaths.data();
+ if (libpaths) {
+ if (libpaths->removeAll(canonicalPath) == 0)
+ return;
+ } else {
+ // make sure that library paths is initialized
+ libraryPaths();
+ QStringList *app_libpaths = coreappdata()->app_libpaths.data();
+ if (!app_libpaths->contains(canonicalPath))
+ return;
- QString canonicalPath = QDir(path).canonicalPath();
- coreappdata()->app_libpaths->removeAll(canonicalPath);
+ coreappdata()->manual_libpaths.reset(libpaths = new QStringList(*app_libpaths));
+ libpaths->removeAll(canonicalPath);
+ }
+
+ locker.unlock();
QFactoryLoader::refreshAll();
}
@@ -2585,11 +2685,11 @@ void QCoreApplication::removeLibraryPath(const QString &path)
The event filter \a filterObj receives events via its \l {QAbstractNativeEventFilter::}{nativeEventFilter()}
function, which is called for all native events received in the main thread.
- The QAbstractNativeEventFilter::nativeEventFilter() function should return true if the event should
- be filtered, (i.e. stopped). It should return false to allow
- normal Qt processing to continue: the native event can then be translated
- into a QEvent and handled by the standard Qt \l{QEvent} {event} filtering,
- e.g. QObject::installEventFilter().
+ The QAbstractNativeEventFilter::nativeEventFilter() function should
+ return true if the event should be filtered, i.e. stopped. It should
+ return false to allow normal Qt processing to continue: the native
+ event can then be translated into a QEvent and handled by the standard
+ Qt \l{QEvent} {event} filtering, e.g. QObject::installEventFilter().
If multiple event filters are installed, the filter that was
installed last is activated first.
@@ -2597,7 +2697,7 @@ void QCoreApplication::removeLibraryPath(const QString &path)
\note The filter function set here receives native messages,
i.e. MSG or XCB event structs.
- \note Native event filters will be disabled when the application the
+ \note Native event filters will be disabled in the application when the
Qt::AA_MacPluginApplication attribute is set.
For maximum portability, you should always try to use QEvent
@@ -2786,7 +2886,7 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc
\snippet code/src_corelib_kernel_qcoreapplication.cpp 7
The \a context parameter is normally the class name, but it can
- be any string.
+ be any text.
\sa Q_OBJECT, QObject::tr(), QObject::trUtf8()
*/
diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h
index 1cd835daae..d865c4e7a8 100644
--- a/src/corelib/kernel/qcoreapplication.h
+++ b/src/corelib/kernel/qcoreapplication.h
@@ -117,7 +117,7 @@ public:
static bool sendEvent(QObject *receiver, QEvent *event);
static void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority);
- static void sendPostedEvents(QObject *receiver = 0, int event_type = 0);
+ static void sendPostedEvents(QObject *receiver = Q_NULLPTR, int event_type = 0);
static void removePostedEvents(QObject *receiver, int eventType = 0);
#if QT_DEPRECATED_SINCE(5, 3)
QT_DEPRECATED static bool hasPendingEvents();
@@ -149,7 +149,7 @@ public:
static QString translate(const char * context,
const char * key,
- const char * disambiguation = 0,
+ const char * disambiguation = Q_NULLPTR,
int n = -1);
#if QT_DEPRECATED_SINCE(5, 0)
enum Encoding { UnicodeUTF8, Latin1, DefaultCodec = UnicodeUTF8, CodecForTr = UnicodeUTF8 };
@@ -194,7 +194,10 @@ protected:
private:
#ifndef QT_NO_QOBJECT
static bool sendSpontaneousEvent(QObject *receiver, QEvent *event);
- bool notifyInternal(QObject *receiver, QEvent *event);
+# if QT_DEPRECATED_SINCE(5,6)
+ QT_DEPRECATED bool notifyInternal(QObject *receiver, QEvent *event); // ### Qt6 BIC: remove me
+# endif
+ static bool notifyInternal2(QObject *receiver, QEvent *);
#endif
void init();
@@ -221,23 +224,23 @@ private:
#ifndef QT_NO_QOBJECT
inline bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
-{ if (event) event->spont = false; return self ? self->notifyInternal(receiver, event) : false; }
+{ if (event) event->spont = false; return notifyInternal2(receiver, event); }
inline bool QCoreApplication::sendSpontaneousEvent(QObject *receiver, QEvent *event)
-{ if (event) event->spont = true; return self ? self->notifyInternal(receiver, event) : false; }
+{ if (event) event->spont = true; return notifyInternal2(receiver, event); }
#endif
#ifdef QT_NO_DEPRECATED
# define QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context)
#else
# define QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) \
- QT_DEPRECATED static inline QString trUtf8(const char *sourceText, const char *disambiguation = 0, int n = -1) \
+ QT_DEPRECATED static inline QString trUtf8(const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) \
{ return QCoreApplication::translate(#context, sourceText, disambiguation, n); }
#endif
#define Q_DECLARE_TR_FUNCTIONS(context) \
public: \
- static inline QString tr(const char *sourceText, const char *disambiguation = 0, int n = -1) \
+ static inline QString tr(const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) \
{ return QCoreApplication::translate(#context, sourceText, disambiguation, n); } \
QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) \
private:
diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h
index e985f8d052..9a9e8dd09a 100644
--- a/src/corelib/kernel/qcoreapplication_p.h
+++ b/src/corelib/kernel/qcoreapplication_p.h
@@ -86,8 +86,8 @@ public:
#ifndef QT_NO_QOBJECT
bool sendThroughApplicationEventFilters(QObject *, QEvent *);
- bool sendThroughObjectEventFilters(QObject *, QEvent *);
- bool notify_helper(QObject *, QEvent *);
+ static bool sendThroughObjectEventFilters(QObject *, QEvent *);
+ static bool notify_helper(QObject *, QEvent *);
static inline void setEventSpontaneous(QEvent *e, bool spontaneous) { e->spont = spontaneous; }
virtual void createEventDispatcher();
@@ -107,9 +107,11 @@ public:
static QBasicAtomicPointer<QThread> theMainThread;
static QThread *mainThread();
+ static bool threadRequiresCoreApplication();
+
static void sendPostedEvents(QObject *receiver, int event_type, QThreadData *data);
- void checkReceiverThread(QObject *receiver);
+ static void checkReceiverThread(QObject *receiver);
void cleanupThreadData();
#endif // QT_NO_QOBJECT
diff --git a/src/corelib/kernel/qcoreapplication_win.cpp b/src/corelib/kernel/qcoreapplication_win.cpp
index 396d2f740a..324b664a1a 100644
--- a/src/corelib/kernel/qcoreapplication_win.cpp
+++ b/src/corelib/kernel/qcoreapplication_win.cpp
@@ -139,9 +139,10 @@ QString QCoreApplicationPrivate::appName() const
#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
-// ### Qt6: FIXME: Remove this function. It is only there since for binary
-// compatibility for applications built with Qt 5.3 using qtmain.lib which calls it.
-// In Qt 5.4, qtmain.lib was changed to use CommandLineToArgvW() without calling into Qt5Core.
+// ### Qt6: FIXME: Consider removing this function. It is here for Active Qt
+// servers and for binary for compatibility to applications built with Qt 5.3
+// using qtmain.lib which calls it In Qt 5.4, qtmain.lib was changed to use
+// CommandLineToArgvW() without calling into Qt5Core.
Q_CORE_EXPORT
void qWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdParam,
int cmdShow, int &argc, QVector<char *> &argv)
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index e9ae355d70..05c18995ff 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -150,7 +150,7 @@ QT_BEGIN_NAMESPACE
\value HoverLeave The mouse cursor leaves a hover widget (QHoverEvent).
\value HoverMove The mouse cursor moves inside a hover widget (QHoverEvent).
\value IconDrag The main icon of a window has been dragged away (QIconDragEvent).
- \value IconTextChange Widget's icon text has been changed.
+ \value IconTextChange Widget's icon text has been changed. (Deprecated)
\value InputMethod An input method is being used (QInputMethodEvent).
\value InputMethodQuery A input method query event (QInputMethodQueryEvent)
\value KeyboardLayoutChange The keyboard layout has changed.
@@ -219,7 +219,7 @@ QT_BEGIN_NAMESPACE
\value TouchEnd End of touch-event sequence (QTouchEvent).
\value TouchUpdate Touch-screen event (QTouchEvent).
\value UngrabKeyboard Item loses keyboard grab (QGraphicsItem only).
- \value UngrabMouse Item loses mouse grab (QGraphicsItem only).
+ \value UngrabMouse Item loses mouse grab (QGraphicsItem, QQuickItem).
\value UpdateLater The widget should be queued to be repainted at a later time.
\value UpdateRequest The widget should be repainted.
\value WhatsThis The widget should reveal "What's This?" help (QHelpEvent).
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index c208eb1180..53da4a849b 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -133,7 +133,7 @@ public:
EnabledChange = 98, // enabled state has changed
ActivationChange = 99, // window activation has changed
StyleChange = 100, // style has changed
- IconTextChange = 101, // icon text has changed
+ IconTextChange = 101, // icon text has changed. Deprecated.
ModifiedChange = 102, // modified state has changed
MouseTrackingChange = 109, // mouse tracking state has changed
diff --git a/src/corelib/kernel/qeventdispatcher_blackberry.cpp b/src/corelib/kernel/qeventdispatcher_blackberry.cpp
index 796daaa50a..a8e3d3c766 100644
--- a/src/corelib/kernel/qeventdispatcher_blackberry.cpp
+++ b/src/corelib/kernel/qeventdispatcher_blackberry.cpp
@@ -102,7 +102,7 @@ static int bpsUnblockDomain = -1;
static int bpsIOHandler(int fd, int io_events, void *data)
{
- qEventDispatcherDebug << Q_FUNC_INFO;
+ qEventDispatcherDebug;
// decode callback payload
bpsIOHandlerData *ioData = static_cast<bpsIOHandlerData*>(data);
@@ -223,7 +223,7 @@ void QEventDispatcherBlackberry::registerSocketNotifier(QSocketNotifier *notifie
int sockfd = notifier->socket();
int type = notifier->type();
- qEventDispatcherDebug << Q_FUNC_INFO << "fd =" << sockfd;
+ qEventDispatcherDebug << "fd =" << sockfd;
if (Q_UNLIKELY(sockfd >= FD_SETSIZE)) {
qWarning() << "QEventDispatcherBlackberry: cannot register QSocketNotifier (fd too high)"
@@ -267,7 +267,7 @@ void QEventDispatcherBlackberry::unregisterSocketNotifier(QSocketNotifier *notif
int sockfd = notifier->socket();
- qEventDispatcherDebug << Q_FUNC_INFO << "fd =" << sockfd;
+ qEventDispatcherDebug << "fd =" << sockfd;
if (Q_UNLIKELY(sockfd >= FD_SETSIZE)) {
qWarning() << "QEventDispatcherBlackberry: cannot unregister QSocketNotifier" << sockfd;
diff --git a/src/corelib/kernel/qeventdispatcher_cf.mm b/src/corelib/kernel/qeventdispatcher_cf.mm
new file mode 100644
index 0000000000..8422345968
--- /dev/null
+++ b/src/corelib/kernel/qeventdispatcher_cf.mm
@@ -0,0 +1,633 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeventdispatcher_cf_p.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qmetaobject.h>
+#include <QtCore/qthread.h>
+#include <QtCore/private/qcoreapplication_p.h>
+#include <QtCore/private/qcore_unix_p.h>
+#include <QtCore/private/qcore_mac_p.h>
+#include <QtCore/private/qthread_p.h>
+
+#include <limits>
+
+#ifdef Q_OS_OSX
+# include <AppKit/NSApplication.h>
+#else
+# include <UIKit/UIApplication.h>
+#endif
+
+QT_USE_NAMESPACE
+
+@interface RunLoopModeTracker : NSObject {
+ QStack<CFStringRef> m_runLoopModes;
+}
+@end
+
+@implementation RunLoopModeTracker
+
+- (id) init
+{
+ if (self = [super init]) {
+ m_runLoopModes.push(kCFRunLoopDefaultMode);
+
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(receivedNotification:)
+ name:nil
+#ifdef Q_OS_OSX
+ object:[NSApplication sharedApplication]];
+#else
+ object:[UIApplication sharedApplication]];
+#endif
+ }
+
+ return self;
+}
+
+- (void) dealloc
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+ [super dealloc];
+}
+
+static CFStringRef runLoopMode(NSDictionary *dictionary)
+{
+ for (NSString *key in dictionary) {
+ if (CFStringHasSuffix((CFStringRef)key, CFSTR("RunLoopMode")))
+ return (CFStringRef)[dictionary objectForKey: key];
+ }
+
+ return nil;
+}
+
+- (void) receivedNotification:(NSNotification *) notification
+{
+ if (CFStringHasSuffix((CFStringRef)notification.name, CFSTR("RunLoopModePushNotification"))) {
+ if (CFStringRef mode = runLoopMode(notification.userInfo))
+ m_runLoopModes.push(mode);
+ else
+ qWarning("Encountered run loop push notification without run loop mode!");
+
+ } else if (CFStringHasSuffix((CFStringRef)notification.name, CFSTR("RunLoopModePopNotification"))) {
+ CFStringRef mode = runLoopMode(notification.userInfo);
+ if (CFStringCompare(mode, [self currentMode], 0) == kCFCompareEqualTo)
+ m_runLoopModes.pop();
+ else
+ qWarning("Tried to pop run loop mode '%s' that was never pushed!", qPrintable(QCFString::toQString(mode)));
+
+ Q_ASSERT(m_runLoopModes.size() >= 1);
+ }
+}
+
+- (CFStringRef) currentMode
+{
+ return m_runLoopModes.top();
+}
+
+@end
+
+QT_BEGIN_NAMESPACE
+
+class RunLoopDebugger : public QObject
+{
+ Q_OBJECT
+
+ Q_ENUMS(Activity)
+ Q_ENUMS(Result)
+
+public:
+
+ #define Q_MIRROR_ENUM(name) name = name
+
+ enum Activity {
+ Q_MIRROR_ENUM(kCFRunLoopEntry),
+ Q_MIRROR_ENUM(kCFRunLoopBeforeTimers),
+ Q_MIRROR_ENUM(kCFRunLoopBeforeSources),
+ Q_MIRROR_ENUM(kCFRunLoopBeforeWaiting),
+ Q_MIRROR_ENUM(kCFRunLoopAfterWaiting),
+ Q_MIRROR_ENUM(kCFRunLoopExit)
+ };
+
+ enum Result {
+ Q_MIRROR_ENUM(kCFRunLoopRunFinished),
+ Q_MIRROR_ENUM(kCFRunLoopRunStopped),
+ Q_MIRROR_ENUM(kCFRunLoopRunTimedOut),
+ Q_MIRROR_ENUM(kCFRunLoopRunHandledSource)
+ };
+};
+
+#define Q_ENUM_PRINTER(enumName) \
+ static const char* qPrintable##enumName(int value) \
+ { \
+ return RunLoopDebugger::staticMetaObject.enumerator(RunLoopDebugger::staticMetaObject.indexOfEnumerator(#enumName)).valueToKey(value); \
+ }
+
+Q_ENUM_PRINTER(Activity);
+Q_ENUM_PRINTER(Result);
+
+QDebug operator<<(QDebug s, timespec tv)
+{
+ s << tv.tv_sec << "." << qSetFieldWidth(9) << qSetPadChar(QChar(48)) << tv.tv_nsec << reset;
+ return s;
+}
+
+#if DEBUG_EVENT_DISPATCHER
+uint g_eventDispatcherIndentationLevel = 0;
+#endif
+
+static const CFTimeInterval kCFTimeIntervalMinimum = 0;
+static const CFTimeInterval kCFTimeIntervalDistantFuture = std::numeric_limits<CFTimeInterval>::max();
+
+#pragma mark - Class definition
+
+QEventDispatcherCoreFoundation::QEventDispatcherCoreFoundation(QObject *parent)
+ : QAbstractEventDispatcher(parent)
+ , m_processEvents(QEventLoop::EventLoopExec)
+ , m_postedEventsRunLoopSource(this, &QEventDispatcherCoreFoundation::processPostedEvents)
+ , m_runLoopActivityObserver(this, &QEventDispatcherCoreFoundation::handleRunLoopActivity,
+#if DEBUG_EVENT_DISPATCHER
+ kCFRunLoopAllActivities
+#else
+ kCFRunLoopBeforeWaiting | kCFRunLoopAfterWaiting
+#endif
+ )
+ , m_runLoopModeTracker([[RunLoopModeTracker alloc] init])
+ , m_runLoopTimer(0)
+ , m_blockedRunLoopTimer(0)
+ , m_overdueTimerScheduled(false)
+{
+ m_cfSocketNotifier.setHostEventDispatcher(this);
+
+ m_postedEventsRunLoopSource.addToMode(kCFRunLoopCommonModes);
+ m_runLoopActivityObserver.addToMode(kCFRunLoopCommonModes);
+}
+
+QEventDispatcherCoreFoundation::~QEventDispatcherCoreFoundation()
+{
+ invalidateTimer();
+ qDeleteAll(m_timerInfoList);
+
+ m_cfSocketNotifier.removeSocketNotifiers();
+}
+
+/*!
+ Processes all pending events that match \a flags until there are no
+ more events to process. Returns \c true if pending events were handled;
+ otherwise returns \c false.
+
+ Note:
+
+ - All events are considered equal. This function should process
+ both system/native events (that we may or may not care about),
+ as well as Qt-events (posted events and timers).
+
+ - The function should not return until all queued/available events
+ have been processed. If the WaitForMoreEvents is set, the
+ function should wait only if there were no events ready,
+ and _then_ process all newly queued/available events.
+
+ These notes apply to other function in this class as well, such as
+ hasPendingEvents().
+*/
+bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlags flags)
+{
+ bool eventsProcessed = false;
+
+ if (flags & (QEventLoop::ExcludeUserInputEvents | QEventLoop::ExcludeSocketNotifiers))
+ qWarning() << "processEvents() flags" << flags << "not supported on iOS";
+
+ qEventDispatcherDebug() << "Entering with " << flags; qIndent();
+
+ if (m_blockedRunLoopTimer) {
+ Q_ASSERT(m_blockedRunLoopTimer == m_runLoopTimer);
+
+ qEventDispatcherDebug() << "Recursing from blocked timer " << m_blockedRunLoopTimer;
+ m_runLoopTimer = 0; // Unset current timer to force creation of new timer
+ updateTimers();
+ }
+
+ if (m_processEvents.deferredWakeUp) {
+ // We may be processing events recursivly as a result of processing a posted event,
+ // in which case we need to signal the run-loop source so that this iteration of
+ // processEvents will take care of the newly posted events.
+ m_postedEventsRunLoopSource.signal();
+ m_processEvents.deferredWakeUp = false;
+
+ qEventDispatcherDebug() << "Processed deferred wake-up";
+ }
+
+ // The documentation states that this signal is emitted after the event
+ // loop returns from a function that could block, which is not the case
+ // here, but all the other event dispatchers emit awake at the start of
+ // processEvents, and the QEventLoop auto-test has an explicit check for
+ // this behavior, so we assume it's for a good reason and do it as well.
+ emit awake();
+
+ ProcessEventsState previousState = m_processEvents;
+ m_processEvents = ProcessEventsState(flags);
+
+ bool returnAfterSingleSourceHandled = !(m_processEvents.flags & QEventLoop::EventLoopExec);
+
+ Q_FOREVER {
+ CFStringRef mode = [m_runLoopModeTracker currentMode];
+
+ CFTimeInterval duration = (m_processEvents.flags & QEventLoop::WaitForMoreEvents) ?
+ kCFTimeIntervalDistantFuture : kCFTimeIntervalMinimum;
+
+ qEventDispatcherDebug() << "Calling CFRunLoopRunInMode = " << qPrintable(QCFString::toQString(mode))
+ << " for " << duration << " ms, processing single source = " << returnAfterSingleSourceHandled; qIndent();
+
+ SInt32 result = CFRunLoopRunInMode(mode, duration, returnAfterSingleSourceHandled);
+
+ qUnIndent(); qEventDispatcherDebug() << "result = " << qPrintableResult(result);
+
+ eventsProcessed |= (result == kCFRunLoopRunHandledSource
+ || m_processEvents.processedPostedEvents
+ || m_processEvents.processedTimers);
+
+ if (result == kCFRunLoopRunFinished) {
+ // This should only happen at application shutdown, as the main runloop
+ // will presumably always have sources registered.
+ break;
+ } else if (m_processEvents.wasInterrupted) {
+
+ if (m_processEvents.flags & QEventLoop::EventLoopExec) {
+ Q_ASSERT(result == kCFRunLoopRunStopped);
+
+ // The runloop was potentially stopped (interrupted) by us, as a response to
+ // a Qt event loop being asked to exit. We check that the topmost eventloop
+ // is still supposed to keep going and return if not. Note that the runloop
+ // might get stopped as a result of a non-top eventloop being asked to exit,
+ // in which case we continue running the top event loop until that is asked
+ // to exit, and then unwind back to the previous event loop which will break
+ // immediately, since it has already been exited.
+
+ QEventLoop *currentEventLoop = QThreadData::current()->eventLoops.top();
+ Q_ASSERT(currentEventLoop);
+
+ if (!currentEventLoop->isRunning()) {
+ qEventDispatcherDebug() << "Top level event loop was exited";
+ break;
+ } else {
+ qEventDispatcherDebug() << "Top level event loop still running, making another pass";
+ }
+ } else {
+ // We were called manually, through processEvents(), and should stop processing
+ // events, even if we didn't finish processing all the queued events.
+ qEventDispatcherDebug() << "Top level processEvents was interrupted";
+ break;
+ }
+ }
+
+ if (m_processEvents.flags & QEventLoop::EventLoopExec) {
+ // We were called from QEventLoop's exec(), which blocks until the event
+ // loop is asked to exit by calling processEvents repeatedly. Instead of
+ // re-entering this method again and again from QEventLoop, we can block
+ // here, one lever closer to CFRunLoopRunInMode, by running the native
+ // event loop again and again until we're interrupted by QEventLoop.
+ continue;
+ } else {
+ // We were called 'manually', through processEvents()
+
+ if (result == kCFRunLoopRunHandledSource) {
+ // We processed one or more sources, but there might still be other
+ // sources that did not get a chance to process events, so we need
+ // to do another pass.
+
+ // But we should only wait for more events the first time
+ m_processEvents.flags &= ~QEventLoop::WaitForMoreEvents;
+ continue;
+
+ } else if (m_overdueTimerScheduled && !m_processEvents.processedTimers) {
+ // CFRunLoopRunInMode does not guarantee that a scheduled timer with a fire
+ // date in the past (overdue) will fire on the next run loop pass. The Qt
+ // APIs on the other hand document eg. zero-interval timers to always be
+ // handled after processing all available window-system events.
+ qEventDispatcherDebug() << "Manually processing timers due to overdue timer";
+ processTimers(0);
+ eventsProcessed = true;
+ }
+ }
+
+ break;
+ }
+
+ if (m_blockedRunLoopTimer) {
+ invalidateTimer();
+ m_runLoopTimer = m_blockedRunLoopTimer;
+ }
+
+ if (m_processEvents.deferredUpdateTimers)
+ updateTimers();
+
+ if (m_processEvents.deferredWakeUp) {
+ m_postedEventsRunLoopSource.signal();
+ qEventDispatcherDebug() << "Processed deferred wake-up";
+ }
+
+ bool wasInterrupted = m_processEvents.wasInterrupted;
+
+ // Restore state of previous processEvents() call
+ m_processEvents = previousState;
+
+ if (wasInterrupted) {
+ // The current processEvents run has been interrupted, but there may still be
+ // others below it (eg, in the case of nested event loops). We need to trigger
+ // another interrupt so that the parent processEvents call has a chance to check
+ // if it should continue.
+ qEventDispatcherDebug() << "Forwarding interrupt in case of nested processEvents";
+ interrupt();
+ }
+
+ qEventDispatcherDebug() << "Returning with eventsProcessed = " << eventsProcessed; qUnIndent();
+
+ return eventsProcessed;
+}
+
+bool QEventDispatcherCoreFoundation::processPostedEvents()
+{
+ if (m_processEvents.processedPostedEvents && !(m_processEvents.flags & QEventLoop::EventLoopExec)) {
+ qEventDispatcherDebug() << "Already processed events this pass";
+ return false;
+ }
+
+ m_processEvents.processedPostedEvents = true;
+
+ qEventDispatcherDebug() << "Sending posted events for " << m_processEvents.flags; qIndent();
+ QCoreApplication::sendPostedEvents();
+ qUnIndent();
+
+ return true;
+}
+
+void QEventDispatcherCoreFoundation::processTimers(CFRunLoopTimerRef timer)
+{
+ if (m_processEvents.processedTimers && !(m_processEvents.flags & QEventLoop::EventLoopExec)) {
+ qEventDispatcherDebug() << "Already processed timers this pass";
+ m_processEvents.deferredUpdateTimers = true;
+ return;
+ }
+
+ qEventDispatcherDebug() << "CFRunLoopTimer " << timer << " fired, activating Qt timers"; qIndent();
+
+ // Activating Qt timers might recurse into processEvents() if a timer-callback
+ // brings up a new event-loop or tries to processes events manually. Although
+ // a CFRunLoop can recurse inside its callbacks, a single CFRunLoopTimer can
+ // not. So, for each recursion into processEvents() from a timer-callback we
+ // need to set up a new timer-source. Instead of doing it preemtivly each
+ // time we activate Qt timers, we set a flag here, and let processEvents()
+ // decide whether or not it needs to bring up a new timer source.
+
+ // We may have multiple recused timers, so keep track of the previous blocked timer
+ CFRunLoopTimerRef previouslyBlockedRunLoopTimer = m_blockedRunLoopTimer;
+
+ m_blockedRunLoopTimer = timer;
+ m_timerInfoList.activateTimers();
+ m_blockedRunLoopTimer = previouslyBlockedRunLoopTimer;
+ m_processEvents.processedTimers = true;
+
+ qUnIndent();
+
+ // Now that the timer source is unblocked we may need to schedule it again
+ updateTimers();
+}
+
+void QEventDispatcherCoreFoundation::handleRunLoopActivity(CFRunLoopActivity activity)
+{
+ qEventDispatcherDebug() << qPrintableActivity(activity);
+
+ switch (activity) {
+ case kCFRunLoopBeforeWaiting:
+ if (m_processEvents.processedTimers
+ && !(m_processEvents.flags & QEventLoop::EventLoopExec)
+ && m_processEvents.flags & QEventLoop::WaitForMoreEvents) {
+ // CoreFoundation does not treat a timer as a reason to exit CFRunLoopRunInMode
+ // when asked to only process a single source, so we risk waiting a long time for
+ // a 'proper' source to fire (typically a system source that we don't control).
+ // To fix this we do an explicit interrupt after processing our timer, so that
+ // processEvents() gets a chance to re-evaluate the state of things.
+ interrupt();
+ }
+ emit aboutToBlock();
+ break;
+ case kCFRunLoopAfterWaiting:
+ emit awake();
+ break;
+#if DEBUG_EVENT_DISPATCHER
+ case kCFRunLoopEntry:
+ case kCFRunLoopBeforeTimers:
+ case kCFRunLoopBeforeSources:
+ case kCFRunLoopExit:
+ break;
+#endif
+ default:
+ Q_UNREACHABLE();
+ }
+}
+
+bool QEventDispatcherCoreFoundation::hasPendingEvents()
+{
+ // There doesn't seem to be any API on iOS to peek into the other sources
+ // to figure out if there are pending non-Qt events. As a workaround, we
+ // assume that if the run-loop is currently blocking and waiting for a
+ // source to signal then there are no system-events pending. If this
+ // function is called from the main thread then the second clause
+ // of the condition will always be true, as the run loop is
+ // never waiting in that case. The function would be more aptly named
+ // 'maybeHasPendingEvents' in our case.
+
+ extern uint qGlobalPostedEventsCount();
+ return qGlobalPostedEventsCount() || !CFRunLoopIsWaiting(CFRunLoopGetMain());
+}
+
+void QEventDispatcherCoreFoundation::wakeUp()
+{
+ if (m_processEvents.processedPostedEvents && !(m_processEvents.flags & QEventLoop::EventLoopExec)) {
+ // A manual processEvents call should only result in processing the events posted
+ // up until then. Any newly posted events as result of processing existing posted
+ // events should be handled in the next call to processEvents(). Since we're using
+ // a run-loop source to process our posted events we need to prevent it from being
+ // signaled as a result of posting new events, otherwise we end up in an infinite
+ // loop. We do however need to signal the source at some point, so that the newly
+ // posted event gets processed on the next processEvents() call, so we flag the
+ // need to do a deferred wake-up.
+ m_processEvents.deferredWakeUp = true;
+ qEventDispatcherDebug() << "Already processed posted events, deferring wakeUp";
+ return;
+ }
+
+ m_postedEventsRunLoopSource.signal();
+ CFRunLoopWakeUp(CFRunLoopGetMain());
+
+ qEventDispatcherDebug() << "Signaled posted event run-loop source";
+}
+
+void QEventDispatcherCoreFoundation::interrupt()
+{
+ qEventDispatcherDebug() << "Marking current processEvent as interrupted";
+ m_processEvents.wasInterrupted = true;
+ CFRunLoopStop(CFRunLoopGetMain());
+}
+
+void QEventDispatcherCoreFoundation::flush()
+{
+ // X11 only.
+}
+
+#pragma mark - Socket notifiers
+
+void QEventDispatcherCoreFoundation::registerSocketNotifier(QSocketNotifier *notifier)
+{
+ m_cfSocketNotifier.registerSocketNotifier(notifier);
+}
+
+void QEventDispatcherCoreFoundation::unregisterSocketNotifier(QSocketNotifier *notifier)
+{
+ m_cfSocketNotifier.unregisterSocketNotifier(notifier);
+}
+
+#pragma mark - Timers
+
+void QEventDispatcherCoreFoundation::registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object)
+{
+ qEventDispatcherDebug() << "id = " << timerId << ", interval = " << interval
+ << ", type = " << timerType << ", object = " << object;
+
+ Q_ASSERT(timerId > 0 && interval >= 0 && object);
+ Q_ASSERT(object->thread() == thread() && thread() == QThread::currentThread());
+
+ m_timerInfoList.registerTimer(timerId, interval, timerType, object);
+ updateTimers();
+}
+
+bool QEventDispatcherCoreFoundation::unregisterTimer(int timerId)
+{
+ Q_ASSERT(timerId > 0);
+ Q_ASSERT(thread() == QThread::currentThread());
+
+ bool returnValue = m_timerInfoList.unregisterTimer(timerId);
+
+ qEventDispatcherDebug() << "id = " << timerId << ", timers left: " << m_timerInfoList.size();
+
+ updateTimers();
+ return returnValue;
+}
+
+bool QEventDispatcherCoreFoundation::unregisterTimers(QObject *object)
+{
+ Q_ASSERT(object && object->thread() == thread() && thread() == QThread::currentThread());
+
+ bool returnValue = m_timerInfoList.unregisterTimers(object);
+
+ qEventDispatcherDebug() << "object = " << object << ", timers left: " << m_timerInfoList.size();
+
+ updateTimers();
+ return returnValue;
+}
+
+QList<QAbstractEventDispatcher::TimerInfo> QEventDispatcherCoreFoundation::registeredTimers(QObject *object) const
+{
+ Q_ASSERT(object);
+ return m_timerInfoList.registeredTimers(object);
+}
+
+int QEventDispatcherCoreFoundation::remainingTime(int timerId)
+{
+ Q_ASSERT(timerId > 0);
+ return m_timerInfoList.timerRemainingTime(timerId);
+}
+
+static double timespecToSeconds(const timespec &spec)
+{
+ static double nanosecondsPerSecond = 1.0 * 1000 * 1000 * 1000;
+ return spec.tv_sec + (spec.tv_nsec / nanosecondsPerSecond);
+}
+
+void QEventDispatcherCoreFoundation::updateTimers()
+{
+ if (m_timerInfoList.size() > 0) {
+ // We have Qt timers registered, so create or reschedule CF timer to match
+
+ timespec tv = { -1, -1 };
+ CFAbsoluteTime timeToFire = m_timerInfoList.timerWait(tv) ?
+ // We have a timer ready to fire right now, or some time in the future
+ CFAbsoluteTimeGetCurrent() + timespecToSeconds(tv)
+ // We have timers, but they are all currently blocked by callbacks
+ : kCFTimeIntervalDistantFuture;
+
+ if (!m_runLoopTimer) {
+ m_runLoopTimer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault,
+ timeToFire, kCFTimeIntervalDistantFuture, 0, 0, ^(CFRunLoopTimerRef timer) {
+ processTimers(timer);
+ });
+
+ CFRunLoopAddTimer(CFRunLoopGetMain(), m_runLoopTimer, kCFRunLoopCommonModes);
+ qEventDispatcherDebug() << "Created new CFRunLoopTimer " << m_runLoopTimer;
+
+ } else {
+ CFRunLoopTimerSetNextFireDate(m_runLoopTimer, timeToFire);
+ qEventDispatcherDebug() << "Re-scheduled CFRunLoopTimer " << m_runLoopTimer;
+ }
+
+ m_overdueTimerScheduled = !timespecToSeconds(tv);
+
+ qEventDispatcherDebug() << "Next timeout in " << tv << " seconds";
+
+ } else {
+ // No Qt timers are registered, so make sure we're not running any CF timers
+ invalidateTimer();
+
+ m_overdueTimerScheduled = false;
+ }
+}
+
+void QEventDispatcherCoreFoundation::invalidateTimer()
+{
+ if (!m_runLoopTimer || (m_runLoopTimer == m_blockedRunLoopTimer))
+ return;
+
+ CFRunLoopTimerInvalidate(m_runLoopTimer);
+ qEventDispatcherDebug() << "Invalidated CFRunLoopTimer " << m_runLoopTimer;
+
+ CFRelease(m_runLoopTimer);
+ m_runLoopTimer = 0;
+}
+
+#include "qeventdispatcher_cf.moc"
+#include "moc_qeventdispatcher_cf_p.cpp"
+
+QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qeventdispatcher_cf_p.h b/src/corelib/kernel/qeventdispatcher_cf_p.h
new file mode 100644
index 0000000000..5e8d2f0c85
--- /dev/null
+++ b/src/corelib/kernel/qeventdispatcher_cf_p.h
@@ -0,0 +1,280 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (c) 2007-2008, Apple, Inc.
+**
+** All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are met:
+**
+** * Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+**
+** * Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+**
+** * Neither the name of Apple, Inc. nor the names of its contributors
+** may be used to endorse or promote products derived from this software
+** without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+****************************************************************************/
+
+#ifndef QEVENTDISPATCHER_CF_P_H
+#define QEVENTDISPATCHER_CF_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.
+//
+
+#define DEBUG_EVENT_DISPATCHER 0
+
+#include <QtCore/qabstracteventdispatcher.h>
+#include <QtCore/private/qtimerinfo_unix_p.h>
+#include <QtCore/private/qcfsocketnotifier_p.h>
+#include <QtCore/qdebug.h>
+#include <CoreFoundation/CoreFoundation.h>
+
+#ifdef __OBJC__
+@class RunLoopModeTracker;
+#else
+typedef struct objc_object RunLoopModeTracker;
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QEventDispatcherCoreFoundation;
+
+template <class T = QEventDispatcherCoreFoundation>
+class RunLoopSource
+{
+public:
+ typedef bool (T::*CallbackFunction)();
+
+ enum { kHighestPriority = 0 } RunLoopSourcePriority;
+
+ RunLoopSource(T *delegate, CallbackFunction callback)
+ : m_delegate(delegate), m_callback(callback)
+ {
+ CFRunLoopSourceContext context = {};
+ context.info = this;
+ context.perform = RunLoopSource::process;
+
+ m_source = CFRunLoopSourceCreate(kCFAllocatorDefault, kHighestPriority, &context);
+ Q_ASSERT(m_source);
+ }
+
+ ~RunLoopSource()
+ {
+ CFRunLoopSourceInvalidate(m_source);
+ CFRelease(m_source);
+ }
+
+ void addToMode(CFStringRef mode, CFRunLoopRef runLoop = 0)
+ {
+ if (!runLoop)
+ runLoop = CFRunLoopGetCurrent();
+
+ CFRunLoopAddSource(runLoop, m_source, mode);
+ }
+
+ void signal() { CFRunLoopSourceSignal(m_source); }
+
+private:
+ static void process(void *info)
+ {
+ RunLoopSource *self = static_cast<RunLoopSource *>(info);
+ ((self->m_delegate)->*(self->m_callback))();
+ }
+
+ T *m_delegate;
+ CallbackFunction m_callback;
+ CFRunLoopSourceRef m_source;
+};
+
+template <class T = QEventDispatcherCoreFoundation>
+class RunLoopObserver
+{
+public:
+ typedef void (T::*CallbackFunction) (CFRunLoopActivity activity);
+
+ RunLoopObserver(T *delegate, CallbackFunction callback, CFOptionFlags activities)
+ : m_delegate(delegate), m_callback(callback)
+ {
+ CFRunLoopObserverContext context = {};
+ context.info = this;
+
+ m_observer = CFRunLoopObserverCreate(kCFAllocatorDefault, activities, true, 0, process, &context);
+ Q_ASSERT(m_observer);
+ }
+
+ ~RunLoopObserver()
+ {
+ CFRunLoopObserverInvalidate(m_observer);
+ CFRelease(m_observer);
+ }
+
+ void addToMode(CFStringRef mode, CFRunLoopRef runLoop = 0)
+ {
+ if (!runLoop)
+ runLoop = CFRunLoopGetCurrent();
+
+ if (!CFRunLoopContainsObserver(runLoop, m_observer, mode))
+ CFRunLoopAddObserver(runLoop, m_observer, mode);
+ }
+
+ void removeFromMode(CFStringRef mode, CFRunLoopRef runLoop = 0)
+ {
+ if (!runLoop)
+ runLoop = CFRunLoopGetCurrent();
+
+ if (CFRunLoopContainsObserver(runLoop, m_observer, mode))
+ CFRunLoopRemoveObserver(runLoop, m_observer, mode);
+ }
+
+private:
+ static void process(CFRunLoopObserverRef, CFRunLoopActivity activity, void *info)
+ {
+ RunLoopObserver *self = static_cast<RunLoopObserver *>(info);
+ ((self->m_delegate)->*(self->m_callback))(activity);
+ }
+
+ T *m_delegate;
+ CallbackFunction m_callback;
+ CFRunLoopObserverRef m_observer;
+};
+
+class Q_CORE_EXPORT QEventDispatcherCoreFoundation : public QAbstractEventDispatcher
+{
+ Q_OBJECT
+
+public:
+ explicit QEventDispatcherCoreFoundation(QObject *parent = 0);
+ ~QEventDispatcherCoreFoundation();
+
+ bool processEvents(QEventLoop::ProcessEventsFlags flags);
+ bool hasPendingEvents();
+
+ void registerSocketNotifier(QSocketNotifier *notifier);
+ void unregisterSocketNotifier(QSocketNotifier *notifier);
+
+ void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object);
+ bool unregisterTimer(int timerId);
+ bool unregisterTimers(QObject *object);
+ QList<QAbstractEventDispatcher::TimerInfo> registeredTimers(QObject *object) const;
+
+ int remainingTime(int timerId);
+
+ void wakeUp();
+ void interrupt();
+ void flush();
+
+protected:
+ virtual bool processPostedEvents();
+
+ struct ProcessEventsState
+ {
+ ProcessEventsState(QEventLoop::ProcessEventsFlags f)
+ : flags(f), wasInterrupted(false)
+ , processedPostedEvents(false), processedTimers(false)
+ , deferredWakeUp(false), deferredUpdateTimers(false) {}
+
+ QEventLoop::ProcessEventsFlags flags;
+ bool wasInterrupted;
+ bool processedPostedEvents;
+ bool processedTimers;
+ bool deferredWakeUp;
+ bool deferredUpdateTimers;
+ };
+
+ ProcessEventsState m_processEvents;
+
+private:
+ RunLoopSource<> m_postedEventsRunLoopSource;
+ RunLoopObserver<> m_runLoopActivityObserver;
+
+ RunLoopModeTracker *m_runLoopModeTracker;
+
+ QTimerInfoList m_timerInfoList;
+ CFRunLoopTimerRef m_runLoopTimer;
+ CFRunLoopTimerRef m_blockedRunLoopTimer;
+ bool m_overdueTimerScheduled;
+
+ QCFSocketNotifier m_cfSocketNotifier;
+
+ void processTimers(CFRunLoopTimerRef);
+
+ void handleRunLoopActivity(CFRunLoopActivity activity);
+
+ void updateTimers();
+ void invalidateTimer();
+};
+
+QT_END_NAMESPACE
+
+#if DEBUG_EVENT_DISPATCHER
+extern uint g_eventDispatcherIndentationLevel;
+#define qEventDispatcherDebug() qDebug().nospace() \
+ << qPrintable(QString(QLatin1String("| ")).repeated(g_eventDispatcherIndentationLevel)) \
+ << __FUNCTION__ << "(): "
+#define qIndent() ++g_eventDispatcherIndentationLevel
+#define qUnIndent() --g_eventDispatcherIndentationLevel
+#else
+#define qEventDispatcherDebug() QT_NO_QDEBUG_MACRO()
+#define qIndent()
+#define qUnIndent()
+#endif
+
+#endif // QEVENTDISPATCHER_CF_P_H
diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp
index 876825b5f0..d9bbd4d5f2 100644
--- a/src/corelib/kernel/qeventdispatcher_glib.cpp
+++ b/src/corelib/kernel/qeventdispatcher_glib.cpp
@@ -39,7 +39,6 @@
#include "qcoreapplication.h"
#include "qsocketnotifier.h"
-#include <QtCore/qhash.h>
#include <QtCore/qlist.h>
#include <QtCore/qpair.h>
diff --git a/src/corelib/kernel/qeventdispatcher_glib_p.h b/src/corelib/kernel/qeventdispatcher_glib_p.h
index afdb6b9317..2cb919df07 100644
--- a/src/corelib/kernel/qeventdispatcher_glib_p.h
+++ b/src/corelib/kernel/qeventdispatcher_glib_p.h
@@ -48,8 +48,6 @@
#include "qabstracteventdispatcher.h"
#include "qabstracteventdispatcher_p.h"
-#include <QtCore/qhash.h>
-
typedef struct _GMainContext GMainContext;
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index 812494372d..1a14500bd4 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -34,7 +34,6 @@
#include "qeventdispatcher_win_p.h"
#include "qcoreapplication.h"
-#include "qhash.h"
#include <private/qsystemlibrary_p.h>
#include "qpair.h"
#include "qset.h"
@@ -530,7 +529,7 @@ QWindowsMessageWindowClassContext::QWindowsMessageWindowClassContext()
wc.lpszClassName = className;
atom = RegisterClass(&wc);
if (!atom) {
- qErrnoWarning("%s: RegisterClass() failed", Q_FUNC_INFO, qPrintable(qClassName));
+ qErrnoWarning("%s RegisterClass() failed", qPrintable(qClassName));
delete [] className;
className = 0;
}
@@ -566,7 +565,7 @@ static HWND qt_create_internal_window(const QEventDispatcherWin32 *eventDispatch
0); // windows creation data.
if (!wnd) {
- qErrnoWarning("%s: CreateWindow() for QEventDispatcherWin32 internal window failed", Q_FUNC_INFO);
+ qErrnoWarning("CreateWindow() for QEventDispatcherWin32 internal window failed");
return 0;
}
@@ -1132,11 +1131,10 @@ void QEventDispatcherWin32::activateEventNotifiers()
for (int i=0; i<d->winEventNotifierList.count(); i++) {
#if !defined(Q_OS_WINCE)
if (WaitForSingleObjectEx(d->winEventNotifierList.at(i)->handle(), 0, TRUE) == WAIT_OBJECT_0)
- d->activateEventNotifier(d->winEventNotifierList.at(i));
#else
if (WaitForSingleObject(d->winEventNotifierList.at(i)->handle(), 0) == WAIT_OBJECT_0)
- d->activateEventNotifier(d->winEventNotifierList.at(i));
#endif
+ d->activateEventNotifier(d->winEventNotifierList.at(i));
}
}
diff --git a/src/corelib/kernel/qeventdispatcher_winrt.cpp b/src/corelib/kernel/qeventdispatcher_winrt.cpp
index eceba8d002..df070dd1ae 100644
--- a/src/corelib/kernel/qeventdispatcher_winrt.cpp
+++ b/src/corelib/kernel/qeventdispatcher_winrt.cpp
@@ -40,6 +40,7 @@
#include <private/qabstracteventdispatcher_p.h>
#include <private/qcoreapplication_p.h>
+#include <functional>
#include <wrl.h>
#include <windows.foundation.h>
#include <windows.system.threading.h>
@@ -70,6 +71,23 @@ struct WinRTTimerInfo : public QAbstractEventDispatcher::TimerInfo {
quint64 targetTime;
};
+class AgileDispatchedHandler : public RuntimeClass<RuntimeClassFlags<WinRtClassicComMix>, IDispatchedHandler, IAgileObject>
+{
+public:
+ AgileDispatchedHandler(const std::function<HRESULT()> &delegate)
+ : delegate(delegate)
+ {
+ }
+
+ HRESULT __stdcall Invoke()
+ {
+ return delegate();
+ }
+
+private:
+ std::function<HRESULT()> delegate;
+};
+
class QEventDispatcherWinRTPrivate : public QAbstractEventDispatcherPrivate
{
Q_DECLARE_PUBLIC(QEventDispatcherWinRT)
@@ -79,10 +97,6 @@ public:
~QEventDispatcherWinRTPrivate();
private:
- ComPtr<IThreadPoolTimerStatics> timerFactory;
- ComPtr<ICoreDispatcher> coreDispatcher;
- QPointer<QThread> thread;
-
QHash<int, QObject *> timerIdToObject;
QVector<WinRTTimerInfo> timerInfos;
QHash<HANDLE, int> timerHandleToId;
@@ -136,40 +150,11 @@ private:
}
return true;
}
-
- void fetchCoreDispatcher()
- {
- ComPtr<ICoreImmersiveApplication> application;
- HRESULT hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_ApplicationModel_Core_CoreApplication).Get(),
- IID_PPV_ARGS(&application));
- RETURN_VOID_IF_FAILED("Failed to get the application factory");
-
- static ComPtr<ICoreApplicationView> view;
- if (view)
- return;
-
- hr = application->get_MainView(&view);
- RETURN_VOID_IF_FAILED("Failed to get the main view");
-
- ComPtr<ICoreApplicationView2> view2;
- hr = view.As(&view2);
- RETURN_VOID_IF_FAILED("Failed to cast the main view");
-
- hr = view2->get_Dispatcher(&coreDispatcher);
- if (hr == HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) // expected in thread pool cases
- return;
- RETURN_VOID_IF_FAILED("Failed to get core dispatcher");
-
- thread = QThread::currentThread();
- }
};
QEventDispatcherWinRT::QEventDispatcherWinRT(QObject *parent)
: QAbstractEventDispatcher(*new QEventDispatcherWinRTPrivate, parent)
{
- Q_D(QEventDispatcherWinRT);
-
- d->fetchCoreDispatcher();
}
QEventDispatcherWinRT::QEventDispatcherWinRT(QEventDispatcherWinRTPrivate &dd, QObject *parent)
@@ -180,32 +165,52 @@ QEventDispatcherWinRT::~QEventDispatcherWinRT()
{
}
+HRESULT QEventDispatcherWinRT::runOnXamlThread(const std::function<HRESULT ()> &delegate, bool waitForRun)
+{
+ static __declspec(thread) ICoreDispatcher *dispatcher = nullptr;
+ if (!dispatcher) {
+ HRESULT hr;
+ ComPtr<ICoreImmersiveApplication> application;
+ hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_ApplicationModel_Core_CoreApplication).Get(),
+ IID_PPV_ARGS(&application));
+ ComPtr<ICoreApplicationView> view;
+ hr = application->get_MainView(&view);
+ Q_ASSERT_SUCCEEDED(hr);
+ ComPtr<ICoreWindow> window;
+ hr = view->get_CoreWindow(&window);
+ Q_ASSERT_SUCCEEDED(hr);
+ hr = window->get_Dispatcher(&dispatcher);
+ Q_ASSERT_SUCCEEDED(hr);
+ }
+
+ HRESULT hr;
+ boolean onXamlThread;
+ hr = dispatcher->get_HasThreadAccess(&onXamlThread);
+ Q_ASSERT_SUCCEEDED(hr);
+ if (onXamlThread) // Already there
+ return delegate();
+
+ ComPtr<IAsyncAction> op;
+ hr = dispatcher->RunAsync(CoreDispatcherPriority_Normal, Make<AgileDispatchedHandler>(delegate).Get(), &op);
+ if (FAILED(hr) || !waitForRun)
+ return hr;
+ return QWinRTFunctions::await(op);
+}
+
bool QEventDispatcherWinRT::processEvents(QEventLoop::ProcessEventsFlags flags)
{
Q_D(QEventDispatcherWinRT);
- if (d->thread && d->thread != QThread::currentThread())
- d->fetchCoreDispatcher();
-
+ DWORD waitTime = 0;
do {
- // Process native events
- if (d->coreDispatcher) {
- boolean hasThreadAccess;
- HRESULT hr = d->coreDispatcher->get_HasThreadAccess(&hasThreadAccess);
- if (SUCCEEDED(hr) && hasThreadAccess) {
- hr = d->coreDispatcher->ProcessEvents(CoreProcessEventsOption_ProcessAllIfPresent);
- if (FAILED(hr))
- qErrnoWarning(hr, "Failed to process events");
- }
- }
-
// Additional user events have to be handled before timer events, but the function may not
// return yet.
const bool userEventsSent = sendPostedEvents(flags);
- emit aboutToBlock();
const QVector<HANDLE> timerHandles = d->timerIdToHandle.values().toVector();
- DWORD waitResult = WaitForMultipleObjectsEx(timerHandles.count(), timerHandles.constData(), FALSE, 1, TRUE);
+ if (waitTime)
+ emit aboutToBlock();
+ DWORD waitResult = WaitForMultipleObjectsEx(timerHandles.count(), timerHandles.constData(), FALSE, waitTime, TRUE);
if (waitResult >= WAIT_OBJECT_0 && waitResult < WAIT_OBJECT_0 + timerHandles.count()) {
const HANDLE handle = timerHandles.value(waitResult - WAIT_OBJECT_0);
ResetEvent(handle);
@@ -228,6 +233,13 @@ bool QEventDispatcherWinRT::processEvents(QEventLoop::ProcessEventsFlags flags)
if (userEventsSent)
return true;
+
+ // We cannot wait infinitely like on other platforms, as
+ // WaitForMultipleObjectsEx might not return.
+ // For instance win32 uses MsgWaitForMultipleObjects to hook
+ // into the native event loop, while WinRT handles those
+ // via callbacks.
+ waitTime = 1;
} while (flags & QEventLoop::WaitForMoreEvents);
return false;
}
@@ -283,11 +295,20 @@ void QEventDispatcherWinRT::registerTimer(int timerId, int interval, Qt::TimerTy
}
TimeSpan period;
- period.Duration = interval ? (interval * 10000) : 1; // TimeSpan is based on 100-nanosecond units
- IThreadPoolTimer *timer;
+ // TimeSpan is based on 100-nanosecond units
+ period.Duration = qMax(qint64(1), qint64(interval) * 10000);
const HANDLE handle = CreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, SYNCHRONIZE | EVENT_MODIFY_STATE);
const HANDLE cancelHandle = CreateEventEx(NULL, NULL, CREATE_EVENT_MANUAL_RESET, SYNCHRONIZE|EVENT_MODIFY_STATE);
- HRESULT hr = d->timerFactory->CreatePeriodicTimerWithCompletion(
+ HRESULT hr = runOnXamlThread([cancelHandle, handle, period]() {
+ static ComPtr<IThreadPoolTimerStatics> timerFactory;
+ HRESULT hr;
+ if (!timerFactory) {
+ hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_System_Threading_ThreadPoolTimer).Get(),
+ &timerFactory);
+ Q_ASSERT_SUCCEEDED(hr);
+ }
+ IThreadPoolTimer *timer;
+ hr = timerFactory->CreatePeriodicTimerWithCompletion(
Callback<ITimerElapsedHandler>([handle, cancelHandle](IThreadPoolTimer *timer) {
DWORD cancelResult = WaitForSingleObjectEx(cancelHandle, 0, TRUE);
if (cancelResult == WAIT_OBJECT_0) {
@@ -306,8 +327,10 @@ void QEventDispatcherWinRT::registerTimer(int timerId, int interval, Qt::TimerTy
CloseHandle(cancelHandle);
return S_OK;
}).Get(), &timer);
+ RETURN_HR_IF_FAILED("Failed to create periodic timer");
+ return hr;
+ }, false);
if (FAILED(hr)) {
- qErrnoWarning(hr, "Failed to create periodic timer");
CloseHandle(handle);
CloseHandle(cancelHandle);
return;
@@ -486,9 +509,6 @@ QEventDispatcherWinRTPrivate::QEventDispatcherWinRTPrivate()
const bool isGuiThread = QCoreApplication::instance() &&
QThread::currentThread() == QCoreApplication::instance()->thread();
CoInitializeEx(NULL, isGuiThread ? COINIT_APARTMENTTHREADED : COINIT_MULTITHREADED);
- HRESULT hr;
- hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_System_Threading_ThreadPoolTimer).Get(), &timerFactory);
- Q_ASSERT_SUCCEEDED(hr);
HANDLE interruptHandle = CreateEventEx(NULL, NULL, NULL, SYNCHRONIZE|EVENT_MODIFY_STATE);
timerIdToHandle.insert(INTERRUPT_HANDLE, interruptHandle);
timerHandleToId.insert(interruptHandle, INTERRUPT_HANDLE);
diff --git a/src/corelib/kernel/qeventdispatcher_winrt_p.h b/src/corelib/kernel/qeventdispatcher_winrt_p.h
index fd3d259c96..1f9826f048 100644
--- a/src/corelib/kernel/qeventdispatcher_winrt_p.h
+++ b/src/corelib/kernel/qeventdispatcher_winrt_p.h
@@ -50,6 +50,8 @@
#include <qt_windows.h>
+namespace std { template <typename T> class function; }
+
QT_BEGIN_NAMESPACE
quint64 qt_msectime();
@@ -65,6 +67,8 @@ public:
explicit QEventDispatcherWinRT(QObject *parent = 0);
~QEventDispatcherWinRT();
+ static HRESULT runOnXamlThread(const std::function<HRESULT()> &delegate, bool waitForRun = true);
+
bool processEvents(QEventLoop::ProcessEventsFlags flags);
bool hasPendingEvents();
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp
index 1723db0ab9..dca25ce968 100644
--- a/src/corelib/kernel/qeventloop.cpp
+++ b/src/corelib/kernel/qeventloop.cpp
@@ -93,7 +93,7 @@ QEventLoop::QEventLoop(QObject *parent)
: QObject(*new QEventLoopPrivate, parent)
{
Q_D(QEventLoop);
- if (!QCoreApplication::instance()) {
+ if (!QCoreApplication::instance() && QCoreApplicationPrivate::threadRequiresCoreApplication()) {
qWarning("QEventLoop: Cannot be used without QApplication");
} else if (!d->threadData->eventDispatcher.load()) {
QThreadPrivate::createEventDispatcher(d->threadData);
diff --git a/src/corelib/kernel/qeventloop.h b/src/corelib/kernel/qeventloop.h
index 99c0cd50ff..375a63abdd 100644
--- a/src/corelib/kernel/qeventloop.h
+++ b/src/corelib/kernel/qeventloop.h
@@ -47,7 +47,7 @@ class Q_CORE_EXPORT QEventLoop : public QObject
Q_DECLARE_PRIVATE(QEventLoop)
public:
- explicit QEventLoop(QObject *parent = 0);
+ explicit QEventLoop(QObject *parent = Q_NULLPTR);
~QEventLoop();
enum ProcessEventsFlag {
diff --git a/src/corelib/kernel/qfunctions_fake_env_p.h b/src/corelib/kernel/qfunctions_fake_env_p.h
new file mode 100644
index 0000000000..b4c5ffb079
--- /dev/null
+++ b/src/corelib/kernel/qfunctions_fake_env_p.h
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QFUNCTIONS_FAKE_ENV_P_H
+#define QFUNCTIONS_FAKE_ENV_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the QLibrary class. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qbytearray.h"
+#include "qvector.h"
+
+QT_BEGIN_NAMESPACE
+
+// Environment ------------------------------------------------------
+struct Variable {
+ Variable() { }
+
+ Variable(const QByteArray &name, const QByteArray &value)
+ : name(name), value(value) { }
+
+ QByteArray name;
+ QByteArray value;
+};
+
+Q_DECLARE_TYPEINFO(Variable, Q_MOVABLE_TYPE);
+
+struct NameEquals {
+ typedef bool result_type;
+ const char *name;
+ explicit NameEquals(const char *name) Q_DECL_NOTHROW : name(name) {}
+ result_type operator()(const Variable &other) const Q_DECL_NOTHROW
+ { return qstrcmp(other.name, name) == 0; }
+};
+
+Q_GLOBAL_STATIC(QVector<Variable>, qt_app_environment)
+
+errno_t qt_fake_getenv_s(size_t *sizeNeeded, char *buffer, size_t bufferSize, const char *varName)
+{
+ if (!sizeNeeded)
+ return EINVAL;
+
+ QVector<Variable>::const_iterator end = qt_app_environment->constEnd();
+ QVector<Variable>::const_iterator iterator = std::find_if(qt_app_environment->constBegin(),
+ end,
+ NameEquals(varName));
+ if (iterator == end) {
+ if (buffer)
+ buffer[0] = '\0';
+ return ENOENT;
+ }
+
+ const int size = iterator->value.size() + 1;
+ if (bufferSize < size_t(size)) {
+ *sizeNeeded = size;
+ return ERANGE;
+ }
+
+ qstrcpy(buffer, iterator->value.constData());
+ return 0;
+}
+
+errno_t qt_fake__putenv_s(const char *varName, const char *value)
+{
+ QVector<Variable>::iterator end = qt_app_environment->end();
+ QVector<Variable>::iterator iterator = std::find_if(qt_app_environment->begin(),
+ end,
+ NameEquals(varName));
+ if (!value || !*value) {
+ if (iterator != end)
+ qt_app_environment->erase(iterator);
+ } else {
+ if (iterator == end)
+ qt_app_environment->append(Variable(varName, value));
+ else
+ iterator->value = value;
+ }
+
+ return 0;
+}
+
+QT_END_NAMESPACE
+
+#endif // QFUNCTIONS_FAKE_ENV_P_H
diff --git a/src/corelib/kernel/qfunctions_wince.cpp b/src/corelib/kernel/qfunctions_wince.cpp
index 8f8fc21313..0619503c51 100644
--- a/src/corelib/kernel/qfunctions_wince.cpp
+++ b/src/corelib/kernel/qfunctions_wince.cpp
@@ -36,13 +36,16 @@
#include <winbase.h>
#include <kfuncs.h>
#include <stdio.h>
-#include <altcecrt.h>
+#if _WIN32_WCE < 0x800
+# include <altcecrt.h>
+#else
+# include <fcntl.h>
+#endif
#include "qplatformdefs.h"
#include "qfunctions_wince.h"
+#include "qfunctions_fake_env_p.h"
#include "qstring.h"
-#include "qbytearray.h"
-#include "qhash.h"
QT_USE_NAMESPACE
@@ -93,7 +96,9 @@ FILETIME qt_wince_time_tToFt( time_t tt )
}
// File I/O ---------------------------------------------------------
+#if _WIN32_WCE < 0x800
int errno = 0;
+#endif
int qt_wince__getdrive( void )
{
@@ -393,51 +398,4 @@ int qt_wince__getpid()
#ifdef __cplusplus
} // extern "C"
#endif
-// Environment ------------------------------------------------------
-inline QHash<QByteArray, QByteArray>& qt_app_environment()
-{
- static QHash<QByteArray, QByteArray> internalEnvironment;
- return internalEnvironment;
-}
-
-errno_t qt_wince_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
-{
- if (!sizeNeeded)
- return EINVAL;
-
- if (!qt_app_environment().contains(varName)) {
- if (buffer)
- buffer[0] = '\0';
- return ENOENT;
- }
-
- QByteArray value = qt_app_environment().value(varName);
- if (!value.endsWith('\0')) // win32 guarantees terminated string
- value.append('\0');
-
- if (bufferSize < (size_t)value.size()) {
- *sizeNeeded = value.size();
- return 0;
- }
-
- strcpy(buffer, value.constData());
- return 0;
-}
-
-errno_t qt_wince__putenv_s(const char* varName, const char* value)
-{
- QByteArray input = value;
- if (input.isEmpty()) {
- if (qt_app_environment().contains(varName))
- qt_app_environment().remove(varName);
- } else {
- // win32 guarantees terminated string
- if (!input.endsWith('\0'))
- input.append('\0');
- qt_app_environment()[varName] = input;
- }
-
- return 0;
-}
-
#endif // Q_OS_WINCE
diff --git a/src/corelib/kernel/qfunctions_wince.h b/src/corelib/kernel/qfunctions_wince.h
index 987342d29a..347f57f95d 100644
--- a/src/corelib/kernel/qfunctions_wince.h
+++ b/src/corelib/kernel/qfunctions_wince.h
@@ -37,6 +37,9 @@
#include <QtCore/qglobal.h>
#ifdef Q_OS_WINCE
+# ifndef NOMINMAX
+# define NOMINMAX
+# endif
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
@@ -47,7 +50,12 @@
#include <ctype.h>
#include <time.h>
#include <crtdefs.h>
-#include <altcecrt.h>
+#if _WIN32_WCE < 0x800
+# include <altcecrt.h>
+#else
+# include <fcntl.h>
+# include <stat.h>
+#endif
#include <winsock.h>
#include <ceconfig.h>
@@ -68,8 +76,8 @@ QT_END_NAMESPACE
#endif
// Environment ------------------------------------------------------
-errno_t qt_wince_getenv_s(size_t*, char*, size_t, const char*);
-errno_t qt_wince__putenv_s(const char*, const char*);
+errno_t qt_fake_getenv_s(size_t*, char*, size_t, const char*);
+errno_t qt_fake__putenv_s(const char*, const char*);
#ifdef __cplusplus // have this as tiff plugin is written in C
extern "C" {
@@ -95,13 +103,15 @@ struct tm {
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
- int tm_isdst; /* daylight savings time flag */
+ int tm_isdst; /* daylight-saving time flag */
};
#endif // _TM_DEFINED
FILETIME qt_wince_time_tToFt( time_t tt );
time_t qt_wince_ftToTime_t( const FILETIME ft );
+#if _WIN32_WCE < 0x800
+
// File I/O ---------------------------------------------------------
#define _O_RDONLY 0x0001
#define _O_RDWR 0x0002
@@ -161,6 +171,7 @@ struct stat
typedef int mode_t;
extern int errno;
+#endif // _WIN32_WCE < 0x800
int qt_wince__getdrive( void );
int qt_wince__waccess( const wchar_t *path, int pmode );
@@ -387,20 +398,20 @@ typedef DWORD OLE_COLOR;
{ \
return qt_wince_##funcname(p1); \
}
-#define generate_inline_return_func2(funcname, returntype, param1, param2) \
+#define generate_inline_return_func2(funcname, returntype, prependnamespace, param1, param2) \
inline returntype funcname(param1 p1, param2 p2) \
{ \
- return qt_wince_##funcname(p1, p2); \
+ return prependnamespace##funcname(p1, p2); \
}
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
{ \
return qt_wince_##funcname(p1, p2, p3); \
}
-#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
+#define generate_inline_return_func4(funcname, returntype, prependnamespace, param1, param2, param3, param4) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
{ \
- return qt_wince_##funcname(p1, p2, p3, p4); \
+ return prependnamespace##funcname(p1, p2, p3, p4); \
}
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
@@ -422,26 +433,28 @@ typedef unsigned (__stdcall *StartAdressExFunc)(void *);
typedef void(*StartAdressFunc)(void *);
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
-generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
-generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
+generate_inline_return_func4(getenv_s, errno_t, qt_fake_, size_t *, char *, size_t, const char *)
+generate_inline_return_func2(_putenv_s, errno_t, qt_fake_, const char *, const char *)
generate_inline_return_func0(_getpid, int)
generate_inline_return_func1(time_tToFt, FILETIME, time_t)
generate_inline_return_func1(ftToTime_t, time_t, FILETIME)
generate_inline_return_func0(_getdrive, int)
-generate_inline_return_func2(_waccess, int, const wchar_t *, int)
+generate_inline_return_func2(_waccess, int, qt_wince_, const wchar_t *, int)
generate_inline_return_func3(_wopen, int, const wchar_t *, int, int)
-generate_inline_return_func2(_fdopen, FILE *, int, const char *)
-generate_inline_return_func2(fdopen, FILE *, int, const char *)
+generate_inline_return_func2(_fdopen, FILE *, qt_wince_, int, const char *)
+generate_inline_return_func2(fdopen, FILE *, qt_wince_, int, const char *)
generate_inline_return_func1(rewind, void, FILE *)
generate_inline_return_func0(tmpfile, FILE *)
-generate_inline_return_func2(_rename, int, const char *, const char *)
+generate_inline_return_func2(_rename, int, qt_wince_, const char *, const char *)
generate_inline_return_func1(_remove, int, const char *)
generate_inline_return_func1(SetErrorMode, int, int)
-generate_inline_return_func2(_chmod, bool, const char *, int)
-generate_inline_return_func2(_wchmod, bool, const wchar_t *, int)
+#if _WIN32_WCE < 0x800
+generate_inline_return_func2(_chmod, bool, qt_wince_, const char *, int)
+generate_inline_return_func2(_wchmod, bool, qt_wince_, const wchar_t *, int)
+#endif
generate_inline_return_func7(CreateFileA, HANDLE, LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE)
-generate_inline_return_func4(SetWindowOrgEx, BOOL, HDC, int, int, LPPOINT)
-generate_inline_return_func2(calloc, void *, size_t, size_t)
+generate_inline_return_func4(SetWindowOrgEx, BOOL, qt_wince_, HDC, int, int, LPPOINT)
+generate_inline_return_func2(calloc, void *, qt_wince_, size_t, size_t)
generate_inline_return_func0(GetThreadLocale, DWORD)
generate_inline_return_func3(_beginthread, HANDLE, StartAdressFunc, unsigned, void *)
generate_inline_return_func6(_beginthreadex, unsigned long, void *, unsigned, StartAdressExFunc, void *, unsigned, unsigned *)
diff --git a/src/corelib/kernel/qfunctions_winrt.cpp b/src/corelib/kernel/qfunctions_winrt.cpp
index ea7f2ac671..f8fa19464f 100644
--- a/src/corelib/kernel/qfunctions_winrt.cpp
+++ b/src/corelib/kernel/qfunctions_winrt.cpp
@@ -35,59 +35,10 @@
#ifdef Q_OS_WINRT
-#include "qstring.h"
-#include "qbytearray.h"
-#include "qhash.h"
+#include "qfunctions_fake_env_p.h"
QT_BEGIN_NAMESPACE
-// Environment ------------------------------------------------------
-inline QHash<QByteArray, QByteArray> &qt_app_environment()
-{
- static QHash<QByteArray, QByteArray> internalEnvironment;
- return internalEnvironment;
-}
-
-errno_t qt_winrt_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
-{
- if (!sizeNeeded)
- return EINVAL;
-
- if (!qt_app_environment().contains(varName)) {
- if (buffer)
- buffer[0] = '\0';
- return ENOENT;
- }
-
- QByteArray value = qt_app_environment().value(varName);
- if (!value.endsWith('\0')) // win32 guarantees terminated string
- value.append('\0');
-
- if (bufferSize < (size_t)value.size()) {
- *sizeNeeded = value.size();
- return ERANGE;
- }
-
- strcpy(buffer, value.constData());
- return 0;
-}
-
-errno_t qt_winrt__putenv_s(const char* varName, const char* value)
-{
- QByteArray input = value;
- if (input.isEmpty()) {
- if (qt_app_environment().contains(varName))
- qt_app_environment().remove(varName);
- } else {
- // win32 on winrt guarantees terminated string
- if (!input.endsWith('\0'))
- input.append('\0');
- qt_app_environment()[varName] = input;
- }
-
- return 0;
-}
-
void qt_winrt_tzset()
{
}
diff --git a/src/corelib/kernel/qfunctions_winrt.h b/src/corelib/kernel/qfunctions_winrt.h
index 7efd042456..dc1cbe0ade 100644
--- a/src/corelib/kernel/qfunctions_winrt.h
+++ b/src/corelib/kernel/qfunctions_winrt.h
@@ -40,6 +40,7 @@
#include <QtCore/QThread>
#include <QtCore/QAbstractEventDispatcher>
+#include <QtCore/QElapsedTimer>
#include <QtCore/qt_windows.h>
// Convenience macros for handling HRESULT values
@@ -49,10 +50,20 @@
ret; \
}
+#define RETURN_IF_FAILED_WITH_ARGS(msg, ret, ...) \
+ if (FAILED(hr)) { \
+ qErrnoWarning(hr, msg, __VA_ARGS__); \
+ ret; \
+ }
+
#define RETURN_HR_IF_FAILED(msg) RETURN_IF_FAILED(msg, return hr)
#define RETURN_OK_IF_FAILED(msg) RETURN_IF_FAILED(msg, return S_OK)
#define RETURN_FALSE_IF_FAILED(msg) RETURN_IF_FAILED(msg, return false)
#define RETURN_VOID_IF_FAILED(msg) RETURN_IF_FAILED(msg, return)
+#define RETURN_HR_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return hr, __VA_ARGS__)
+#define RETURN_OK_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return S_OK, __VA_ARGS__)
+#define RETURN_FALSE_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return false, __VA_ARGS__)
+#define RETURN_VOID_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return, __VA_ARGS__)
#define Q_ASSERT_SUCCEEDED(hr) \
Q_ASSERT_X(SUCCEEDED(hr), Q_FUNC_INFO, qPrintable(qt_error_string(hr)));
@@ -65,8 +76,8 @@ QT_BEGIN_NAMESPACE
#endif
// Environment ------------------------------------------------------
-errno_t qt_winrt_getenv_s(size_t*, char*, size_t, const char*);
-errno_t qt_winrt__putenv_s(const char*, const char*);
+errno_t qt_fake_getenv_s(size_t*, char*, size_t, const char*);
+errno_t qt_fake__putenv_s(const char*, const char*);
void qt_winrt_tzset();
void qt_winrt__tzset();
@@ -91,20 +102,20 @@ QT_END_NAMESPACE
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1); \
}
-#define generate_inline_return_func2(funcname, returntype, param1, param2) \
+#define generate_inline_return_func2(funcname, returntype, prependnamespace, param1, param2) \
inline returntype funcname(param1 p1, param2 p2) \
{ \
- return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2); \
+ return QT_PREPEND_NAMESPACE(prependnamespace##funcname)(p1, p2); \
}
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2, p3); \
}
-#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
+#define generate_inline_return_func4(funcname, returntype, prependnamespace, param1, param2, param3, param4) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
{ \
- return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2, p3, p4); \
+ return QT_PREPEND_NAMESPACE(prependnamespace##funcname)(p1, p2, p3, p4); \
}
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
@@ -126,8 +137,8 @@ typedef unsigned (__stdcall *StartAdressExFunc)(void *);
typedef void(*StartAdressFunc)(void *);
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
-generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
-generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
+generate_inline_return_func4(getenv_s, errno_t, qt_fake_, size_t *, char *, size_t, const char *)
+generate_inline_return_func2(_putenv_s, errno_t, qt_fake_, const char *, const char *)
generate_inline_return_func0(tzset, void)
generate_inline_return_func0(_tzset, void)
@@ -150,7 +161,7 @@ enum AwaitStyle
};
template <typename T>
-static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, AwaitStyle awaitStyle)
+static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, AwaitStyle awaitStyle, uint timeout)
{
Microsoft::WRL::ComPtr<IAsyncInfo> asyncInfo;
HRESULT hr = asyncOp.As(&asyncInfo);
@@ -158,22 +169,34 @@ static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, Awai
return hr;
AsyncStatus status;
+ QElapsedTimer t;
+ if (timeout)
+ t.start();
switch (awaitStyle) {
case ProcessMainThreadEvents:
- while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started)
+ while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started) {
QCoreApplication::processEvents();
+ if (timeout && t.hasExpired(timeout))
+ return ERROR_TIMEOUT;
+ }
break;
case ProcessThreadEvents:
if (QAbstractEventDispatcher *dispatcher = QThread::currentThread()->eventDispatcher()) {
- while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started)
+ while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started) {
dispatcher->processEvents(QEventLoop::AllEvents);
+ if (timeout && t.hasExpired(timeout))
+ return ERROR_TIMEOUT;
+ }
break;
}
// fall through
default:
case YieldThread:
- while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started)
+ while (SUCCEEDED(hr = asyncInfo->get_Status(&status)) && status == Started) {
QThread::yieldCurrentThread();
+ if (timeout && t.hasExpired(timeout))
+ return ERROR_TIMEOUT;
+ }
break;
}
@@ -189,9 +212,9 @@ static inline HRESULT _await_impl(const Microsoft::WRL::ComPtr<T> &asyncOp, Awai
}
template <typename T>
-static inline HRESULT await(const Microsoft::WRL::ComPtr<T> &asyncOp, AwaitStyle awaitStyle = YieldThread)
+static inline HRESULT await(const Microsoft::WRL::ComPtr<T> &asyncOp, AwaitStyle awaitStyle = YieldThread, uint timeout = 0)
{
- HRESULT hr = _await_impl(asyncOp, awaitStyle);
+ HRESULT hr = _await_impl(asyncOp, awaitStyle, timeout);
if (FAILED(hr))
return hr;
@@ -199,9 +222,9 @@ static inline HRESULT await(const Microsoft::WRL::ComPtr<T> &asyncOp, AwaitStyle
}
template <typename T, typename U>
-static inline HRESULT await(const Microsoft::WRL::ComPtr<T> &asyncOp, U *results, AwaitStyle awaitStyle = YieldThread)
+static inline HRESULT await(const Microsoft::WRL::ComPtr<T> &asyncOp, U *results, AwaitStyle awaitStyle = YieldThread, uint timeout = 0)
{
- HRESULT hr = _await_impl(asyncOp, awaitStyle);
+ HRESULT hr = _await_impl(asyncOp, awaitStyle, timeout);
if (FAILED(hr))
return hr;
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp
index 2640ecaaaf..108a01aab7 100644
--- a/src/corelib/kernel/qjni.cpp
+++ b/src/corelib/kernel/qjni.cpp
@@ -225,6 +225,15 @@ static jfieldID getCachedFieldID(JNIEnv *env,
}
}
+void QJNILocalRefDeleter::cleanup(jobject obj)
+{
+ if (obj == 0)
+ return;
+
+ QJNIEnvironmentPrivate env;
+ env->DeleteLocalRef(obj);
+}
+
class QJNIEnvironmentPrivateTLS
{
public:
@@ -2371,4 +2380,3 @@ bool QJNIObjectPrivate::isSameObject(const QJNIObjectPrivate &other) const
}
QT_END_NAMESPACE
-
diff --git a/src/corelib/kernel/qjni_p.h b/src/corelib/kernel/qjni_p.h
index a32d656ebf..1c23f2ab76 100644
--- a/src/corelib/kernel/qjni_p.h
+++ b/src/corelib/kernel/qjni_p.h
@@ -51,6 +51,14 @@
QT_BEGIN_NAMESPACE
+struct Q_CORE_EXPORT QJNILocalRefDeleter
+{
+ static void cleanup(jobject obj);
+};
+
+// To simplify this we only define it for jobjects.
+typedef QScopedPointer<_jobject, QJNILocalRefDeleter> QJNIScopedLocalRef;
+
class Q_CORE_EXPORT QJNIEnvironmentPrivate
{
public:
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp
index dad2d5dc1e..0a5a5dffb9 100644
--- a/src/corelib/kernel/qjnihelpers.cpp
+++ b/src/corelib/kernel/qjnihelpers.cpp
@@ -34,6 +34,7 @@
#include "qjnihelpers_p.h"
#include "qmutex.h"
#include "qlist.h"
+#include "qvector.h"
#include <QtCore/qrunnable.h>
QT_BEGIN_NAMESPACE
@@ -57,6 +58,40 @@ static void onAndroidUiThread(JNIEnv *, jclass, jlong thiz)
}
namespace {
+ struct GenericMotionEventListeners {
+ QMutex mutex;
+ QVector<QtAndroidPrivate::GenericMotionEventListener *> listeners;
+ };
+}
+Q_GLOBAL_STATIC(GenericMotionEventListeners, g_genericMotionEventListeners)
+
+static jboolean dispatchGenericMotionEvent(JNIEnv *, jclass, jobject event)
+{
+ jboolean ret = JNI_FALSE;
+ QMutexLocker locker(&g_genericMotionEventListeners()->mutex);
+ foreach (auto listener, g_genericMotionEventListeners()->listeners)
+ ret |= listener->handleGenericMotionEvent(event);
+ return ret;
+}
+
+namespace {
+ struct KeyEventListeners {
+ QMutex mutex;
+ QVector<QtAndroidPrivate::KeyEventListener *> listeners;
+ };
+}
+Q_GLOBAL_STATIC(KeyEventListeners, g_keyEventListeners)
+
+static jboolean dispatchKeyEvent(JNIEnv *, jclass, jobject event)
+{
+ jboolean ret = JNI_FALSE;
+ QMutexLocker locker(&g_keyEventListeners()->mutex);
+ foreach (auto listener, g_keyEventListeners()->listeners)
+ ret |= listener->handleKeyEvent(event);
+ return ret;
+}
+
+namespace {
class ActivityResultListeners
{
public:
@@ -122,6 +157,45 @@ void QtAndroidPrivate::handleNewIntent(JNIEnv *env, jobject intent)
}
}
+namespace {
+ class ResumePauseListeners
+ {
+ public:
+ QMutex mutex;
+ QList<QtAndroidPrivate::ResumePauseListener *> listeners;
+ };
+}
+
+Q_GLOBAL_STATIC(ResumePauseListeners, g_resumePauseListeners)
+
+void QtAndroidPrivate::registerResumePauseListener(ResumePauseListener *listener)
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ g_resumePauseListeners()->listeners.append(listener);
+}
+
+void QtAndroidPrivate::unregisterResumePauseListener(ResumePauseListener *listener)
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ g_resumePauseListeners()->listeners.removeAll(listener);
+}
+
+void QtAndroidPrivate::handlePause()
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ const QList<QtAndroidPrivate::ResumePauseListener *> &listeners = g_resumePauseListeners()->listeners;
+ for (int i=0; i<listeners.size(); ++i)
+ listeners.at(i)->handlePause();
+}
+
+void QtAndroidPrivate::handleResume()
+{
+ QMutexLocker locker(&g_resumePauseListeners()->mutex);
+ const QList<QtAndroidPrivate::ResumePauseListener *> &listeners = g_resumePauseListeners()->listeners;
+ for (int i=0; i<listeners.size(); ++i)
+ listeners.at(i)->handleResume();
+}
+
static inline bool exceptionCheck(JNIEnv *env)
{
if (env->ExceptionCheck()) {
@@ -188,7 +262,9 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env)
g_javaVM = vm;
static const JNINativeMethod methods[] = {
- {"onAndroidUiThread", "(J)V", reinterpret_cast<void *>(onAndroidUiThread)}
+ {"onAndroidUiThread", "(J)V", reinterpret_cast<void *>(onAndroidUiThread)},
+ {"dispatchGenericMotionEvent", "(Landroid/view/MotionEvent;)Z", reinterpret_cast<void *>(dispatchGenericMotionEvent)},
+ {"dispatchKeyEvent", "(Landroid/view/KeyEvent;)Z", reinterpret_cast<void *>(dispatchKeyEvent)},
};
const bool regOk = (env->RegisterNatives(jQtNative, methods, sizeof(methods) / sizeof(methods[0])) == JNI_OK);
@@ -235,4 +311,28 @@ void QtAndroidPrivate::runOnUiThread(QRunnable *runnable, JNIEnv *env)
delete runnable;
}
+void QtAndroidPrivate::registerGenericMotionEventListener(QtAndroidPrivate::GenericMotionEventListener *listener)
+{
+ QMutexLocker locker(&g_genericMotionEventListeners()->mutex);
+ g_genericMotionEventListeners()->listeners.push_back(listener);
+}
+
+void QtAndroidPrivate::unregisterGenericMotionEventListener(QtAndroidPrivate::GenericMotionEventListener *listener)
+{
+ QMutexLocker locker(&g_genericMotionEventListeners()->mutex);
+ g_genericMotionEventListeners()->listeners.removeOne(listener);
+}
+
+void QtAndroidPrivate::registerKeyEventListener(QtAndroidPrivate::KeyEventListener *listener)
+{
+ QMutexLocker locker(&g_keyEventListeners()->mutex);
+ g_keyEventListeners()->listeners.push_back(listener);
+}
+
+void QtAndroidPrivate::unregisterKeyEventListener(QtAndroidPrivate::KeyEventListener *listener)
+{
+ QMutexLocker locker(&g_keyEventListeners()->mutex);
+ g_keyEventListeners()->listeners.removeOne(listener);
+}
+
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h
index 3ed8338b18..536989b4fc 100644
--- a/src/corelib/kernel/qjnihelpers_p.h
+++ b/src/corelib/kernel/qjnihelpers_p.h
@@ -68,6 +68,28 @@ namespace QtAndroidPrivate
virtual bool handleNewIntent(JNIEnv *env, jobject intent) = 0;
};
+ class Q_CORE_EXPORT ResumePauseListener
+ {
+ public:
+ virtual ~ResumePauseListener() {}
+ virtual void handlePause() {};
+ virtual void handleResume() {};
+ };
+
+ class Q_CORE_EXPORT GenericMotionEventListener
+ {
+ public:
+ virtual ~GenericMotionEventListener() {}
+ virtual bool handleGenericMotionEvent(jobject event) = 0;
+ };
+
+ class Q_CORE_EXPORT KeyEventListener
+ {
+ public:
+ virtual ~KeyEventListener() {}
+ virtual bool handleKeyEvent(jobject event) = 0;
+ };
+
Q_CORE_EXPORT jobject activity();
Q_CORE_EXPORT JavaVM *javaVM();
Q_CORE_EXPORT jint initJNI(JavaVM *vm, JNIEnv *env);
@@ -82,6 +104,17 @@ namespace QtAndroidPrivate
Q_CORE_EXPORT void handleNewIntent(JNIEnv *env, jobject intent);
Q_CORE_EXPORT void registerNewIntentListener(NewIntentListener *listener);
Q_CORE_EXPORT void unregisterNewIntentListener(NewIntentListener *listener);
+
+ Q_CORE_EXPORT void handlePause();
+ Q_CORE_EXPORT void handleResume();
+ Q_CORE_EXPORT void registerResumePauseListener(ResumePauseListener *listener);
+ Q_CORE_EXPORT void unregisterResumePauseListener(ResumePauseListener *listener);
+
+ Q_CORE_EXPORT void registerGenericMotionEventListener(GenericMotionEventListener *listener);
+ Q_CORE_EXPORT void unregisterGenericMotionEventListener(GenericMotionEventListener *listener);
+
+ Q_CORE_EXPORT void registerKeyEventListener(KeyEventListener *listener);
+ Q_CORE_EXPORT void unregisterKeyEventListener(KeyEventListener *listener);
}
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qmath.h b/src/corelib/kernel/qmath.h
index 5cc3ec586e..e60561c05f 100644
--- a/src/corelib/kernel/qmath.h
+++ b/src/corelib/kernel/qmath.h
@@ -40,8 +40,18 @@
#include <QtCore/qglobal.h>
+#ifndef _USE_MATH_DEFINES
+# define _USE_MATH_DEFINES
+# define undef_USE_MATH_DEFINES
+#endif
+
#include <cmath>
+#ifdef undef_USE_MATH_DEFINES
+# undef _USE_MATH_DEFINES
+# undef undef_USE_MATH_DEFINES
+#endif
+
QT_BEGIN_NAMESPACE
#define QT_SINE_TABLE_SIZE 256
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index 1ef5ee0547..820af298c0 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
+** Copyright (C) 2015 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -43,7 +43,6 @@
#include <qstringlist.h>
#include <qthread.h>
#include <qvariant.h>
-#include <qhash.h>
#include <qdebug.h>
#include <qsemaphore.h>
@@ -3029,6 +3028,11 @@ QVariant QMetaProperty::read(const QObject *object) const
Writes \a value as the property's value to the given \a object. Returns
true if the write succeeded; otherwise returns \c false.
+ If \a value is not of the same type type as the property, a conversion
+ is attempted. An empty QVariant() is equivalent to a call to reset()
+ if this property is resetable, or setting a default-constructed object
+ otherwise.
+
\sa read(), reset(), isWritable()
*/
bool QMetaProperty::write(QObject *object, const QVariant &value) const
@@ -3069,8 +3073,15 @@ bool QMetaProperty::write(QObject *object, const QVariant &value) const
if (t == QMetaType::UnknownType)
return false;
}
- if (t != QMetaType::QVariant && t != (uint)value.userType() && (t < QMetaType::User && !v.convert((QVariant::Type)t)))
- return false;
+ if (t != QMetaType::QVariant && int(t) != value.userType()) {
+ if (!value.isValid()) {
+ if (isResettable())
+ return reset(object);
+ v = QVariant(t, 0);
+ } else if (!v.convert(t)) {
+ return false;
+ }
+ }
}
// the status variable is changed by qt_metacall to indicate what it did
diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h
index b522a211bb..1a282d3261 100644
--- a/src/corelib/kernel/qmetaobject.h
+++ b/src/corelib/kernel/qmetaobject.h
@@ -48,7 +48,7 @@ template <typename T> class QList;
class Q_CORE_EXPORT QMetaMethod
{
public:
- Q_DECL_CONSTEXPR inline QMetaMethod() : mobj(0),handle(0) {}
+ Q_DECL_CONSTEXPR inline QMetaMethod() : mobj(Q_NULLPTR), handle(0) {}
QByteArray methodSignature() const;
QByteArray name() const;
@@ -74,7 +74,7 @@ public:
bool invoke(QObject *object,
Qt::ConnectionType connectionType,
QGenericReturnArgument returnValue,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -86,7 +86,7 @@ public:
QGenericArgument val9 = QGenericArgument()) const;
inline bool invoke(QObject *object,
QGenericReturnArgument returnValue,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -102,7 +102,7 @@ public:
}
inline bool invoke(QObject *object,
Qt::ConnectionType connectionType,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -117,7 +117,7 @@ public:
val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
inline bool invoke(QObject *object,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -134,7 +134,7 @@ public:
bool invokeOnGadget(void *gadget,
QGenericReturnArgument returnValue,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -145,7 +145,7 @@ public:
QGenericArgument val8 = QGenericArgument(),
QGenericArgument val9 = QGenericArgument()) const;
inline bool invokeOnGadget(void *gadget,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -160,7 +160,7 @@ public:
val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
- inline bool isValid() const { return mobj != 0; }
+ inline bool isValid() const { return mobj != Q_NULLPTR; }
#ifdef Q_QDOC
static QMetaMethod fromSignal(PointerToMemberFunction signal);
@@ -204,7 +204,7 @@ inline bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2)
class Q_CORE_EXPORT QMetaEnum
{
public:
- Q_DECL_CONSTEXPR inline QMetaEnum() : mobj(0),handle(0) {}
+ Q_DECL_CONSTEXPR inline QMetaEnum() : mobj(Q_NULLPTR), handle(0) {}
const char *name() const;
bool isFlag() const;
@@ -215,14 +215,14 @@ public:
const char *scope() const;
- int keyToValue(const char *key, bool *ok = 0) const;
+ int keyToValue(const char *key, bool *ok = Q_NULLPTR) const;
const char* valueToKey(int value) const;
- int keysToValue(const char * keys, bool *ok = 0) const;
+ int keysToValue(const char * keys, bool *ok = Q_NULLPTR) const;
QByteArray valueToKeys(int value) const;
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
- inline bool isValid() const { return name() != 0; }
+ inline bool isValid() const { return name() != Q_NULLPTR; }
template<typename T> static QMetaEnum fromType() {
Q_STATIC_ASSERT_X(QtPrivate::IsQEnumHelper<T>::Value,
@@ -253,11 +253,11 @@ public:
bool isReadable() const;
bool isWritable() const;
bool isResettable() const;
- bool isDesignable(const QObject *obj = 0) const;
- bool isScriptable(const QObject *obj = 0) const;
- bool isStored(const QObject *obj = 0) const;
- bool isEditable(const QObject *obj = 0) const;
- bool isUser(const QObject *obj = 0) const;
+ bool isDesignable(const QObject *obj = Q_NULLPTR) const;
+ bool isScriptable(const QObject *obj = Q_NULLPTR) const;
+ bool isStored(const QObject *obj = Q_NULLPTR) const;
+ bool isEditable(const QObject *obj = Q_NULLPTR) const;
+ bool isUser(const QObject *obj = Q_NULLPTR) const;
bool isConstant() const;
bool isFinal() const;
@@ -297,7 +297,7 @@ private:
class Q_CORE_EXPORT QMetaClassInfo
{
public:
- Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(0),handle(0) {}
+ Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(Q_NULLPTR), handle(0) {}
const char *name() const;
const char *value() const;
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp
index a1b8125121..021e137273 100644
--- a/src/corelib/kernel/qmetaobjectbuilder.cpp
+++ b/src/corelib/kernel/qmetaobjectbuilder.cpp
@@ -88,6 +88,7 @@ static inline Q_DECL_UNUSED const QMetaObjectPrivate *priv(const uint* data)
class QMetaMethodBuilderPrivate
{
public:
+ QMetaMethodBuilderPrivate() {} // for QVector, don't use
QMetaMethodBuilderPrivate
(QMetaMethod::MethodType _methodType,
const QByteArray& _signature,
@@ -139,10 +140,12 @@ public:
return signature.left(qMax(signature.indexOf('('), 0));
}
};
+Q_DECLARE_TYPEINFO(QMetaMethodBuilderPrivate, Q_MOVABLE_TYPE);
class QMetaPropertyBuilderPrivate
{
public:
+ QMetaPropertyBuilderPrivate() {} // for QVector, don't use
QMetaPropertyBuilderPrivate
(const QByteArray& _name, const QByteArray& _type, int notifierIdx=-1,
int _revision = 0)
@@ -176,10 +179,12 @@ public:
flags &= ~f;
}
};
+Q_DECLARE_TYPEINFO(QMetaPropertyBuilderPrivate, Q_MOVABLE_TYPE);
class QMetaEnumBuilderPrivate
{
public:
+ QMetaEnumBuilderPrivate() {} // for QVector, don't use
QMetaEnumBuilderPrivate(const QByteArray& _name)
: name(_name), isFlag(false)
{
@@ -188,8 +193,9 @@ public:
QByteArray name;
bool isFlag;
QList<QByteArray> keys;
- QList<int> values;
+ QVector<int> values;
};
+Q_DECLARE_TYPEINFO(QMetaEnumBuilderPrivate, Q_MOVABLE_TYPE);
class QMetaObjectBuilderPrivate
{
@@ -207,12 +213,12 @@ public:
QByteArray className;
const QMetaObject *superClass;
QMetaObjectBuilder::StaticMetacallFunction staticMetacallFunction;
- QList<QMetaMethodBuilderPrivate> methods;
- QList<QMetaMethodBuilderPrivate> constructors;
- QList<QMetaPropertyBuilderPrivate> properties;
+ QVector<QMetaMethodBuilderPrivate> methods;
+ QVector<QMetaMethodBuilderPrivate> constructors;
+ QVector<QMetaPropertyBuilderPrivate> properties;
QList<QByteArray> classInfoNames;
QList<QByteArray> classInfoValues;
- QList<QMetaEnumBuilderPrivate> enumerators;
+ QVector<QMetaEnumBuilderPrivate> enumerators;
QList<const QMetaObject *> relatedMetaObjects;
int flags;
};
@@ -1149,7 +1155,7 @@ void QMetaStringTable::writeBlob(char *out) const
// Returns the sum of all parameters (including return type) for the given
// \a methods. This is needed for calculating the size of the methods'
// parameter type/name meta-data.
-static int aggregateParameterCount(const QList<QMetaMethodBuilderPrivate> &methods)
+static int aggregateParameterCount(const QVector<QMetaMethodBuilderPrivate> &methods)
{
int sum = 0;
for (int i = 0; i < methods.size(); ++i)
@@ -1330,7 +1336,7 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf,
Q_ASSERT(!buf || dataIndex == pmeta->methodData + d->methods.size() * 5
+ (hasRevisionedMethods ? d->methods.size() : 0));
for (int x = 0; x < 2; ++x) {
- QList<QMetaMethodBuilderPrivate> &methods = (x == 0) ? d->methods : d->constructors;
+ QVector<QMetaMethodBuilderPrivate> &methods = (x == 0) ? d->methods : d->constructors;
for (index = 0; index < methods.size(); ++index) {
QMetaMethodBuilderPrivate *method = &(methods[index]);
QList<QByteArray> paramTypeNames = method->parameterTypes();
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index 7fadb66319..e6d745bb74 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -1081,25 +1081,16 @@ int QMetaType::registerNormalizedType(const NS(QByteArray) &normalizedTypeName,
normalizedTypeName.constData(), idx, previousSize, size);
}
- // Do not compare types higher than 0x100:
- // Ignore WasDeclaredAsMetaType inconsitency, to many users were hitting the problem
- // Ignore IsGadget as it was added in Qt 5.5
- // Ignore all the future flags as well
- if ((previousFlags ^ flags) & 0xff) {
- const int maskForTypeInfo = NeedsConstruction | NeedsDestruction | MovableType;
+ // these flags cannot change in a binary compatible way:
+ const int binaryCompatibilityFlag = PointerToQObject | IsEnumeration | SharedPointerToQObject
+ | WeakPointerToQObject | TrackingPointerToQObject;
+ if ((previousFlags ^ flags) & binaryCompatibilityFlag) {
+
const char *msg = "QMetaType::registerType: Binary compatibility break. "
"\nType flags for type '%s' [%i] don't match. Previously "
- "registered TypeFlags(0x%x), now registering TypeFlags(0x%x). "
- "This is an ODR break, which means that your application depends on a C++ undefined behavior."
- "\nHint: %s";
- QT_PREPEND_NAMESPACE(QByteArray) hint;
- if ((previousFlags & maskForTypeInfo) != (flags & maskForTypeInfo)) {
- hint += "\nIt seems that the type was registered at least twice in a different translation units, "
- "but Q_DECLARE_TYPEINFO is not visible from all the translations unit or different flags were used."
- "Remember that Q_DECLARE_TYPEINFO should be declared before QMetaType registration, "
- "preferably it should be placed just after the type declaration and before Q_DECLARE_METATYPE";
- }
- qFatal(msg, normalizedTypeName.constData(), idx, previousFlags, int(flags), hint.constData());
+ "registered TypeFlags(0x%x), now registering TypeFlags(0x%x). ";
+
+ qFatal(msg, normalizedTypeName.constData(), idx, previousFlags, int(flags));
}
return idx;
@@ -1188,9 +1179,6 @@ bool QMetaType::isRegistered(int type)
return ((type >= User) && (ct && ct->count() > type - User) && !ct->at(type - User).typeName.isEmpty());
}
-/*!
- \internal
-*/
template <bool tryNormalizedType>
static inline int qMetaTypeTypeImpl(const char *typeName, int length)
{
@@ -2110,7 +2098,7 @@ const QMetaObject *QMetaType::metaObjectForType(int type)
\warning This function is useful only for registering an alias (typedef)
for every other use case Q_DECLARE_METATYPE and qMetaTypeId() should be used instead.
- \sa qRegisterMetaTypeStreamOperators(), QMetaType::isRegistered(),
+ \sa {QMetaType::}{qRegisterMetaTypeStreamOperators()}, {QMetaType::}{isRegistered()},
Q_DECLARE_METATYPE()
*/
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 1b214e9f74..3b8f8e7166 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -229,7 +229,7 @@ struct AbstractDebugStreamFunction
{
typedef void (*Stream)(const AbstractDebugStreamFunction *, QDebug&, const void *);
typedef void (*Destroy)(AbstractDebugStreamFunction *);
- explicit AbstractDebugStreamFunction(Stream s = 0, Destroy d = 0)
+ explicit AbstractDebugStreamFunction(Stream s = Q_NULLPTR, Destroy d = Q_NULLPTR)
: stream(s), destroy(d) {}
Q_DISABLE_COPY(AbstractDebugStreamFunction)
Stream stream;
@@ -259,7 +259,7 @@ struct AbstractComparatorFunction
typedef bool (*LessThan)(const AbstractComparatorFunction *, const void *, const void *);
typedef bool (*Equals)(const AbstractComparatorFunction *, const void *, const void *);
typedef void (*Destroy)(AbstractComparatorFunction *);
- explicit AbstractComparatorFunction(LessThan lt = 0, Equals e = 0, Destroy d = 0)
+ explicit AbstractComparatorFunction(LessThan lt = Q_NULLPTR, Equals e = Q_NULLPTR, Destroy d = Q_NULLPTR)
: lessThan(lt), equals(e), destroy(d) {}
Q_DISABLE_COPY(AbstractComparatorFunction)
LessThan lessThan;
@@ -296,7 +296,7 @@ template<typename T>
struct BuiltInEqualsComparatorFunction : public AbstractComparatorFunction
{
BuiltInEqualsComparatorFunction()
- : AbstractComparatorFunction(0, equals, destroy) {}
+ : AbstractComparatorFunction(Q_NULLPTR, equals, destroy) {}
static bool equals(const AbstractComparatorFunction *, const void *l, const void *r)
{
const T *lhs = static_cast<const T *>(l);
@@ -313,7 +313,7 @@ struct BuiltInEqualsComparatorFunction : public AbstractComparatorFunction
struct AbstractConverterFunction
{
typedef bool (*Converter)(const AbstractConverterFunction *, const void *, void*);
- explicit AbstractConverterFunction(Converter c = 0)
+ explicit AbstractConverterFunction(Converter c = Q_NULLPTR)
: convert(c) {}
Q_DISABLE_COPY(AbstractConverterFunction)
Converter convert;
@@ -510,9 +510,9 @@ public:
static TypeFlags typeFlags(int type);
static const QMetaObject *metaObjectForType(int type);
static bool isRegistered(int type);
- static void *create(int type, const void *copy = 0);
+ static void *create(int type, const void *copy = Q_NULLPTR);
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED static void *construct(int type, const void *copy = 0)
+ QT_DEPRECATED static void *construct(int type, const void *copy = Q_NULLPTR)
{ return create(type, copy); }
#endif
static void destroy(int type, void *data);
@@ -533,9 +533,9 @@ public:
inline TypeFlags flags() const;
inline const QMetaObject *metaObject() const;
- inline void *create(const void *copy = 0) const;
+ inline void *create(const void *copy = Q_NULLPTR) const;
inline void destroy(void *data) const;
- inline void *construct(void *where, const void *copy = 0) const;
+ inline void *construct(void *where, const void *copy = Q_NULLPTR) const;
inline void destruct(void *data) const;
public:
@@ -611,7 +611,7 @@ public:
return registerConverterFunction(&f, fromTypeId, toTypeId);
}
- // member function as in "double QString::toDouble(bool *ok = 0) const"
+ // member function as in "double QString::toDouble(bool *ok = Q_NULLPTR) const"
template<typename From, typename To>
static bool registerConverter(To(From::*function)(bool*) const)
{
@@ -674,9 +674,9 @@ private:
uint sizeExtended() const;
QMetaType::TypeFlags flagsExtended() const;
const QMetaObject *metaObjectExtended() const;
- void *createExtended(const void *copy = 0) const;
+ void *createExtended(const void *copy = Q_NULLPTR) const;
void destroyExtended(void *data) const;
- void *constructExtended(void *where, const void *copy = 0) const;
+ void *constructExtended(void *where, const void *copy = Q_NULLPTR) const;
void destructExtended(void *data) const;
static bool registerComparatorFunction(const QtPrivate::AbstractComparatorFunction *f, int type);
@@ -740,6 +740,11 @@ ConverterFunctor<From, To, UnaryFunction>::~ConverterFunctor()
}
+#define QT_METATYPE_PRIVATE_DECLARE_TYPEINFO(C, F) \
+ } \
+ Q_DECLARE_TYPEINFO(QtMetaTypePrivate:: C, (F)); \
+ namespace QtMetaTypePrivate {
+
namespace QtMetaTypePrivate {
template <typename T, bool Accepted = true>
struct QMetaTypeFunctionHelper {
@@ -771,7 +776,7 @@ struct QMetaTypeFunctionHelper {
template <typename T>
struct QMetaTypeFunctionHelper<T, /* Accepted */ false> {
static void Destruct(void *) {}
- static void *Construct(void *, const void *) { return 0; }
+ static void *Construct(void *, const void *) { return Q_NULLPTR; }
#ifndef QT_NO_DATASTREAM
static void Save(QDataStream &, const void *) {}
static void Load(QDataStream &, void *) {}
@@ -1009,7 +1014,7 @@ public:
public:
template<class T> QSequentialIterableImpl(const T*p)
: _iterable(p)
- , _iterator(0)
+ , _iterator(Q_NULLPTR)
, _metaType_id(qMetaTypeId<typename T::value_type>())
, _metaType_flags(QTypeInfo<typename T::value_type>::isPointer)
, _iteratorCapabilities(ContainerAPI<T>::IteratorCapabilities)
@@ -1026,20 +1031,20 @@ public:
}
QSequentialIterableImpl()
- : _iterable(0)
- , _iterator(0)
+ : _iterable(Q_NULLPTR)
+ , _iterator(Q_NULLPTR)
, _metaType_id(QMetaType::UnknownType)
, _metaType_flags(0)
, _iteratorCapabilities(0)
- , _size(0)
- , _at(0)
- , _moveToBegin(0)
- , _moveToEnd(0)
- , _advance(0)
- , _get(0)
- , _destroyIter(0)
- , _equalIter(0)
- , _copyIter(0)
+ , _size(Q_NULLPTR)
+ , _at(Q_NULLPTR)
+ , _moveToBegin(Q_NULLPTR)
+ , _moveToEnd(Q_NULLPTR)
+ , _advance(Q_NULLPTR)
+ , _get(Q_NULLPTR)
+ , _destroyIter(Q_NULLPTR)
+ , _equalIter(Q_NULLPTR)
+ , _copyIter(Q_NULLPTR)
{
}
@@ -1067,6 +1072,7 @@ public:
_copyIter(&_iterator, &other._iterator);
}
};
+QT_METATYPE_PRIVATE_DECLARE_TYPEINFO(QSequentialIterableImpl, Q_MOVABLE_TYPE)
template<typename From>
struct QSequentialIterableConvertFunctor
@@ -1195,21 +1201,21 @@ public:
}
QAssociativeIterableImpl()
- : _iterable(0)
+ : _iterable(Q_NULLPTR)
, _metaType_id_key(QMetaType::UnknownType)
, _metaType_flags_key(0)
, _metaType_id_value(QMetaType::UnknownType)
, _metaType_flags_value(0)
- , _size(0)
- , _find(0)
- , _begin(0)
- , _end(0)
- , _advance(0)
- , _getKey(0)
- , _getValue(0)
- , _destroyIter(0)
- , _equalIter(0)
- , _copyIter(0)
+ , _size(Q_NULLPTR)
+ , _find(Q_NULLPTR)
+ , _begin(Q_NULLPTR)
+ , _end(Q_NULLPTR)
+ , _advance(Q_NULLPTR)
+ , _getKey(Q_NULLPTR)
+ , _getValue(Q_NULLPTR)
+ , _destroyIter(Q_NULLPTR)
+ , _equalIter(Q_NULLPTR)
+ , _copyIter(Q_NULLPTR)
{
}
@@ -1234,6 +1240,7 @@ public:
_copyIter(&_iterator, &other._iterator);
}
};
+QT_METATYPE_PRIVATE_DECLARE_TYPEINFO(QAssociativeIterableImpl, Q_MOVABLE_TYPE)
template<typename From>
struct QAssociativeIterableConvertFunctor
@@ -1277,15 +1284,20 @@ public:
}
QPairVariantInterfaceImpl()
- : _pair(0)
- , _getFirst(0)
- , _getSecond(0)
+ : _pair(Q_NULLPTR)
+ , _metaType_id_first(QMetaType::UnknownType)
+ , _metaType_flags_first(0)
+ , _metaType_id_second(QMetaType::UnknownType)
+ , _metaType_flags_second(0)
+ , _getFirst(Q_NULLPTR)
+ , _getSecond(Q_NULLPTR)
{
}
inline VariantData first() const { return _getFirst(&_pair, _metaType_id_first, _metaType_flags_first); }
inline VariantData second() const { return _getSecond(&_pair, _metaType_id_second, _metaType_flags_second); }
};
+QT_METATYPE_PRIVATE_DECLARE_TYPEINFO(QPairVariantInterfaceImpl, Q_MOVABLE_TYPE)
template<typename From>
struct QPairVariantInterfaceConvertFunctor;
@@ -1354,7 +1366,7 @@ namespace QtPrivate
#endif
static no_type checkType(...);
Q_STATIC_ASSERT_X(sizeof(T), "Type argument of Q_DECLARE_METATYPE(T*) must be fully defined");
- enum { Value = sizeof(checkType(static_cast<T*>(0))) == sizeof(yes_type) };
+ enum { Value = sizeof(checkType(static_cast<T*>(Q_NULLPTR))) == sizeof(yes_type) };
};
template<typename T, typename Enable = void>
@@ -1391,7 +1403,7 @@ QT_WARNING_POP
template<typename T, typename Enable = void>
struct MetaObjectForType
{
- static inline const QMetaObject *value() { return 0; }
+ static inline const QMetaObject *value() { return Q_NULLPTR; }
};
template<>
struct MetaObjectForType<void>
@@ -1615,7 +1627,7 @@ namespace QtPrivate {
template<typename T>
struct QMetaTypeTypeFlags
{
- enum { Flags = (!QTypeInfo<T>::isStatic ? QMetaType::MovableType : 0)
+ enum { Flags = (QTypeInfoQuery<T>::isRelocatable ? QMetaType::MovableType : 0)
| (QTypeInfo<T>::isComplex ? QMetaType::NeedsConstruction : 0)
| (QTypeInfo<T>::isComplex ? QMetaType::NeedsDestruction : 0)
| (IsPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::PointerToQObject : 0)
@@ -1692,7 +1704,7 @@ int qRegisterNormalizedMetaType(const QT_PREPEND_NAMESPACE(QByteArray) &normaliz
template <typename T>
int qRegisterMetaType(const char *typeName
#ifndef Q_QDOC
- , T * dummy = 0
+ , T * dummy = Q_NULLPTR
, typename QtPrivate::MetaTypeDefinedHelper<T, QMetaTypeId2<T>::Defined && !QMetaTypeId2<T>::IsBuiltIn>::DefinedType defined = QtPrivate::MetaTypeDefinedHelper<T, QMetaTypeId2<T>::Defined && !QMetaTypeId2<T>::IsBuiltIn>::Defined
#endif
)
@@ -1709,7 +1721,7 @@ int qRegisterMetaType(const char *typeName
template <typename T>
void qRegisterMetaTypeStreamOperators(const char *typeName
#ifndef Q_QDOC
- , T * /* dummy */ = 0
+ , T * /* dummy */ = Q_NULLPTR
#endif
)
{
@@ -2095,7 +2107,7 @@ inline QMetaType::QMetaType(const ExtensionFlag extensionFlags, const QMetaTypeI
, m_loadOp(loadOp)
, m_constructor(constructor)
, m_destructor(destructor)
- , m_extension(0)
+ , m_extension(Q_NULLPTR)
, m_size(size)
, m_typeFlags(theTypeFlags)
, m_extensionFlags(extensionFlags)
@@ -2232,21 +2244,6 @@ namespace QtPrivate {
};
}
-namespace QtMetaTypePrivate {
-inline Q_DECL_CONSTEXPR bool isBuiltinSequentialType(int typeId)
-{
- return typeId == qMetaTypeId<QStringList>()
- || typeId == qMetaTypeId<QByteArrayList>()
- || typeId == qMetaTypeId<QVariantList>();
-}
-
-inline Q_DECL_CONSTEXPR bool isBuiltinAssociativeType(int typeId)
-{
- return typeId == qMetaTypeId<QVariantHash>()
- || typeId == qMetaTypeId<QVariantMap>();
-}
-} // QtMetaTypePrivate
-
QT_END_NAMESPACE
#endif // QMETATYPE_H
diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp
index 3e9cdac966..e7bf505ebc 100644
--- a/src/corelib/kernel/qmimedata.cpp
+++ b/src/corelib/kernel/qmimedata.cpp
@@ -354,7 +354,9 @@ void QMimeData::setUrls(const QList<QUrl> &urls)
{
Q_D(QMimeData);
QList<QVariant> list;
- for (int i = 0; i < urls.size(); ++i)
+ const int numUrls = urls.size();
+ list.reserve(numUrls);
+ for (int i = 0; i < numUrls; ++i)
list.append(urls.at(i));
d->setData(QLatin1String("text/uri-list"), list);
@@ -561,7 +563,7 @@ QByteArray QMimeData::data(const QString &mimeType) const
operators must then be registered with the qRegisterMetaTypeStreamOperators()
function.
- \sa hasFormat(), QMetaType, qRegisterMetaTypeStreamOperators()
+ \sa hasFormat(), QMetaType, {QMetaType::}{qRegisterMetaTypeStreamOperators()}
*/
void QMimeData::setData(const QString &mimeType, const QByteArray &data)
{
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index f2c67fb3a0..c316ebc69f 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -47,7 +47,6 @@
#include <qthread.h>
#include <private/qthread_p.h>
#include <qdebug.h>
-#include <qhash.h>
#include <qpair.h>
#include <qvarlengtharray.h>
#include <qset.h>
@@ -66,6 +65,16 @@ QT_BEGIN_NAMESPACE
static int DIRECT_CONNECTION_ONLY = 0;
+
+QDynamicMetaObjectData::~QDynamicMetaObjectData()
+{
+}
+
+QAbstractDynamicMetaObject::~QAbstractDynamicMetaObject()
+{
+}
+
+
struct QSlotObjectBaseDeleter { // for use with QScopedPointer<QSlotObjectBase,...>
static void cleanup(QtPrivate::QSlotObjectBase *slot) {
if (slot) slot->destroyIfLastRef();
@@ -494,6 +503,7 @@ void QMetaCallEvent::placeMetaCall(QObject *object)
\brief Exception-safe wrapper around QObject::blockSignals()
\since 5.3
\ingroup objectmodel
+ \inmodule QtCore
\reentrant
@@ -1209,6 +1219,13 @@ void QObject::setObjectName(const QString &name)
The event() function can be reimplemented to customize the
behavior of an object.
+ Make sure you call the parent event class implementation
+ for all the events you did not handle.
+
+ Example:
+
+ \snippet code/src_corelib_kernel_qobject.cpp 52
+
\sa installEventFilter(), timerEvent(), QCoreApplication::sendEvent(),
QCoreApplication::postEvent()
*/
@@ -1372,7 +1389,7 @@ bool QObject::eventFilter(QObject * /* watched */, QEvent * /* event */)
Signals are not blocked by default.
- \sa blockSignals()
+ \sa blockSignals(), QSignalBlocker
*/
/*!
@@ -1387,7 +1404,7 @@ bool QObject::eventFilter(QObject * /* watched */, QEvent * /* event */)
Signals emitted while being blocked are not buffered.
- \sa signalsBlocked()
+ \sa signalsBlocked(), QSignalBlocker
*/
bool QObject::blockSignals(bool block) Q_DECL_NOTHROW
@@ -3814,7 +3831,7 @@ int QObjectPrivate::signalIndex(const char *signalName,
\b{Note:} Dynamic properties starting with "_q_" are reserved for internal
purposes.
- \sa property(), metaObject(), dynamicPropertyNames()
+ \sa property(), metaObject(), dynamicPropertyNames(), QMetaProperty::write()
*/
bool QObject::setProperty(const char *name, const QVariant &value)
{
@@ -4805,7 +4822,7 @@ bool QObject::disconnect(const QMetaObject::Connection &connection)
\note It is not possible to use this overload to diconnect signals
connected to functors or lambda expressions. That is because it is not
- possible to compare them. Instead, use the olverload that take a
+ possible to compare them. Instead, use the overload that takes a
QMetaObject::Connection
\sa connect()
diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h
index 5f61dd984f..64c5b58fd4 100644
--- a/src/corelib/kernel/qobject.h
+++ b/src/corelib/kernel/qobject.h
@@ -110,23 +110,23 @@ class Q_CORE_EXPORT QObject
Q_DECLARE_PRIVATE(QObject)
public:
- Q_INVOKABLE explicit QObject(QObject *parent=0);
+ Q_INVOKABLE explicit QObject(QObject *parent=Q_NULLPTR);
virtual ~QObject();
virtual bool event(QEvent *);
virtual bool eventFilter(QObject *, QEvent *);
#ifdef Q_QDOC
- static QString tr(const char *sourceText, const char *comment = 0, int n = -1);
- static QString trUtf8(const char *sourceText, const char *comment = 0, int n = -1);
+ static QString tr(const char *sourceText, const char *comment = Q_NULLPTR, int n = -1);
+ static QString trUtf8(const char *sourceText, const char *comment = Q_NULLPTR, int n = -1);
virtual const QMetaObject *metaObject() const;
static const QMetaObject staticMetaObject;
#endif
#ifdef QT_NO_TRANSLATION
- static QString tr(const char *sourceText, const char * = 0, int = -1)
+ static QString tr(const char *sourceText, const char * = Q_NULLPTR, int = -1)
{ return QString::fromUtf8(sourceText); }
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED static QString trUtf8(const char *sourceText, const char * = 0, int = -1)
+ QT_DEPRECATED static QString trUtf8(const char *sourceText, const char * = Q_NULLPTR, int = -1)
{ return QString::fromUtf8(sourceText); }
#endif
#endif //QT_NO_TRANSLATION
@@ -228,7 +228,7 @@ public:
Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value),
"Return type of the slot is not compatible with the return type of the signal.");
- const int *types = 0;
+ const int *types = Q_NULLPTR;
if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
@@ -268,11 +268,11 @@ public:
Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value),
"Return type of the slot is not compatible with the return type of the signal.");
- const int *types = 0;
+ const int *types = Q_NULLPTR;
if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
- return connectImpl(sender, reinterpret_cast<void **>(&signal), context, 0,
+ return connectImpl(sender, reinterpret_cast<void **>(&signal), context, Q_NULLPTR,
new QtPrivate::QStaticSlotObject<Func2,
typename QtPrivate::List_Left<typename SignalType::Arguments, SlotType::ArgumentCount>::Value,
typename SignalType::ReturnType>(slot),
@@ -338,11 +338,11 @@ public:
Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro<typename SignalType::Object>::Value,
"No Q_OBJECT in the class with the signal");
- const int *types = 0;
+ const int *types = Q_NULLPTR;
if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
- return connectImpl(sender, reinterpret_cast<void **>(&signal), context, 0,
+ return connectImpl(sender, reinterpret_cast<void **>(&signal), context, Q_NULLPTR,
new QtPrivate::QFunctorSlotObject<Func2, SlotArgumentCount,
typename QtPrivate::List_Left<typename SignalType::Arguments, SlotArgumentCount>::Value,
typename SignalType::ReturnType>(slot),
@@ -354,11 +354,11 @@ public:
const QObject *receiver, const char *member);
static bool disconnect(const QObject *sender, const QMetaMethod &signal,
const QObject *receiver, const QMetaMethod &member);
- inline bool disconnect(const char *signal = 0,
- const QObject *receiver = 0, const char *member = 0) const
+ inline bool disconnect(const char *signal = Q_NULLPTR,
+ const QObject *receiver = Q_NULLPTR, const char *member = Q_NULLPTR) const
{ return disconnect(this, signal, receiver, member); }
- inline bool disconnect(const QObject *receiver, const char *member = 0) const
- { return disconnect(this, 0, receiver, member); }
+ inline bool disconnect(const QObject *receiver, const char *member = Q_NULLPTR) const
+ { return disconnect(this, Q_NULLPTR, receiver, member); }
static bool disconnect(const QMetaObject::Connection &);
#ifdef Q_QDOC
@@ -385,7 +385,7 @@ public:
static inline bool disconnect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
const QObject *receiver, void **zero)
{
- // This is the overload for when one wish to disconnect a signal from any slot. (slot=0)
+ // This is the overload for when one wish to disconnect a signal from any slot. (slot=Q_NULLPTR)
// Since the function template parameter cannot be deduced from '0', we use a
// dummy void ** parameter that must be equal to 0
Q_ASSERT(!zero);
@@ -412,14 +412,14 @@ public:
#endif // QT_NO_USERDATA
Q_SIGNALS:
- void destroyed(QObject * = 0);
+ void destroyed(QObject * = Q_NULLPTR);
void objectNameChanged(const QString &objectName, QPrivateSignal);
public:
inline QObject *parent() const { return d_ptr->parent; }
inline bool inherits(const char *classname) const
- { return const_cast<QObject *>(this)->qt_metacast(classname) != 0; }
+ { return const_cast<QObject *>(this)->qt_metacast(classname) != Q_NULLPTR; }
public Q_SLOTS:
void deleteLater();
@@ -438,7 +438,7 @@ protected:
virtual void disconnectNotify(const QMetaMethod &signal);
protected:
- QObject(QObjectPrivate &dd, QObject *parent = 0);
+ QObject(QObjectPrivate &dd, QObject *parent = Q_NULLPTR);
protected:
QScopedPointer<QObjectData> d_ptr;
@@ -529,16 +529,16 @@ inline T qobject_cast(const QObject *object)
template <class T> inline const char * qobject_interface_iid()
-{ return 0; }
+{ return Q_NULLPTR; }
#ifndef Q_MOC_RUN
# define Q_DECLARE_INTERFACE(IFace, IId) \
template <> inline const char *qobject_interface_iid<IFace *>() \
{ return IId; } \
template <> inline IFace *qobject_cast<IFace *>(QObject *object) \
- { return reinterpret_cast<IFace *>((object ? object->qt_metacast(IId) : 0)); } \
+ { return reinterpret_cast<IFace *>((object ? object->qt_metacast(IId) : Q_NULLPTR)); } \
template <> inline IFace *qobject_cast<IFace *>(const QObject *object) \
- { return reinterpret_cast<IFace *>((object ? const_cast<QObject *>(object)->qt_metacast(IId) : 0)); }
+ { return reinterpret_cast<IFace *>((object ? const_cast<QObject *>(object)->qt_metacast(IId) : Q_NULLPTR)); }
#endif // Q_MOC_RUN
#ifndef QT_NO_DEBUG_STREAM
@@ -584,7 +584,7 @@ QSignalBlocker::QSignalBlocker(QSignalBlocker &&other) Q_DECL_NOTHROW
m_blocked(other.m_blocked),
m_inhibited(other.m_inhibited)
{
- other.m_o = 0;
+ other.m_o = Q_NULLPTR;
}
QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other) Q_DECL_NOTHROW
@@ -598,7 +598,7 @@ QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other) Q_DECL_NOTHROW
m_blocked = other.m_blocked;
m_inhibited = other.m_inhibited;
// disable other:
- other.m_o = 0;
+ other.m_o = Q_NULLPTR;
}
return *this;
}
diff --git a/src/corelib/kernel/qobject_impl.h b/src/corelib/kernel/qobject_impl.h
index 4d9e42ba76..09d52584c4 100644
--- a/src/corelib/kernel/qobject_impl.h
+++ b/src/corelib/kernel/qobject_impl.h
@@ -90,9 +90,9 @@ namespace QtPrivate {
{ enum { Value = QMetaTypeId2<Arg>::Defined && TypesAreDeclaredMetaType<List<Tail...>>::Value }; };
template <typename ArgList, bool Declared = TypesAreDeclaredMetaType<ArgList>::Value > struct ConnectionTypes
- { static const int *types() { return 0; } };
+ { static const int *types() { return Q_NULLPTR; } };
template <> struct ConnectionTypes<List<>, true>
- { static const int *types() { return 0; } };
+ { static const int *types() { return Q_NULLPTR; } };
template <typename... Args> struct ConnectionTypes<List<Args...>, true>
{ static const int *types() { static const int t[sizeof...(Args) + 1] = { (QtPrivate::QMetaTypeIdHelper<Args>::qt_metatype_id())..., 0 }; return t; } };
#endif
@@ -118,10 +118,10 @@ namespace QtPrivate {
inline int ref() Q_DECL_NOTHROW { return m_ref.ref(); }
inline void destroyIfLastRef() Q_DECL_NOTHROW
- { if (!m_ref.deref()) m_impl(Destroy, this, 0, 0, 0); }
+ { if (!m_ref.deref()) m_impl(Destroy, this, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR); }
- inline bool compare(void **a) { bool ret; m_impl(Compare, this, 0, a, &ret); return ret; }
- inline void call(QObject *r, void **a) { m_impl(Call, this, r, a, 0); }
+ inline bool compare(void **a) { bool ret; m_impl(Compare, this, Q_NULLPTR, a, &ret); return ret; }
+ inline void call(QObject *r, void **a) { m_impl(Call, this, r, a, Q_NULLPTR); }
protected:
~QSlotObjectBase() {}
private:
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 1b64103e40..b0690563d7 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -110,7 +110,7 @@ public:
QVector<QObjectUserData *> userData;
#endif
QList<QByteArray> propertyNames;
- QList<QVariant> propertyValues;
+ QVector<QVariant> propertyValues;
QVector<int> runningTimers;
QList<QPointer<QObject> > eventFilters;
QString objectName;
@@ -406,7 +406,7 @@ void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o);
struct QAbstractDynamicMetaObject;
struct Q_CORE_EXPORT QDynamicMetaObjectData
{
- virtual ~QDynamicMetaObjectData() {}
+ virtual ~QDynamicMetaObjectData();
virtual void objectDestroyed(QObject *) { delete this; }
virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) = 0;
@@ -415,6 +415,8 @@ struct Q_CORE_EXPORT QDynamicMetaObjectData
struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData, public QMetaObject
{
+ ~QAbstractDynamicMetaObject();
+
virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) Q_DECL_OVERRIDE { return this; }
virtual int createProperty(const char *, const char *) { return -1; }
virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) Q_DECL_OVERRIDE
diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h
index 6484507a12..b1ed971eba 100644
--- a/src/corelib/kernel/qobjectdefs.h
+++ b/src/corelib/kernel/qobjectdefs.h
@@ -78,7 +78,11 @@ class QString;
#define Q_CLASSINFO(name, value)
#define Q_PLUGIN_METADATA(x)
#define Q_INTERFACES(x)
+#ifdef Q_COMPILER_VARIADIC_MACROS
+#define Q_PROPERTY(...)
+#else
#define Q_PROPERTY(text)
+#endif
#define Q_PRIVATE_PROPERTY(d, text)
#define Q_REVISION(v)
#define Q_OVERRIDE(text)
@@ -254,7 +258,7 @@ class QMetaClassInfo;
class Q_CORE_EXPORT QGenericArgument
{
public:
- inline QGenericArgument(const char *aName = 0, const void *aData = 0)
+ inline QGenericArgument(const char *aName = Q_NULLPTR, const void *aData = Q_NULLPTR)
: _data(aData), _name(aName) {}
inline void *data() const { return const_cast<void *>(_data); }
inline const char *name() const { return _name; }
@@ -267,7 +271,7 @@ private:
class Q_CORE_EXPORT QGenericReturnArgument: public QGenericArgument
{
public:
- inline QGenericReturnArgument(const char *aName = 0, void *aData = 0)
+ inline QGenericReturnArgument(const char *aName = Q_NULLPTR, void *aData = Q_NULLPTR)
: QGenericArgument(aName, aData)
{}
};
@@ -347,7 +351,7 @@ struct Q_CORE_EXPORT QMetaObject
// internal index-based connect
static Connection connect(const QObject *sender, int signal_index,
const QObject *receiver, int method_index,
- int type = 0, int *types = 0);
+ int type = 0, int *types = Q_NULLPTR);
// internal index-based disconnect
static bool disconnect(const QObject *sender, int signal_index,
const QObject *receiver, int method_index);
@@ -364,7 +368,7 @@ struct Q_CORE_EXPORT QMetaObject
static bool invokeMethod(QObject *obj, const char *member,
Qt::ConnectionType,
QGenericReturnArgument ret,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -377,7 +381,7 @@ struct Q_CORE_EXPORT QMetaObject
static inline bool invokeMethod(QObject *obj, const char *member,
QGenericReturnArgument ret,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -394,7 +398,7 @@ struct Q_CORE_EXPORT QMetaObject
static inline bool invokeMethod(QObject *obj, const char *member,
Qt::ConnectionType type,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -410,7 +414,7 @@ struct Q_CORE_EXPORT QMetaObject
}
static inline bool invokeMethod(QObject *obj, const char *member,
- QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -425,7 +429,7 @@ struct Q_CORE_EXPORT QMetaObject
val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
- QObject *newInstance(QGenericArgument val0 = QGenericArgument(0),
+ QObject *newInstance(QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -482,11 +486,11 @@ public:
operator bool() const;
#else
typedef void *Connection::*RestrictedBool;
- operator RestrictedBool() const { return d_ptr && isConnected_helper() ? &Connection::d_ptr : 0; }
+ operator RestrictedBool() const { return d_ptr && isConnected_helper() ? &Connection::d_ptr : Q_NULLPTR; }
#endif
#ifdef Q_COMPILER_RVALUE_REFS
- inline Connection(Connection &&o) : d_ptr(o.d_ptr) { o.d_ptr = 0; }
+ inline Connection(Connection &&o) : d_ptr(o.d_ptr) { o.d_ptr = Q_NULLPTR; }
inline Connection &operator=(Connection &&other)
{ qSwap(d_ptr, other.d_ptr); return *this; }
#endif
diff --git a/src/corelib/kernel/qpointer.cpp b/src/corelib/kernel/qpointer.cpp
index 2c872716d1..f237498f4e 100644
--- a/src/corelib/kernel/qpointer.cpp
+++ b/src/corelib/kernel/qpointer.cpp
@@ -128,6 +128,14 @@
*/
/*!
+ \fn void QPointer::swap(QPointer &other)
+ \since 5.6
+
+ Swaps the contents of this QPointer with the contents of \a other.
+ This operation is very fast and never fails.
+*/
+
+/*!
\fn QPointer<T> & QPointer::operator=(T* p)
Assignment operator. This guarded pointer will now point to the
diff --git a/src/corelib/kernel/qpointer.h b/src/corelib/kernel/qpointer.h
index af7c11e4d7..52bd368301 100644
--- a/src/corelib/kernel/qpointer.h
+++ b/src/corelib/kernel/qpointer.h
@@ -35,6 +35,7 @@
#define QPOINTER_H
#include <QtCore/qsharedpointer.h>
+#include <QtCore/qtypeinfo.h>
#ifndef QT_NO_QOBJECT
@@ -45,6 +46,8 @@ class QVariant;
template <class T>
class QPointer
{
+ Q_STATIC_ASSERT_X(!QtPrivate::is_pointer<T>::value, "QPointer's template type must not be a pointer type");
+
template<typename U>
struct TypeSelector
{
@@ -61,7 +64,14 @@ public:
inline QPointer() { }
inline QPointer(T *p) : wp(p, true) { }
// compiler-generated copy/move ctor/assignment operators are fine!
- inline ~QPointer() { }
+ // compiler-generated dtor is fine!
+
+#ifdef Q_QDOC
+ // Stop qdoc from complaining about missing function
+ ~QPointer();
+#endif
+
+ inline void swap(QPointer &other) { wp.swap(other.wp); }
inline QPointer<T> &operator=(T* p)
{ wp.assign(static_cast<QObjectType*>(p)); return *this; }
diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp
index cef0ef0f7d..267cf95814 100644
--- a/src/corelib/kernel/qsharedmemory.cpp
+++ b/src/corelib/kernel/qsharedmemory.cpp
@@ -127,8 +127,8 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key,
specified. Interoperation with non-Qt applications is achieved by first creating
a default shared memory with QSharedMemory() and then setting a native key with
setNativeKey(). When using native keys, shared memory is not protected against
- multiple accesses on it (e.g. unable to lock()) and a user-defined mechanism
- should be used to achieve a such protection.
+ multiple accesses on it (for example, unable to lock()) and a user-defined mechanism
+ should be used to achieve such protection.
*/
/*!
diff --git a/src/corelib/kernel/qsharedmemory.h b/src/corelib/kernel/qsharedmemory.h
index c192910dc7..67558e3348 100644
--- a/src/corelib/kernel/qsharedmemory.h
+++ b/src/corelib/kernel/qsharedmemory.h
@@ -68,8 +68,8 @@ public:
UnknownError
};
- QSharedMemory(QObject *parent = 0);
- QSharedMemory(const QString &key, QObject *parent = 0);
+ QSharedMemory(QObject *parent = Q_NULLPTR);
+ QSharedMemory(const QString &key, QObject *parent = Q_NULLPTR);
~QSharedMemory();
void setKey(const QString &key);
diff --git a/src/corelib/kernel/qsharedmemory_android.cpp b/src/corelib/kernel/qsharedmemory_android.cpp
index cdcd5685e0..12afff5dce 100644
--- a/src/corelib/kernel/qsharedmemory_android.cpp
+++ b/src/corelib/kernel/qsharedmemory_android.cpp
@@ -50,12 +50,12 @@ QSharedMemoryPrivate::QSharedMemoryPrivate()
void QSharedMemoryPrivate::setErrorString(QLatin1String function)
{
Q_UNUSED(function);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
}
key_t QSharedMemoryPrivate::handle()
{
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return 0;
}
@@ -65,7 +65,7 @@ key_t QSharedMemoryPrivate::handle()
int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName)
{
Q_UNUSED(fileName);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return 0;
}
#endif // QT_NO_SHAREDMEMORY && QT_NO_SYSTEMSEMAPHORE
@@ -74,27 +74,27 @@ int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName)
bool QSharedMemoryPrivate::cleanHandle()
{
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return true;
}
bool QSharedMemoryPrivate::create(int size)
{
Q_UNUSED(size);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return false;
}
bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
{
Q_UNUSED(mode);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return false;
}
bool QSharedMemoryPrivate::detach()
{
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return false;
}
diff --git a/src/corelib/kernel/qsharedmemory_systemv.cpp b/src/corelib/kernel/qsharedmemory_systemv.cpp
index 29fee12c0b..0d2eea49e9 100644
--- a/src/corelib/kernel/qsharedmemory_systemv.cpp
+++ b/src/corelib/kernel/qsharedmemory_systemv.cpp
@@ -82,7 +82,7 @@ key_t QSharedMemoryPrivate::handle()
return 0;
}
- unix_key = ftok(QFile::encodeName(nativeKey).constData(), 'Q');
+ unix_key = qt_safe_ftok(QFile::encodeName(nativeKey), 'Q');
if (-1 == unix_key) {
errorString = QSharedMemory::tr("%1: ftok failed").arg(QLatin1String("QSharedMemory::handle:"));
error = QSharedMemory::KeyError;
diff --git a/src/corelib/kernel/qsharedmemory_win.cpp b/src/corelib/kernel/qsharedmemory_win.cpp
index 5cc54b1def..f90763d308 100644
--- a/src/corelib/kernel/qsharedmemory_win.cpp
+++ b/src/corelib/kernel/qsharedmemory_win.cpp
@@ -58,7 +58,7 @@ void QSharedMemoryPrivate::setErrorString(QLatin1String function)
errorString = QSharedMemory::tr("%1: already exists").arg(function);
break;
case ERROR_FILE_NOT_FOUND:
-#ifdef Q_OS_WINCE
+#if defined(Q_OS_WINCE) || (defined(Q_OS_WINRT) && _MSC_VER < 1900)
// This happens on CE only if no file is present as CreateFileMappingW
// bails out with this error code
case ERROR_INVALID_PARAMETER:
@@ -101,7 +101,11 @@ HANDLE QSharedMemoryPrivate::handle()
Q_UNIMPLEMENTED();
hand = 0;
#elif defined(Q_OS_WINRT)
+#if _MSC_VER >= 1900
+ hand = OpenFileMappingFromApp(FILE_MAP_ALL_ACCESS, FALSE, reinterpret_cast<PCWSTR>(nativeKey.utf16()));
+#else
hand = CreateFileMappingFromApp(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, (PCWSTR)nativeKey.utf16());
+#endif
#elif defined(Q_OS_WINCE)
// This works for opening a mapping too, but always opens it with read/write access in
// attach as it seems.
diff --git a/src/corelib/kernel/qsignalmapper.h b/src/corelib/kernel/qsignalmapper.h
index df2a0a52ea..7aaef6affc 100644
--- a/src/corelib/kernel/qsignalmapper.h
+++ b/src/corelib/kernel/qsignalmapper.h
@@ -45,7 +45,7 @@ class Q_CORE_EXPORT QSignalMapper : public QObject
Q_OBJECT
Q_DECLARE_PRIVATE(QSignalMapper)
public:
- explicit QSignalMapper(QObject *parent = 0);
+ explicit QSignalMapper(QObject *parent = Q_NULLPTR);
~QSignalMapper();
void setMapping(QObject *sender, int id);
diff --git a/src/corelib/kernel/qsocketnotifier.h b/src/corelib/kernel/qsocketnotifier.h
index 4bafbfa69f..8a7af6ebbc 100644
--- a/src/corelib/kernel/qsocketnotifier.h
+++ b/src/corelib/kernel/qsocketnotifier.h
@@ -47,7 +47,7 @@ class Q_CORE_EXPORT QSocketNotifier : public QObject
public:
enum Type { Read, Write, Exception };
- QSocketNotifier(qintptr socket, Type, QObject *parent = 0);
+ QSocketNotifier(qintptr socket, Type, QObject *parent = Q_NULLPTR);
~QSocketNotifier();
qintptr socket() const;
diff --git a/src/corelib/kernel/qsystemerror.cpp b/src/corelib/kernel/qsystemerror.cpp
index 19d84c2b3e..e333104add 100644
--- a/src/corelib/kernel/qsystemerror.cpp
+++ b/src/corelib/kernel/qsystemerror.cpp
@@ -145,7 +145,7 @@ static QString standardLibraryErrorString(int errorCode)
return ret.trimmed();
}
-QString QSystemError::toString()
+QString QSystemError::toString() const
{
switch(errorScope) {
case NativeError:
diff --git a/src/corelib/kernel/qsystemerror_p.h b/src/corelib/kernel/qsystemerror_p.h
index e7efb9bbf3..29e9e440e4 100644
--- a/src/corelib/kernel/qsystemerror_p.h
+++ b/src/corelib/kernel/qsystemerror_p.h
@@ -62,9 +62,9 @@ public:
inline QSystemError(int error, ErrorScope scope);
inline QSystemError();
- QString toString();
- inline ErrorScope scope();
- inline int error();
+ QString toString() const;
+ inline ErrorScope scope() const;
+ inline int error() const;
//data members
int errorCode;
@@ -83,12 +83,12 @@ QSystemError::QSystemError()
}
-QSystemError::ErrorScope QSystemError::scope()
+QSystemError::ErrorScope QSystemError::scope() const
{
return errorScope;
}
-int QSystemError::error()
+int QSystemError::error() const
{
return errorCode;
}
diff --git a/src/corelib/kernel/qsystemsemaphore_android.cpp b/src/corelib/kernel/qsystemsemaphore_android.cpp
index f501779db9..536b09bb41 100644
--- a/src/corelib/kernel/qsystemsemaphore_android.cpp
+++ b/src/corelib/kernel/qsystemsemaphore_android.cpp
@@ -49,25 +49,25 @@ QSystemSemaphorePrivate::QSystemSemaphorePrivate() :
void QSystemSemaphorePrivate::setErrorString(const QString &function)
{
Q_UNUSED(function);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
}
key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
{
Q_UNUSED(mode);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return -1;
}
void QSystemSemaphorePrivate::cleanHandle()
{
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
}
bool QSystemSemaphorePrivate::modifySemaphore(int count)
{
Q_UNUSED(count);
- qWarning() << Q_FUNC_INFO << "Not yet implemented on Android";
+ Q_UNIMPLEMENTED();
return false;
}
diff --git a/src/corelib/kernel/qsystemsemaphore_systemv.cpp b/src/corelib/kernel/qsystemsemaphore_systemv.cpp
index 32a4bdef51..490de5f9ee 100644
--- a/src/corelib/kernel/qsystemsemaphore_systemv.cpp
+++ b/src/corelib/kernel/qsystemsemaphore_systemv.cpp
@@ -85,7 +85,7 @@ key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
createdFile = (1 == built);
// Get the unix key for the created file
- unix_key = ftok(QFile::encodeName(fileName).constData(), 'Q');
+ unix_key = qt_safe_ftok(QFile::encodeName(fileName), 'Q');
if (-1 == unix_key) {
errorString = QCoreApplication::tr("%1: ftok failed", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
error = QSystemSemaphore::KeyError;
diff --git a/src/corelib/kernel/qsystemsemaphore_win.cpp b/src/corelib/kernel/qsystemsemaphore_win.cpp
index ca55025c2a..89b8a87f2a 100644
--- a/src/corelib/kernel/qsystemsemaphore_win.cpp
+++ b/src/corelib/kernel/qsystemsemaphore_win.cpp
@@ -115,7 +115,7 @@ bool QSystemSemaphorePrivate::modifySemaphore(int count)
return false;
}
} else {
-#if defined(Q_OS_WINRT)
+#if !defined(Q_OS_WINCE)
if (WAIT_OBJECT_0 != WaitForSingleObjectEx(semaphore, INFINITE, FALSE)) {
#else
if (WAIT_OBJECT_0 != WaitForSingleObject(semaphore, INFINITE)) {
diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp
index b9109a96aa..af9a1be6ab 100644
--- a/src/corelib/kernel/qtimer.cpp
+++ b/src/corelib/kernel/qtimer.cpp
@@ -278,15 +278,10 @@ QSingleShotTimer::QSingleShotTimer(int msec, Qt::TimerType timerType, const QObj
{
timerId = startTimer(msec, timerType);
if (r && thread() != r->thread()) {
- // We need the invocation to happen in the receiver object's thread.
- // So, move QSingleShotTimer to the correct thread. Before that occurs, we
- // shall remove the parent from the object.
+ // Avoid leaking the QSingleShotTimer instance in case the application exits before the timer fires
+ connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &QObject::deleteLater);
setParent(0);
moveToThread(r->thread());
-
- // Given we're also parentless now, we should take defence against leaks
- // in case the application quits before we expire.
- connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &QObject::deleteLater);
}
}
diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h
index 163ef75291..889f5d7f70 100644
--- a/src/corelib/kernel/qtimer.h
+++ b/src/corelib/kernel/qtimer.h
@@ -53,7 +53,7 @@ class Q_CORE_EXPORT QTimer : public QObject
Q_PROPERTY(Qt::TimerType timerType READ timerType WRITE setTimerType)
Q_PROPERTY(bool active READ isActive)
public:
- explicit QTimer(QObject *parent = 0);
+ explicit QTimer(QObject *parent = Q_NULLPTR);
~QTimer();
inline bool isActive() const { return id >= 0; }
@@ -102,12 +102,16 @@ public:
}
// singleShot to a functor or function pointer (without context)
template <typename Func1>
- static inline void singleShot(int msec, Func1 slot)
+ static inline typename QtPrivate::QEnableIf<!QtPrivate::FunctionPointer<Func1>::IsPointerToMemberFunction &&
+ !QtPrivate::is_same<const char*, Func1>::value, void>::Type
+ singleShot(int msec, Func1 slot)
{
singleShot(msec, msec >= 2000 ? Qt::CoarseTimer : Qt::PreciseTimer, Q_NULLPTR, slot);
}
template <typename Func1>
- static inline void singleShot(int msec, Qt::TimerType timerType, Func1 slot)
+ static inline typename QtPrivate::QEnableIf<!QtPrivate::FunctionPointer<Func1>::IsPointerToMemberFunction &&
+ !QtPrivate::is_same<const char*, Func1>::value, void>::Type
+ singleShot(int msec, Qt::TimerType timerType, Func1 slot)
{
singleShot(msec, timerType, Q_NULLPTR, slot);
}
diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp
index 360c5873d4..794a4aaa0c 100644
--- a/src/corelib/kernel/qtranslator.cpp
+++ b/src/corelib/kernel/qtranslator.cpp
@@ -46,7 +46,6 @@
#include "qfile.h"
#include "qmap.h"
#include "qalgorithms.h"
-#include "qhash.h"
#include "qtranslator_p.h"
#include "qlocale.h"
#include "qendian.h"
diff --git a/src/corelib/kernel/qtranslator.h b/src/corelib/kernel/qtranslator.h
index 1552bbde35..78f714c5c6 100644
--- a/src/corelib/kernel/qtranslator.h
+++ b/src/corelib/kernel/qtranslator.h
@@ -49,11 +49,11 @@ class Q_CORE_EXPORT QTranslator : public QObject
{
Q_OBJECT
public:
- explicit QTranslator(QObject *parent = 0);
+ explicit QTranslator(QObject *parent = Q_NULLPTR);
~QTranslator();
virtual QString translate(const char *context, const char *sourceText,
- const char *disambiguation = 0, int n = -1) const;
+ const char *disambiguation = Q_NULLPTR, int n = -1) const;
virtual bool isEmpty() const;
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index 811483d74f..9298093f44 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -413,7 +413,7 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
QString *str = static_cast<QString *>(result);
switch (d->type) {
case QVariant::Char:
- *str = QString(*v_cast<QChar>(d));
+ *str = *v_cast<QChar>(d);
break;
case QMetaType::Char:
case QMetaType::SChar:
@@ -3451,7 +3451,7 @@ static int numericCompare(const QVariant::Private *d1, const QVariant::Private *
Q_ASSERT(ok);
qreal r2 = qConvertToRealNumber(d2, &ok);
Q_ASSERT(ok);
- if (qFuzzyCompare(r1, r2))
+ if (r1 == r2 || qFuzzyCompare(r1, r2))
return 0;
return r1 < r2 ? -1 : 1;
}
@@ -3835,7 +3835,11 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
/*!
\internal
*/
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QSequentialIterable::QSequentialIterable(QtMetaTypePrivate::QSequentialIterableImpl impl)
+#else
+QSequentialIterable::QSequentialIterable(const QtMetaTypePrivate::QSequentialIterableImpl &impl)
+#endif
: m_impl(impl)
{
}
@@ -4143,7 +4147,11 @@ QSequentialIterable::const_iterator QSequentialIterable::const_iterator::operato
/*!
\internal
*/
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QAssociativeIterable::QAssociativeIterable(QtMetaTypePrivate::QAssociativeIterableImpl impl)
+#else
+QAssociativeIterable::QAssociativeIterable(const QtMetaTypePrivate::QAssociativeIterableImpl &impl)
+#endif
: m_impl(impl)
{
}
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index 58dfc3aab0..bed0e193db 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -278,14 +278,14 @@ class Q_CORE_EXPORT QVariant
void detach();
inline bool isDetached() const;
- int toInt(bool *ok = 0) const;
- uint toUInt(bool *ok = 0) const;
- qlonglong toLongLong(bool *ok = 0) const;
- qulonglong toULongLong(bool *ok = 0) const;
+ int toInt(bool *ok = Q_NULLPTR) const;
+ uint toUInt(bool *ok = Q_NULLPTR) const;
+ qlonglong toLongLong(bool *ok = Q_NULLPTR) const;
+ qulonglong toULongLong(bool *ok = Q_NULLPTR) const;
bool toBool() const;
- double toDouble(bool *ok = 0) const;
- float toFloat(bool *ok = 0) const;
- qreal toReal(bool *ok = 0) const;
+ double toDouble(bool *ok = Q_NULLPTR) const;
+ float toFloat(bool *ok = Q_NULLPTR) const;
+ qreal toReal(bool *ok = Q_NULLPTR) const;
QByteArray toByteArray() const;
QBitArray toBitArray() const;
QString toString() const;
@@ -364,7 +364,7 @@ class Q_CORE_EXPORT QVariant
struct Private
{
inline Private() Q_DECL_NOTHROW : type(Invalid), is_shared(false), is_null(true)
- { data.ptr = 0; }
+ { data.ptr = Q_NULLPTR; }
// Internal constructor for initialized variants.
explicit inline Private(uint variantType) Q_DECL_NOTHROW
@@ -607,7 +607,11 @@ public:
friend struct const_iterator;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
explicit QSequentialIterable(QtMetaTypePrivate::QSequentialIterableImpl impl);
+#else
+ explicit QSequentialIterable(const QtMetaTypePrivate::QSequentialIterableImpl &impl);
+#endif
const_iterator begin() const;
const_iterator end() const;
@@ -660,7 +664,11 @@ public:
friend struct const_iterator;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
explicit QAssociativeIterable(QtMetaTypePrivate::QAssociativeIterableImpl impl);
+#else
+ explicit QAssociativeIterable(const QtMetaTypePrivate::QAssociativeIterableImpl &impl);
+#endif
const_iterator begin() const;
const_iterator end() const;
@@ -742,7 +750,7 @@ namespace QtPrivate {
static QVariantList invoke(const QVariant &v)
{
const int typeId = v.userType();
- if (QtMetaTypePrivate::isBuiltinSequentialType(typeId) || QMetaType::hasRegisteredConverterFunction(typeId, qMetaTypeId<QtMetaTypePrivate::QSequentialIterableImpl>())) {
+ if (typeId == qMetaTypeId<QStringList>() || typeId == qMetaTypeId<QByteArrayList>() || QMetaType::hasRegisteredConverterFunction(typeId, qMetaTypeId<QtMetaTypePrivate::QSequentialIterableImpl>())) {
QSequentialIterable iter = QVariantValueHelperInterface<QSequentialIterable>::invoke(v);
QVariantList l;
l.reserve(iter.size());
@@ -759,12 +767,12 @@ namespace QtPrivate {
static QVariantHash invoke(const QVariant &v)
{
const int typeId = v.userType();
- if (QtMetaTypePrivate::isBuiltinAssociativeType(typeId) || QMetaType::hasRegisteredConverterFunction(typeId, qMetaTypeId<QtMetaTypePrivate::QAssociativeIterableImpl>())) {
+ if (typeId == qMetaTypeId<QVariantMap>() || QMetaType::hasRegisteredConverterFunction(typeId, qMetaTypeId<QtMetaTypePrivate::QAssociativeIterableImpl>())) {
QAssociativeIterable iter = QVariantValueHelperInterface<QAssociativeIterable>::invoke(v);
QVariantHash l;
l.reserve(iter.size());
for (QAssociativeIterable::const_iterator it = iter.begin(), end = iter.end(); it != end; ++it)
- l.insert(it.key().toString(), it.value());
+ l.insertMulti(it.key().toString(), it.value());
return l;
}
return QVariantValueHelper<QVariantHash>::invoke(v);
@@ -776,11 +784,11 @@ namespace QtPrivate {
static QVariantMap invoke(const QVariant &v)
{
const int typeId = v.userType();
- if (QtMetaTypePrivate::isBuiltinAssociativeType(typeId) || QMetaType::hasRegisteredConverterFunction(typeId, qMetaTypeId<QtMetaTypePrivate::QAssociativeIterableImpl>())) {
+ if (typeId == qMetaTypeId<QVariantHash>() || QMetaType::hasRegisteredConverterFunction(typeId, qMetaTypeId<QtMetaTypePrivate::QAssociativeIterableImpl>())) {
QAssociativeIterable iter = QVariantValueHelperInterface<QAssociativeIterable>::invoke(v);
QVariantMap l;
for (QAssociativeIterable::const_iterator it = iter.begin(), end = iter.end(); it != end; ++it)
- l.insert(it.key().toString(), it.value());
+ l.insertMulti(it.key().toString(), it.value());
return l;
}
return QVariantValueHelper<QVariantMap>::invoke(v);
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h
index 3b30b1286d..337e1406ec 100644
--- a/src/corelib/kernel/qvariant_p.h
+++ b/src/corelib/kernel/qvariant_p.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2016 Intel Corporation.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -58,7 +59,8 @@ template<typename T>
struct QVariantIntegrator
{
static const bool CanUseInternalSpace = sizeof(T) <= sizeof(QVariant::Private::Data)
- && ((!QTypeInfo<T>::isStatic) || Q_IS_ENUM(T));
+ && ((QTypeInfoQuery<T>::isRelocatable) || Q_IS_ENUM(T));
+ typedef QtPrivate::integral_constant<bool, CanUseInternalSpace> CanUseInternalSpace_t;
};
Q_STATIC_ASSERT(QVariantIntegrator<double>::CanUseInternalSpace);
Q_STATIC_ASSERT(QVariantIntegrator<long int>::CanUseInternalSpace);
@@ -109,31 +111,49 @@ private:
T m_t;
};
-// constructs a new variant if copy is 0, otherwise copy-constructs
template <class T>
-inline void v_construct(QVariant::Private *x, const void *copy, T * = 0)
+inline void v_construct_helper(QVariant::Private *x, const T &t, QtPrivate::true_type)
{
- if (!QVariantIntegrator<T>::CanUseInternalSpace) {
- x->data.shared = copy ? new QVariantPrivateSharedEx<T>(*static_cast<const T *>(copy))
- : new QVariantPrivateSharedEx<T>;
- x->is_shared = true;
- } else {
- if (copy)
- new (&x->data.ptr) T(*static_cast<const T *>(copy));
- else
- new (&x->data.ptr) T;
- }
+ new (&x->data) T(t);
+ x->is_shared = false;
+}
+
+template <class T>
+inline void v_construct_helper(QVariant::Private *x, const T &t, QtPrivate::false_type)
+{
+ x->data.shared = new QVariantPrivateSharedEx<T>(t);
+ x->is_shared = true;
+}
+
+template <class T>
+inline void v_construct_helper(QVariant::Private *x, QtPrivate::true_type)
+{
+ new (&x->data) T();
+ x->is_shared = false;
+}
+
+template <class T>
+inline void v_construct_helper(QVariant::Private *x, QtPrivate::false_type)
+{
+ x->data.shared = new QVariantPrivateSharedEx<T>;
+ x->is_shared = true;
}
template <class T>
inline void v_construct(QVariant::Private *x, const T &t)
{
- if (!QVariantIntegrator<T>::CanUseInternalSpace) {
- x->data.shared = new QVariantPrivateSharedEx<T>(t);
- x->is_shared = true;
- } else {
- new (&x->data.ptr) T(t);
- }
+ // dispatch
+ v_construct_helper(x, t, typename QVariantIntegrator<T>::CanUseInternalSpace_t());
+}
+
+// constructs a new variant if copy is 0, otherwise copy-constructs
+template <class T>
+inline void v_construct(QVariant::Private *x, const void *copy, T * = 0)
+{
+ if (copy)
+ v_construct<T>(x, *static_cast<const T *>(copy));
+ else
+ v_construct_helper<T>(x, typename QVariantIntegrator<T>::CanUseInternalSpace_t());
}
// deletes the internal structures
@@ -327,39 +347,11 @@ protected:
template<class Filter>
class QVariantConstructor
{
- template<typename T, bool CanUseInternalSpace = QVariantIntegrator<T>::CanUseInternalSpace>
- struct CallConstructor {};
-
- template<typename T>
- struct CallConstructor<T, /* CanUseInternalSpace = */ true>
- {
- CallConstructor(const QVariantConstructor &tc)
- {
- if (tc.m_copy)
- new (&tc.m_x->data.ptr) T(*static_cast<const T*>(tc.m_copy));
- else
- new (&tc.m_x->data.ptr) T();
- tc.m_x->is_shared = false;
- }
- };
-
- template<typename T>
- struct CallConstructor<T, /* CanUseInternalSpace = */ false>
- {
- CallConstructor(const QVariantConstructor &tc)
- {
- Q_STATIC_ASSERT(QTypeInfo<T>::isComplex || sizeof(T) > sizeof(QVariant::Private::Data));
- tc.m_x->data.shared = tc.m_copy ? new QVariantPrivateSharedEx<T>(*static_cast<const T*>(tc.m_copy))
- : new QVariantPrivateSharedEx<T>;
- tc.m_x->is_shared = true;
- }
- };
-
template<typename T, bool IsAcceptedType = Filter::template Acceptor<T>::IsAccepted>
struct FilteredConstructor {
FilteredConstructor(const QVariantConstructor &tc)
{
- CallConstructor<T> tmp(tc);
+ v_construct<T>(tc.m_x, tc.m_copy);
tc.m_x->is_null = !tc.m_copy;
}
};
diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp
index 1ef890c46a..fd11dbc787 100644
--- a/src/corelib/mimetypes/qmimedatabase.cpp
+++ b/src/corelib/mimetypes/qmimedatabase.cpp
@@ -354,9 +354,10 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mo
#ifdef Q_OS_UNIX
// Cannot access statBuf.st_mode from the filesystem engine, so we have to stat again.
+ // In addition we want to follow symlinks.
const QByteArray nativeFilePath = QFile::encodeName(file.fileName());
QT_STATBUF statBuffer;
- if (QT_LSTAT(nativeFilePath.constData(), &statBuffer) == 0) {
+ if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) {
if (S_ISCHR(statBuffer.st_mode))
return d->mimeTypeForName(QLatin1String("inode/chardevice"));
if (S_ISBLK(statBuffer.st_mode))
@@ -435,6 +436,7 @@ QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) co
QStringList matches = d->mimeTypeForFileName(fileName);
QList<QMimeType> mimes;
matches.sort(); // Make it deterministic
+ mimes.reserve(matches.count());
foreach (const QString &mime, matches)
mimes.append(d->mimeTypeForName(mime));
return mimes;
diff --git a/src/corelib/mimetypes/qmimedatabase_p.h b/src/corelib/mimetypes/qmimedatabase_p.h
index aa86f607c6..1ac7264a9e 100644
--- a/src/corelib/mimetypes/qmimedatabase_p.h
+++ b/src/corelib/mimetypes/qmimedatabase_p.h
@@ -53,7 +53,6 @@
#include "qmimetype_p.h"
#include "qmimeglobpattern_p.h"
-#include <QtCore/qhash.h>
#include <QtCore/qmutex.h>
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp
index d26bfd0848..917c29b8d6 100644
--- a/src/corelib/mimetypes/qmimeprovider.cpp
+++ b/src/corelib/mimetypes/qmimeprovider.cpp
@@ -541,6 +541,7 @@ QList<QMimeType> QMimeBinaryProvider::allMimeTypes()
{
QList<QMimeType> result;
loadMimeTypeList();
+ result.reserve(m_mimetypeNames.count());
for (QSet<QString>::const_iterator it = m_mimetypeNames.constBegin();
it != m_mimetypeNames.constEnd(); ++it)
@@ -567,9 +568,9 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
mimeFiles = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QString::fromLatin1("mime/") + file); // pre-1.3
}
if (mimeFiles.isEmpty()) {
- qWarning() << "No file found for" << file << ", even though update-mime-info said it would exist.";
- qWarning() << "Either it was just removed, or the directory doesn't have executable permission...";
- qWarning() << QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime"), QStandardPaths::LocateDirectory);
+ qWarning() << "No file found for" << file << ", even though update-mime-info said it would exist.\n"
+ "Either it was just removed, or the directory doesn't have executable permission..."
+ << QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime"), QStandardPaths::LocateDirectory);
return;
}
@@ -577,11 +578,8 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
QString mainPattern;
const QString preferredLanguage = QLocale::system().name();
- QListIterator<QString> mimeFilesIter(mimeFiles);
- mimeFilesIter.toBack();
- while (mimeFilesIter.hasPrevious()) { // global first, then local.
- const QString fullPath = mimeFilesIter.previous();
- QFile qfile(fullPath);
+ for (QStringList::const_reverse_iterator it = mimeFiles.crbegin(), end = mimeFiles.crend(); it != end; ++it) { // global first, then local.
+ QFile qfile(*it);
if (!qfile.open(QFile::ReadOnly))
continue;
@@ -590,7 +588,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
if (xml.name() != QLatin1String("mime-type")) {
continue;
}
- const QString name = xml.attributes().value(QLatin1String("type")).toString();
+ const QStringRef name = xml.attributes().value(QLatin1String("type"));
if (name.isEmpty())
continue;
if (name != data.name) {
@@ -758,7 +756,7 @@ void QMimeXMLProvider::ensureLoaded()
foreach (const QString &packageDir, packageDirs) {
QDir dir(packageDir);
const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
- //qDebug() << static_cast<const void *>(this) << Q_FUNC_INFO << packageDir << files;
+ //qDebug() << static_cast<const void *>(this) << packageDir << files;
if (!fdoXmlFound)
fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml"));
QStringList::const_iterator endIt(files.constEnd());
diff --git a/src/corelib/mimetypes/qmimetype.cpp b/src/corelib/mimetypes/qmimetype.cpp
index 5398f9358e..e3b01bbb89 100644
--- a/src/corelib/mimetypes/qmimetype.cpp
+++ b/src/corelib/mimetypes/qmimetype.cpp
@@ -44,6 +44,7 @@
#include <QtCore/QDebug>
#include <QtCore/QLocale>
+#include <QtCore/QHashFunctions>
#include <memory>
@@ -182,6 +183,18 @@ bool QMimeType::operator==(const QMimeType &other) const
}
/*!
+ \since 5.6
+ \relates QMimeType
+
+ Returns the hash value for \a key, using
+ \a seed to seed the calculation.
+ */
+uint qHash(const QMimeType &key, uint seed) Q_DECL_NOTHROW
+{
+ return qHash(key.d->name, seed);
+}
+
+/*!
\fn bool QMimeType::operator!=(const QMimeType &other) const;
Returns \c true if \a other does not equal this QMimeType object, otherwise returns \c false.
*/
diff --git a/src/corelib/mimetypes/qmimetype.h b/src/corelib/mimetypes/qmimetype.h
index 13184905b8..6a00541ebc 100644
--- a/src/corelib/mimetypes/qmimetype.h
+++ b/src/corelib/mimetypes/qmimetype.h
@@ -45,8 +45,10 @@
QT_BEGIN_NAMESPACE
class QMimeTypePrivate;
-class QFileinfo;
class QStringList;
+class QMimeType;
+
+Q_CORE_EXPORT uint qHash(const QMimeType &key, uint seed = 0) Q_DECL_NOTHROW;
class Q_CORE_EXPORT QMimeType
{
@@ -55,13 +57,9 @@ public:
QMimeType(const QMimeType &other);
QMimeType &operator=(const QMimeType &other);
#ifdef Q_COMPILER_RVALUE_REFS
- QMimeType &operator=(QMimeType &&other)
- {
- qSwap(d, other.d);
- return *this;
- }
+ QMimeType &operator=(QMimeType &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
- void swap(QMimeType &other)
+ void swap(QMimeType &other) Q_DECL_NOTHROW
{
qSwap(d, other.d);
}
@@ -101,6 +99,7 @@ protected:
friend class QMimeXMLProvider;
friend class QMimeBinaryProvider;
friend class QMimeTypePrivate;
+ friend Q_CORE_EXPORT uint qHash(const QMimeType &key, uint seed) Q_DECL_NOTHROW;
QExplicitlySharedDataPointer<QMimeTypePrivate> d;
};
diff --git a/src/corelib/plugin/plugin.pri b/src/corelib/plugin/plugin.pri
index 338b3d0972..8b64f93467 100644
--- a/src/corelib/plugin/plugin.pri
+++ b/src/corelib/plugin/plugin.pri
@@ -13,6 +13,7 @@ HEADERS += \
plugin/qmachparser_p.h
SOURCES += \
+ plugin/qfactoryinterface.cpp \
plugin/qpluginloader.cpp \
plugin/qfactoryloader.cpp \
plugin/quuid.cpp \
diff --git a/src/corelib/plugin/qfactoryinterface.cpp b/src/corelib/plugin/qfactoryinterface.cpp
new file mode 100644
index 0000000000..0307d58315
--- /dev/null
+++ b/src/corelib/plugin/qfactoryinterface.cpp
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qfactoryinterface.h"
+
+QT_BEGIN_NAMESPACE
+
+QFactoryInterface::~QFactoryInterface()
+{
+ // must be empty until ### Qt 6
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/plugin/qfactoryinterface.h b/src/corelib/plugin/qfactoryinterface.h
index e20864cd31..86a46fabfa 100644
--- a/src/corelib/plugin/qfactoryinterface.h
+++ b/src/corelib/plugin/qfactoryinterface.h
@@ -42,7 +42,7 @@ QT_BEGIN_NAMESPACE
struct Q_CORE_EXPORT QFactoryInterface
{
- virtual ~QFactoryInterface() {}
+ virtual ~QFactoryInterface();
virtual QStringList keys() const = 0;
};
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index cc5aa1394a..dcf1b1a81d 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -58,7 +58,9 @@ namespace {
// avoid duplicate QStringLiteral data:
inline QString iidKeyLiteral() { return QStringLiteral("IID"); }
+#ifdef QT_SHARED
inline QString versionKeyLiteral() { return QStringLiteral("version"); }
+#endif
inline QString metaDataKeyLiteral() { return QStringLiteral("MetaData"); }
inline QString keysKeyLiteral() { return QStringLiteral("Keys"); }
@@ -77,8 +79,6 @@ public:
QString suffix;
Qt::CaseSensitivity cs;
QStringList loadedPaths;
-
- void unloadPath(const QString &path);
};
QFactoryLoaderPrivate::~QFactoryLoaderPrivate()
@@ -162,8 +162,8 @@ void QFactoryLoader::update()
library = QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath());
if (!library->isPlugin()) {
if (qt_debug_component()) {
- qDebug() << library->errorString;
- qDebug() << " not a plugin";
+ qDebug() << library->errorString << endl
+ << " not a plugin";
}
library->release();
continue;
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 920e02ae5a..317c1dcdc1 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -337,12 +337,10 @@ static void installCoverageTool(QLibraryPrivate *libPrivate)
if (qt_debug_component()) {
if (ret >= 0) {
- qDebug("%s: coverage data for %s registered",
- Q_FUNC_INFO,
+ qDebug("coverage data for %s registered",
qPrintable(libPrivate->fileName));
} else {
- qWarning("%s: could not register %s: error %d; coverage data may be incomplete",
- Q_FUNC_INFO,
+ qWarning("could not register %s: error %d; coverage data may be incomplete",
qPrintable(libPrivate->fileName),
ret);
}
diff --git a/src/corelib/plugin/qlibrary.h b/src/corelib/plugin/qlibrary.h
index 16bdf79206..77ad107c6f 100644
--- a/src/corelib/plugin/qlibrary.h
+++ b/src/corelib/plugin/qlibrary.h
@@ -59,10 +59,10 @@ public:
Q_FLAG(LoadHint)
Q_FLAG(LoadHints)
- explicit QLibrary(QObject *parent = 0);
- explicit QLibrary(const QString& fileName, QObject *parent = 0);
- explicit QLibrary(const QString& fileName, int verNum, QObject *parent = 0);
- explicit QLibrary(const QString& fileName, const QString &version, QObject *parent = 0);
+ explicit QLibrary(QObject *parent = Q_NULLPTR);
+ explicit QLibrary(const QString& fileName, QObject *parent = Q_NULLPTR);
+ explicit QLibrary(const QString& fileName, int verNum, QObject *parent = Q_NULLPTR);
+ explicit QLibrary(const QString& fileName, const QString &version, QObject *parent = Q_NULLPTR);
~QLibrary();
QFunctionPointer resolve(const char *symbol);
diff --git a/src/corelib/plugin/qlibrary_win.cpp b/src/corelib/plugin/qlibrary_win.cpp
index c1ce198c84..f5604a24bd 100644
--- a/src/corelib/plugin/qlibrary_win.cpp
+++ b/src/corelib/plugin/qlibrary_win.cpp
@@ -124,7 +124,8 @@ bool QLibraryPrivate::load_sys()
SetErrorMode(oldmode);
#endif
if (!pHnd) {
- errorString = QLibrary::tr("Cannot load library %1: %2").arg(fileName).arg(qt_error_string());
+ errorString = QLibrary::tr("Cannot load library %1: %2").arg(
+ QDir::toNativeSeparators(fileName)).arg(qt_error_string());
} else {
// Query the actual name of the library that was loaded
errorString.clear();
@@ -148,7 +149,8 @@ bool QLibraryPrivate::load_sys()
bool QLibraryPrivate::unload_sys()
{
if (!FreeLibrary(pHnd)) {
- errorString = QLibrary::tr("Cannot unload library %1: %2").arg(fileName).arg(qt_error_string());
+ errorString = QLibrary::tr("Cannot unload library %1: %2").arg(
+ QDir::toNativeSeparators(fileName)).arg(qt_error_string());
return false;
}
errorString.clear();
@@ -164,7 +166,8 @@ QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol)
#endif
if (!address) {
errorString = QLibrary::tr("Cannot resolve symbol \"%1\" in %2: %3").arg(
- QString::fromLatin1(symbol)).arg(fileName).arg(qt_error_string());
+ QString::fromLatin1(symbol)).arg(
+ QDir::toNativeSeparators(fileName)).arg(qt_error_string());
} else {
errorString.clear();
}
diff --git a/src/corelib/plugin/qplugin.qdoc b/src/corelib/plugin/qplugin.qdoc
index 94f5bc8a30..1b394c4174 100644
--- a/src/corelib/plugin/qplugin.qdoc
+++ b/src/corelib/plugin/qplugin.qdoc
@@ -28,7 +28,7 @@
/*!
\headerfile <QtPlugin>
\title Defining Plugins
- \target qtplugin-defining-plugins
+ \keyword qtplugin-defining-plugins
\ingroup plugins
\brief The <QtPlugin> header file defines macros for defining plugins.
@@ -93,9 +93,9 @@
\macro Q_IMPORT_PLUGIN(PluginName)
\relates <QtPlugin>
- This macro imports the plugin named \a PluginName, corresponding
- to the \l{qmake Variable Reference#TARGET}{TARGET} specified in the
- plugin's project file.
+ This macro imports the plugin named \a PluginName, which corresponds
+ with the name of the class that declares metadata for the plugin with
+ Q_PLUGIN_METADATA().
Inserting this macro into your application's source code will allow
you to make use of a static plugin.
diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp
index 988dad1d94..24101be87b 100644
--- a/src/corelib/plugin/qpluginloader.cpp
+++ b/src/corelib/plugin/qpluginloader.cpp
@@ -273,20 +273,33 @@ bool QPluginLoader::isLoaded() const
#if defined(QT_SHARED)
static QString locatePlugin(const QString& fileName)
{
+ const bool isAbsolute = QDir::isAbsolutePath(fileName);
+ if (isAbsolute) {
+ QFileInfo fi(fileName);
+ if (fi.isFile()) {
+ return fi.canonicalFilePath();
+ }
+ }
QStringList prefixes = QLibraryPrivate::prefixes_sys();
prefixes.prepend(QString());
QStringList suffixes = QLibraryPrivate::suffixes_sys(QString());
suffixes.prepend(QString());
// Split up "subdir/filename"
- const int slash = fileName.lastIndexOf('/');
- const QString baseName = fileName.mid(slash + 1);
- const QString basePath = fileName.left(slash + 1); // keep the '/'
+ const int slash = fileName.lastIndexOf(QLatin1Char('/'));
+ const QStringRef baseName = fileName.midRef(slash + 1);
+ const QStringRef basePath = isAbsolute ? QStringRef() : fileName.leftRef(slash + 1); // keep the '/'
const bool debug = qt_debug_component();
- QStringList paths = QCoreApplication::libraryPaths();
- paths.prepend(QStringLiteral("./")); // search in current dir first
+ QStringList paths;
+ if (isAbsolute) {
+ paths.append(fileName.left(slash)); // don't include the '/'
+ } else {
+ paths = QCoreApplication::libraryPaths();
+ paths.prepend(QStringLiteral(".")); // search in current dir first
+ }
+
foreach (const QString &path, paths) {
foreach (const QString &prefix, prefixes) {
foreach (const QString &suffix, suffixes) {
@@ -337,12 +350,7 @@ void QPluginLoader::setFileName(const QString &fileName)
did_load = false;
}
- QFileInfo fi(fileName);
- QString fn;
- if (fi.isAbsolute())
- fn = fi.canonicalFilePath();
- else
- fn = locatePlugin(fileName);
+ const QString fn = locatePlugin(fileName);
d = QLibraryPrivate::findOrCreate(fn, QString(), lh);
if (!fn.isEmpty())
@@ -427,7 +435,9 @@ QObjectList QPluginLoader::staticInstances()
QObjectList instances;
const StaticPluginList *plugins = staticPluginList();
if (plugins) {
- for (int i = 0; i < plugins->size(); ++i)
+ const int numPlugins = plugins->size();
+ instances.reserve(numPlugins);
+ for (int i = 0; i < numPlugins; ++i)
instances += plugins->at(i).instance();
}
return instances;
diff --git a/src/corelib/plugin/qpluginloader.h b/src/corelib/plugin/qpluginloader.h
index b947e6ed9e..0ab25bbb07 100644
--- a/src/corelib/plugin/qpluginloader.h
+++ b/src/corelib/plugin/qpluginloader.h
@@ -50,8 +50,8 @@ class Q_CORE_EXPORT QPluginLoader : public QObject
Q_PROPERTY(QString fileName READ fileName WRITE setFileName)
Q_PROPERTY(QLibrary::LoadHints loadHints READ loadHints WRITE setLoadHints)
public:
- explicit QPluginLoader(QObject *parent = 0);
- explicit QPluginLoader(const QString &fileName, QObject *parent = 0);
+ explicit QPluginLoader(QObject *parent = Q_NULLPTR);
+ explicit QPluginLoader(const QString &fileName, QObject *parent = Q_NULLPTR);
~QPluginLoader();
QObject *instance();
diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp
index 812e2c9fb6..253789b4f0 100644
--- a/src/corelib/plugin/quuid.cpp
+++ b/src/corelib/plugin/quuid.cpp
@@ -857,7 +857,7 @@ bool QUuid::operator>(const QUuid &other) const Q_DECL_NOTHROW
different variant field, the return value is determined by
comparing the two \l{QUuid::Variant} {variants}.
- \sa variant()
+ \sa {QUuid::}{variant()}
*/
/*!
@@ -871,7 +871,7 @@ bool QUuid::operator>(const QUuid &other) const Q_DECL_NOTHROW
different variant field, the return value is determined by
comparing the two \l{QUuid::Variant} {variants}.
- \sa variant()
+ \sa {QUuid::}{variant()}
*/
/*!
@@ -891,7 +891,7 @@ bool QUuid::operator>(const QUuid &other) const Q_DECL_NOTHROW
\sa variant(), version()
*/
-#if defined(Q_OS_WIN32)
+#if defined(Q_OS_WIN)
QT_BEGIN_INCLUDE_NAMESPACE
#include <objbase.h> // For CoCreateGuid
@@ -905,7 +905,7 @@ QUuid QUuid::createUuid()
return result;
}
-#else // !Q_OS_WIN32
+#else // Q_OS_WIN
QT_BEGIN_INCLUDE_NAMESPACE
#include "qdatetime.h"
@@ -963,7 +963,7 @@ QUuid QUuid::createUuid()
{
int *pseed = new int;
static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2);
- qsrand(*pseed = QDateTime::currentDateTime().toTime_t()
+ qsrand(*pseed = QDateTime::currentDateTimeUtc().toTime_t()
+ quintptr(&pseed)
+ serial.fetchAndAddRelaxed(1));
uuidseed.setLocalData(pseed);
@@ -971,7 +971,7 @@ QUuid QUuid::createUuid()
#else
static bool seeded = false;
if (!seeded)
- qsrand(QDateTime::currentDateTime().toTime_t()
+ qsrand(QDateTime::currentDateTimeUtc().toTime_t()
+ quintptr(&seeded));
#endif
@@ -989,7 +989,7 @@ QUuid QUuid::createUuid()
return result;
}
-#endif // !Q_OS_WIN32
+#endif // !Q_OS_WIN
/*!
\fn bool QUuid::operator==(const GUID &guid) const
diff --git a/src/corelib/qtzlib.pro b/src/corelib/qtzlib.pro
new file mode 100644
index 0000000000..744750fbbe
--- /dev/null
+++ b/src/corelib/qtzlib.pro
@@ -0,0 +1,7 @@
+TARGET = QtZlib
+MODULE = zlib
+MAKEFILE = Makefile.qtzlib
+CONFIG += internal_module header_module alien_syncqt
+QT =
+
+load(qt_module)
diff --git a/src/corelib/statemachine/qabstractstate.cpp b/src/corelib/statemachine/qabstractstate.cpp
index 543edb2f98..2c412849e8 100644
--- a/src/corelib/statemachine/qabstractstate.cpp
+++ b/src/corelib/statemachine/qabstractstate.cpp
@@ -85,16 +85,6 @@ QAbstractStatePrivate::QAbstractStatePrivate(StateType type)
{
}
-QAbstractStatePrivate *QAbstractStatePrivate::get(QAbstractState *q)
-{
- return q->d_func();
-}
-
-const QAbstractStatePrivate *QAbstractStatePrivate::get(const QAbstractState *q)
-{
- return q->d_func();
-}
-
QStateMachine *QAbstractStatePrivate::machine() const
{
QObject *par = parent;
@@ -227,7 +217,7 @@ bool QAbstractState::active() const
\fn QAbstractState::activeChanged(bool active)
\since 5.4
- This signal is emitted when the active property is changed.
+ This signal is emitted when the active property is changed with \a active as argument.
\sa QAbstractState::active, entered(), exited()
*/
diff --git a/src/corelib/statemachine/qabstractstate.h b/src/corelib/statemachine/qabstractstate.h
index 592c841c18..3aa4b2fabb 100644
--- a/src/corelib/statemachine/qabstractstate.h
+++ b/src/corelib/statemachine/qabstractstate.h
@@ -63,7 +63,7 @@ Q_SIGNALS:
void activeChanged(bool active);
protected:
- QAbstractState(QState *parent = 0);
+ QAbstractState(QState *parent = Q_NULLPTR);
virtual void onEntry(QEvent *event) = 0;
virtual void onExit(QEvent *event) = 0;
diff --git a/src/corelib/statemachine/qabstractstate_p.h b/src/corelib/statemachine/qabstractstate_p.h
index 087e355b71..1eb3cbd420 100644
--- a/src/corelib/statemachine/qabstractstate_p.h
+++ b/src/corelib/statemachine/qabstractstate_p.h
@@ -46,12 +46,13 @@
//
#include <private/qobject_p.h>
+#include <QtCore/qabstractstate.h>
QT_BEGIN_NAMESPACE
class QStateMachine;
-class QAbstractState;
+class QState;
class QAbstractStatePrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QAbstractState)
@@ -66,8 +67,10 @@ public:
QAbstractStatePrivate(StateType type);
- static QAbstractStatePrivate *get(QAbstractState *q);
- static const QAbstractStatePrivate *get(const QAbstractState *q);
+ static QAbstractStatePrivate *get(QAbstractState *q)
+ { return q->d_func(); }
+ static const QAbstractStatePrivate *get(const QAbstractState *q)
+ { return q->d_func(); }
QStateMachine *machine() const;
diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp
index 81b38ea4c4..56f2a15fdb 100644
--- a/src/corelib/statemachine/qabstracttransition.cpp
+++ b/src/corelib/statemachine/qabstracttransition.cpp
@@ -37,6 +37,7 @@
#include "qabstracttransition_p.h"
#include "qabstractstate.h"
+#include "qhistorystate.h"
#include "qstate.h"
#include "qstatemachine.h"
@@ -133,17 +134,14 @@ QAbstractTransitionPrivate::QAbstractTransitionPrivate()
{
}
-QAbstractTransitionPrivate *QAbstractTransitionPrivate::get(QAbstractTransition *q)
-{
- return q->d_func();
-}
-
QStateMachine *QAbstractTransitionPrivate::machine() const
{
- QState *source = sourceState();
- if (!source)
- return 0;
- return source->machine();
+ if (QState *source = sourceState())
+ return source->machine();
+ Q_Q(const QAbstractTransition);
+ if (QHistoryState *parent = qobject_cast<QHistoryState *>(q->parent()))
+ return parent->machine();
+ return 0;
}
bool QAbstractTransitionPrivate::callEventTest(QEvent *e)
@@ -254,26 +252,55 @@ QList<QAbstractState*> QAbstractTransition::targetStates() const
void QAbstractTransition::setTargetStates(const QList<QAbstractState*> &targets)
{
Q_D(QAbstractTransition);
- QList<QPointer<QAbstractState> > copy(d->targetStates);
- bool sameList = true;
+
+ // Verify if any of the new target states is a null-pointer:
for (int i = 0; i < targets.size(); ++i) {
- QAbstractState *target = targets.at(i);
- if (!target) {
+ if (targets.at(i) == Q_NULLPTR) {
qWarning("QAbstractTransition::setTargetStates: target state(s) cannot be null");
return;
+ }
+ }
+
+ // First clean out any target states that got destroyed, but for which we still have a QPointer
+ // around.
+ for (int i = 0; i < d->targetStates.size(); ) {
+ if (d->targetStates.at(i).isNull()) {
+ d->targetStates.remove(i);
} else {
- sameList &= copy.removeOne(target);
+ ++i;
+ }
+ }
+
+ // Easy check: if both lists are empty, we're done.
+ if (targets.isEmpty() && d->targetStates.isEmpty())
+ return;
+
+ bool sameList = true;
+
+ if (targets.size() != d->targetStates.size()) {
+ // If the sizes of the lists are different, we don't need to be smart: they're different. So
+ // we can just set the new list as the targetStates.
+ sameList = false;
+ } else {
+ QVector<QPointer<QAbstractState> > copy(d->targetStates);
+ for (int i = 0; i < targets.size(); ++i) {
+ sameList &= copy.removeOne(targets.at(i));
+ if (!sameList)
+ break; // ok, we now know the lists are not the same, so stop the loop.
}
+
+ sameList &= copy.isEmpty();
}
- sameList &= copy.isEmpty();
+ if (sameList)
+ return;
- d->targetStates.clear();
- for (int i = 0; i < targets.size(); ++i)
- d->targetStates.append(targets.at(i));
+ d->targetStates.resize(targets.size());
+ for (int i = 0; i < targets.size(); ++i) {
+ d->targetStates[i] = targets.at(i);
+ }
- if (!sameList)
- emit targetStatesChanged(QPrivateSignal());
+ emit targetStatesChanged(QPrivateSignal());
}
/*!
diff --git a/src/corelib/statemachine/qabstracttransition.h b/src/corelib/statemachine/qabstracttransition.h
index 475a4dedfc..4398c41ca2 100644
--- a/src/corelib/statemachine/qabstracttransition.h
+++ b/src/corelib/statemachine/qabstracttransition.h
@@ -67,7 +67,7 @@ public:
};
Q_ENUM(TransitionType)
- QAbstractTransition(QState *sourceState = 0);
+ QAbstractTransition(QState *sourceState = Q_NULLPTR);
virtual ~QAbstractTransition();
QState *sourceState() const;
diff --git a/src/corelib/statemachine/qabstracttransition_p.h b/src/corelib/statemachine/qabstracttransition_p.h
index 4b0644acd9..ed726fa6ef 100644
--- a/src/corelib/statemachine/qabstracttransition_p.h
+++ b/src/corelib/statemachine/qabstracttransition_p.h
@@ -48,6 +48,7 @@
#include <private/qobject_p.h>
#include <QtCore/qlist.h>
+#include <QtCore/qvector.h>
#include <QtCore/qsharedpointer.h>
QT_BEGIN_NAMESPACE
@@ -64,7 +65,8 @@ class Q_CORE_EXPORT QAbstractTransitionPrivate
public:
QAbstractTransitionPrivate();
- static QAbstractTransitionPrivate *get(QAbstractTransition *q);
+ static QAbstractTransitionPrivate *get(QAbstractTransition *q)
+ { return q->d_func(); }
bool callEventTest(QEvent *e);
virtual void callOnTransition(QEvent *e);
@@ -72,7 +74,7 @@ public:
QStateMachine *machine() const;
void emitTriggered();
- QList<QPointer<QAbstractState> > targetStates;
+ QVector<QPointer<QAbstractState> > targetStates;
QAbstractTransition::TransitionType transitionType;
#ifndef QT_NO_ANIMATION
diff --git a/src/corelib/statemachine/qeventtransition.cpp b/src/corelib/statemachine/qeventtransition.cpp
index 096d667bc3..de6858ae42 100644
--- a/src/corelib/statemachine/qeventtransition.cpp
+++ b/src/corelib/statemachine/qeventtransition.cpp
@@ -102,9 +102,8 @@ QEventTransitionPrivate::QEventTransitionPrivate()
registered = false;
}
-QEventTransitionPrivate *QEventTransitionPrivate::get(QEventTransition *q)
+QEventTransitionPrivate::~QEventTransitionPrivate()
{
- return q->d_func();
}
void QEventTransitionPrivate::unregister()
diff --git a/src/corelib/statemachine/qeventtransition.h b/src/corelib/statemachine/qeventtransition.h
index 6909e855b1..5ec3b7bb26 100644
--- a/src/corelib/statemachine/qeventtransition.h
+++ b/src/corelib/statemachine/qeventtransition.h
@@ -49,8 +49,8 @@ class Q_CORE_EXPORT QEventTransition : public QAbstractTransition
Q_PROPERTY(QObject* eventSource READ eventSource WRITE setEventSource)
Q_PROPERTY(QEvent::Type eventType READ eventType WRITE setEventType)
public:
- QEventTransition(QState *sourceState = 0);
- QEventTransition(QObject *object, QEvent::Type type, QState *sourceState = 0);
+ QEventTransition(QState *sourceState = Q_NULLPTR);
+ QEventTransition(QObject *object, QEvent::Type type, QState *sourceState = Q_NULLPTR);
~QEventTransition();
QObject *eventSource() const;
diff --git a/src/corelib/statemachine/qeventtransition_p.h b/src/corelib/statemachine/qeventtransition_p.h
index 59b0fcb30f..3f6c9475ea 100644
--- a/src/corelib/statemachine/qeventtransition_p.h
+++ b/src/corelib/statemachine/qeventtransition_p.h
@@ -55,8 +55,10 @@ class Q_CORE_EXPORT QEventTransitionPrivate : public QAbstractTransitionPrivate
Q_DECLARE_PUBLIC(QEventTransition)
public:
QEventTransitionPrivate();
+ ~QEventTransitionPrivate();
- static QEventTransitionPrivate *get(QEventTransition *q);
+ static QEventTransitionPrivate *get(QEventTransition *q)
+ { return q->d_func(); }
void unregister();
void maybeRegister();
diff --git a/src/corelib/statemachine/qfinalstate.h b/src/corelib/statemachine/qfinalstate.h
index 51c97b1545..2c76e7b6e6 100644
--- a/src/corelib/statemachine/qfinalstate.h
+++ b/src/corelib/statemachine/qfinalstate.h
@@ -46,7 +46,7 @@ class Q_CORE_EXPORT QFinalState : public QAbstractState
{
Q_OBJECT
public:
- QFinalState(QState *parent = 0);
+ QFinalState(QState *parent = Q_NULLPTR);
~QFinalState();
protected:
diff --git a/src/corelib/statemachine/qhistorystate.cpp b/src/corelib/statemachine/qhistorystate.cpp
index e58b0c16fc..8887ce27e5 100644
--- a/src/corelib/statemachine/qhistorystate.cpp
+++ b/src/corelib/statemachine/qhistorystate.cpp
@@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE
A history state is a pseudo-state that represents the child state that the
parent state was in the last time the parent state was exited. A transition
- with a history state as its target is in fact a transition to one of the
+ with a history state as its target is in fact a transition to one or more
other child states of the parent state. QHistoryState is part of \l{The
State Machine Framework}.
@@ -79,11 +79,22 @@ QT_BEGIN_NAMESPACE
s1->addTransition(button, SIGNAL(clicked()), s1h);
\endcode
+ If more than one default state has to be entered, or if the transition to the default state(s)
+ has to be acted upon, the defaultTransition should be set instead. Note that the eventTest()
+ method of that transition will never be called: the selection and execution of the transition is
+ done automatically when entering the history state.
+
By default a history state is shallow, meaning that it won't remember nested
states. This can be configured through the historyType property.
*/
/*!
+ \property QHistoryState::defaultTransition
+
+ \brief the default transition of this history state
+*/
+
+/*!
\property QHistoryState::defaultState
\brief the default state of this history state
@@ -113,14 +124,17 @@ QT_BEGIN_NAMESPACE
*/
QHistoryStatePrivate::QHistoryStatePrivate()
- : QAbstractStatePrivate(HistoryState),
- defaultState(0), historyType(QHistoryState::ShallowHistory)
+ : QAbstractStatePrivate(HistoryState)
+ , defaultTransition(0)
+ , historyType(QHistoryState::ShallowHistory)
{
}
-QHistoryStatePrivate *QHistoryStatePrivate::get(QHistoryState *q)
+DefaultStateTransition::DefaultStateTransition(QHistoryState *source, QAbstractState *target)
+ : QAbstractTransition()
{
- return q->d_func();
+ setParent(source);
+ setTargetState(target);
}
/*!
@@ -149,13 +163,44 @@ QHistoryState::~QHistoryState()
}
/*!
+ Returns this history state's default transition. The default transition is
+ taken when the history state has never been entered before. The target states
+ of the default transition therefore make up the default state.
+
+ \since 5.6
+*/
+QAbstractTransition *QHistoryState::defaultTransition() const
+{
+ Q_D(const QHistoryState);
+ return d->defaultTransition;
+}
+
+/*!
+ Sets this history state's default transition to be the given \a transition.
+ This will set the source state of the \a transition to the history state.
+
+ Note that the eventTest method of the \a transition will never be called.
+
+ \since 5.6
+*/
+void QHistoryState::setDefaultTransition(QAbstractTransition *transition)
+{
+ Q_D(QHistoryState);
+ if (d->defaultTransition != transition) {
+ d->defaultTransition = transition;
+ transition->setParent(this);
+ emit defaultTransitionChanged(QHistoryState::QPrivateSignal());
+ }
+}
+
+/*!
Returns this history state's default state. The default state indicates the
state to transition to if the parent state has never been entered before.
*/
QAbstractState *QHistoryState::defaultState() const
{
Q_D(const QHistoryState);
- return d->defaultState;
+ return d->defaultTransition ? d->defaultTransition->targetState() : Q_NULLPTR;
}
/*!
@@ -173,8 +218,15 @@ void QHistoryState::setDefaultState(QAbstractState *state)
"to this history state's group (%p)", state, parentState());
return;
}
- if (d->defaultState != state) {
- d->defaultState = state;
+ if (!d->defaultTransition
+ || d->defaultTransition->targetStates().size() != 1
+ || d->defaultTransition->targetStates().first() != state) {
+ if (!d->defaultTransition || !qobject_cast<DefaultStateTransition*>(d->defaultTransition)) {
+ d->defaultTransition = new DefaultStateTransition(this, state);
+ emit defaultTransitionChanged(QHistoryState::QPrivateSignal());
+ } else {
+ d->defaultTransition->setTargetState(state);
+ }
emit defaultStateChanged(QHistoryState::QPrivateSignal());
}
}
@@ -242,6 +294,15 @@ bool QHistoryState::event(QEvent *e)
\sa QHistoryState::historyType
*/
+/*!
+ \fn QHistoryState::defaultTransitionChanged()
+ \since 5.6
+
+ This signal is emitted when the defaultTransition property is changed.
+
+ \sa QHistoryState::defaultTransition
+*/
+
QT_END_NAMESPACE
#endif //QT_NO_STATEMACHINE
diff --git a/src/corelib/statemachine/qhistorystate.h b/src/corelib/statemachine/qhistorystate.h
index 549be15ab0..2f2081bf9c 100644
--- a/src/corelib/statemachine/qhistorystate.h
+++ b/src/corelib/statemachine/qhistorystate.h
@@ -41,11 +41,13 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_STATEMACHINE
+class QAbstractTransition;
class QHistoryStatePrivate;
class Q_CORE_EXPORT QHistoryState : public QAbstractState
{
Q_OBJECT
Q_PROPERTY(QAbstractState* defaultState READ defaultState WRITE setDefaultState NOTIFY defaultStateChanged)
+ Q_PROPERTY(QAbstractTransition* defaultTransition READ defaultTransition WRITE setDefaultTransition NOTIFY defaultTransitionChanged)
Q_PROPERTY(HistoryType historyType READ historyType WRITE setHistoryType NOTIFY historyTypeChanged)
public:
enum HistoryType {
@@ -54,10 +56,13 @@ public:
};
Q_ENUM(HistoryType)
- QHistoryState(QState *parent = 0);
- QHistoryState(HistoryType type, QState *parent = 0);
+ QHistoryState(QState *parent = Q_NULLPTR);
+ QHistoryState(HistoryType type, QState *parent = Q_NULLPTR);
~QHistoryState();
+ QAbstractTransition *defaultTransition() const;
+ void setDefaultTransition(QAbstractTransition *transition);
+
QAbstractState *defaultState() const;
void setDefaultState(QAbstractState *state);
@@ -65,6 +70,7 @@ public:
void setHistoryType(HistoryType type);
Q_SIGNALS:
+ void defaultTransitionChanged(QPrivateSignal);
void defaultStateChanged(QPrivateSignal);
void historyTypeChanged(QPrivateSignal);
diff --git a/src/corelib/statemachine/qhistorystate_p.h b/src/corelib/statemachine/qhistorystate_p.h
index b5c353fdff..b0865f7f46 100644
--- a/src/corelib/statemachine/qhistorystate_p.h
+++ b/src/corelib/statemachine/qhistorystate_p.h
@@ -47,11 +47,12 @@
#include "private/qabstractstate_p.h"
+#include <QtCore/qabstracttransition.h>
+#include <QtCore/qhistorystate.h>
#include <QtCore/qlist.h>
QT_BEGIN_NAMESPACE
-class QHistoryState;
class QHistoryStatePrivate : public QAbstractStatePrivate
{
Q_DECLARE_PUBLIC(QHistoryState)
@@ -59,13 +60,31 @@ class QHistoryStatePrivate : public QAbstractStatePrivate
public:
QHistoryStatePrivate();
- static QHistoryStatePrivate *get(QHistoryState *q);
+ static QHistoryStatePrivate *get(QHistoryState *q)
+ { return q->d_func(); }
- QAbstractState *defaultState;
+ QAbstractTransition *defaultTransition;
QHistoryState::HistoryType historyType;
QList<QAbstractState*> configuration;
};
+class DefaultStateTransition: public QAbstractTransition
+{
+ Q_OBJECT
+
+public:
+ DefaultStateTransition(QHistoryState *source, QAbstractState *target);
+
+protected:
+ // It doesn't matter whether this transition matches any event or not. It is always associated
+ // with a QHistoryState, and as soon as the state-machine detects that it enters a history
+ // state, it will handle this transition as a special case. The history state itself is never
+ // entered either: either the stored configuration will be used, or the target(s) of this
+ // transition are used.
+ virtual bool eventTest(QEvent *event) { Q_UNUSED(event); return false; }
+ virtual void onTransition(QEvent *event) { Q_UNUSED(event); }
+};
+
QT_END_NAMESPACE
#endif
diff --git a/src/corelib/statemachine/qsignaltransition.cpp b/src/corelib/statemachine/qsignaltransition.cpp
index 41005fca41..7ec72df77c 100644
--- a/src/corelib/statemachine/qsignaltransition.cpp
+++ b/src/corelib/statemachine/qsignaltransition.cpp
@@ -108,11 +108,6 @@ QSignalTransitionPrivate::QSignalTransitionPrivate()
signalIndex = -1;
}
-QSignalTransitionPrivate *QSignalTransitionPrivate::get(QSignalTransition *q)
-{
- return q->d_func();
-}
-
void QSignalTransitionPrivate::unregister()
{
Q_Q(QSignalTransition);
diff --git a/src/corelib/statemachine/qsignaltransition.h b/src/corelib/statemachine/qsignaltransition.h
index bc56f4e9b7..c388323ec4 100644
--- a/src/corelib/statemachine/qsignaltransition.h
+++ b/src/corelib/statemachine/qsignaltransition.h
@@ -49,9 +49,9 @@ class Q_CORE_EXPORT QSignalTransition : public QAbstractTransition
Q_PROPERTY(QByteArray signal READ signal WRITE setSignal NOTIFY signalChanged)
public:
- QSignalTransition(QState *sourceState = 0);
+ QSignalTransition(QState *sourceState = Q_NULLPTR);
QSignalTransition(const QObject *sender, const char *signal,
- QState *sourceState = 0);
+ QState *sourceState = Q_NULLPTR);
~QSignalTransition();
QObject *senderObject() const;
diff --git a/src/corelib/statemachine/qsignaltransition_p.h b/src/corelib/statemachine/qsignaltransition_p.h
index bed0abd9ff..0bf4b1540b 100644
--- a/src/corelib/statemachine/qsignaltransition_p.h
+++ b/src/corelib/statemachine/qsignaltransition_p.h
@@ -56,7 +56,8 @@ class QSignalTransitionPrivate : public QAbstractTransitionPrivate
public:
QSignalTransitionPrivate();
- static QSignalTransitionPrivate *get(QSignalTransition *q);
+ static QSignalTransitionPrivate *get(QSignalTransition *q)
+ { return q->d_func(); }
void unregister();
void maybeRegister();
diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp
index 6e9fb63554..3b84230cb2 100644
--- a/src/corelib/statemachine/qstate.cpp
+++ b/src/corelib/statemachine/qstate.cpp
@@ -320,7 +320,7 @@ void QState::addTransition(QAbstractTransition *transition)
}
transition->setParent(this);
- const QList<QPointer<QAbstractState> > &targets = QAbstractTransitionPrivate::get(transition)->targetStates;
+ const QVector<QPointer<QAbstractState> > &targets = QAbstractTransitionPrivate::get(transition)->targetStates;
for (int i = 0; i < targets.size(); ++i) {
QAbstractState *t = targets.at(i).data();
if (!t) {
@@ -518,6 +518,14 @@ QState::ChildMode QState::childMode() const
void QState::setChildMode(ChildMode mode)
{
Q_D(QState);
+
+ if (mode == QState::ParallelStates && d->initialState) {
+ qWarning("QState::setChildMode: setting the child-mode of state %p to "
+ "parallel removes the initial state", this);
+ d->initialState = Q_NULLPTR;
+ emit initialStateChanged(QState::QPrivateSignal());
+ }
+
if (d->childMode != mode) {
d->childMode = mode;
emit childModeChanged(QState::QPrivateSignal());
diff --git a/src/corelib/statemachine/qstate.h b/src/corelib/statemachine/qstate.h
index a74c782027..0300a9ef2d 100644
--- a/src/corelib/statemachine/qstate.h
+++ b/src/corelib/statemachine/qstate.h
@@ -66,8 +66,8 @@ public:
};
Q_ENUM(RestorePolicy)
- QState(QState *parent = 0);
- QState(ChildMode childMode, QState *parent = 0);
+ QState(QState *parent = Q_NULLPTR);
+ QState(ChildMode childMode, QState *parent = Q_NULLPTR);
~QState();
QAbstractState *errorState() const;
diff --git a/src/corelib/statemachine/qstate_p.h b/src/corelib/statemachine/qstate_p.h
index 2ce0c13522..3b8dae9499 100644
--- a/src/corelib/statemachine/qstate_p.h
+++ b/src/corelib/statemachine/qstate_p.h
@@ -75,6 +75,7 @@ struct QPropertyAssignment
QVariant value;
bool explicitlySet; // false means the property is being restored to its old value
};
+Q_DECLARE_TYPEINFO(QPropertyAssignment, Q_MOVABLE_TYPE);
#endif // QT_NO_PROPERTIES
@@ -108,7 +109,7 @@ public:
mutable QList<QAbstractTransition*> transitionsList;
#ifndef QT_NO_PROPERTIES
- QList<QPropertyAssignment> propertyAssignments;
+ QVector<QPropertyAssignment> propertyAssignments;
#endif
};
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index ee522218ee..63cf7672cf 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -160,6 +160,8 @@ QT_BEGIN_NAMESPACE
\since 5.4
\brief the running state of this state machine
+
+ \sa start(), stop(), started(), stopped(), runningChanged()
*/
#ifndef QT_NO_ANIMATION
@@ -365,9 +367,9 @@ static QList<QAbstractState *> getEffectiveTargetStates(QAbstractTransition *tra
if (!historyConfiguration.isEmpty()) {
// There is a saved history, so apply that.
targets.unite(historyConfiguration.toSet());
- } else if (QAbstractState *defaultState = historyState->defaultState()) {
- // Qt does not support initial transitions, but uses the default state of the history state for this.
- targets.insert(defaultState);
+ } else if (QAbstractTransition *defaultTransition = historyState->defaultTransition()) {
+ // No saved history, take all default transition targets.
+ targets.unite(defaultTransition->targetStates().toSet());
} else {
// Woops, we found a history state without a default state. That's not valid!
QStateMachinePrivate *m = QStateMachinePrivate::get(historyState->machine());
@@ -383,10 +385,6 @@ static QList<QAbstractState *> getEffectiveTargetStates(QAbstractTransition *tra
return targetsList;
}
-template <class T>
-static uint qHash(const QPointer<T> &p)
-{ return qHash(p.data()); }
-
QStateMachinePrivate::QStateMachinePrivate()
{
isMachine = true;
@@ -408,13 +406,10 @@ QStateMachinePrivate::~QStateMachinePrivate()
{
qDeleteAll(internalEventQueue);
qDeleteAll(externalEventQueue);
-}
-QStateMachinePrivate *QStateMachinePrivate::get(QStateMachine *q)
-{
- if (q)
- return q->d_func();
- return 0;
+ for (QHash<int, DelayedEvent>::const_iterator it = delayedEvents.begin(), eit = delayedEvents.end(); it != eit; ++it) {
+ delete it.value().event;
+ }
}
QState *QStateMachinePrivate::rootState() const
@@ -629,7 +624,7 @@ void QStateMachinePrivate::removeConflictingTransitions(QList<QAbstractTransitio
foreach (QAbstractTransition *t1, enabledTransitions) {
bool t1Preempted = false;
- QSet<QAbstractState*> exitSetT1 = computeExitSet_Unordered(t1, cache);
+ const QSet<QAbstractState*> exitSetT1 = computeExitSet_Unordered(t1, cache);
QList<QAbstractTransition*>::iterator t2It = filteredTransitions.begin();
while (t2It != filteredTransitions.end()) {
QAbstractTransition *t2 = *t2It;
@@ -641,7 +636,7 @@ void QStateMachinePrivate::removeConflictingTransitions(QList<QAbstractTransitio
}
QSet<QAbstractState*> exitSetT2 = computeExitSet_Unordered(t2, cache);
- if (exitSetT1.intersect(exitSetT2).isEmpty()) {
+ if (!exitSetT1.intersects(exitSetT2)) {
// No conflict, no cry. Next patient please.
++t2It;
} else {
@@ -684,7 +679,7 @@ void QStateMachinePrivate::microstep(QEvent *event, const QList<QAbstractTransit
qDebug() << q_func() << ": computed entry set:" << enteredStates;
#endif
- QHash<QAbstractState*, QList<QPropertyAssignment> > assignmentsForEnteredStates =
+ QHash<QAbstractState*, QVector<QPropertyAssignment> > assignmentsForEnteredStates =
computePropertyAssignments(enteredStates, pendingRestorables);
if (!pendingRestorables.isEmpty()) {
// Add "implicit" assignments for restored properties to the first
@@ -795,7 +790,7 @@ QSet<QAbstractState*> QStateMachinePrivate::computeExitSet_Unordered(QAbstractTr
}
void QStateMachinePrivate::exitStates(QEvent *event, const QList<QAbstractState*> &statesToExit_sorted,
- const QHash<QAbstractState*, QList<QPropertyAssignment> > &assignmentsForEnteredStates)
+ const QHash<QAbstractState*, QVector<QPropertyAssignment> > &assignmentsForEnteredStates)
{
for (int i = 0; i < statesToExit_sorted.size(); ++i) {
QAbstractState *s = statesToExit_sorted.at(i);
@@ -943,7 +938,7 @@ QAbstractState *QStateMachinePrivate::getTransitionDomain(QAbstractTransition *t
void QStateMachinePrivate::enterStates(QEvent *event, const QList<QAbstractState*> &exitedStates_sorted,
const QList<QAbstractState*> &statesToEnter_sorted,
const QSet<QAbstractState*> &statesForDefaultEntry,
- QHash<QAbstractState*, QList<QPropertyAssignment> > &propertyAssignmentsForState
+ QHash<QAbstractState*, QVector<QPropertyAssignment> > &propertyAssignmentsForState
#ifndef QT_NO_ANIMATION
, const QList<QAbstractAnimation *> &selectedAnimations
#endif
@@ -966,7 +961,7 @@ void QStateMachinePrivate::enterStates(QEvent *event, const QList<QAbstractState
// Immediately set the properties that are not animated.
{
- QList<QPropertyAssignment> assignments = propertyAssignmentsForState.value(s);
+ QVector<QPropertyAssignment> assignments = propertyAssignmentsForState.value(s);
for (int i = 0; i < assignments.size(); ++i) {
const QPropertyAssignment &assn = assignments.at(i);
if (globalRestorePolicy == QState::RestoreProperties) {
@@ -989,9 +984,16 @@ void QStateMachinePrivate::enterStates(QEvent *event, const QList<QAbstractState
QAbstractStatePrivate::get(s)->callOnEntry(event);
QAbstractStatePrivate::get(s)->emitEntered();
- if (statesForDefaultEntry.contains(s)) {
- // ### executeContent(s.initial.transition.children())
- }
+
+ // FIXME:
+ // See the "initial transitions" comment in addDescendantStatesToEnter first, then implement:
+// if (statesForDefaultEntry.contains(s)) {
+// // ### executeContent(s.initial.transition.children())
+// }
+ Q_UNUSED(statesForDefaultEntry);
+
+ if (QHistoryState *h = toHistoryState(s))
+ QAbstractTransitionPrivate::get(h->defaultTransition())->callOnTransition(event);
// Emit propertiesAssigned signal if the state has no animated properties.
{
@@ -1052,69 +1054,6 @@ void QStateMachinePrivate::enterStates(QEvent *event, const QList<QAbstractState
// qDebug() << "configuration:" << configuration.toList();
}
-void QStateMachinePrivate::addStatesToEnter(QAbstractState *s, QState *root,
- QSet<QAbstractState*> &statesToEnter,
- QSet<QAbstractState*> &statesForDefaultEntry)
-{
- if (QHistoryState *h = toHistoryState(s)) {
- QList<QAbstractState*> hconf = QHistoryStatePrivate::get(h)->configuration;
- if (!hconf.isEmpty()) {
- for (int k = 0; k < hconf.size(); ++k) {
- QAbstractState *s0 = hconf.at(k);
- addStatesToEnter(s0, root, statesToEnter, statesForDefaultEntry);
- }
-#ifdef QSTATEMACHINE_DEBUG
- qDebug() << q_func() << ": restoring"
- << ((QHistoryStatePrivate::get(h)->historyType == QHistoryState::DeepHistory) ? "deep" : "shallow")
- << "history from" << s << ':' << hconf;
-#endif
- } else {
- QList<QAbstractState*> hlst;
- if (QHistoryStatePrivate::get(h)->defaultState)
- hlst.append(QHistoryStatePrivate::get(h)->defaultState);
-
- if (hlst.isEmpty()) {
- setError(QStateMachine::NoDefaultStateInHistoryStateError, h);
- } else {
- for (int k = 0; k < hlst.size(); ++k) {
- QAbstractState *s0 = hlst.at(k);
- addStatesToEnter(s0, root, statesToEnter, statesForDefaultEntry);
- }
-#ifdef QSTATEMACHINE_DEBUG
- qDebug() << q_func() << ": initial history targets for" << s << ':' << hlst;
-#endif
- }
- }
- } else {
- if (s == rootState()) {
- // Error has already been set by exitStates().
- Q_ASSERT(error != QStateMachine::NoError);
- return;
- }
- statesToEnter.insert(s);
- if (isParallel(s)) {
- QState *grp = toStandardState(s);
- QList<QAbstractState*> lst = QStatePrivate::get(grp)->childStates();
- for (int i = 0; i < lst.size(); ++i) {
- QAbstractState *child = lst.at(i);
- addStatesToEnter(child, grp, statesToEnter, statesForDefaultEntry);
- }
- } else if (isCompound(s)) {
- statesForDefaultEntry.insert(s);
- QState *grp = toStandardState(s);
- QAbstractState *initial = grp->initialState();
- if (initial != 0) {
- Q_ASSERT(initial->machine() == q_func());
- addStatesToEnter(initial, grp, statesToEnter, statesForDefaultEntry);
- } else {
- setError(QStateMachine::NoInitialStateError, grp);
- return;
- }
- }
- addAncestorStatesToEnter(s, root, statesToEnter, statesForDefaultEntry);
- }
-}
-
/* The algorithm as described in http://www.w3.org/TR/2014/WD-scxml-20140529/ has a bug. See
* QTBUG-44963 for details. The algorithm here is as described in
* http://www.w3.org/Voice/2013/scxml-irp/SCXML.htm as of Friday March 13, 2015.
@@ -1165,8 +1104,8 @@ void QStateMachinePrivate::addDescendantStatesToEnter(QAbstractState *state,
#endif
} else {
QList<QAbstractState*> defaultHistoryContent;
- if (QHistoryStatePrivate::get(h)->defaultState)
- defaultHistoryContent.append(QHistoryStatePrivate::get(h)->defaultState);
+ if (QAbstractTransition *t = QHistoryStatePrivate::get(h)->defaultTransition)
+ defaultHistoryContent = t->targetStates();
if (defaultHistoryContent.isEmpty()) {
setError(QStateMachine::NoDefaultStateInHistoryStateError, h);
@@ -1192,8 +1131,10 @@ void QStateMachinePrivate::addDescendantStatesToEnter(QAbstractState *state,
if (QAbstractState *initial = toStandardState(state)->initialState()) {
Q_ASSERT(initial->machine() == q_func());
+ // FIXME:
// Qt does not support initial transitions (which is a problem for parallel states).
// The way it simulates this for other states, is by having a single initial state.
+ // See also the FIXME in enterStates.
statesForDefaultEntry.insert(initial);
addDescendantStatesToEnter(initial, statesToEnter, statesForDefaultEntry);
@@ -1351,7 +1292,7 @@ QVariant QStateMachinePrivate::savedValueForRestorable(const QList<QAbstractStat
QObject *object, const QByteArray &propertyName) const
{
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
- qDebug() << q_func() << ": savedValueForRestorable(" << exitedStates_sorted << object << propertyName << ")";
+ qDebug() << q_func() << ": savedValueForRestorable(" << exitedStates_sorted << object << propertyName << ')';
#endif
for (int i = exitedStates_sorted.size() - 1; i >= 0; --i) {
QAbstractState *s = exitedStates_sorted.at(i);
@@ -1374,7 +1315,7 @@ void QStateMachinePrivate::registerRestorable(QAbstractState *state, QObject *ob
const QVariant &value)
{
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
- qDebug() << q_func() << ": registerRestorable(" << state << object << propertyName << value << ")";
+ qDebug() << q_func() << ": registerRestorable(" << state << object << propertyName << value << ')';
#endif
RestorableId id(object, propertyName);
QHash<RestorableId, QVariant> &restorables = registeredRestorablesForState[state];
@@ -1390,7 +1331,7 @@ void QStateMachinePrivate::unregisterRestorables(const QList<QAbstractState *> &
const QByteArray &propertyName)
{
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
- qDebug() << q_func() << ": unregisterRestorables(" << states << object << propertyName << ")";
+ qDebug() << q_func() << ": unregisterRestorables(" << states << object << propertyName << ')';
#endif
RestorableId id(object, propertyName);
for (int i = 0; i < states.size(); ++i) {
@@ -1413,9 +1354,9 @@ void QStateMachinePrivate::unregisterRestorables(const QList<QAbstractState *> &
}
}
-QList<QPropertyAssignment> QStateMachinePrivate::restorablesToPropertyList(const QHash<RestorableId, QVariant> &restorables) const
+QVector<QPropertyAssignment> QStateMachinePrivate::restorablesToPropertyList(const QHash<RestorableId, QVariant> &restorables) const
{
- QList<QPropertyAssignment> result;
+ QVector<QPropertyAssignment> result;
QHash<RestorableId, QVariant>::const_iterator it;
for (it = restorables.constBegin(); it != restorables.constEnd(); ++it) {
const RestorableId &id = it.key();
@@ -1470,16 +1411,16 @@ QHash<QStateMachinePrivate::RestorableId, QVariant> QStateMachinePrivate::comput
properties that should not be restored because they are assigned by an
entered state).
*/
-QHash<QAbstractState*, QList<QPropertyAssignment> > QStateMachinePrivate::computePropertyAssignments(
+QHash<QAbstractState*, QVector<QPropertyAssignment> > QStateMachinePrivate::computePropertyAssignments(
const QList<QAbstractState*> &statesToEnter_sorted, QHash<RestorableId, QVariant> &pendingRestorables) const
{
- QHash<QAbstractState*, QList<QPropertyAssignment> > assignmentsForState;
+ QHash<QAbstractState*, QVector<QPropertyAssignment> > assignmentsForState;
for (int i = 0; i < statesToEnter_sorted.size(); ++i) {
QState *s = toStandardState(statesToEnter_sorted.at(i));
if (!s)
continue;
- QList<QPropertyAssignment> &assignments = QStatePrivate::get(s)->propertyAssignments;
+ QVector<QPropertyAssignment> &assignments = QStatePrivate::get(s)->propertyAssignments;
for (int j = 0; j < assignments.size(); ++j) {
const QPropertyAssignment &assn = assignments.at(j);
if (assn.objectDeleted()) {
@@ -1556,8 +1497,11 @@ void QStateMachinePrivate::setError(QStateMachine::Error errorCode, QAbstractSta
#ifdef QSTATEMACHINE_DEBUG
qDebug() << q << ": entering error state" << currentErrorState << "from" << currentContext;
#endif
- QState *lca = findLCA(QList<QAbstractState*>() << currentErrorState << currentContext);
- addStatesToEnter(currentErrorState, lca, pendingErrorStates, pendingErrorStatesForDefaultEntry);
+ pendingErrorStates.insert(currentErrorState);
+ addDescendantStatesToEnter(currentErrorState, pendingErrorStates, pendingErrorStatesForDefaultEntry);
+ addAncestorStatesToEnter(currentErrorState, rootState(), pendingErrorStates, pendingErrorStatesForDefaultEntry);
+ foreach (QAbstractState *s, configuration)
+ pendingErrorStates.remove(s);
} else {
qWarning("Unrecoverable error detected in running state machine: %s",
qPrintable(errorString));
@@ -1652,7 +1596,7 @@ QList<QAbstractAnimation *> QStateMachinePrivate::selectAnimations(const QList<Q
}
void QStateMachinePrivate::terminateActiveAnimations(QAbstractState *state,
- const QHash<QAbstractState*, QList<QPropertyAssignment> > &assignmentsForEnteredStates)
+ const QHash<QAbstractState*, QVector<QPropertyAssignment> > &assignmentsForEnteredStates)
{
Q_Q(QStateMachine);
QList<QAbstractAnimation*> animations = animationsForState.take(state);
@@ -1677,9 +1621,9 @@ void QStateMachinePrivate::terminateActiveAnimations(QAbstractState *state,
// If there is no property assignment that sets this property,
// set the property to its target value.
bool found = false;
- QHash<QAbstractState*, QList<QPropertyAssignment> >::const_iterator it;
+ QHash<QAbstractState*, QVector<QPropertyAssignment> >::const_iterator it;
for (it = assignmentsForEnteredStates.constBegin(); it != assignmentsForEnteredStates.constEnd(); ++it) {
- const QList<QPropertyAssignment> &assignments = it.value();
+ const QVector<QPropertyAssignment> &assignments = it.value();
for (int j = 0; j < assignments.size(); ++j) {
if (assignments.at(j).hasTarget(assn.object, assn.propertyName)) {
found = true;
@@ -1697,15 +1641,15 @@ void QStateMachinePrivate::terminateActiveAnimations(QAbstractState *state,
void QStateMachinePrivate::initializeAnimations(QAbstractState *state, const QList<QAbstractAnimation *> &selectedAnimations,
const QList<QAbstractState*> &exitedStates_sorted,
- QHash<QAbstractState*, QList<QPropertyAssignment> > &assignmentsForEnteredStates)
+ QHash<QAbstractState*, QVector<QPropertyAssignment> > &assignmentsForEnteredStates)
{
Q_Q(QStateMachine);
if (!assignmentsForEnteredStates.contains(state))
return;
- QList<QPropertyAssignment> &assignments = assignmentsForEnteredStates[state];
+ QVector<QPropertyAssignment> &assignments = assignmentsForEnteredStates[state];
for (int i = 0; i < selectedAnimations.size(); ++i) {
QAbstractAnimation *anim = selectedAnimations.at(i);
- QList<QPropertyAssignment>::iterator it;
+ QVector<QPropertyAssignment>::iterator it;
for (it = assignments.begin(); it != assignments.end(); ) {
QPair<QList<QAbstractAnimation*>, QList<QAbstractAnimation*> > ret;
const QPropertyAssignment &assn = *it;
@@ -1864,7 +1808,7 @@ void QStateMachinePrivate::_q_start()
QSet<QAbstractState*> statesForDefaultEntry;
QList<QAbstractState*> enteredStates = computeEntrySet(transitions, statesForDefaultEntry, &calculationCache);
QHash<RestorableId, QVariant> pendingRestorables;
- QHash<QAbstractState*, QList<QPropertyAssignment> > assignmentsForEnteredStates =
+ QHash<QAbstractState*, QVector<QPropertyAssignment> > assignmentsForEnteredStates =
computePropertyAssignments(enteredStates, pendingRestorables);
#ifndef QT_NO_ANIMATION
QList<QAbstractAnimation*> selectedAnimations = selectAnimations(transitions);
@@ -1894,6 +1838,7 @@ void QStateMachinePrivate::_q_start()
unregisterAllTransitions();
emitFinished();
emit q->runningChanged(false);
+ exitInterpreter();
} else {
_q_process();
}
@@ -1990,6 +1935,8 @@ void QStateMachinePrivate::_q_process()
break;
}
endMacrostep(didChange);
+ if (stopProcessingReason == Finished)
+ exitInterpreter();
}
void QStateMachinePrivate::_q_startDelayedEventTimer(int id, int delay)
@@ -2003,6 +1950,7 @@ void QStateMachinePrivate::_q_startDelayedEventTimer(int id, int delay)
e.timerId = q->startTimer(delay);
if (!e.timerId) {
qWarning("QStateMachine::postDelayedEvent: failed to start timer (id=%d, delay=%d)", id, delay);
+ delete e.event;
delayedEvents.erase(it);
delayedEventIdFreeList.release(id);
} else {
@@ -2099,23 +2047,6 @@ void QStateMachinePrivate::cancelAllDelayedEvents()
delayedEvents.clear();
}
-void QStateMachinePrivate::emitStateFinished(QState *forState, QFinalState *guiltyState)
-{
- Q_UNUSED(guiltyState);
- Q_ASSERT(guiltyState);
-
-#ifdef QSTATEMACHINE_DEBUG
- Q_Q(QStateMachine);
- qDebug() << q << ": emitting finished signal for" << forState;
-#endif
-
- QStatePrivate::get(forState)->emitFinished();
-}
-
-void QStateMachinePrivate::startupHook()
-{
-}
-
/*
This function is called when the state machine is performing no
microstep because no transition is enabled (i.e. an event is ignored).
@@ -2136,6 +2067,8 @@ void QStateMachinePrivate::noMicrostep()
4) the state machine either enters an infinite loop, or stops (runningChanged(false),
and either finished or stopped are emitted), or processedPendingEvents() is called.
5) if the machine is not in an infinite loop endMacrostep is called
+ 6) when the machine is finished and all processing (like signal emission) is done,
+ exitInterpreter() is called. (This is the same name as the SCXML specification uses.)
didChange is set to true if at least one microstep was performed, it is possible
that the machine returned to exactly the same state as before, but some transitions
@@ -2156,6 +2089,27 @@ void QStateMachinePrivate::endMacrostep(bool didChange)
Q_UNUSED(didChange);
}
+void QStateMachinePrivate::exitInterpreter()
+{
+}
+
+void QStateMachinePrivate::emitStateFinished(QState *forState, QFinalState *guiltyState)
+{
+ Q_UNUSED(guiltyState);
+ Q_ASSERT(guiltyState);
+
+#ifdef QSTATEMACHINE_DEBUG
+ Q_Q(QStateMachine);
+ qDebug() << q << ": emitting finished signal for" << forState;
+#endif
+
+ QStatePrivate::get(forState)->emitFinished();
+}
+
+void QStateMachinePrivate::startupHook()
+{
+}
+
namespace _QStateMachine_Internal{
class GoToStateTransition : public QAbstractTransition
@@ -2455,6 +2409,7 @@ void QStateMachinePrivate::handleTransitionSignal(QObject *sender, int signalInd
QMetaMethod method = meta->method(signalIndex);
int argc = method.parameterCount();
QList<QVariant> vargs;
+ vargs.reserve(argc);
for (int i = 0; i < argc; ++i) {
int type = method.parameterType(i);
vargs.append(QVariant(type, argv[i+1]));
@@ -2638,11 +2593,6 @@ void QStateMachine::removeState(QAbstractState *state)
state->setParent(0);
}
-/*!
- Returns whether this state machine is running.
-
- \sa start(), stop()
-*/
bool QStateMachine::isRunning() const
{
Q_D(const QStateMachine);
@@ -2705,11 +2655,6 @@ void QStateMachine::stop()
}
}
-/*!
- Convenience functions to start/stop this state machine.
-
- \sa start(), stop(), started(), finished(), stopped()
-*/
void QStateMachine::setRunning(bool running)
{
if (running)
@@ -3274,7 +3219,7 @@ QStateMachine::WrappedEvent::~WrappedEvent()
\fn QStateMachine::runningChanged(bool running)
\since 5.4
- This signal is emitted when the running property is changed.
+ This signal is emitted when the running property is changed with \a running as argument.
\sa QStateMachine::running
*/
diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h
index d6c3b7bfa7..5fca034386 100644
--- a/src/corelib/statemachine/qstatemachine.h
+++ b/src/corelib/statemachine/qstatemachine.h
@@ -104,8 +104,8 @@ public:
NoCommonAncestorForTransitionError
};
- explicit QStateMachine(QObject *parent = 0);
- explicit QStateMachine(QState::ChildMode childMode, QObject *parent = 0);
+ explicit QStateMachine(QObject *parent = Q_NULLPTR);
+ explicit QStateMachine(QState::ChildMode childMode, QObject *parent = Q_NULLPTR);
~QStateMachine();
void addState(QAbstractState *state);
diff --git a/src/corelib/statemachine/qstatemachine_p.h b/src/corelib/statemachine/qstatemachine_p.h
index 426f2732df..45c6dfcb33 100644
--- a/src/corelib/statemachine/qstatemachine_p.h
+++ b/src/corelib/statemachine/qstatemachine_p.h
@@ -99,7 +99,8 @@ public:
QStateMachinePrivate();
~QStateMachinePrivate();
- static QStateMachinePrivate *get(QStateMachine *q);
+ static QStateMachinePrivate *get(QStateMachine *q)
+ { return q ? q->d_func() : 0; }
QState *findLCA(const QList<QAbstractState*> &states, bool onlyCompound = false) const;
QState *findLCCA(const QList<QAbstractState*> &states) const;
@@ -132,16 +133,17 @@ public:
virtual void processedPendingEvents(bool didChange);
virtual void beginMacrostep();
virtual void endMacrostep(bool didChange);
- void exitStates(QEvent *event, const QList<QAbstractState *> &statesToExit_sorted,
- const QHash<QAbstractState*, QList<QPropertyAssignment> > &assignmentsForEnteredStates);
+ virtual void exitInterpreter();
+ virtual void exitStates(QEvent *event, const QList<QAbstractState *> &statesToExit_sorted,
+ const QHash<QAbstractState*, QVector<QPropertyAssignment> > &assignmentsForEnteredStates);
QList<QAbstractState*> computeExitSet(const QList<QAbstractTransition*> &enabledTransitions, CalculationCache *cache);
QSet<QAbstractState*> computeExitSet_Unordered(const QList<QAbstractTransition*> &enabledTransitions, CalculationCache *cache);
QSet<QAbstractState*> computeExitSet_Unordered(QAbstractTransition *t, CalculationCache *cache);
void executeTransitionContent(QEvent *event, const QList<QAbstractTransition*> &transitionList);
- void enterStates(QEvent *event, const QList<QAbstractState*> &exitedStates_sorted,
- const QList<QAbstractState*> &statesToEnter_sorted,
- const QSet<QAbstractState*> &statesForDefaultEntry,
- QHash<QAbstractState *, QList<QPropertyAssignment> > &propertyAssignmentsForState
+ virtual void enterStates(QEvent *event, const QList<QAbstractState*> &exitedStates_sorted,
+ const QList<QAbstractState*> &statesToEnter_sorted,
+ const QSet<QAbstractState*> &statesForDefaultEntry,
+ QHash<QAbstractState *, QVector<QPropertyAssignment> > &propertyAssignmentsForState
#ifndef QT_NO_ANIMATION
, const QList<QAbstractAnimation*> &selectedAnimations
#endif
@@ -154,9 +156,6 @@ public:
void addDescendantStatesToEnter(QAbstractState *state,
QSet<QAbstractState*> &statesToEnter,
QSet<QAbstractState*> &statesForDefaultEntry);
- void addStatesToEnter(QAbstractState *s, QState *root,
- QSet<QAbstractState*> &statesToEnter,
- QSet<QAbstractState*> &statesForDefaultEntry);
void addAncestorStatesToEnter(QAbstractState *s, QAbstractState *ancestor,
QSet<QAbstractState*> &statesToEnter,
QSet<QAbstractState*> &statesForDefaultEntry);
@@ -232,9 +231,9 @@ public:
const QVariant &value);
void unregisterRestorables(const QList<QAbstractState*> &states, QObject *object,
const QByteArray &propertyName);
- QList<QPropertyAssignment> restorablesToPropertyList(const QHash<RestorableId, QVariant> &restorables) const;
+ QVector<QPropertyAssignment> restorablesToPropertyList(const QHash<RestorableId, QVariant> &restorables) const;
QHash<RestorableId, QVariant> computePendingRestorables(const QList<QAbstractState*> &statesToExit_sorted) const;
- QHash<QAbstractState*, QList<QPropertyAssignment> > computePropertyAssignments(
+ QHash<QAbstractState*, QVector<QPropertyAssignment> > computePropertyAssignments(
const QList<QAbstractState*> &statesToEnter_sorted,
QHash<RestorableId, QVariant> &pendingRestorables) const;
#endif
@@ -275,10 +274,10 @@ public:
QList<QAbstractAnimation *> selectAnimations(const QList<QAbstractTransition *> &transitionList) const;
void terminateActiveAnimations(QAbstractState *state,
- const QHash<QAbstractState*, QList<QPropertyAssignment> > &assignmentsForEnteredStates);
+ const QHash<QAbstractState*, QVector<QPropertyAssignment> > &assignmentsForEnteredStates);
void initializeAnimations(QAbstractState *state, const QList<QAbstractAnimation*> &selectedAnimations,
const QList<QAbstractState *> &exitedStates_sorted,
- QHash<QAbstractState *, QList<QPropertyAssignment> > &assignmentsForEnteredStates);
+ QHash<QAbstractState *, QVector<QPropertyAssignment> > &assignmentsForEnteredStates);
#endif // QT_NO_ANIMATION
QSignalEventGenerator *signalEventGenerator;
diff --git a/src/corelib/thread/qbasicatomic.h b/src/corelib/thread/qbasicatomic.h
index 3c16cf5b9c..c29b80d3d0 100644
--- a/src/corelib/thread/qbasicatomic.h
+++ b/src/corelib/thread/qbasicatomic.h
@@ -39,11 +39,13 @@
#if defined(QT_BOOTSTRAPPED)
# include <QtCore/qatomic_bootstrap.h>
-// The following two are used for testing only.
-// Note that we don't check the compiler support -- you had better
-// know what you're doing if you set them
-#elif defined(QT_ATOMIC_FORCE_CXX11)
+// If C++11 atomics are supported, use them!
+#elif defined(Q_COMPILER_ATOMICS) && defined(Q_COMPILER_CONSTEXPR) && !defined(QT_ATOMIC_FORCE_NO_CXX11)
# include <QtCore/qatomic_cxx11.h>
+
+// The following is used for testing only.
+// Note that we don't check the compiler support -- you had better
+// know what you're doing if you set it
#elif defined(QT_ATOMIC_FORCE_GCC)
# include <QtCore/qatomic_gcc.h>
@@ -64,8 +66,6 @@
# include <QtCore/qatomic_x86.h>
// Fallback compiler dependent implementation
-#elif defined(Q_COMPILER_ATOMICS) && defined(Q_COMPILER_CONSTEXPR)
-# include <QtCore/qatomic_cxx11.h>
#elif defined(Q_CC_GNU)
# include <QtCore/qatomic_gcc.h>
diff --git a/src/corelib/thread/qexception.cpp b/src/corelib/thread/qexception.cpp
index acc3663936..cecd69c273 100644
--- a/src/corelib/thread/qexception.cpp
+++ b/src/corelib/thread/qexception.cpp
@@ -107,6 +107,16 @@ QT_BEGIN_NAMESPACE
\internal
*/
+QException::~QException()
+#ifdef Q_COMPILER_NOEXCEPT
+ noexcept
+#else
+ throw()
+#endif
+{
+ // must stay empty until ### Qt 6
+}
+
void QException::raise() const
{
QException e = *this;
@@ -118,6 +128,16 @@ QException *QException::clone() const
return new QException(*this);
}
+QUnhandledException::~QUnhandledException()
+#ifdef Q_COMPILER_NOEXCEPT
+ noexcept
+#else
+ throw()
+#endif
+{
+ // must stay empty until ### Qt 6
+}
+
void QUnhandledException::raise() const
{
QUnhandledException e = *this;
@@ -145,7 +165,7 @@ public:
};
ExceptionHolder::ExceptionHolder(QException *exception)
-: base(new Base(exception)) {}
+: base(exception ? new Base(exception) : Q_NULLPTR) {}
ExceptionHolder::ExceptionHolder(const ExceptionHolder &other)
: base(other.base)
@@ -161,6 +181,8 @@ ExceptionHolder::~ExceptionHolder()
QException *ExceptionHolder::exception() const
{
+ if (!base)
+ return Q_NULLPTR;
return base->exception;
}
diff --git a/src/corelib/thread/qexception.h b/src/corelib/thread/qexception.h
index 55fc441020..dc988f9020 100644
--- a/src/corelib/thread/qexception.h
+++ b/src/corelib/thread/qexception.h
@@ -53,6 +53,13 @@ QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QException : public std::exception
{
public:
+ ~QException()
+#ifdef Q_COMPILER_NOEXCEPT
+ noexcept
+#else
+ throw()
+#endif
+ ;
virtual void raise() const;
virtual QException *clone() const;
};
@@ -60,6 +67,13 @@ public:
class Q_CORE_EXPORT QUnhandledException : public QException
{
public:
+ ~QUnhandledException()
+#ifdef Q_COMPILER_NOEXCEPT
+ noexcept
+#else
+ throw()
+#endif
+ ;
void raise() const Q_DECL_OVERRIDE;
QUnhandledException *clone() const Q_DECL_OVERRIDE;
};
@@ -70,9 +84,9 @@ class Base;
class Q_CORE_EXPORT ExceptionHolder
{
public:
- ExceptionHolder(QException *exception = 0);
+ ExceptionHolder(QException *exception = Q_NULLPTR);
ExceptionHolder(const ExceptionHolder &other);
- void operator=(const ExceptionHolder &other);
+ void operator=(const ExceptionHolder &other); // ### Qt6: copy-assign operator shouldn't return void. Remove this method and the copy-ctor, they are unneeded.
~ExceptionHolder();
QException *exception() const;
QExplicitlySharedDataPointer<Base> base;
diff --git a/src/corelib/thread/qfuture.qdoc b/src/corelib/thread/qfuture.qdoc
index be4cee2bd6..ed0b26e121 100644
--- a/src/corelib/thread/qfuture.qdoc
+++ b/src/corelib/thread/qfuture.qdoc
@@ -352,6 +352,7 @@
/*! \class QFuture::const_iterator
\reentrant
\since 4.4
+ \inmodule QtCore
\brief The QFuture::const_iterator class provides an STL-style const
iterator for QFuture.
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index 01eb043a5e..8c1f7e7d82 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -299,7 +299,7 @@ public:
void reportResult(const void *, int) { }
void reportResults(const QVector<void> &, int) { }
- void reportFinished(const void * = 0) { QFutureInterfaceBase::reportFinished(); }
+ void reportFinished(const void * = Q_NULLPTR) { QFutureInterfaceBase::reportFinished(); }
};
QT_END_NAMESPACE
diff --git a/src/corelib/thread/qfuturewatcher.cpp b/src/corelib/thread/qfuturewatcher.cpp
index 3056216f6e..43eff83116 100644
--- a/src/corelib/thread/qfuturewatcher.cpp
+++ b/src/corelib/thread/qfuturewatcher.cpp
@@ -248,7 +248,7 @@ bool QFutureWatcherBase::isStarted() const
/*! \fn bool QFutureWatcher::isFinished() const
Returns \c true if the asynchronous computation represented by the future()
- has finished; otherwise returns \c false.
+ has finished, or if no future has been set; otherwise returns \c false.
*/
bool QFutureWatcherBase::isFinished() const
{
@@ -304,15 +304,6 @@ void QFutureWatcherBase::waitForFinished()
futureInterface().waitForFinished();
}
-/*! \fn void QFutureWatcher::setPendingResultsLimit(int limit)
-
- The setPendingResultsLimit() provides throttling control. When the number
- of pending resultReadyAt() or resultsReadyAt() signals exceeds the
- \a limit, the computation represented by the future will be throttled
- automatically. The computation will resume once the number of pending
- signals drops below the \a limit.
-*/
-
bool QFutureWatcherBase::event(QEvent *event)
{
Q_D(QFutureWatcherBase);
@@ -342,6 +333,14 @@ bool QFutureWatcherBase::event(QEvent *event)
return QObject::event(event);
}
+/*! \fn void QFutureWatcher::setPendingResultsLimit(int limit)
+
+ The setPendingResultsLimit() provides throttling control. When the number
+ of pending resultReadyAt() or resultsReadyAt() signals exceeds the
+ \a limit, the computation represented by the future will be throttled
+ automatically. The computation will resume once the number of pending
+ signals drops below the \a limit.
+*/
void QFutureWatcherBase::setPendingResultsLimit(int limit)
{
Q_D(QFutureWatcherBase);
@@ -379,7 +378,8 @@ void QFutureWatcherBase::disconnectNotify(const QMetaMethod &signal)
*/
QFutureWatcherBasePrivate::QFutureWatcherBasePrivate()
: maximumPendingResultsReady(QThread::idealThreadCount() * 2),
- resultAtConnected(0)
+ resultAtConnected(0),
+ finished(true) /* the initial m_future is a canceledResult(), with Finished set */
{ }
/*!
@@ -400,7 +400,7 @@ void QFutureWatcherBase::disconnectOutputInterface(bool pendingAssignment)
d->pendingResultsReady.store(0);
qDeleteAll(d->pendingCallOutEvents);
d->pendingCallOutEvents.clear();
- d->finished = false;
+ d->finished = false; /* May soon be amended, during connectOutputInterface() */
}
futureInterface().d->disconnectOutputInterface(d_func());
diff --git a/src/corelib/thread/qfuturewatcher.h b/src/corelib/thread/qfuturewatcher.h
index 63558d4a0f..42a22d9063 100644
--- a/src/corelib/thread/qfuturewatcher.h
+++ b/src/corelib/thread/qfuturewatcher.h
@@ -52,7 +52,7 @@ class Q_CORE_EXPORT QFutureWatcherBase : public QObject
Q_DECLARE_PRIVATE(QFutureWatcherBase)
public:
- explicit QFutureWatcherBase(QObject *parent = 0);
+ explicit QFutureWatcherBase(QObject *parent = Q_NULLPTR);
// de-inline dtor
int progressValue() const;
@@ -179,7 +179,7 @@ template <>
class QFutureWatcher<void> : public QFutureWatcherBase
{
public:
- explicit QFutureWatcher(QObject *_parent = 0)
+ explicit QFutureWatcher(QObject *_parent = Q_NULLPTR)
: QFutureWatcherBase(_parent)
{ }
~QFutureWatcher()
diff --git a/src/corelib/thread/qgenericatomic.h b/src/corelib/thread/qgenericatomic.h
index a9a790c14c..d3e7d51efd 100644
--- a/src/corelib/thread/qgenericatomic.h
+++ b/src/corelib/thread/qgenericatomic.h
@@ -46,13 +46,6 @@ QT_END_NAMESPACE
#pragma qt_sync_stop_processing
#endif
-#ifdef Q_CC_GNU
-// lowercase is fine, we'll undef it below
-#define always_inline __attribute__((always_inline, gnu_inline))
-#else
-#define always_inline
-#endif
-
template<int> struct QAtomicOpsSupport { enum { IsSupported = 0 }; };
template<> struct QAtomicOpsSupport<4> { enum { IsSupported = 1 }; };
@@ -84,19 +77,19 @@ template <typename BaseClass> struct QGenericAtomicOps
{
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T load(const T &_q_value) Q_DECL_NOTHROW
{
return _q_value;
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
void store(T &_q_value, X newValue) Q_DECL_NOTHROW
{
_q_value = newValue;
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T loadAcquire(const T &_q_value) Q_DECL_NOTHROW
{
T tmp = *static_cast<const volatile T *>(&_q_value);
@@ -104,7 +97,7 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
void storeRelease(T &_q_value, X newValue) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
@@ -115,13 +108,13 @@ template <typename BaseClass> struct QGenericAtomicOps
{ return BaseClass::isFetchAndAddNative(); }
static inline Q_DECL_CONSTEXPR bool isReferenceCountingWaitFree() Q_DECL_NOTHROW
{ return BaseClass::isFetchAndAddWaitFree(); }
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
bool ref(T &_q_value) Q_DECL_NOTHROW
{
return BaseClass::fetchAndAddRelaxed(_q_value, 1) != T(-1);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
bool deref(T &_q_value) Q_DECL_NOTHROW
{
return BaseClass::fetchAndAddRelaxed(_q_value, -1) != 1;
@@ -138,7 +131,7 @@ template <typename BaseClass> struct QGenericAtomicOps
bool testAndSetRelaxed(T &_q_value, X expectedValue, X newValue, X *currentValue) Q_DECL_NOTHROW;
#endif
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
bool testAndSetAcquire(T &_q_value, X expectedValue, X newValue) Q_DECL_NOTHROW
{
bool tmp = BaseClass::testAndSetRelaxed(_q_value, expectedValue, newValue);
@@ -146,21 +139,21 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
bool testAndSetRelease(T &_q_value, X expectedValue, X newValue) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::testAndSetRelaxed(_q_value, expectedValue, newValue);
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
bool testAndSetOrdered(T &_q_value, X expectedValue, X newValue) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
return BaseClass::testAndSetRelaxed(_q_value, expectedValue, newValue);
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
bool testAndSetAcquire(T &_q_value, X expectedValue, X newValue, X *currentValue) Q_DECL_NOTHROW
{
bool tmp = BaseClass::testAndSetRelaxed(_q_value, expectedValue, newValue, currentValue);
@@ -168,14 +161,14 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
bool testAndSetRelease(T &_q_value, X expectedValue, X newValue, X *currentValue) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::testAndSetRelaxed(_q_value, expectedValue, newValue, currentValue);
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
bool testAndSetOrdered(T &_q_value, X expectedValue, X newValue, X *currentValue) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
@@ -185,7 +178,7 @@ template <typename BaseClass> struct QGenericAtomicOps
static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return false; }
static inline Q_DECL_CONSTEXPR bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return false; }
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
T fetchAndStoreRelaxed(T &_q_value, X newValue) Q_DECL_NOTHROW
{
// implement fetchAndStore on top of testAndSet
@@ -196,7 +189,7 @@ template <typename BaseClass> struct QGenericAtomicOps
}
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
T fetchAndStoreAcquire(T &_q_value, X newValue) Q_DECL_NOTHROW
{
T tmp = BaseClass::fetchAndStoreRelaxed(_q_value, newValue);
@@ -204,14 +197,14 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
T fetchAndStoreRelease(T &_q_value, X newValue) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::fetchAndStoreRelaxed(_q_value, newValue);
}
- template <typename T, typename X> static inline always_inline
+ template <typename T, typename X> static Q_ALWAYS_INLINE
T fetchAndStoreOrdered(T &_q_value, X newValue) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
@@ -220,7 +213,7 @@ template <typename BaseClass> struct QGenericAtomicOps
static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return false; }
static inline Q_DECL_CONSTEXPR bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return false; }
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT valueToAdd) Q_DECL_NOTHROW
{
// implement fetchAndAdd on top of testAndSet
@@ -231,7 +224,7 @@ template <typename BaseClass> struct QGenericAtomicOps
}
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAddAcquire(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT valueToAdd) Q_DECL_NOTHROW
{
T tmp = BaseClass::fetchAndAddRelaxed(_q_value, valueToAdd);
@@ -239,28 +232,28 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAddRelease(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT valueToAdd) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::fetchAndAddRelaxed(_q_value, valueToAdd);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAddOrdered(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT valueToAdd) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
return BaseClass::fetchAndAddRelaxed(_q_value, valueToAdd);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndSubRelaxed(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT operand) Q_DECL_NOTHROW
{
// implement fetchAndSub on top of fetchAndAdd
return fetchAndAddRelaxed(_q_value, -operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndSubAcquire(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT operand) Q_DECL_NOTHROW
{
T tmp = BaseClass::fetchAndSubRelaxed(_q_value, operand);
@@ -268,21 +261,21 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndSubRelease(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT operand) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::fetchAndSubRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndSubOrdered(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT operand) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
return BaseClass::fetchAndSubRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAndRelaxed(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
// implement fetchAndAnd on top of testAndSet
@@ -293,7 +286,7 @@ template <typename BaseClass> struct QGenericAtomicOps
}
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAndAcquire(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
T tmp = BaseClass::fetchAndAndRelaxed(_q_value, operand);
@@ -301,21 +294,21 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAndRelease(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::fetchAndAndRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndAndOrdered(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
return BaseClass::fetchAndAndRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndOrRelaxed(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
// implement fetchAndOr on top of testAndSet
@@ -326,7 +319,7 @@ template <typename BaseClass> struct QGenericAtomicOps
}
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndOrAcquire(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
T tmp = BaseClass::fetchAndOrRelaxed(_q_value, operand);
@@ -334,21 +327,21 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndOrRelease(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::fetchAndOrRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndOrOrdered(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
return BaseClass::fetchAndOrRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndXorRelaxed(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
// implement fetchAndXor on top of testAndSet
@@ -359,7 +352,7 @@ template <typename BaseClass> struct QGenericAtomicOps
}
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndXorAcquire(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
T tmp = BaseClass::fetchAndXorRelaxed(_q_value, operand);
@@ -367,14 +360,14 @@ template <typename BaseClass> struct QGenericAtomicOps
return tmp;
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndXorRelease(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
BaseClass::releaseMemoryFence(_q_value);
return BaseClass::fetchAndXorRelaxed(_q_value, operand);
}
- template <typename T> static inline always_inline
+ template <typename T> static Q_ALWAYS_INLINE
T fetchAndXorOrdered(T &_q_value, typename QtPrivate::QEnableIf<QTypeInfo<T>::isIntegral, T>::Type operand) Q_DECL_NOTHROW
{
BaseClass::orderedMemoryFence(_q_value);
@@ -382,7 +375,5 @@ template <typename BaseClass> struct QGenericAtomicOps
}
};
-#undef always_inline
-
QT_END_NAMESPACE
#endif // QGENERICATOMIC_H
diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp
index 742a572bef..fa3bb080ae 100644
--- a/src/corelib/thread/qmutex.cpp
+++ b/src/corelib/thread/qmutex.cpp
@@ -139,6 +139,11 @@ public:
lock calls unlock(). A non-blocking alternative to lock() is
tryLock().
+ QMutex is optimized to be fast in the non-contended case. A non-recursive
+ QMutex will not allocate memory if there is no contention on that mutex.
+ It is constructed and destroyed with almost no overhead,
+ which means it is fine to have many mutexes as part of other classes.
+
\sa QMutexLocker, QReadWriteLock, QSemaphore, QWaitCondition
*/
@@ -165,6 +170,8 @@ public:
a thread may only lock a mutex once. The default is
QMutex::NonRecursive.
+ Recursive mutexes are slower and take more memory than non-recursive ones.
+
\sa lock(), unlock()
*/
QMutex::QMutex(RecursionMode mode)
diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h
index 63c488747f..0c5a73b4df 100644
--- a/src/corelib/thread/qmutex.h
+++ b/src/corelib/thread/qmutex.h
@@ -73,16 +73,16 @@ public:
private:
inline bool fastTryLock() Q_DECL_NOTHROW {
- return d_ptr.testAndSetAcquire(0, dummyLocked());
+ return d_ptr.testAndSetAcquire(Q_NULLPTR, dummyLocked());
}
inline bool fastTryUnlock() Q_DECL_NOTHROW {
- return d_ptr.testAndSetRelease(dummyLocked(), 0);
+ return d_ptr.testAndSetRelease(dummyLocked(), Q_NULLPTR);
}
inline bool fastTryLock(QMutexData *&current) Q_DECL_NOTHROW {
- return d_ptr.testAndSetAcquire(0, dummyLocked(), current);
+ return d_ptr.testAndSetAcquire(Q_NULLPTR, dummyLocked(), current);
}
inline bool fastTryUnlock(QMutexData *&current) Q_DECL_NOTHROW {
- return d_ptr.testAndSetRelease(dummyLocked(), 0, current);
+ return d_ptr.testAndSetRelease(dummyLocked(), Q_NULLPTR, current);
}
void lockInternal() QT_MUTEX_LOCK_NOEXCEPT;
diff --git a/src/corelib/thread/qmutex_win.cpp b/src/corelib/thread/qmutex_win.cpp
index c4130fdba5..c24ea58868 100644
--- a/src/corelib/thread/qmutex_win.cpp
+++ b/src/corelib/thread/qmutex_win.cpp
@@ -55,10 +55,10 @@ QMutexPrivate::~QMutexPrivate()
bool QMutexPrivate::wait(int timeout)
{
-#ifndef Q_OS_WINRT
- return (WaitForSingleObject(event, timeout < 0 ? INFINITE : timeout) == WAIT_OBJECT_0);
-#else
+#ifndef Q_OS_WINCE
return (WaitForSingleObjectEx(event, timeout < 0 ? INFINITE : timeout, FALSE) == WAIT_OBJECT_0);
+#else
+ return (WaitForSingleObject(event, timeout < 0 ? INFINITE : timeout) == WAIT_OBJECT_0);
#endif
}
diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h
index c73a790820..54887342e7 100644
--- a/src/corelib/thread/qorderedmutexlocker_p.h
+++ b/src/corelib/thread/qorderedmutexlocker_p.h
@@ -47,6 +47,8 @@
#include <QtCore/qmutex.h>
+#include <functional>
+
QT_BEGIN_NAMESPACE
/*
@@ -57,8 +59,8 @@ class QOrderedMutexLocker
{
public:
QOrderedMutexLocker(QMutex *m1, QMutex *m2)
- : mtx1((m1 == m2) ? m1 : (m1 < m2 ? m1 : m2)),
- mtx2((m1 == m2) ? 0 : (m1 < m2 ? m2 : m1)),
+ : mtx1((m1 == m2) ? m1 : (std::less<QMutex *>()(m1, m2) ? m1 : m2)),
+ mtx2((m1 == m2) ? 0 : (std::less<QMutex *>()(m1, m2) ? m2 : m1)),
locked(false)
{
relock();
diff --git a/src/corelib/thread/qresultstore.h b/src/corelib/thread/qresultstore.h
index fbcb8ad3cd..7ecaa231b2 100644
--- a/src/corelib/thread/qresultstore.h
+++ b/src/corelib/thread/qresultstore.h
@@ -61,8 +61,8 @@ class ResultItem
public:
ResultItem(const void *_result, int _count) : m_count(_count), result(_result) { } // contruct with vector of results
ResultItem(const void *_result) : m_count(0), result(_result) { } // construct with result
- ResultItem() : m_count(0), result(0) { }
- bool isValid() const { return result != 0; }
+ ResultItem() : m_count(0), result(Q_NULLPTR) { }
+ bool isValid() const { return result != Q_NULLPTR; }
bool isVector() const { return m_count != 0; }
int count() const { return (m_count == 0) ? 1 : m_count; }
int m_count; // result is either a pointer to a result or to a vector of results,
diff --git a/src/corelib/thread/qrunnable.cpp b/src/corelib/thread/qrunnable.cpp
index 64a2613d27..04aa39a81e 100644
--- a/src/corelib/thread/qrunnable.cpp
+++ b/src/corelib/thread/qrunnable.cpp
@@ -31,6 +31,15 @@
**
****************************************************************************/
+#include "qrunnable.h"
+
+QT_BEGIN_NAMESPACE
+
+QRunnable::~QRunnable()
+{
+ // Must be empty until ### Qt 6
+}
+
/*!
\class QRunnable
\inmodule QtCore
@@ -98,3 +107,5 @@
\sa autoDelete(), QThreadPool
*/
+
+QT_END_NAMESPACE
diff --git a/src/corelib/thread/qrunnable.h b/src/corelib/thread/qrunnable.h
index f00c58d51d..28d14a46c0 100644
--- a/src/corelib/thread/qrunnable.h
+++ b/src/corelib/thread/qrunnable.h
@@ -38,20 +38,21 @@
QT_BEGIN_NAMESPACE
-
-class QRunnable
+class Q_CORE_EXPORT QRunnable
{
int ref;
friend class QThreadPool;
friend class QThreadPoolPrivate;
friend class QThreadPoolThread;
-
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ Q_DISABLE_COPY(QRunnable)
+#endif
public:
virtual void run() = 0;
QRunnable() : ref(0) { }
- virtual ~QRunnable() { }
+ virtual ~QRunnable();
bool autoDelete() const { return ref != -1; }
void setAutoDelete(bool _autoDelete) { ref = _autoDelete ? 0 : -1; }
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index dc231a00f8..590479d68c 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -38,7 +38,6 @@
#include "qabstracteventdispatcher.h"
#include <qeventloop.h>
-#include <qhash.h>
#include "qthread_p.h"
#include "private/qcoreapplication_p.h"
@@ -51,7 +50,8 @@ QT_BEGIN_NAMESPACE
QThreadData::QThreadData(int initialRefCount)
: _ref(initialRefCount), loopLevel(0), thread(0), threadId(0),
- eventDispatcher(0), quitNow(false), canWait(true), isAdopted(false)
+ eventDispatcher(0),
+ quitNow(false), canWait(true), isAdopted(false), requiresCoreApplication(true)
{
// fprintf(stderr, "QThreadData %p created\n", this);
}
@@ -868,4 +868,28 @@ bool QThread::isInterruptionRequested() const
return d->interruptionRequested;
}
+/*!
+ \class QDaemonThread
+ \since 5.5
+ \brief The QDaemonThread provides a class to manage threads that outlive QCoreApplication
+ \internal
+
+ Note: don't try to deliver events from the started() signal.
+*/
+static void setThreadDoesNotRequireCoreApplication()
+{
+ QThreadData::current()->requiresCoreApplication = false;
+}
+
+QDaemonThread::QDaemonThread(QObject *parent)
+ : QThread(parent)
+{
+ // QThread::started() is emitted from the thread we start
+ connect(this, &QThread::started, setThreadDoesNotRequireCoreApplication);
+}
+
+QDaemonThread::~QDaemonThread()
+{
+}
+
QT_END_NAMESPACE
diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h
index bfc469583d..d333980bf4 100644
--- a/src/corelib/thread/qthread.h
+++ b/src/corelib/thread/qthread.h
@@ -55,7 +55,7 @@ public:
static int idealThreadCount() Q_DECL_NOTHROW;
static void yieldCurrentThread();
- explicit QThread(QObject *parent = 0);
+ explicit QThread(QObject *parent = Q_NULLPTR);
~QThread();
enum Priority {
@@ -116,7 +116,7 @@ protected:
static void setTerminationEnabled(bool enabled = true);
protected:
- QThread(QThreadPrivate &dd, QObject *parent = 0);
+ QThread(QThreadPrivate &dd, QObject *parent = Q_NULLPTR);
private:
Q_DECLARE_PRIVATE(QThread)
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index 8331816729..a0d354acdc 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -135,6 +135,13 @@ private:
#ifndef QT_NO_THREAD
+class Q_CORE_EXPORT QDaemonThread : public QThread
+{
+public:
+ QDaemonThread(QObject *parent = 0);
+ ~QDaemonThread();
+};
+
class QThreadPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QThread)
@@ -224,7 +231,7 @@ public:
QThreadData(int initialRefCount = 1);
~QThreadData();
- static QThreadData *current(bool createIfNecessary = true);
+ static Q_AUTOTEST_EXPORT QThreadData *current(bool createIfNecessary = true);
static void clearCurrentThreadData();
static QThreadData *get2(QThread *thread)
{ Q_ASSERT_X(thread != 0, "QThread", "internal error"); return thread->d_func()->data; }
@@ -278,6 +285,7 @@ public:
bool quitNow;
bool canWait;
bool isAdopted;
+ bool requiresCoreApplication;
};
class QScopedLoopLevelCounter
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index 5698a61326..af4ce7c59e 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -36,9 +36,13 @@
#include "qplatformdefs.h"
#include <private/qcoreapplication_p.h>
+#include <private/qcore_unix_p.h>
#if defined(Q_OS_BLACKBERRY)
# include <private/qeventdispatcher_blackberry_p.h>
+#elif defined(Q_OS_OSX)
+# include <private/qeventdispatcher_cf_p.h>
+# include <private/qeventdispatcher_unix_p.h>
#else
# if !defined(QT_NO_GLIB)
# include "../kernel/qeventdispatcher_glib_p.h"
@@ -75,9 +79,6 @@
# define old_qDebug qDebug
# undef qDebug
# endif
-#ifdef Q_OS_MACX
-# include <CoreServices/CoreServices.h>
-#endif // Q_OS_MACX
# ifdef old_qDebug
# undef qDebug
@@ -251,14 +252,21 @@ void QThreadPrivate::createEventDispatcher(QThreadData *data)
{
#if defined(Q_OS_BLACKBERRY)
data->eventDispatcher.storeRelease(new QEventDispatcherBlackberry);
-#else
-#if !defined(QT_NO_GLIB)
+# elif defined(Q_OS_OSX)
+ bool ok = false;
+ int value = qEnvironmentVariableIntValue("QT_EVENT_DISPATCHER_CORE_FOUNDATION", &ok);
+ if (ok && value > 0)
+ data->eventDispatcher.storeRelease(new QEventDispatcherCoreFoundation);
+ else
+ data->eventDispatcher.storeRelease(new QEventDispatcherUNIX);
+# elif !defined(QT_NO_GLIB)
if (qEnvironmentVariableIsEmpty("QT_NO_GLIB")
&& qEnvironmentVariableIsEmpty("QT_NO_THREADED_GLIB")
&& QEventDispatcherGlib::versionSupported())
data->eventDispatcher.storeRelease(new QEventDispatcherGlib);
else
-#endif
+ data->eventDispatcher.storeRelease(new QEventDispatcherUNIX);
+#else
data->eventDispatcher.storeRelease(new QEventDispatcherUNIX);
#endif
@@ -313,14 +321,15 @@ void *QThreadPrivate::start(void *arg)
createEventDispatcher(data);
#if (defined(Q_OS_LINUX) || defined(Q_OS_MAC) || defined(Q_OS_QNX))
- // sets the name of the current thread.
- QString objectName = thr->objectName();
-
- if (Q_LIKELY(objectName.isEmpty()))
- setCurrentThreadName(thr->d_func()->thread_id, thr->metaObject()->className());
- else
- setCurrentThreadName(thr->d_func()->thread_id, objectName.toLocal8Bit());
+ {
+ // sets the name of the current thread.
+ QString objectName = thr->objectName();
+ if (Q_LIKELY(objectName.isEmpty()))
+ setCurrentThreadName(thr->d_func()->thread_id, thr->metaObject()->className());
+ else
+ setCurrentThreadName(thr->d_func()->thread_id, objectName.toLocal8Bit());
+ }
#endif
emit thr->started(QThread::QPrivateSignal());
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index a4b853d62e..32e8a52a28 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -32,7 +32,7 @@
****************************************************************************/
//#define WINVER 0x0500
-#if !defined Q_OS_WINRT && (_WIN32_WINNT < 0x0400)
+#if !defined(WINAPI_FAMILY) && (_WIN32_WINNT < 0x0400)
#define _WIN32_WINNT 0x0400
#endif
@@ -69,6 +69,30 @@
#ifndef QT_NO_THREAD
QT_BEGIN_NAMESPACE
+#ifdef Q_OS_WINRT
+inline DWORD qWinRTTlsAlloc() {
+ return FlsAlloc(0);
+}
+
+inline bool qWinRTTlsFree(DWORD dwTlsIndex) {
+ return FlsFree(dwTlsIndex);
+}
+
+inline LPVOID qWinRTTlsGetValue(DWORD dwTlsIndex) {
+ return FlsGetValue(dwTlsIndex);
+}
+
+inline bool qWinRTTlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue) {
+ return FlsSetValue(dwTlsIndex, lpTlsValue);
+}
+
+#define TlsAlloc qWinRTTlsAlloc
+#define TlsFree qWinRTTlsFree
+#define TlsSetValue qWinRTTlsSetValue
+#define TlsGetValue qWinRTTlsGetValue
+
+#endif // Q_OS_WINRT
+
void qt_watch_adopted_thread(const HANDLE adoptedThreadHandle, QThread *qthread);
DWORD WINAPI qt_adopted_thread_watcher_function(LPVOID);
@@ -118,7 +142,7 @@ QThreadData *QThreadData::current(bool createIfNecessary)
}
threadData->deref();
threadData->isAdopted = true;
- threadData->threadId = reinterpret_cast<Qt::HANDLE>(GetCurrentThreadId());
+ threadData->threadId = reinterpret_cast<Qt::HANDLE>(quintptr(GetCurrentThreadId()));
if (!QCoreApplicationPrivate::theMainThread) {
QCoreApplicationPrivate::theMainThread = threadData->thread.load();
@@ -340,7 +364,7 @@ unsigned int __stdcall QT_ENSURE_STACK_ALIGNED_FOR_SSE QThreadPrivate::start(voi
qt_create_tls();
TlsSetValue(qt_current_thread_data_tls_index, data);
- data->threadId = reinterpret_cast<Qt::HANDLE>(GetCurrentThreadId());
+ data->threadId = reinterpret_cast<Qt::HANDLE>(quintptr(GetCurrentThreadId()));
QThread::setTerminationEnabled(false);
@@ -413,7 +437,7 @@ void QThreadPrivate::finish(void *arg, bool lockAnyway)
Qt::HANDLE QThread::currentThreadId() Q_DECL_NOTHROW
{
- return reinterpret_cast<Qt::HANDLE>(GetCurrentThreadId());
+ return reinterpret_cast<Qt::HANDLE>(quintptr(GetCurrentThreadId()));
}
int QThread::idealThreadCount() Q_DECL_NOTHROW
diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp
index b6b3be8d92..e4a5368281 100644
--- a/src/corelib/thread/qthreadpool.cpp
+++ b/src/corelib/thread/qthreadpool.cpp
@@ -204,8 +204,8 @@ void QThreadPoolPrivate::enqueueTask(QRunnable *runnable, int priority)
++runnable->ref;
// put it on the queue
- QList<QPair<QRunnable *, int> >::const_iterator begin = queue.constBegin();
- QList<QPair<QRunnable *, int> >::const_iterator it = queue.constEnd();
+ QVector<QPair<QRunnable *, int> >::const_iterator begin = queue.constBegin();
+ QVector<QPair<QRunnable *, int> >::const_iterator it = queue.constEnd();
if (it != begin && priority > (*(it - 1)).second)
it = std::upper_bound(begin, --it, priority);
queue.insert(it - begin, qMakePair(runnable, priority));
@@ -299,7 +299,7 @@ bool QThreadPoolPrivate::waitForDone(int msecs)
void QThreadPoolPrivate::clear()
{
QMutexLocker locker(&mutex);
- for (QList<QPair<QRunnable *, int> >::const_iterator it = queue.constBegin();
+ for (QVector<QPair<QRunnable *, int> >::const_iterator it = queue.constBegin();
it != queue.constEnd(); ++it) {
QRunnable* r = it->first;
if (r->autoDelete() && !--r->ref)
@@ -319,8 +319,8 @@ bool QThreadPoolPrivate::stealRunnable(QRunnable *runnable)
return false;
{
QMutexLocker locker(&mutex);
- QList<QPair<QRunnable *, int> >::iterator it = queue.begin();
- QList<QPair<QRunnable *, int> >::iterator end = queue.end();
+ QVector<QPair<QRunnable *, int> >::iterator it = queue.begin();
+ QVector<QPair<QRunnable *, int> >::iterator end = queue.end();
while (it != end) {
if (it->first == runnable) {
diff --git a/src/corelib/thread/qthreadpool.h b/src/corelib/thread/qthreadpool.h
index b1ca808a99..95b41a0417 100644
--- a/src/corelib/thread/qthreadpool.h
+++ b/src/corelib/thread/qthreadpool.h
@@ -55,7 +55,7 @@ class Q_CORE_EXPORT QThreadPool : public QObject
friend class QFutureInterfaceBase;
public:
- QThreadPool(QObject *parent = 0);
+ QThreadPool(QObject *parent = Q_NULLPTR);
~QThreadPool();
static QThreadPool *globalInstance();
diff --git a/src/corelib/thread/qthreadpool_p.h b/src/corelib/thread/qthreadpool_p.h
index 34728ed3e2..b03eefcc94 100644
--- a/src/corelib/thread/qthreadpool_p.h
+++ b/src/corelib/thread/qthreadpool_p.h
@@ -83,7 +83,7 @@ public:
QSet<QThreadPoolThread *> allThreads;
QQueue<QThreadPoolThread *> waitingThreads;
QQueue<QThreadPoolThread *> expiredThreads;
- QList<QPair<QRunnable *, int> > queue;
+ QVector<QPair<QRunnable *, int> > queue;
QWaitCondition noActiveThreads;
bool isExiting;
diff --git a/src/corelib/thread/qwaitcondition_unix.cpp b/src/corelib/thread/qwaitcondition_unix.cpp
index fd6af7db39..89bf523263 100644
--- a/src/corelib/thread/qwaitcondition_unix.cpp
+++ b/src/corelib/thread/qwaitcondition_unix.cpp
@@ -77,7 +77,7 @@ void qt_initialize_pthread_cond(pthread_cond_t *cond, const char *where)
#if defined(Q_OS_ANDROID)
if (local_condattr_setclock && QElapsedTimer::clockType() == QElapsedTimer::MonotonicClock)
local_condattr_setclock(&condattr, CLOCK_MONOTONIC);
-#elif !defined(Q_OS_MAC) && !defined(Q_OS_HAIKU)
+#elif !defined(Q_OS_MAC)
if (QElapsedTimer::clockType() == QElapsedTimer::MonotonicClock)
pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC);
#endif
diff --git a/src/corelib/thread/qwaitcondition_win.cpp b/src/corelib/thread/qwaitcondition_win.cpp
index ef8330570e..3ea34461d3 100644
--- a/src/corelib/thread/qwaitcondition_win.cpp
+++ b/src/corelib/thread/qwaitcondition_win.cpp
@@ -109,10 +109,10 @@ bool QWaitConditionPrivate::wait(QWaitConditionEvent *wce, unsigned long time)
{
// wait for the event
bool ret = false;
-#ifndef Q_OS_WINRT
- switch (WaitForSingleObject(wce->event, time)) {
-#else
+#ifndef Q_OS_WINCE
switch (WaitForSingleObjectEx(wce->event, time, FALSE)) {
+#else
+ switch (WaitForSingleObject(wce->event, time)) {
#endif
default: break;
diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h
index ff4d5a3ebd..ffa3082d5e 100644
--- a/src/corelib/tools/qalgorithms.h
+++ b/src/corelib/tools/qalgorithms.h
@@ -584,6 +584,131 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(long unsigne
#undef QALGORITHMS_USE_BUILTIN_POPCOUNT
#endif
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint32 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_ctz(v) : 32U;
+#else
+ // see http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightParallel
+ unsigned int c = 32; // c will be the number of zero bits on the right
+ v &= -signed(v);
+ if (v) c--;
+ if (v & 0x0000FFFF) c -= 16;
+ if (v & 0x00FF00FF) c -= 8;
+ if (v & 0x0F0F0F0F) c -= 4;
+ if (v & 0x33333333) c -= 2;
+ if (v & 0x55555555) c -= 1;
+ return c;
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint8 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_ctz(v) : 8U;
+#else
+ unsigned int c = 8; // c will be the number of zero bits on the right
+ v &= -signed(v);
+ if (v) c--;
+ if (v & 0x0000000F) c -= 4;
+ if (v & 0x00000033) c -= 2;
+ if (v & 0x00000055) c -= 1;
+ return c;
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint16 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_ctz(v) : 16U;
+#else
+ unsigned int c = 16; // c will be the number of zero bits on the right
+ v &= -signed(v);
+ if (v) c--;
+ if (v & 0x000000FF) c -= 8;
+ if (v & 0x00000F0F) c -= 4;
+ if (v & 0x00003333) c -= 2;
+ if (v & 0x00005555) c -= 1;
+ return c;
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint64 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_ctzll(v) : 64;
+#else
+ quint32 x = static_cast<quint32>(v);
+ return x ? qCountTrailingZeroBits(x)
+ : 32 + qCountTrailingZeroBits(static_cast<quint32>(v >> 32));
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(unsigned long v) Q_DECL_NOTHROW
+{
+ return qCountTrailingZeroBits(QIntegerForSizeof<long>::Unsigned(v));
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint32 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_clz(v) : 32U;
+#else
+ // Hacker's Delight, 2nd ed. Fig 5-16, p. 102
+ v = v | (v >> 1);
+ v = v | (v >> 2);
+ v = v | (v >> 4);
+ v = v | (v >> 8);
+ v = v | (v >> 16);
+ return qPopulationCount(~v);
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint8 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_clz(v)-24U : 8U;
+#else
+ v = v | (v >> 1);
+ v = v | (v >> 2);
+ v = v | (v >> 4);
+ return qPopulationCount(static_cast<quint8>(~v));
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint16 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_clz(v)-16U : 16U;
+#else
+ v = v | (v >> 1);
+ v = v | (v >> 2);
+ v = v | (v >> 4);
+ v = v | (v >> 8);
+ return qPopulationCount(static_cast<quint16>(~v));
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint64 v) Q_DECL_NOTHROW
+{
+#if defined(Q_CC_GNU)
+ return v ? __builtin_clzll(v) : 64U;
+#else
+ v = v | (v >> 1);
+ v = v | (v >> 2);
+ v = v | (v >> 4);
+ v = v | (v >> 8);
+ v = v | (v >> 16);
+ v = v | (v >> 32);
+ return qPopulationCount(~v);
+#endif
+}
+
+Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(unsigned long v) Q_DECL_NOTHROW
+{
+ return qCountLeadingZeroBits(QIntegerForSizeof<long>::Unsigned(v));
+}
+
QT_WARNING_POP
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qalgorithms.qdoc b/src/corelib/tools/qalgorithms.qdoc
index 193042e017..dac353fa70 100644
--- a/src/corelib/tools/qalgorithms.qdoc
+++ b/src/corelib/tools/qalgorithms.qdoc
@@ -785,3 +785,73 @@
\since 5.2
\overload
*/
+
+/*!
+ \fn uint qCountTrailingZeroBits(quint8 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+
+ Returns the number of consecutive zero bits in \a v, when searching from the LSB.
+ For example, qCountTrailingZeroBits(1) returns 0 and qCountTrailingZeroBits(8) returns 3.
+ */
+
+/*!
+ \fn uint qCountTrailingZeroBits(quint16 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+ \overload
+ */
+
+/*!
+ \fn uint qCountTrailingZeroBits(quint32 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+ \overload
+ */
+
+/*!
+ \fn uint qCountTrailingZeroBits(quint64 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+ \overload
+ */
+
+/*!
+ \fn uint qCountLeadingZeroBits(quint8 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+
+ Returns the number of consecutive zero bits in \a v, when searching from the MSB.
+ For example, qCountLeadingZeroBits(quint8(1)) returns 7 and
+ qCountLeadingZeroBits(quint8(8)) returns 4.
+ */
+
+/*!
+ \fn uint qCountLeadingZeroBits(quint16 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+
+ Returns the number of consecutive zero bits in \a v, when searching from the MSB.
+ For example, qCountLeadingZeroBits(quint16(1)) returns 15 and
+ qCountLeadingZeroBits(quint16(8)) returns 12.
+ */
+
+/*!
+ \fn uint qCountLeadingZeroBits(quint32 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+
+ Returns the number of consecutive zero bits in \a v, when searching from the MSB.
+ For example, qCountLeadingZeroBits(quint32(1)) returns 31 and
+ qCountLeadingZeroBits(quint32(8)) returns 28.
+ */
+
+/*!
+ \fn uint qCountLeadingZeroBits(quint64 v)
+ \relates <QtAlgorithms>
+ \since 5.6
+
+ Returns the number of consecutive zero bits in \a v, when searching from the MSB.
+ For example, qCountLeadingZeroBits(quint64(1)) returns 63 and
+ qCountLeadingZeroBits(quint64(8)) returns 60.
+ */
diff --git a/src/corelib/tools/qarraydata.cpp b/src/corelib/tools/qarraydata.cpp
index ef15fae83a..d9519745b0 100644
--- a/src/corelib/tools/qarraydata.cpp
+++ b/src/corelib/tools/qarraydata.cpp
@@ -103,7 +103,11 @@ QArrayData *QArrayData::allocate(size_t objectSize, size_t alignment,
quintptr data = (quintptr(header) + sizeof(QArrayData) + alignment - 1)
& ~(alignment - 1);
+#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
header->ref.atomic.store(bool(!(options & Unsharable)));
+#else
+ header->ref.atomic.store(1);
+#endif
header->size = 0;
header->alloc = capacity;
header->capacityReserved = bool(options & CapacityReserved);
diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h
index df35a1cb62..865bd4325d 100644
--- a/src/corelib/tools/qarraydata.h
+++ b/src/corelib/tools/qarraydata.h
@@ -132,7 +132,7 @@ struct QTypedArrayData
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(0) {}
+ inline iterator() : i(Q_NULLPTR) {}
inline iterator(T *n) : i(n) {}
inline iterator(const iterator &o): i(o.i){} // #### Qt 6: remove, the implicit version is fine
inline T &operator*() const { return *i; }
@@ -166,7 +166,7 @@ struct QTypedArrayData
typedef const T *pointer;
typedef const T &reference;
- inline const_iterator() : i(0) {}
+ inline const_iterator() : i(Q_NULLPTR) {}
inline const_iterator(const T *n) : i(n) {}
inline const_iterator(const const_iterator &o): i(o.i) {} // #### Qt 6: remove, the default version is fine
inline explicit const_iterator(const iterator &o): i(o.i) {}
@@ -249,11 +249,13 @@ struct QTypedArrayData
return allocate(/* capacity */ 0);
}
+#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
static QTypedArrayData *unsharableEmpty()
{
Q_STATIC_ASSERT(sizeof(QTypedArrayData) == sizeof(QArrayData));
return allocate(/* capacity */ 0, Unsharable);
}
+#endif
};
template <class T, size_t N>
diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h
index 103eb073a9..9804d2c2d5 100644
--- a/src/corelib/tools/qarraydatapointer.h
+++ b/src/corelib/tools/qarraydatapointer.h
@@ -46,7 +46,7 @@ private:
typedef QArrayDataOps<T> DataOps;
public:
- QArrayDataPointer()
+ QArrayDataPointer() Q_DECL_NOTHROW
: d(Data::sharedNull())
{
}
@@ -77,15 +77,16 @@ public:
}
#ifdef Q_COMPILER_RVALUE_REFS
- QArrayDataPointer(QArrayDataPointer &&other)
+ QArrayDataPointer(QArrayDataPointer &&other) Q_DECL_NOTHROW
: d(other.d)
{
other.d = Data::sharedNull();
}
- QArrayDataPointer &operator=(QArrayDataPointer &&other)
+ QArrayDataPointer &operator=(QArrayDataPointer &&other) Q_DECL_NOTHROW
{
- this->swap(other);
+ QArrayDataPointer moved(std::move(other));
+ this->swap(moved);
return *this;
}
#endif
@@ -143,7 +144,7 @@ public:
bool isSharable() const { return d->isSharable(); }
#endif
- void swap(QArrayDataPointer &other)
+ void swap(QArrayDataPointer &other) Q_DECL_NOTHROW
{
qSwap(d, other.d);
}
diff --git a/src/corelib/tools/qbitarray.cpp b/src/corelib/tools/qbitarray.cpp
index 5a161f517e..a64edea77e 100644
--- a/src/corelib/tools/qbitarray.cpp
+++ b/src/corelib/tools/qbitarray.cpp
@@ -604,7 +604,7 @@ QBitArray QBitArray::operator~() const
Example:
\snippet code/src_corelib_tools_qbitarray.cpp 12
- \sa QBitArray::operator&=(), operator|(), operator^()
+ \sa {QBitArray::}{operator&=()}, {QBitArray::}{operator|()}, {QBitArray::}{operator^()}
*/
QBitArray operator&(const QBitArray &a1, const QBitArray &a2)
@@ -650,7 +650,7 @@ QBitArray operator|(const QBitArray &a1, const QBitArray &a2)
Example:
\snippet code/src_corelib_tools_qbitarray.cpp 14
- \sa QBitArray::operator^=(), operator&(), operator|()
+ \sa {QBitArray}{operator^=()}, {QBitArray}{operator&()}, {QBitArray}{operator|()}
*/
QBitArray operator^(const QBitArray &a1, const QBitArray &a2)
diff --git a/src/corelib/tools/qbitarray.h b/src/corelib/tools/qbitarray.h
index 4e5c26b86a..e686d53db4 100644
--- a/src/corelib/tools/qbitarray.h
+++ b/src/corelib/tools/qbitarray.h
@@ -48,7 +48,7 @@ class Q_CORE_EXPORT QBitArray
QByteArray d;
public:
- inline QBitArray() {}
+ inline QBitArray() Q_DECL_NOTHROW {}
explicit QBitArray(int size, bool val = false);
QBitArray(const QBitArray &other) : d(other.d) {}
inline QBitArray &operator=(const QBitArray &other) { d = other.d; return *this; }
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 9d6c9d4ed1..00d15fd518 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -41,6 +41,7 @@
#include "qlocale_p.h"
#include "qstringalgorithms_p.h"
#include "qscopedpointer.h"
+#include "qbytearray_p.h"
#include <qdatastream.h>
#include <qmath.h>
@@ -123,7 +124,7 @@ int qFindByteArray(
int qAllocMore(int alloc, int extra) Q_DECL_NOTHROW
{
- Q_ASSERT(alloc >= 0 && extra >= 0);
+ Q_ASSERT(alloc >= 0 && extra >= 0 && extra <= MaxAllocSize);
Q_ASSERT_X(alloc <= MaxAllocSize - extra, "qAllocMore", "Requested size is too large!");
unsigned nalloc = qNextPowerOfTwo(alloc + extra);
@@ -488,8 +489,8 @@ quint16 qChecksum(const char *data, uint len)
\overload
- Compresses the first \a nbytes of \a data and returns the
- compressed data in a new byte array.
+ Compresses the first \a nbytes of \a data at compression level
+ \a compressionLevel and returns the compressed data in a new byte array.
*/
#ifndef QT_NO_COMPRESS
@@ -577,8 +578,8 @@ QByteArray qUncompress(const uchar* data, int nbytes)
qWarning("qUncompress: Input data is corrupted");
return QByteArray();
}
- ulong expectedSize = (data[0] << 24) | (data[1] << 16) |
- (data[2] << 8) | (data[3] );
+ ulong expectedSize = uint((data[0] << 24) | (data[1] << 16) |
+ (data[2] << 8) | (data[3] ));
ulong len = qMax(expectedSize, 1ul);
QScopedPointer<QByteArray::Data, QScopedPointerPodDeleter> d;
@@ -838,15 +839,6 @@ static inline char qToLower(char c)
*/
/*!
- \variable QByteArray::MaxSize
- \internal
- \since 5.4
-
- The maximum size of a QByteArray, in bytes. Also applies to a the maximum
- storage size of QString and QVector, though not the number of elements.
-*/
-
-/*!
\enum QByteArray::Base64Option
\since 5.2
@@ -927,6 +919,52 @@ static inline char qToLower(char c)
\sa constBegin(), end()
*/
+/*! \fn QByteArray::reverse_iterator QByteArray::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ character in the byte-array, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QByteArray::const_reverse_iterator QByteArray::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QByteArray::const_reverse_iterator QByteArray::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ character in the byte-array, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QByteArray::reverse_iterator QByteArray::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last character in the byte-array, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QByteArray::const_reverse_iterator QByteArray::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QByteArray::const_reverse_iterator QByteArray::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last character in the byte-array, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*! \fn void QByteArray::push_back(const QByteArray &other)
This function is provided for STL compatibility. It is equivalent
@@ -1574,7 +1612,7 @@ void QByteArray::reallocData(uint alloc, Data::AllocationOptions options)
d = x;
} else {
if (options & Data::Grow) {
- if (alloc > uint(MaxAllocSize) - uint(sizeof(Data)))
+ if (alloc > MaxByteArraySize)
qBadAlloc();
alloc = qAllocMore(alloc, sizeof(Data));
}
@@ -2845,9 +2883,9 @@ QByteArray QByteArray::toUpper_helper(QByteArray &a)
/*! \fn void QByteArray::clear()
- Clears the contents of the byte array and makes it empty.
+ Clears the contents of the byte array and makes it null.
- \sa resize(), isEmpty()
+ \sa resize(), isNull()
*/
void QByteArray::clear()
@@ -4489,11 +4527,33 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA
*/
/*! \typedef QByteArray::const_iterator
- \internal
+
+ This typedef provides an STL-style const iterator for QByteArray.
+
+ \sa QByteArray::const_reverse_iterator, QByteArray::iterator
*/
/*! \typedef QByteArray::iterator
- \internal
+
+ This typedef provides an STL-style non-const iterator for QByteArray.
+
+ \sa QByteArray::reverse_iterator, QByteArray::const_iterator
+*/
+
+/*! \typedef QByteArray::const_reverse_iterator
+ \since 5.6
+
+ This typedef provides an STL-style const reverse iterator for QByteArray.
+
+ \sa QByteArray::reverse_iterator, QByteArray::const_iterator
+*/
+
+/*! \typedef QByteArray::reverse_iterator
+ \since 5.6
+
+ This typedef provides an STL-style non-const reverse iterator for QByteArray.
+
+ \sa QByteArray::const_reverse_iterator, QByteArray::iterator
*/
/*! \typedef QByteArray::size_type
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index 6d14cd5131..f0032227e8 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -43,6 +43,7 @@
#include <stdarg.h>
#include <string>
+#include <iterator>
#ifdef truncate
#error qbytearray.h must be included before any header file that defines truncate
@@ -162,9 +163,6 @@ private:
typedef QTypedArrayData<char> Data;
public:
- // undocumented:
- static const quint64 MaxSize = (1 << 30) - sizeof(Data);
-
enum Base64Option {
Base64Encoding = 0,
Base64UrlEncoding = 1,
@@ -338,16 +336,16 @@ public:
inline QT_ASCII_CAST_WARN bool operator>=(const QString &s2) const;
#endif
- short toShort(bool *ok = 0, int base = 10) const;
- ushort toUShort(bool *ok = 0, int base = 10) const;
- int toInt(bool *ok = 0, int base = 10) const;
- uint toUInt(bool *ok = 0, int base = 10) const;
- long toLong(bool *ok = 0, int base = 10) const;
- ulong toULong(bool *ok = 0, int base = 10) const;
- qlonglong toLongLong(bool *ok = 0, int base = 10) const;
- qulonglong toULongLong(bool *ok = 0, int base = 10) const;
- float toFloat(bool *ok = 0) const;
- double toDouble(bool *ok = 0) const;
+ short toShort(bool *ok = Q_NULLPTR, int base = 10) const;
+ ushort toUShort(bool *ok = Q_NULLPTR, int base = 10) const;
+ int toInt(bool *ok = Q_NULLPTR, int base = 10) const;
+ uint toUInt(bool *ok = Q_NULLPTR, int base = 10) const;
+ long toLong(bool *ok = Q_NULLPTR, int base = 10) const;
+ ulong toULong(bool *ok = Q_NULLPTR, int base = 10) const;
+ qlonglong toLongLong(bool *ok = Q_NULLPTR, int base = 10) const;
+ qulonglong toULongLong(bool *ok = Q_NULLPTR, int base = 10) const;
+ float toFloat(bool *ok = Q_NULLPTR) const;
+ double toDouble(bool *ok = Q_NULLPTR) const;
QByteArray toBase64(Base64Options options) const;
QByteArray toBase64() const; // ### Qt6 merge with previous
QByteArray toHex() const;
@@ -393,14 +391,22 @@ public:
typedef const char *const_iterator;
typedef iterator Iterator;
typedef const_iterator ConstIterator;
- iterator begin();
- const_iterator begin() const;
- const_iterator cbegin() const;
- const_iterator constBegin() const;
- iterator end();
- const_iterator end() const;
- const_iterator cend() const;
- const_iterator constEnd() const;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ inline iterator begin();
+ inline const_iterator begin() const;
+ inline const_iterator cbegin() const;
+ inline const_iterator constBegin() const;
+ inline iterator end();
+ inline const_iterator end() const;
+ inline const_iterator cend() const;
+ inline const_iterator constEnd() const;
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(begin()); }
// stl compatibility
typedef int size_type;
diff --git a/src/corelib/tools/qbytearray_p.h b/src/corelib/tools/qbytearray_p.h
new file mode 100644
index 0000000000..78c667aa90
--- /dev/null
+++ b/src/corelib/tools/qbytearray_p.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBYTEARRAY_P_H
+#define QBYTEARRAY_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qbytearray.h>
+#include <QtCore/qtypetraits.h>
+#include "qtools_p.h"
+
+QT_BEGIN_NAMESPACE
+
+enum {
+ // Define as enum to force inlining. Don't expose MaxAllocSize in a public header.
+ MaxByteArraySize = MaxAllocSize - sizeof(QtPrivate::remove_pointer<QByteArray::DataPtr>::type)
+};
+
+QT_END_NAMESPACE
+
+#endif // QBYTEARRAY_P_H
diff --git a/src/corelib/tools/qbytearraylist.h b/src/corelib/tools/qbytearraylist.h
index f8539ca07a..8b832b7760 100644
--- a/src/corelib/tools/qbytearraylist.h
+++ b/src/corelib/tools/qbytearraylist.h
@@ -61,7 +61,7 @@ protected:
#endif
public:
inline QByteArray join() const
- { return QtPrivate::QByteArrayList_join(self(), 0, 0); }
+ { return QtPrivate::QByteArrayList_join(self(), Q_NULLPTR, 0); }
inline QByteArray join(const QByteArray &sep) const
{ return QtPrivate::QByteArrayList_join(self(), sep.constData(), sep.size()); }
inline QByteArray join(char sep) const
diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp
index 014d91162a..78fa0bccf0 100644
--- a/src/corelib/tools/qchar.cpp
+++ b/src/corelib/tools/qchar.cpp
@@ -178,8 +178,10 @@ QT_BEGIN_NAMESPACE
\value Unicode_6_1 Version 6.1
\value Unicode_6_2 Version 6.2
\value Unicode_6_3 Version 6.3 Since Qt 5.3
+ \value Unicode_7_0 Version 7.0 Since Qt 5.5
+ \value Unicode_8_0 Version 8.0 Since Qt 5.6
\value Unicode_Unassigned The value is not assigned to any character
- in version 6.3 of Unicode.
+ in version 8.0 of Unicode.
\sa unicodeVersion(), currentUnicodeVersion()
*/
@@ -400,6 +402,12 @@ QT_BEGIN_NAMESPACE
\value Script_Khudawadi
\value Script_Tirhuta
\value Script_WarangCiti
+ \value Script_Ahom
+ \value Script_AnatolianHieroglyphs
+ \value Script_Hatran
+ \value Script_Multani
+ \value Script_OldHungarian
+ \value Script_SignWriting
\omitvalue ScriptCount
@@ -691,7 +699,7 @@ QT_BEGIN_NAMESPACE
Note that this gives no indication of whether the character is
available in a particular font.
*/
-bool QChar::isPrint(uint ucs4)
+bool QChar::isPrint(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -724,7 +732,7 @@ bool QChar::isPrint(uint ucs4)
/*!
\internal
*/
-bool QT_FASTCALL QChar::isSpace_helper(uint ucs4)
+bool QT_FASTCALL QChar::isSpace_helper(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -750,7 +758,7 @@ bool QT_FASTCALL QChar::isSpace_helper(uint ucs4)
Returns \c true if the UCS-4-encoded character specified by \a ucs4 is
a mark (Mark_* categories); otherwise returns \c false.
*/
-bool QChar::isMark(uint ucs4)
+bool QChar::isMark(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -774,7 +782,7 @@ bool QChar::isMark(uint ucs4)
Returns \c true if the UCS-4-encoded character specified by \a ucs4 is
a punctuation mark (Punctuation_* categories); otherwise returns \c false.
*/
-bool QChar::isPunct(uint ucs4)
+bool QChar::isPunct(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -802,7 +810,7 @@ bool QChar::isPunct(uint ucs4)
Returns \c true if the UCS-4-encoded character specified by \a ucs4 is
a symbol (Symbol_* categories); otherwise returns \c false.
*/
-bool QChar::isSymbol(uint ucs4)
+bool QChar::isSymbol(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -832,7 +840,7 @@ bool QChar::isSymbol(uint ucs4)
/*!
\internal
*/
-bool QT_FASTCALL QChar::isLetter_helper(uint ucs4)
+bool QT_FASTCALL QChar::isLetter_helper(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -867,7 +875,7 @@ bool QT_FASTCALL QChar::isLetter_helper(uint ucs4)
/*!
\internal
*/
-bool QT_FASTCALL QChar::isNumber_helper(uint ucs4)
+bool QT_FASTCALL QChar::isNumber_helper(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -896,7 +904,7 @@ bool QT_FASTCALL QChar::isNumber_helper(uint ucs4)
/*!
\internal
*/
-bool QT_FASTCALL QChar::isLetterOrNumber_helper(uint ucs4)
+bool QT_FASTCALL QChar::isLetterOrNumber_helper(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -1059,7 +1067,7 @@ bool QT_FASTCALL QChar::isLetterOrNumber_helper(uint ucs4)
Returns the numeric value of the digit specified by the UCS-4-encoded
character, \a ucs4, or -1 if the character is not a digit.
*/
-int QChar::digitValue(uint ucs4)
+int QChar::digitValue(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return -1;
@@ -1076,7 +1084,7 @@ int QChar::digitValue(uint ucs4)
\overload
Returns the category of the UCS-4-encoded character specified by \a ucs4.
*/
-QChar::Category QChar::category(uint ucs4)
+QChar::Category QChar::category(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return QChar::Other_NotAssigned;
@@ -1093,7 +1101,7 @@ QChar::Category QChar::category(uint ucs4)
\overload
Returns the direction of the UCS-4-encoded character specified by \a ucs4.
*/
-QChar::Direction QChar::direction(uint ucs4)
+QChar::Direction QChar::direction(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return QChar::DirL;
@@ -1116,7 +1124,7 @@ QChar::Direction QChar::direction(uint ucs4)
character specified by \a ucs4
(needed for certain languages such as Arabic or Syriac).
*/
-QChar::JoiningType QChar::joiningType(uint ucs4)
+QChar::JoiningType QChar::joiningType(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return QChar::Joining_None;
@@ -1139,7 +1147,7 @@ QChar::JoiningType QChar::joiningType(uint ucs4)
Returns information about the joining properties of the UCS-4-encoded
character specified by \a ucs4 (needed for certain languages such as Arabic).
*/
-QChar::Joining QChar::joining(uint ucs4)
+QChar::Joining QChar::joining(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return QChar::OtherJoining;
@@ -1175,7 +1183,7 @@ QChar::Joining QChar::joining(uint ucs4)
\sa mirroredChar()
*/
-bool QChar::hasMirrored(uint ucs4)
+bool QChar::hasMirrored(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return false;
@@ -1257,7 +1265,7 @@ bool QChar::hasMirrored(uint ucs4)
\sa hasMirrored()
*/
-uint QChar::mirroredChar(uint ucs4)
+uint QChar::mirroredChar(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return ucs4;
@@ -1341,7 +1349,7 @@ QString QChar::decomposition(uint ucs4)
Returns the tag defining the composition of the UCS-4-encoded character
specified by \a ucs4. Returns QChar::NoDecomposition if no decomposition exists.
*/
-QChar::Decomposition QChar::decompositionTag(uint ucs4)
+QChar::Decomposition QChar::decompositionTag(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 >= Hangul_SBase && ucs4 < Hangul_SBase + Hangul_SCount)
return QChar::Canonical;
@@ -1367,7 +1375,7 @@ QChar::Decomposition QChar::decompositionTag(uint ucs4)
Returns the combining class for the UCS-4-encoded character specified by
\a ucs4, as defined in the Unicode standard.
*/
-unsigned char QChar::combiningClass(uint ucs4)
+unsigned char QChar::combiningClass(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return 0;
@@ -1388,7 +1396,7 @@ unsigned char QChar::combiningClass(uint ucs4)
Returns the Unicode script property value for the character specified in
its UCS-4-encoded form as \a ucs4.
*/
-QChar::Script QChar::script(uint ucs4)
+QChar::Script QChar::script(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return QChar::Script_Unknown;
@@ -1406,7 +1414,7 @@ QChar::Script QChar::script(uint ucs4)
Returns the Unicode version that introduced the character specified in
its UCS-4-encoded form as \a ucs4.
*/
-QChar::UnicodeVersion QChar::unicodeVersion(uint ucs4)
+QChar::UnicodeVersion QChar::unicodeVersion(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return QChar::Unicode_Unassigned;
@@ -1416,54 +1424,24 @@ QChar::UnicodeVersion QChar::unicodeVersion(uint ucs4)
/*!
Returns the most recent supported Unicode version.
*/
-QChar::UnicodeVersion QChar::currentUnicodeVersion()
+QChar::UnicodeVersion QChar::currentUnicodeVersion() Q_DECL_NOTHROW
{
return UNICODE_DATA_VERSION;
}
-template <typename T>
-Q_DECL_CONST_FUNCTION static inline T toLowerCase_helper(T uc)
+template <typename Traits, typename T>
+Q_DECL_CONST_FUNCTION static inline T convertCase_helper(T uc) Q_DECL_NOTHROW
{
- const QUnicodeTables::Properties *p = qGetProp(uc);
- if (p->lowerCaseSpecial) {
- const ushort *specialCase = specialCaseMap + p->lowerCaseDiff;
- return (*specialCase == 1) ? specialCase[1] : uc;
- }
- return uc + p->lowerCaseDiff;
-}
-
-template <typename T>
-Q_DECL_CONST_FUNCTION static inline T toUpperCase_helper(T uc)
-{
- const QUnicodeTables::Properties *p = qGetProp(uc);
- if (p->upperCaseSpecial) {
- const ushort *specialCase = specialCaseMap + p->upperCaseDiff;
- return (*specialCase == 1) ? specialCase[1] : uc;
- }
- return uc + p->upperCaseDiff;
-}
+ const QUnicodeTables::Properties *prop = qGetProp(uc);
-template <typename T>
-Q_DECL_CONST_FUNCTION static inline T toTitleCase_helper(T uc)
-{
- const QUnicodeTables::Properties *p = qGetProp(uc);
- if (p->titleCaseSpecial) {
- const ushort *specialCase = specialCaseMap + p->titleCaseDiff;
- return (*specialCase == 1) ? specialCase[1] : uc;
+ if (Q_UNLIKELY(Traits::caseSpecial(prop))) {
+ const ushort *specialCase = specialCaseMap + Traits::caseDiff(prop);
+ // so far, there are no special cases beyond BMP (guaranteed by the qunicodetables generator)
+ return *specialCase == 1 ? specialCase[1] : uc;
}
- return uc + p->titleCaseDiff;
-}
-template <typename T>
-Q_DECL_CONST_FUNCTION static inline T toCaseFolded_helper(T uc)
-{
- const QUnicodeTables::Properties *p = qGetProp(uc);
- if (p->caseFoldSpecial) {
- const ushort *specialCase = specialCaseMap + p->caseFoldDiff;
- return (*specialCase == 1) ? specialCase[1] : uc;
- }
- return uc + p->caseFoldDiff;
+ return uc + Traits::caseDiff(prop);
}
/*!
@@ -1479,11 +1457,11 @@ Q_DECL_CONST_FUNCTION static inline T toCaseFolded_helper(T uc)
by \a ucs4 if the character is uppercase or titlecase; otherwise returns
the character itself.
*/
-uint QChar::toLower(uint ucs4)
+uint QChar::toLower(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return ucs4;
- return toLowerCase_helper<uint>(ucs4);
+ return convertCase_helper<QUnicodeTables::LowercaseTraits>(ucs4);
}
/*!
@@ -1499,11 +1477,11 @@ uint QChar::toLower(uint ucs4)
by \a ucs4 if the character is lowercase or titlecase; otherwise returns
the character itself.
*/
-uint QChar::toUpper(uint ucs4)
+uint QChar::toUpper(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return ucs4;
- return toUpperCase_helper<uint>(ucs4);
+ return convertCase_helper<QUnicodeTables::UppercaseTraits>(ucs4);
}
/*!
@@ -1519,33 +1497,33 @@ uint QChar::toUpper(uint ucs4)
by \a ucs4 if the character is lowercase or uppercase; otherwise returns
the character itself.
*/
-uint QChar::toTitleCase(uint ucs4)
+uint QChar::toTitleCase(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return ucs4;
- return toTitleCase_helper<uint>(ucs4);
+ return convertCase_helper<QUnicodeTables::TitlecaseTraits>(ucs4);
}
static inline uint foldCase(const ushort *ch, const ushort *start)
{
- uint c = *ch;
- if (QChar(c).isLowSurrogate() && ch > start && QChar(*(ch - 1)).isHighSurrogate())
- c = QChar::surrogateToUcs4(*(ch - 1), c);
- return toCaseFolded_helper<uint>(c);
+ uint ucs4 = *ch;
+ if (QChar::isLowSurrogate(ucs4) && ch > start && QChar::isHighSurrogate(*(ch - 1)))
+ ucs4 = QChar::surrogateToUcs4(*(ch - 1), ucs4);
+ return convertCase_helper<QUnicodeTables::CasefoldTraits>(ucs4);
}
-static inline uint foldCase(uint ch, uint &last)
+static inline uint foldCase(uint ch, uint &last) Q_DECL_NOTHROW
{
- uint c = ch;
- if (QChar(c).isLowSurrogate() && QChar(last).isHighSurrogate())
- c = QChar::surrogateToUcs4(last, c);
+ uint ucs4 = ch;
+ if (QChar::isLowSurrogate(ucs4) && QChar::isHighSurrogate(last))
+ ucs4 = QChar::surrogateToUcs4(last, ucs4);
last = ch;
- return toCaseFolded_helper<uint>(c);
+ return convertCase_helper<QUnicodeTables::CasefoldTraits>(ucs4);
}
-static inline ushort foldCase(ushort ch)
+static inline ushort foldCase(ushort ch) Q_DECL_NOTHROW
{
- return toCaseFolded_helper<ushort>(ch);
+ return convertCase_helper<QUnicodeTables::CasefoldTraits>(ch);
}
/*!
@@ -1560,11 +1538,11 @@ static inline ushort foldCase(ushort ch)
Returns the case folded equivalent of the UCS-4-encoded character specified
by \a ucs4. For most Unicode characters this is the same as toLower().
*/
-uint QChar::toCaseFolded(uint ucs4)
+uint QChar::toCaseFolded(uint ucs4) Q_DECL_NOTHROW
{
if (ucs4 > LastValidCodePoint)
return ucs4;
- return toCaseFolded_helper<uint>(ucs4);
+ return convertCase_helper<QUnicodeTables::CasefoldTraits>(ucs4);
}
/*!
diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h
index 97e2aa7088..9833380cc8 100644
--- a/src/corelib/tools/qchar.h
+++ b/src/corelib/tools/qchar.h
@@ -44,9 +44,9 @@ class QString;
struct QLatin1Char
{
public:
- Q_DECL_CONSTEXPR inline explicit QLatin1Char(char c) : ch(c) {}
- Q_DECL_CONSTEXPR inline char toLatin1() const { return ch; }
- Q_DECL_CONSTEXPR inline ushort unicode() const { return ushort(uchar(ch)); }
+ Q_DECL_CONSTEXPR inline explicit QLatin1Char(char c) Q_DECL_NOTHROW : ch(c) {}
+ Q_DECL_CONSTEXPR inline char toLatin1() const Q_DECL_NOTHROW { return ch; }
+ Q_DECL_CONSTEXPR inline ushort unicode() const Q_DECL_NOTHROW { return ushort(uchar(ch)); }
private:
char ch;
@@ -72,19 +72,19 @@ public:
LastValidCodePoint = 0x10ffff
};
- Q_DECL_CONSTEXPR QChar() : ucs(0) {}
- Q_DECL_CONSTEXPR QChar(ushort rc) : ucs(rc){} // implicit
- Q_DECL_CONSTEXPR QChar(uchar c, uchar r) : ucs(ushort((r << 8) | c)){}
- Q_DECL_CONSTEXPR QChar(short rc) : ucs(ushort(rc)){} // implicit
- Q_DECL_CONSTEXPR QChar(uint rc) : ucs(ushort(rc & 0xffff)){}
- Q_DECL_CONSTEXPR QChar(int rc) : ucs(ushort(rc & 0xffff)){}
- Q_DECL_CONSTEXPR QChar(SpecialCharacter s) : ucs(ushort(s)) {} // implicit
- Q_DECL_CONSTEXPR QChar(QLatin1Char ch) : ucs(ch.unicode()) {} // implicit
+ Q_DECL_CONSTEXPR QChar() Q_DECL_NOTHROW : ucs(0) {}
+ Q_DECL_CONSTEXPR QChar(ushort rc) Q_DECL_NOTHROW : ucs(rc) {} // implicit
+ Q_DECL_CONSTEXPR QChar(uchar c, uchar r) Q_DECL_NOTHROW : ucs(ushort((r << 8) | c)) {}
+ Q_DECL_CONSTEXPR QChar(short rc) Q_DECL_NOTHROW : ucs(ushort(rc)) {} // implicit
+ Q_DECL_CONSTEXPR QChar(uint rc) Q_DECL_NOTHROW : ucs(ushort(rc & 0xffff)) {}
+ Q_DECL_CONSTEXPR QChar(int rc) Q_DECL_NOTHROW : ucs(ushort(rc & 0xffff)) {}
+ Q_DECL_CONSTEXPR QChar(SpecialCharacter s) Q_DECL_NOTHROW : ucs(ushort(s)) {} // implicit
+ Q_DECL_CONSTEXPR QChar(QLatin1Char ch) Q_DECL_NOTHROW : ucs(ch.unicode()) {} // implicit
#ifndef QT_NO_CAST_FROM_ASCII
- QT_ASCII_CAST_WARN Q_DECL_CONSTEXPR explicit QChar(char c) : ucs(uchar(c)) { }
+ QT_ASCII_CAST_WARN Q_DECL_CONSTEXPR explicit QChar(char c) Q_DECL_NOTHROW : ucs(uchar(c)) { }
#ifndef QT_RESTRICTED_CAST_FROM_ASCII
- QT_ASCII_CAST_WARN Q_DECL_CONSTEXPR explicit QChar(uchar c) : ucs(c) { }
+ QT_ASCII_CAST_WARN Q_DECL_CONSTEXPR explicit QChar(uchar c) Q_DECL_NOTHROW : ucs(c) { }
#endif
#endif
// Unicode information
@@ -275,6 +275,14 @@ public:
Script_Tirhuta,
Script_WarangCiti,
+ // Unicode 8.0 additions
+ Script_Ahom,
+ Script_AnatolianHieroglyphs,
+ Script_Hatran,
+ Script_Multani,
+ Script_OldHungarian,
+ Script_SignWriting,
+
ScriptCount
};
@@ -365,15 +373,16 @@ public:
Unicode_6_1,
Unicode_6_2,
Unicode_6_3,
- Unicode_7_0
+ Unicode_7_0,
+ Unicode_8_0
};
// ****** WHEN ADDING FUNCTIONS, CONSIDER ADDING TO QCharRef TOO
- inline Category category() const { return QChar::category(ucs); }
- inline Direction direction() const { return QChar::direction(ucs); }
- inline JoiningType joiningType() const { return QChar::joiningType(ucs); }
+ inline Category category() const Q_DECL_NOTHROW { return QChar::category(ucs); }
+ inline Direction direction() const Q_DECL_NOTHROW { return QChar::direction(ucs); }
+ inline JoiningType joiningType() const Q_DECL_NOTHROW { return QChar::joiningType(ucs); }
#if QT_DEPRECATED_SINCE(5, 3)
- QT_DEPRECATED inline Joining joining() const
+ QT_DEPRECATED inline Joining joining() const Q_DECL_NOTHROW
{
switch (QChar::joiningType(ucs)) {
case QChar::Joining_Causing: return QChar::Center;
@@ -386,194 +395,177 @@ public:
}
}
#endif
- inline unsigned char combiningClass() const { return QChar::combiningClass(ucs); }
+ inline unsigned char combiningClass() const Q_DECL_NOTHROW { return QChar::combiningClass(ucs); }
- inline QChar mirroredChar() const { return QChar::mirroredChar(ucs); }
- inline bool hasMirrored() const { return QChar::hasMirrored(ucs); }
+ inline QChar mirroredChar() const Q_DECL_NOTHROW { return QChar::mirroredChar(ucs); }
+ inline bool hasMirrored() const Q_DECL_NOTHROW { return QChar::hasMirrored(ucs); }
QString decomposition() const;
- inline Decomposition decompositionTag() const { return QChar::decompositionTag(ucs); }
+ inline Decomposition decompositionTag() const Q_DECL_NOTHROW { return QChar::decompositionTag(ucs); }
- inline int digitValue() const { return QChar::digitValue(ucs); }
- inline QChar toLower() const { return QChar::toLower(ucs); }
- inline QChar toUpper() const { return QChar::toUpper(ucs); }
- inline QChar toTitleCase() const { return QChar::toTitleCase(ucs); }
- inline QChar toCaseFolded() const { return QChar::toCaseFolded(ucs); }
+ inline int digitValue() const Q_DECL_NOTHROW { return QChar::digitValue(ucs); }
+ inline QChar toLower() const Q_DECL_NOTHROW { return QChar::toLower(ucs); }
+ inline QChar toUpper() const Q_DECL_NOTHROW { return QChar::toUpper(ucs); }
+ inline QChar toTitleCase() const Q_DECL_NOTHROW { return QChar::toTitleCase(ucs); }
+ inline QChar toCaseFolded() const Q_DECL_NOTHROW { return QChar::toCaseFolded(ucs); }
- inline Script script() const { return QChar::script(ucs); }
+ inline Script script() const Q_DECL_NOTHROW { return QChar::script(ucs); }
- inline UnicodeVersion unicodeVersion() const { return QChar::unicodeVersion(ucs); }
+ inline UnicodeVersion unicodeVersion() const Q_DECL_NOTHROW { return QChar::unicodeVersion(ucs); }
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED Q_DECL_CONSTEXPR inline char toAscii() const { return toLatin1(); }
+ QT_DEPRECATED Q_DECL_CONSTEXPR inline char toAscii() const Q_DECL_NOTHROW { return toLatin1(); }
#endif
- Q_DECL_CONSTEXPR inline char toLatin1() const;
- Q_DECL_CONSTEXPR inline ushort unicode() const { return ucs; }
- inline ushort &unicode() { return ucs; }
+ Q_DECL_CONSTEXPR inline char toLatin1() const Q_DECL_NOTHROW { return ucs > 0xff ? '\0' : char(ucs); }
+ Q_DECL_CONSTEXPR inline ushort unicode() const Q_DECL_NOTHROW { return ucs; }
+ Q_DECL_RELAXED_CONSTEXPR inline ushort &unicode() Q_DECL_NOTHROW { return ucs; }
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED static Q_DECL_CONSTEXPR inline QChar fromAscii(char c)
+ QT_DEPRECATED static Q_DECL_CONSTEXPR inline QChar fromAscii(char c) Q_DECL_NOTHROW
{ return fromLatin1(c); }
#endif
- Q_DECL_CONSTEXPR static inline QChar fromLatin1(char c);
-
- Q_DECL_CONSTEXPR inline bool isNull() const { return ucs == 0; }
-
- inline bool isPrint() const { return QChar::isPrint(ucs); }
- Q_DECL_CONSTEXPR inline bool isSpace() const { return QChar::isSpace(ucs); }
- inline bool isMark() const { return QChar::isMark(ucs); }
- inline bool isPunct() const { return QChar::isPunct(ucs); }
- inline bool isSymbol() const { return QChar::isSymbol(ucs); }
- Q_DECL_CONSTEXPR inline bool isLetter() const { return QChar::isLetter(ucs); }
- Q_DECL_CONSTEXPR inline bool isNumber() const { return QChar::isNumber(ucs); }
- Q_DECL_CONSTEXPR inline bool isLetterOrNumber() const { return QChar::isLetterOrNumber(ucs); }
- Q_DECL_CONSTEXPR inline bool isDigit() const { return QChar::isDigit(ucs); }
- Q_DECL_CONSTEXPR inline bool isLower() const { return QChar::isLower(ucs); }
- Q_DECL_CONSTEXPR inline bool isUpper() const { return QChar::isUpper(ucs); }
- Q_DECL_CONSTEXPR inline bool isTitleCase() const { return QChar::isTitleCase(ucs); }
-
- Q_DECL_CONSTEXPR inline bool isNonCharacter() const { return QChar::isNonCharacter(ucs); }
- Q_DECL_CONSTEXPR inline bool isHighSurrogate() const { return QChar::isHighSurrogate(ucs); }
- Q_DECL_CONSTEXPR inline bool isLowSurrogate() const { return QChar::isLowSurrogate(ucs); }
- Q_DECL_CONSTEXPR inline bool isSurrogate() const { return QChar::isSurrogate(ucs); }
-
- Q_DECL_CONSTEXPR inline uchar cell() const { return uchar(ucs & 0xff); }
- Q_DECL_CONSTEXPR inline uchar row() const { return uchar((ucs>>8)&0xff); }
- inline void setCell(uchar cell);
- inline void setRow(uchar row);
-
- static Q_DECL_CONSTEXPR inline bool isNonCharacter(uint ucs4)
+ static Q_DECL_CONSTEXPR inline QChar fromLatin1(char c) Q_DECL_NOTHROW { return QChar(ushort(uchar(c))); }
+
+ Q_DECL_CONSTEXPR inline bool isNull() const Q_DECL_NOTHROW { return ucs == 0; }
+
+ inline bool isPrint() const Q_DECL_NOTHROW { return QChar::isPrint(ucs); }
+ Q_DECL_CONSTEXPR inline bool isSpace() const Q_DECL_NOTHROW { return QChar::isSpace(ucs); }
+ inline bool isMark() const Q_DECL_NOTHROW { return QChar::isMark(ucs); }
+ inline bool isPunct() const Q_DECL_NOTHROW { return QChar::isPunct(ucs); }
+ inline bool isSymbol() const Q_DECL_NOTHROW { return QChar::isSymbol(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLetter() const Q_DECL_NOTHROW { return QChar::isLetter(ucs); }
+ Q_DECL_CONSTEXPR inline bool isNumber() const Q_DECL_NOTHROW { return QChar::isNumber(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLetterOrNumber() const Q_DECL_NOTHROW { return QChar::isLetterOrNumber(ucs); }
+ Q_DECL_CONSTEXPR inline bool isDigit() const Q_DECL_NOTHROW { return QChar::isDigit(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLower() const Q_DECL_NOTHROW { return QChar::isLower(ucs); }
+ Q_DECL_CONSTEXPR inline bool isUpper() const Q_DECL_NOTHROW { return QChar::isUpper(ucs); }
+ Q_DECL_CONSTEXPR inline bool isTitleCase() const Q_DECL_NOTHROW { return QChar::isTitleCase(ucs); }
+
+ Q_DECL_CONSTEXPR inline bool isNonCharacter() const Q_DECL_NOTHROW { return QChar::isNonCharacter(ucs); }
+ Q_DECL_CONSTEXPR inline bool isHighSurrogate() const Q_DECL_NOTHROW { return QChar::isHighSurrogate(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLowSurrogate() const Q_DECL_NOTHROW { return QChar::isLowSurrogate(ucs); }
+ Q_DECL_CONSTEXPR inline bool isSurrogate() const Q_DECL_NOTHROW { return QChar::isSurrogate(ucs); }
+
+ Q_DECL_CONSTEXPR inline uchar cell() const Q_DECL_NOTHROW { return uchar(ucs & 0xff); }
+ Q_DECL_CONSTEXPR inline uchar row() const Q_DECL_NOTHROW { return uchar((ucs>>8)&0xff); }
+ Q_DECL_RELAXED_CONSTEXPR inline void setCell(uchar acell) Q_DECL_NOTHROW { ucs = ushort((ucs & 0xff00) + acell); }
+ Q_DECL_RELAXED_CONSTEXPR inline void setRow(uchar arow) Q_DECL_NOTHROW { ucs = ushort((ushort(arow)<<8) + (ucs&0xff)); }
+
+ static Q_DECL_CONSTEXPR inline bool isNonCharacter(uint ucs4) Q_DECL_NOTHROW
{
return ucs4 >= 0xfdd0 && (ucs4 <= 0xfdef || (ucs4 & 0xfffe) == 0xfffe);
}
- static Q_DECL_CONSTEXPR inline bool isHighSurrogate(uint ucs4)
+ static Q_DECL_CONSTEXPR inline bool isHighSurrogate(uint ucs4) Q_DECL_NOTHROW
{
return ((ucs4 & 0xfffffc00) == 0xd800);
}
- static Q_DECL_CONSTEXPR inline bool isLowSurrogate(uint ucs4)
+ static Q_DECL_CONSTEXPR inline bool isLowSurrogate(uint ucs4) Q_DECL_NOTHROW
{
return ((ucs4 & 0xfffffc00) == 0xdc00);
}
- static Q_DECL_CONSTEXPR inline bool isSurrogate(uint ucs4)
+ static Q_DECL_CONSTEXPR inline bool isSurrogate(uint ucs4) Q_DECL_NOTHROW
{
return (ucs4 - 0xd800u < 2048u);
}
- static Q_DECL_CONSTEXPR inline bool requiresSurrogates(uint ucs4)
+ static Q_DECL_CONSTEXPR inline bool requiresSurrogates(uint ucs4) Q_DECL_NOTHROW
{
return (ucs4 >= 0x10000);
}
- static Q_DECL_CONSTEXPR inline uint surrogateToUcs4(ushort high, ushort low)
+ static Q_DECL_CONSTEXPR inline uint surrogateToUcs4(ushort high, ushort low) Q_DECL_NOTHROW
{
return (uint(high)<<10) + low - 0x35fdc00;
}
- static Q_DECL_CONSTEXPR inline uint surrogateToUcs4(QChar high, QChar low)
+ static Q_DECL_CONSTEXPR inline uint surrogateToUcs4(QChar high, QChar low) Q_DECL_NOTHROW
{
return surrogateToUcs4(high.ucs, low.ucs);
}
- static Q_DECL_CONSTEXPR inline ushort highSurrogate(uint ucs4)
+ static Q_DECL_CONSTEXPR inline ushort highSurrogate(uint ucs4) Q_DECL_NOTHROW
{
return ushort((ucs4>>10) + 0xd7c0);
}
- static Q_DECL_CONSTEXPR inline ushort lowSurrogate(uint ucs4)
+ static Q_DECL_CONSTEXPR inline ushort lowSurrogate(uint ucs4) Q_DECL_NOTHROW
{
return ushort(ucs4%0x400 + 0xdc00);
}
- static Category QT_FASTCALL category(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Direction QT_FASTCALL direction(uint ucs4) Q_DECL_CONST_FUNCTION;
- static JoiningType QT_FASTCALL joiningType(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Category QT_FASTCALL category(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static Direction QT_FASTCALL direction(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static JoiningType QT_FASTCALL joiningType(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
#if QT_DEPRECATED_SINCE(5, 3)
- QT_DEPRECATED static Joining QT_FASTCALL joining(uint ucs4) Q_DECL_CONST_FUNCTION;
+ QT_DEPRECATED static Joining QT_FASTCALL joining(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
#endif
- static unsigned char QT_FASTCALL combiningClass(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static unsigned char QT_FASTCALL combiningClass(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
- static uint QT_FASTCALL mirroredChar(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL hasMirrored(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static uint QT_FASTCALL mirroredChar(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL hasMirrored(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
static QString QT_FASTCALL decomposition(uint ucs4);
- static Decomposition QT_FASTCALL decompositionTag(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Decomposition QT_FASTCALL decompositionTag(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
- static int QT_FASTCALL digitValue(uint ucs4) Q_DECL_CONST_FUNCTION;
- static uint QT_FASTCALL toLower(uint ucs4) Q_DECL_CONST_FUNCTION;
- static uint QT_FASTCALL toUpper(uint ucs4) Q_DECL_CONST_FUNCTION;
- static uint QT_FASTCALL toTitleCase(uint ucs4) Q_DECL_CONST_FUNCTION;
- static uint QT_FASTCALL toCaseFolded(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static int QT_FASTCALL digitValue(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static uint QT_FASTCALL toLower(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static uint QT_FASTCALL toUpper(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static uint QT_FASTCALL toTitleCase(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static uint QT_FASTCALL toCaseFolded(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
- static Script QT_FASTCALL script(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Script QT_FASTCALL script(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
- static UnicodeVersion QT_FASTCALL unicodeVersion(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static UnicodeVersion QT_FASTCALL unicodeVersion(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
- static UnicodeVersion QT_FASTCALL currentUnicodeVersion() Q_DECL_CONST_FUNCTION;
+ static UnicodeVersion QT_FASTCALL currentUnicodeVersion() Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isPrint(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isSpace(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isMark(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isPunct(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isSymbol(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isLetter(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isNumber(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isLetterOrNumber(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isDigit(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isLower(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isUpper(uint ucs4) Q_DECL_CONST_FUNCTION;
- static Q_DECL_CONSTEXPR inline bool isTitleCase(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isPrint(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isSpace(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ {
+ // note that [0x09..0x0d] + 0x85 are exceptional Cc-s and must be handled explicitly
+ return ucs4 == 0x20 || (ucs4 <= 0x0d && ucs4 >= 0x09)
+ || (ucs4 > 127 && (ucs4 == 0x85 || ucs4 == 0xa0 || QChar::isSpace_helper(ucs4)));
+ }
+ static bool QT_FASTCALL isMark(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isPunct(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isSymbol(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isLetter(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ {
+ return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
+ || (ucs4 > 127 && QChar::isLetter_helper(ucs4));
+ }
+ static Q_DECL_CONSTEXPR inline bool isNumber(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ { return (ucs4 <= '9' && ucs4 >= '0') || (ucs4 > 127 && QChar::isNumber_helper(ucs4)); }
+ static Q_DECL_CONSTEXPR inline bool isLetterOrNumber(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ {
+ return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
+ || (ucs4 >= '0' && ucs4 <= '9')
+ || (ucs4 > 127 && QChar::isLetterOrNumber_helper(ucs4));
+ }
+ static Q_DECL_CONSTEXPR inline bool isDigit(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ { return (ucs4 <= '9' && ucs4 >= '0') || (ucs4 > 127 && QChar::category(ucs4) == Number_DecimalDigit); }
+ static Q_DECL_CONSTEXPR inline bool isLower(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ { return (ucs4 <= 'z' && ucs4 >= 'a') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Lowercase); }
+ static Q_DECL_CONSTEXPR inline bool isUpper(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ { return (ucs4 <= 'Z' && ucs4 >= 'A') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Uppercase); }
+ static Q_DECL_CONSTEXPR inline bool isTitleCase(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION
+ { return ucs4 > 127 && QChar::category(ucs4) == Letter_Titlecase; }
private:
- static bool QT_FASTCALL isSpace_helper(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isLetter_helper(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isNumber_helper(uint ucs4) Q_DECL_CONST_FUNCTION;
- static bool QT_FASTCALL isLetterOrNumber_helper(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isSpace_helper(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isLetter_helper(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isNumber_helper(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
+ static bool QT_FASTCALL isLetterOrNumber_helper(uint ucs4) Q_DECL_NOTHROW Q_DECL_CONST_FUNCTION;
#ifdef QT_NO_CAST_FROM_ASCII
- QChar(char c);
- QChar(uchar c);
+ QChar(char c) Q_DECL_NOTHROW;
+ QChar(uchar c) Q_DECL_NOTHROW;
#endif
- friend Q_DECL_CONSTEXPR bool operator==(QChar, QChar);
- friend Q_DECL_CONSTEXPR bool operator< (QChar, QChar);
+ friend Q_DECL_CONSTEXPR bool operator==(QChar, QChar) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR bool operator< (QChar, QChar) Q_DECL_NOTHROW;
ushort ucs;
};
Q_DECLARE_TYPEINFO(QChar, Q_MOVABLE_TYPE);
-Q_DECL_CONSTEXPR inline char QChar::toLatin1() const { return ucs > 0xff ? '\0' : char(ucs); }
-Q_DECL_CONSTEXPR inline QChar QChar::fromLatin1(char c) { return QChar(ushort(uchar(c))); }
-
-inline void QChar::setCell(uchar acell)
-{ ucs = ushort((ucs & 0xff00) + acell); }
-inline void QChar::setRow(uchar arow)
-{ ucs = ushort((ushort(arow)<<8) + (ucs&0xff)); }
-
-Q_DECL_CONSTEXPR inline bool QChar::isSpace(uint ucs4)
-{
- // note that [0x09..0x0d] + 0x85 are exceptional Cc-s and must be handled explicitly
- return ucs4 == 0x20 || (ucs4 <= 0x0d && ucs4 >= 0x09)
- || (ucs4 > 127 && (ucs4 == 0x85 || ucs4 == 0xa0 || QChar::isSpace_helper(ucs4)));
-}
-Q_DECL_CONSTEXPR inline bool QChar::isLetter(uint ucs4)
-{
- return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
- || (ucs4 > 127 && QChar::isLetter_helper(ucs4));
-}
-Q_DECL_CONSTEXPR inline bool QChar::isNumber(uint ucs4)
-{ return (ucs4 <= '9' && ucs4 >= '0') || (ucs4 > 127 && QChar::isNumber_helper(ucs4)); }
-Q_DECL_CONSTEXPR inline bool QChar::isLetterOrNumber(uint ucs4)
-{
- return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
- || (ucs4 >= '0' && ucs4 <= '9')
- || (ucs4 > 127 && QChar::isLetterOrNumber_helper(ucs4));
-}
-Q_DECL_CONSTEXPR inline bool QChar::isDigit(uint ucs4)
-{ return (ucs4 <= '9' && ucs4 >= '0') || (ucs4 > 127 && QChar::category(ucs4) == Number_DecimalDigit); }
-Q_DECL_CONSTEXPR inline bool QChar::isLower(uint ucs4)
-{ return (ucs4 <= 'z' && ucs4 >= 'a') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Lowercase); }
-Q_DECL_CONSTEXPR inline bool QChar::isUpper(uint ucs4)
-{ return (ucs4 <= 'Z' && ucs4 >= 'A') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Uppercase); }
-Q_DECL_CONSTEXPR inline bool QChar::isTitleCase(uint ucs4)
-{ return ucs4 > 127 && QChar::category(ucs4) == Letter_Titlecase; }
-
-Q_DECL_CONSTEXPR inline bool operator==(QChar c1, QChar c2) { return c1.ucs == c2.ucs; }
-Q_DECL_CONSTEXPR inline bool operator< (QChar c1, QChar c2) { return c1.ucs < c2.ucs; }
+Q_DECL_CONSTEXPR inline bool operator==(QChar c1, QChar c2) Q_DECL_NOTHROW { return c1.ucs == c2.ucs; }
+Q_DECL_CONSTEXPR inline bool operator< (QChar c1, QChar c2) Q_DECL_NOTHROW { return c1.ucs < c2.ucs; }
Q_DECL_CONSTEXPR inline bool operator!=(QChar c1, QChar c2) { return !operator==(c1, c2); }
Q_DECL_CONSTEXPR inline bool operator>=(QChar c1, QChar c2) { return !operator< (c1, c2); }
diff --git a/src/corelib/tools/qcollator.cpp b/src/corelib/tools/qcollator.cpp
index 59f8f66869..bbe2e28ea8 100644
--- a/src/corelib/tools/qcollator.cpp
+++ b/src/corelib/tools/qcollator.cpp
@@ -248,6 +248,8 @@ bool QCollator::numericMode() const
The default is locale dependent.
+ \note This method is not currently supported on Apple platforms or if Qt is configured to not use ICU on Linux.
+
\sa ignorePunctuation()
*/
void QCollator::setIgnorePunctuation(bool on)
diff --git a/src/corelib/tools/qcollator.h b/src/corelib/tools/qcollator.h
index e1fa161257..57133165c4 100644
--- a/src/corelib/tools/qcollator.h
+++ b/src/corelib/tools/qcollator.h
@@ -83,7 +83,7 @@ public:
QCollator &operator=(const QCollator &);
#ifdef Q_COMPILER_RVALUE_REFS
QCollator(QCollator &&other) Q_DECL_NOTHROW
- : d(other.d) { other.d = 0; }
+ : d(other.d) { other.d = Q_NULLPTR; }
QCollator &operator=(QCollator &&other) Q_DECL_NOTHROW
{ swap(other); return *this; }
#endif
diff --git a/src/corelib/tools/qcommandlineoption.cpp b/src/corelib/tools/qcommandlineoption.cpp
index 7f898f68a8..8c0ba8cb2b 100644
--- a/src/corelib/tools/qcommandlineoption.cpp
+++ b/src/corelib/tools/qcommandlineoption.cpp
@@ -41,10 +41,19 @@ QT_BEGIN_NAMESPACE
class QCommandLineOptionPrivate : public QSharedData
{
public:
- inline QCommandLineOptionPrivate()
+ Q_NEVER_INLINE
+ explicit QCommandLineOptionPrivate(const QString &name)
+ : names(removeInvalidNames(QStringList(name))),
+ hidden(false)
{ }
- void setNames(const QStringList &nameList);
+ Q_NEVER_INLINE
+ explicit QCommandLineOptionPrivate(const QStringList &names)
+ : names(removeInvalidNames(names)),
+ hidden(false)
+ { }
+
+ static QStringList removeInvalidNames(QStringList nameList);
//! The list of names used for this option.
QStringList names;
@@ -58,6 +67,9 @@ public:
//! The list of default values used for this option.
QStringList defaultValues;
+
+ //! Show or hide in --help
+ bool hidden;
};
/*!
@@ -98,9 +110,8 @@ public:
\sa setDescription(), setValueName(), setDefaultValues()
*/
QCommandLineOption::QCommandLineOption(const QString &name)
- : d(new QCommandLineOptionPrivate)
+ : d(new QCommandLineOptionPrivate(name))
{
- d->setNames(QStringList(name));
}
/*!
@@ -117,9 +128,8 @@ QCommandLineOption::QCommandLineOption(const QString &name)
\sa setDescription(), setValueName(), setDefaultValues()
*/
QCommandLineOption::QCommandLineOption(const QStringList &names)
- : d(new QCommandLineOptionPrivate)
+ : d(new QCommandLineOptionPrivate(names))
{
- d->setNames(names);
}
/*!
@@ -148,9 +158,8 @@ QCommandLineOption::QCommandLineOption(const QStringList &names)
QCommandLineOption::QCommandLineOption(const QString &name, const QString &description,
const QString &valueName,
const QString &defaultValue)
- : d(new QCommandLineOptionPrivate)
+ : d(new QCommandLineOptionPrivate(name))
{
- d->setNames(QStringList(name));
setValueName(valueName);
setDescription(description);
setDefaultValue(defaultValue);
@@ -185,9 +194,8 @@ QCommandLineOption::QCommandLineOption(const QString &name, const QString &descr
QCommandLineOption::QCommandLineOption(const QStringList &names, const QString &description,
const QString &valueName,
const QString &defaultValue)
- : d(new QCommandLineOptionPrivate)
+ : d(new QCommandLineOptionPrivate(names))
{
- d->setNames(names);
setValueName(valueName);
setDescription(description);
setDefaultValue(defaultValue);
@@ -236,29 +244,47 @@ QStringList QCommandLineOption::names() const
return d->names;
}
-void QCommandLineOptionPrivate::setNames(const QStringList &nameList)
-{
- QStringList newNames;
- newNames.reserve(nameList.size());
- if (nameList.isEmpty())
- qWarning("QCommandLineOption: Options must have at least one name");
- foreach (const QString &name, nameList) {
- if (name.isEmpty()) {
- qWarning("QCommandLineOption: Option names cannot be empty");
- } else {
+namespace {
+ struct IsInvalidName
+ {
+ typedef bool result_type;
+ typedef QString argument_type;
+
+ Q_NEVER_INLINE
+ result_type operator()(const QString &name) const Q_DECL_NOEXCEPT
+ {
+ if (Q_UNLIKELY(name.isEmpty()))
+ return warn("be empty");
+
const QChar c = name.at(0);
- if (c == QLatin1Char('-'))
- qWarning("QCommandLineOption: Option names cannot start with a '-'");
- else if (c == QLatin1Char('/'))
- qWarning("QCommandLineOption: Option names cannot start with a '/'");
- else if (name.contains(QLatin1Char('=')))
- qWarning("QCommandLineOption: Option names cannot contain a '='");
- else
- newNames.append(name);
+ if (Q_UNLIKELY(c == QLatin1Char('-')))
+ return warn("start with a '-'");
+ if (Q_UNLIKELY(c == QLatin1Char('/')))
+ return warn("start with a '/'");
+ if (Q_UNLIKELY(name.contains(QLatin1Char('='))))
+ return warn("contain a '='");
+
+ return false;
}
- }
- // commit
- names.swap(newNames);
+
+ Q_NEVER_INLINE
+ static bool warn(const char *what) Q_DECL_NOEXCEPT
+ {
+ qWarning("QCommandLineOption: Option names cannot %s", what);
+ return true;
+ }
+ };
+} // unnamed namespace
+
+// static
+QStringList QCommandLineOptionPrivate::removeInvalidNames(QStringList nameList)
+{
+ if (Q_UNLIKELY(nameList.isEmpty()))
+ qWarning("QCommandLineOption: Options must have at least one name");
+ else
+ nameList.erase(std::remove_if(nameList.begin(), nameList.end(), IsInvalidName()),
+ nameList.end());
+ return nameList;
}
/*!
@@ -362,4 +388,30 @@ QStringList QCommandLineOption::defaultValues() const
return d->defaultValues;
}
+/*!
+ Sets whether to hide this option in the user-visible help output.
+
+ All options are visible by default. Setting \a hide to true for
+ a particular option makes it internal, i.e. not listed in the help output.
+
+ \since 5.6
+ \sa isHidden
+ */
+void QCommandLineOption::setHidden(bool hide)
+{
+ d->hidden = hide;
+}
+
+/*!
+ Returns true if this option is omitted from the help output,
+ false if the option is listed.
+
+ \since 5.6
+ \sa setHidden()
+ */
+bool QCommandLineOption::isHidden() const
+{
+ return d->hidden;
+}
+
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qcommandlineoption.h b/src/corelib/tools/qcommandlineoption.h
index cf4160ecd2..828522cbc5 100644
--- a/src/corelib/tools/qcommandlineoption.h
+++ b/src/corelib/tools/qcommandlineoption.h
@@ -58,11 +58,10 @@ public:
QCommandLineOption &operator=(const QCommandLineOption &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QCommandLineOption &operator=(QCommandLineOption &&other)
- { qSwap(d, other.d); return *this; }
+ QCommandLineOption &operator=(QCommandLineOption &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
- inline void swap(QCommandLineOption &other)
+ void swap(QCommandLineOption &other) Q_DECL_NOTHROW
{ qSwap(d, other.d); }
QStringList names() const;
@@ -77,6 +76,9 @@ public:
void setDefaultValues(const QStringList &defaultValues);
QStringList defaultValues() const;
+ void setHidden(bool hidden);
+ bool isHidden() const;
+
private:
QSharedDataPointer<QCommandLineOptionPrivate> d;
};
diff --git a/src/corelib/tools/qcommandlineparser.cpp b/src/corelib/tools/qcommandlineparser.cpp
index 0814921a58..2bc60c5b9e 100644
--- a/src/corelib/tools/qcommandlineparser.cpp
+++ b/src/corelib/tools/qcommandlineparser.cpp
@@ -53,6 +53,7 @@ class QCommandLineParserPrivate
public:
inline QCommandLineParserPrivate()
: singleDashWordOptionMode(QCommandLineParser::ParseAsCompactedShortOptions),
+ optionsAfterPositionalArgumentsMode(QCommandLineParser::ParseAsOptions),
builtinVersionOption(false),
builtinHelpOption(false),
needsParsing(true)
@@ -103,6 +104,9 @@ public:
//! The parsing mode for "-abc"
QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode;
+ //! How to parse "arg -option"
+ QCommandLineParser::OptionsAfterPositionalArgumentsMode optionsAfterPositionalArgumentsMode;
+
//! Whether addVersionOption was called
bool builtinVersionOption;
@@ -112,6 +116,7 @@ public:
//! True if parse() needs to be called
bool needsParsing;
};
+Q_DECLARE_TYPEINFO(QCommandLineParserPrivate::PositionalArgumentDefinition, Q_MOVABLE_TYPE);
QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const
{
@@ -299,6 +304,41 @@ void QCommandLineParser::setSingleDashWordOptionMode(QCommandLineParser::SingleD
}
/*!
+ \enum QCommandLineParser::OptionsAfterPositionalArgumentsMode
+
+ This enum describes the way the parser interprets options that
+ occur after positional arguments.
+
+ \value ParseAsOptions \c{application argument --opt -t} is interpreted as setting
+ the options \c{opt} and \c{t}, just like \c{application --opt -t argument} would do.
+ This is the default parsing mode. In order to specify that \c{--opt} and \c{-t}
+ are positional arguments instead, the user can use \c{--}, as in
+ \c{application argument -- --opt -t}.
+
+ \value ParseAsPositionalArguments \c{application argument --opt} is interpreted as
+ having two positional arguments, \c{argument} and \c{--opt}.
+ This mode is useful for executables that aim to launch other executables
+ (e.g. wrappers, debugging tools, etc.) or that support internal commands
+ followed by options for the command. \c{argument} is the name of the command,
+ and all options occurring after it can be collected and parsed by another
+ command line parser, possibly in another executable.
+
+ \sa setOptionsAfterPositionalArgumentsMode()
+
+ \since 5.6
+*/
+
+/*!
+ Sets the parsing mode to \a parsingMode.
+ This must be called before process() or parse().
+ \since 5.6
+*/
+void QCommandLineParser::setOptionsAfterPositionalArgumentsMode(QCommandLineParser::OptionsAfterPositionalArgumentsMode parsingMode)
+{
+ d->optionsAfterPositionalArgumentsMode = parsingMode;
+}
+
+/*!
Adds the option \a option to look for while parsing.
Returns \c true if adding the option was successful; otherwise returns \c false.
@@ -500,7 +540,13 @@ static inline bool displayMessageBox()
static void showParserMessage(const QString &message, MessageType type)
{
-#if defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
+#if defined(Q_OS_WINRT)
+ if (type == UsageMessage)
+ qInfo(qPrintable(message));
+ else
+ qCritical(qPrintable(message));
+ return;
+#elif defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED) && !defined(Q_OS_WINCE)
if (displayMessageBox()) {
const UINT flags = MB_OK | MB_TOPMOST | MB_SETFOREGROUND
| (type == UsageMessage ? MB_ICONINFORMATION : MB_ICONERROR);
@@ -513,7 +559,7 @@ static void showParserMessage(const QString &message, MessageType type)
reinterpret_cast<const wchar_t *>(title.utf16()), flags);
return;
}
-#endif // Q_OS_WIN && !QT_BOOTSTRAPPED && !Q_OS_WIN && !Q_OS_WINRT
+#endif // Q_OS_WIN && !QT_BOOTSTRAPPED && !Q_OS_WINCE
fputs(qPrintable(message), type == UsageMessage ? stdout : stderr);
}
@@ -640,7 +686,7 @@ bool QCommandLineParserPrivate::parse(const QStringList &args)
const QLatin1Char dashChar('-');
const QLatin1Char assignChar('=');
- bool doubleDashFound = false;
+ bool forcePositional = false;
errorText.clear();
positionalArgumentList.clear();
optionNames.clear();
@@ -658,7 +704,7 @@ bool QCommandLineParserPrivate::parse(const QStringList &args)
for (; argumentIterator != args.end() ; ++argumentIterator) {
QString argument = *argumentIterator;
- if (doubleDashFound) {
+ if (forcePositional) {
positionalArgumentList.append(argument);
} else if (argument.startsWith(doubleDashString)) {
if (argument.length() > 2) {
@@ -670,7 +716,7 @@ bool QCommandLineParserPrivate::parse(const QStringList &args)
error = true;
}
} else {
- doubleDashFound = true;
+ forcePositional = true;
}
} else if (argument.startsWith(dashChar)) {
if (argument.size() == 1) { // single dash ("stdin")
@@ -722,6 +768,8 @@ bool QCommandLineParserPrivate::parse(const QStringList &args)
}
} else {
positionalArgumentList.append(argument);
+ if (optionsAfterPositionalArgumentsMode == QCommandLineParser::ParseAsPositionalArguments)
+ forcePositional = true;
}
if (argumentIterator == args.end())
break;
@@ -1062,6 +1110,8 @@ QString QCommandLineParserPrivate::helpText() const
++longestOptionNameString;
for (int i = 0; i < commandLineOptionList.count(); ++i) {
const QCommandLineOption &option = commandLineOptionList.at(i);
+ if (option.isHidden())
+ continue;
text += wrapText(optionNameList.at(i), longestOptionNameString, option.description());
}
if (!positionalArgumentDefinitions.isEmpty()) {
diff --git a/src/corelib/tools/qcommandlineparser.h b/src/corelib/tools/qcommandlineparser.h
index 91a799b4d5..8c528ba69e 100644
--- a/src/corelib/tools/qcommandlineparser.h
+++ b/src/corelib/tools/qcommandlineparser.h
@@ -57,6 +57,12 @@ public:
};
void setSingleDashWordOptionMode(SingleDashWordOptionMode parsingMode);
+ enum OptionsAfterPositionalArgumentsMode {
+ ParseAsOptions,
+ ParseAsPositionalArguments
+ };
+ void setOptionsAfterPositionalArgumentsMode(OptionsAfterPositionalArgumentsMode mode);
+
bool addOption(const QCommandLineOption &commandLineOption);
bool addOptions(const QList<QCommandLineOption> &options);
diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp
index 42877ec664..1c74a602c6 100644
--- a/src/corelib/tools/qcryptographichash.cpp
+++ b/src/corelib/tools/qcryptographichash.cpp
@@ -65,7 +65,7 @@ typedef HashReturn (SHA3Init)(hashState *state, int hashbitlen);
typedef HashReturn (SHA3Update)(hashState *state, const BitSequence *data, DataLength databitlen);
typedef HashReturn (SHA3Final)(hashState *state, BitSequence *hashval);
-#if QT_POINTER_SIZE == 8 // 64 bit version
+#if Q_PROCESSOR_WORDSIZE == 8 // 64 bit version
#include "../../3rdparty/sha3/KeccakF-1600-opt64.c"
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index d6428920e5..ff20c57166 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -90,14 +90,25 @@ static inline QDate fixedDate(int y, int m, int d)
return result;
}
+/*
+ Until C++11, rounding direction is implementation-defined.
+
+ For negative operands, implementations may chose to round down instead of
+ towards zero (truncation). We only actually care about the case a < 0, as all
+ uses of floordiv have b > 0. In this case, if rounding is down we have a % b
+ >= 0 and simple division works fine; but a % b = a - (a / b) * b always, so
+ rounding towards zero gives a % b <= 0; when < 0, we need to adjust.
+
+ Once we assume C++11, we can safely test a < 0 instead of a % b < 0.
+ */
static inline qint64 floordiv(qint64 a, int b)
{
- return (a - (a < 0 ? b-1 : 0)) / b;
+ return (a - (a % b < 0 ? b - 1 : 0)) / b;
}
static inline int floordiv(int a, int b)
{
- return (a - (a < 0 ? b-1 : 0)) / b;
+ return (a - (a % b < 0 ? b - 1 : 0)) / b;
}
static inline qint64 julianDayFromDate(int year, int month, int day)
@@ -583,7 +594,7 @@ int QDate::weekNumber(int *yearNumber) const
Q_ASSERT(week == 52 || week == 53);
} else if (week == 53) {
// maybe first week of next year
- int w = (yday - 365 - (QDate::isLeapYear(year + 1) ? 1 : 0) - wday + 10) / 7;
+ int w = (yday - 365 - (QDate::isLeapYear(year) ? 1 : 0) - wday + 10) / 7;
if (w > 0) {
++year;
week = w;
@@ -1383,7 +1394,7 @@ bool QDate::isLeapYear(int y)
QTime uses the 24-hour clock format; it has no concept of AM/PM.
Unlike QDateTime, QTime knows nothing about time zones or
- daylight savings time (DST).
+ daylight-saving time (DST).
A QTime object is typically created either by giving the number
of hours, minutes, seconds, and milliseconds explicitly, or by
@@ -1728,7 +1739,7 @@ QTime QTime::addMSecs(int ms) const
QTime t;
if (isValid()) {
if (ms < 0) {
- // % not well-defined for -ve, but / is.
+ // %,/ not well-defined for -ve, so always work with +ve.
int negdays = (MSECS_PER_DAY - ms) / MSECS_PER_DAY;
t.mds = (ds() + ms + negdays * MSECS_PER_DAY) % MSECS_PER_DAY;
} else {
@@ -2059,7 +2070,7 @@ void QTime::start()
\warning If the system's clock setting has been changed since the
last time start() or restart() was called, the result is
- undefined. This can happen when daylight savings time is turned on
+ undefined. This can happen when daylight-saving time is turned on
or off.
\sa start(), elapsed(), currentTime()
@@ -2087,7 +2098,7 @@ int QTime::restart()
\warning If the system's clock setting has been changed since the
last time start() or restart() was called, the result is
- undefined. This can happen when daylight savings time is turned on
+ undefined. This can happen when daylight-saving time is turned on
or off.
\sa start(), restart()
@@ -2236,18 +2247,18 @@ static qint64 qt_mktime(QDate *date, QTime *time, QDateTimePrivate::DaylightStat
#else
// All other platforms provide standard C library time functions
tm local;
+ memset(&local, 0, sizeof(local)); // tm_[wy]day plus any non-standard fields
local.tm_sec = time->second();
local.tm_min = time->minute();
local.tm_hour = time->hour();
local.tm_mday = dd;
local.tm_mon = mm - 1;
local.tm_year = yy - 1900;
- local.tm_wday = 0;
- local.tm_yday = 0;
if (daylightStatus)
local.tm_isdst = int(*daylightStatus);
else
local.tm_isdst = -1;
+
#if defined(Q_OS_WIN)
int hh = local.tm_hour;
#endif // Q_OS_WIN
@@ -2301,7 +2312,7 @@ static qint64 qt_mktime(QDate *date, QTime *time, QDateTimePrivate::DaylightStat
}
// Calls the platform variant of localtime for the given msecs, and updates
-// the date, time, and daylight status with the returned values.
+// the date, time, and DST status with the returned values.
static bool qt_localtime(qint64 msecsSinceEpoch, QDate *localDate, QTime *localTime,
QDateTimePrivate::DaylightStatus *daylightStatus)
{
@@ -2417,7 +2428,7 @@ static bool epochMSecsToLocalTime(qint64 msecs, QDate *localDate, QTime *localTi
*daylightStatus = QDateTimePrivate::StandardTime;
return true;
} else if (msecs > (qint64(TIME_T_MAX) * 1000)) {
- // Docs state any LocalTime after 2037-12-31 *will* have any Daylight Time applied
+ // Docs state any LocalTime after 2037-12-31 *will* have any DST applied
// but this may fall outside the supported time_t range, so need to fake it.
// Use existing method to fake the conversion, but this is deeply flawed as it may
// apply the conversion from the wrong day number, e.g. if rule is last Sunday of month
@@ -2442,7 +2453,7 @@ static bool epochMSecsToLocalTime(qint64 msecs, QDate *localDate, QTime *localTi
}
// Convert a LocalTime expressed in local msecs encoding and the corresponding
-// daylight status into a UTC epoch msecs. Optionally populate the returned
+// DST status into a UTC epoch msecs. Optionally populate the returned
// values from mktime for the adjusted local date and time.
static qint64 localMSecsToEpochMSecs(qint64 localMsecs,
QDateTimePrivate::DaylightStatus *daylightStatus,
@@ -2453,14 +2464,14 @@ static qint64 localMSecsToEpochMSecs(qint64 localMsecs,
QTime tm;
msecsToTime(localMsecs, &dt, &tm);
- qint64 msecsMax = qint64(TIME_T_MAX) * 1000;
+ const qint64 msecsMax = qint64(TIME_T_MAX) * 1000;
if (localMsecs <= qint64(MSECS_PER_DAY)) {
- // Docs state any LocalTime before 1970-01-01 will *not* have any Daylight Time applied
+ // Docs state any LocalTime before 1970-01-01 will *not* have any DST applied
// First, if localMsecs is within +/- 1 day of minimum time_t try mktime in case it does
- // fall after minimum and needs proper daylight conversion
+ // fall after minimum and needs proper DST conversion
if (localMsecs >= -qint64(MSECS_PER_DAY)) {
bool valid;
qint64 utcMsecs = qt_mktime(&dt, &tm, daylightStatus, abbreviation, &valid);
@@ -2488,11 +2499,11 @@ static qint64 localMSecsToEpochMSecs(qint64 localMsecs,
} else if (localMsecs >= msecsMax - MSECS_PER_DAY) {
- // Docs state any LocalTime after 2037-12-31 *will* have any Daylight Time applied
+ // Docs state any LocalTime after 2037-12-31 *will* have any DST applied
// but this may fall outside the supported time_t range, so need to fake it.
// First, if localMsecs is within +/- 1 day of maximum time_t try mktime in case it does
- // fall before maximum and can use proper daylight conversion
+ // fall before maximum and can use proper DST conversion
if (localMsecs <= msecsMax + MSECS_PER_DAY) {
bool valid;
qint64 utcMsecs = qt_mktime(&dt, &tm, daylightStatus, abbreviation, &valid);
@@ -2662,7 +2673,7 @@ void QDateTimePrivate::setDaylightStatus(QDateTimePrivate::DaylightStatus status
}
}
-// Get the Daylight Status if LocalTime set via msecs
+// Get the DST Status if LocalTime set via msecs
QDateTimePrivate::DaylightStatus QDateTimePrivate::daylightStatus() const
{
if ((m_status & SetToDaylightTime) == SetToDaylightTime)
@@ -2746,7 +2757,7 @@ void QDateTimePrivate::refreshDateTime()
#endif // QT_BOOTSTRAPPED
// We have a valid date and time and a Qt::LocalTime or Qt::TimeZone that needs calculating
- // LocalTime and TimeZone might fall into "missing" DaylightTime transition hour
+ // LocalTime and TimeZone might fall into a "missing" DST transition hour
// Calling toEpochMSecs will adjust the returned date/time if it does
QDate testDate;
QTime testTime;
@@ -2776,8 +2787,8 @@ qint64 QDateTimePrivate::zoneMSecsToEpochMSecs(qint64 zoneMSecs, const QTimeZone
{
// Get the effective data from QTimeZone
QTimeZonePrivate::Data data = zone.d->dataForLocalTime(zoneMSecs);
- // Docs state any LocalTime before 1970-01-01 will *not* have any Daylight Time applied
- // but all times afterwards will have Daylight Time applied.
+ // Docs state any LocalTime before 1970-01-01 will *not* have any DST applied
+ // but all affected times afterwards will have DST applied.
if (data.atMSecsSinceEpoch >= 0) {
msecsToTime(data.atMSecsSinceEpoch + (data.offsetFromUtc * 1000), localDate, localTime);
return data.atMSecsSinceEpoch;
@@ -2836,7 +2847,7 @@ qint64 QDateTimePrivate::zoneMSecsToEpochMSecs(qint64 zoneMSecs, const QTimeZone
QDateTime expressed as local time; use toUTC() to convert it to
UTC. You can also use timeSpec() to find out if a QDateTime
object stores a UTC time or a local time. Operations such as
- addSecs() and secsTo() are aware of daylight saving time (DST).
+ addSecs() and secsTo() are aware of daylight-saving time (DST).
\note QDateTime does not account for leap seconds.
@@ -2866,7 +2877,7 @@ qint64 QDateTimePrivate::zoneMSecsToEpochMSecs(qint64 zoneMSecs, const QTimeZone
correctly or not up-to-date, QDateTime will give wrong results as
well.
- \section2 Daylight Savings Time (DST)
+ \section2 Daylight-Saving Time (DST)
QDateTime takes into account the system's time zone information
when dealing with DST. On modern Unix systems, this means it
@@ -2884,7 +2895,7 @@ qint64 QDateTimePrivate::zoneMSecsToEpochMSecs(qint64 zoneMSecs, const QTimeZone
time zone before 1970, even if the system's time zone database
supports that information.
- QDateTime takes into consideration the Standard Time to Daylight Time
+ QDateTime takes into consideration the Standard Time to Daylight-Saving Time
transition. For example if the transition is at 2am and the clock goes
forward to 3am, then there is a "missing" hour from 02:00:00 to 02:59:59.999
which QDateTime considers to be invalid. Any date maths performed
@@ -2896,7 +2907,7 @@ qint64 QDateTimePrivate::zoneMSecsToEpochMSecs(qint64 zoneMSecs, const QTimeZone
to define a QDateTime relative to UTC at a fixed offset of a given number
of seconds from UTC. For example, an offset of +3600 seconds is one hour
ahead of UTC and is usually written in ISO standard notation as
- "UTC+01:00". Daylight Savings Time never applies with this TimeSpec.
+ "UTC+01:00". Daylight-Saving Time never applies with this TimeSpec.
There is no explicit size restriction to the offset seconds, but there is
an implicit limit imposed when using the toString() and fromString()
@@ -2908,8 +2919,8 @@ qint64 QDateTimePrivate::zoneMSecsToEpochMSecs(qint64 zoneMSecs, const QTimeZone
A Qt::TimeSpec of Qt::TimeZone is also supported in conjunction with the
QTimeZone class. This allows you to define a datetime in a named time zone
- adhering to a consistent set of daylight savings transition rules. For
- example a time zone of "Europe/Berlin" will apply the daylight savings
+ adhering to a consistent set of daylight-saving transition rules. For
+ example a time zone of "Europe/Berlin" will apply the daylight-saving
rules as used in Germany since 1970. Note that the transition rules
applied depend on the platform support. See the QTimeZone documentation
for more details.
@@ -3051,7 +3062,7 @@ bool QDateTime::isNull() const
the current Qt::TimeSpec, otherwise returns \c false.
If the timeSpec() is Qt::LocalTime or Qt::TimeZone then the date and time are
- checked to see if they fall in the Standard Time to Daylight Time transition
+ checked to see if they fall in the Standard Time to Daylight-Saving Time transition
hour, i.e. if the transition is at 2am and the clock goes forward to 3am
then the time from 02:00:00 to 02:59:59.999 is considered to be invalid.
@@ -3142,10 +3153,10 @@ QTimeZone QDateTime::timeZone() const
If the timeSpec() is Qt::OffsetFromUTC this will be the value originally set.
If the timeSpec() is Qt::TimeZone this will be the offset effective in the
- Time Zone including any Daylight Saving Offset.
+ Time Zone including any Daylight-Saving Offset.
If the timeSpec() is Qt::LocalTime this will be the difference between the
- Local Time and UTC including any Daylight Saving Offset.
+ Local Time and UTC including any Daylight-Saving Offset.
If the timeSpec() is Qt::UTC this will be 0.
@@ -3202,7 +3213,7 @@ QString QDateTime::timeZoneAbbreviation() const
/*!
\since 5.2
- Returns if this datetime falls in Daylight Savings Time.
+ Returns if this datetime falls in Daylight-Saving Time.
If the Qt::TimeSpec is not Qt::LocalTime or Qt::TimeZone then will always
return false.
@@ -3415,8 +3426,8 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs)
break;
case Qt::TimeZone:
#ifndef QT_BOOTSTRAPPED
- // Docs state any LocalTime before 1970-01-01 will *not* have any Daylight Time applied
- // but all times afterwards will have Daylight Time applied.
+ // Docs state any LocalTime before 1970-01-01 will *not* have any DST applied
+ // but all affected times afterwards will have DST applied.
if (msecs >= 0)
d->m_offsetFromUtc = d->m_timeZone.d->offsetFromUtc(msecs);
else
@@ -3652,13 +3663,47 @@ QString QDateTime::toString(const QString& format) const
}
#endif //QT_NO_DATESTRING
+static void massageAdjustedDateTime(Qt::TimeSpec spec,
+#ifndef QT_BOOTSTRAPPED
+ const QTimeZone &zone,
+#endif // QT_BOOTSTRAPPED
+ QDate *date,
+ QTime *time)
+{
+ /*
+ If we have just adjusted to a day with a DST transition, our given time
+ may lie in the transition hour (either missing or duplicated). For any
+ other time, telling mktime (deep in the bowels of localMSecsToEpochMSecs)
+ we don't know its DST-ness will produce no adjustment (just a decision as
+ to its DST-ness); but for a time in spring's missing hour it'll adjust the
+ time while picking a DST-ness. (Handling of autumn is trickier, as either
+ DST-ness is valid, without adjusting the time. We might want to propagate
+ d->daylightStatus() in that case, but it's hard to do so without breaking
+ (far more common) other cases; and it makes little difference, as the two
+ answers do then differ only in DST-ness.)
+ */
+ if (spec == Qt::LocalTime) {
+ QDateTimePrivate::DaylightStatus status = QDateTimePrivate::UnknownDaylightTime;
+ localMSecsToEpochMSecs(timeToMSecs(*date, *time), &status, date, time);
+#ifndef QT_BOOTSTRAPPED
+ } else if (spec == Qt::TimeZone) {
+ QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(*date, *time), zone, date, time);
+#endif // QT_BOOTSTRAPPED
+ }
+}
+#ifdef QT_BOOTSTRAPPED // Avoid duplicate #if-ery in uses.
+#define MASSAGEADJUSTEDDATETIME(s, z, d, t) massageAdjustedDateTime(s, d, t)
+#else
+#define MASSAGEADJUSTEDDATETIME(s, z, d, t) massageAdjustedDateTime(s, z, d, t)
+#endif // QT_BOOTSTRAPPED
+
/*!
Returns a QDateTime object containing a datetime \a ndays days
later than the datetime of this object (or earlier if \a ndays is
negative).
If the timeSpec() is Qt::LocalTime and the resulting
- date and time fall in the Standard Time to Daylight Time transition
+ date and time fall in the Standard Time to Daylight-Saving Time transition
hour then the result will be adjusted accordingly, i.e. if the transition
is at 2am and the clock goes forward to 3am and the result falls between
2am and 3am then the result will be adjusted to fall after 3am.
@@ -3673,16 +3718,7 @@ QDateTime QDateTime::addDays(qint64 ndays) const
QDate &date = p.first;
QTime &time = p.second;
date = date.addDays(ndays);
- // Result might fall into "missing" DaylightTime transition hour,
- // so call conversion and use the adjusted returned time
- if (d->m_spec == Qt::LocalTime) {
- QDateTimePrivate::DaylightStatus status = d->daylightStatus();
- localMSecsToEpochMSecs(timeToMSecs(date, time), &status, &date, &time);
-#ifndef QT_BOOTSTRAPPED
- } else if (d->m_spec == Qt::TimeZone) {
- QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
-#endif // QT_BOOTSTRAPPED
- }
+ MASSAGEADJUSTEDDATETIME(d->m_spec, d->m_timeZone, &date, &time);
dt.d->setDateTime(date, time);
return dt;
}
@@ -3693,7 +3729,7 @@ QDateTime QDateTime::addDays(qint64 ndays) const
is negative).
If the timeSpec() is Qt::LocalTime and the resulting
- date and time fall in the Standard Time to Daylight Time transition
+ date and time fall in the Standard Time to Daylight-Saving Time transition
hour then the result will be adjusted accordingly, i.e. if the transition
is at 2am and the clock goes forward to 3am and the result falls between
2am and 3am then the result will be adjusted to fall after 3am.
@@ -3708,16 +3744,7 @@ QDateTime QDateTime::addMonths(int nmonths) const
QDate &date = p.first;
QTime &time = p.second;
date = date.addMonths(nmonths);
- // Result might fall into "missing" DaylightTime transition hour,
- // so call conversion and use the adjusted returned time
- if (d->m_spec == Qt::LocalTime) {
- QDateTimePrivate::DaylightStatus status = d->daylightStatus();
- localMSecsToEpochMSecs(timeToMSecs(date, time), &status, &date, &time);
-#ifndef QT_BOOTSTRAPPED
- } else if (d->m_spec == Qt::TimeZone) {
- QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
-#endif // QT_BOOTSTRAPPED
- }
+ MASSAGEADJUSTEDDATETIME(d->m_spec, d->m_timeZone, &date, &time);
dt.d->setDateTime(date, time);
return dt;
}
@@ -3728,7 +3755,7 @@ QDateTime QDateTime::addMonths(int nmonths) const
negative).
If the timeSpec() is Qt::LocalTime and the resulting
- date and time fall in the Standard Time to Daylight Time transition
+ date and time fall in the Standard Time to Daylight-Saving Time transition
hour then the result will be adjusted accordingly, i.e. if the transition
is at 2am and the clock goes forward to 3am and the result falls between
2am and 3am then the result will be adjusted to fall after 3am.
@@ -3743,19 +3770,11 @@ QDateTime QDateTime::addYears(int nyears) const
QDate &date = p.first;
QTime &time = p.second;
date = date.addYears(nyears);
- // Result might fall into "missing" DaylightTime transition hour,
- // so call conversion and use the adjusted returned time
- if (d->m_spec == Qt::LocalTime) {
- QDateTimePrivate::DaylightStatus status = d->daylightStatus();
- localMSecsToEpochMSecs(timeToMSecs(date, time), &status, &date, &time);
-#ifndef QT_BOOTSTRAPPED
- } else if (d->m_spec == Qt::TimeZone) {
- QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
-#endif // QT_BOOTSTRAPPED
- }
+ MASSAGEADJUSTEDDATETIME(d->m_spec, d->m_timeZone, &date, &time);
dt.d->setDateTime(date, time);
return dt;
}
+#undef MASSAGEADJUSTEDDATETIME
/*!
Returns a QDateTime object containing a datetime \a s seconds
@@ -3788,7 +3807,7 @@ QDateTime QDateTime::addMSecs(qint64 msecs) const
QDateTime dt(*this);
if (d->m_spec == Qt::LocalTime || d->m_spec == Qt::TimeZone)
- // Convert to real UTC first in case crosses daylight transition
+ // Convert to real UTC first in case crosses DST transition
dt.setMSecsSinceEpoch(d->toMSecsSinceEpoch() + msecs);
else
// No need to convert, just add on
@@ -3823,8 +3842,8 @@ qint64 QDateTime::daysTo(const QDateTime &other) const
the value returned is negative.
Before performing the comparison, the two datetimes are converted
- to Qt::UTC to ensure that the result is correct if one of the two
- datetimes has daylight saving time (DST) and the other doesn't.
+ to Qt::UTC to ensure that the result is correct if daylight-saving
+ (DST) applies to one of the two datetimes but not the other.
Returns 0 if either datetime is invalid.
@@ -3845,8 +3864,8 @@ qint64 QDateTime::secsTo(const QDateTime &other) const
the value returned is negative.
Before performing the comparison, the two datetimes are converted
- to Qt::UTC to ensure that the result is correct if one of the two
- datetimes has daylight saving time (DST) and the other doesn't.
+ to Qt::UTC to ensure that the result is correct if daylight-saving
+ (DST) applies to one of the two datetimes and but not the other.
Returns 0 if either datetime is invalid.
@@ -4793,23 +4812,21 @@ QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
// From 4.0 to 5.1 (except 5.0) we used QDateTimePrivate::Spec
dateAndTime = dateTime.d->getDateTime();
out << dateAndTime;
- if (out.version() >= QDataStream::Qt_4_0) {
- switch (dateTime.timeSpec()) {
- case Qt::UTC:
- out << (qint8)QDateTimePrivate::UTC;
- break;
- case Qt::OffsetFromUTC:
- out << (qint8)QDateTimePrivate::OffsetFromUTC;
- break;
- case Qt::TimeZone:
+ switch (dateTime.timeSpec()) {
+ case Qt::UTC:
+ out << (qint8)QDateTimePrivate::UTC;
+ break;
+ case Qt::OffsetFromUTC:
+ out << (qint8)QDateTimePrivate::OffsetFromUTC;
+ break;
+ case Qt::TimeZone:
#ifndef QT_BOOTSTRAPPED
- out << (qint8)QDateTimePrivate::TimeZone;
- break;
+ out << (qint8)QDateTimePrivate::TimeZone;
+ break;
#endif // QT_BOOTSTRAPPED
- case Qt::LocalTime:
- out << (qint8)QDateTimePrivate::LocalUnknown;
- break;
- }
+ case Qt::LocalTime:
+ out << (qint8)QDateTimePrivate::LocalUnknown;
+ break;
}
} else { // version < QDataStream::Qt_4_0
diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h
index 6651efdc13..c44f7f8fee 100644
--- a/src/corelib/tools/qdatetime.h
+++ b/src/corelib/tools/qdatetime.h
@@ -74,7 +74,7 @@ public:
int dayOfYear() const;
int daysInMonth() const;
int daysInYear() const;
- int weekNumber(int *yearNum = 0) const;
+ int weekNumber(int *yearNum = Q_NULLPTR) const;
#ifndef QT_NO_TEXTDATE
static QString shortMonthName(int month, MonthNameType type = DateFormat);
@@ -222,9 +222,12 @@ public:
QDateTime(const QDateTime &other);
~QDateTime();
+#ifdef Q_COMPILER_RVALUE_REFS
+ QDateTime &operator=(QDateTime &&other) Q_DECL_NOTHROW { swap(other); return *this; }
+#endif
QDateTime &operator=(const QDateTime &other);
- inline void swap(QDateTime &other) { qSwap(d, other.d); }
+ void swap(QDateTime &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
bool isNull() const;
bool isValid() const;
diff --git a/src/corelib/tools/qdatetimeparser_p.h b/src/corelib/tools/qdatetimeparser_p.h
index 9457e35ad5..a1cf8f283f 100644
--- a/src/corelib/tools/qdatetimeparser_p.h
+++ b/src/corelib/tools/qdatetimeparser_p.h
@@ -252,6 +252,7 @@ public:
Qt::TimeSpec spec; // spec if used by QDateTimeEdit
Context context;
};
+Q_DECLARE_TYPEINFO(QDateTimeParser::SectionNode, Q_PRIMITIVE_TYPE);
Q_CORE_EXPORT bool operator==(const QDateTimeParser::SectionNode &s1, const QDateTimeParser::SectionNode &s2);
diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp
index 1bd9c5ebb9..012e6a95e8 100644
--- a/src/corelib/tools/qeasingcurve.cpp
+++ b/src/corelib/tools/qeasingcurve.cpp
@@ -170,7 +170,7 @@
\value OutSine \image qeasingcurve-outsine.png
\caption
Easing curve for a sinusoidal (sin(t)) function:
- decelerating from zero velocity.
+ decelerating to zero velocity.
\value InOutSine \image qeasingcurve-inoutsine.png
\caption
Easing curve for a sinusoidal (sin(t)) function:
@@ -186,7 +186,7 @@
\value OutExpo \image qeasingcurve-outexpo.png
\caption
Easing curve for an exponential (2^t) function:
- decelerating from zero velocity.
+ decelerating to zero velocity.
\value InOutExpo \image qeasingcurve-inoutexpo.png
\caption
Easing curve for an exponential (2^t) function:
@@ -202,7 +202,7 @@
\value OutCirc \image qeasingcurve-outcirc.png
\caption
Easing curve for a circular (sqrt(1-t^2)) function:
- decelerating from zero velocity.
+ decelerating to zero velocity.
\value InOutCirc \image qeasingcurve-inoutcirc.png
\caption
Easing curve for a circular (sqrt(1-t^2)) function:
@@ -222,7 +222,7 @@
\caption
Easing curve for an elastic
(exponentially decaying sine wave) function:
- decelerating from zero velocity. The peak amplitude
+ decelerating to zero velocity. The peak amplitude
can be set with the \e amplitude parameter, and the
period of decay by the \e period parameter.
\value InOutElastic \image qeasingcurve-inoutelastic.png
@@ -340,6 +340,7 @@ struct TCBPoint {
qFuzzyCompare(_b, other._b);
}
};
+Q_DECLARE_TYPEINFO(TCBPoint, Q_PRIMITIVE_TYPE);
typedef QVector<TCBPoint> TCBPoints;
@@ -1219,6 +1220,7 @@ QVector<QPointF> static inline tcbToBezier(const TCBPoints &tcbPoints)
{
const int count = tcbPoints.count();
QVector<QPointF> bezierPoints;
+ bezierPoints.reserve(3 * (count - 1));
for (int i = 1; i < count; i++) {
const qreal t_0 = tcbPoints.at(i - 1)._t;
diff --git a/src/corelib/tools/qeasingcurve.h b/src/corelib/tools/qeasingcurve.h
index 4065de1366..d04d5ef30a 100644
--- a/src/corelib/tools/qeasingcurve.h
+++ b/src/corelib/tools/qeasingcurve.h
@@ -75,7 +75,7 @@ public:
QEasingCurve &operator=(const QEasingCurve &other)
{ if ( this != &other ) { QEasingCurve copy(other); swap(copy); } return *this; }
#ifdef Q_COMPILER_RVALUE_REFS
- QEasingCurve(QEasingCurve &&other) : d_ptr(other.d_ptr) { other.d_ptr = 0; }
+ QEasingCurve(QEasingCurve &&other) : d_ptr(other.d_ptr) { other.d_ptr = Q_NULLPTR; }
QEasingCurve &operator=(QEasingCurve &&other)
{ qSwap(d_ptr, other.d_ptr); return *this; }
#endif
diff --git a/src/corelib/tools/qelapsedtimer.cpp b/src/corelib/tools/qelapsedtimer.cpp
index 41e8b4854d..8360f11632 100644
--- a/src/corelib/tools/qelapsedtimer.cpp
+++ b/src/corelib/tools/qelapsedtimer.cpp
@@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE
platforms that support it (see QElapsedTimer::isMonotonic()). This has
the added benefit that QElapsedTimer is immune to time adjustments, such
as the user correcting the time. Also unlike QTime, QElapsedTimer is
- immune to changes in the timezone settings, such as daylight saving
+ immune to changes in the timezone settings, such as daylight-saving
periods.
On the other hand, this means QElapsedTimer values can only be compared
diff --git a/src/corelib/tools/qharfbuzz.cpp b/src/corelib/tools/qharfbuzz.cpp
index afc8b23473..fa279949ea 100644
--- a/src/corelib/tools/qharfbuzz.cpp
+++ b/src/corelib/tools/qharfbuzz.cpp
@@ -65,6 +65,9 @@ HB_UChar16 HB_GetMirroredChar(HB_UChar16 ch)
void (*HB_Library_Resolve(const char *library, int version, const char *symbol))()
{
#ifdef QT_NO_LIBRARY
+ Q_UNUSED(library);
+ Q_UNUSED(version);
+ Q_UNUSED(symbol);
return 0;
#else
return QLibrary::resolve(QLatin1String(library), version, symbol);
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index a8a461e868..b334a697a9 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -290,6 +290,53 @@ static void qt_initialize_qhash_seed()
}
}
+/*! \relates QHash
+ \since 5.6
+
+ Returns the current global QHash seed.
+
+ The seed is set in any newly created QHash. See \l{qHash} about how this seed
+ is being used by QHash.
+
+ \sa qSetGlobalQHashSeed
+ */
+int qGlobalQHashSeed()
+{
+ return qt_qhash_seed.load();
+}
+
+/*! \relates QHash
+ \since 5.6
+
+ Sets the global QHash seed.
+
+ Manually setting the global QHash seed value should be done only for testing
+ and debugging purposes, when deterministic and reproducible behavior on a QHash
+ is needed. We discourage to do it in production code as it can make your
+ application susceptible to \l{algorithmic complexity attacks}.
+
+ The seed is set in any newly created QHash. See \l{qHash} about how this seed
+ is being used by QHash.
+
+ If the environment variable \c QT_HASH_SEED is set, calling this function will
+ result in a no-op.
+
+ Passing the value -1 will reinitialize the global QHash seed to a random value.
+
+ \sa qGlobalQHashSeed
+ */
+void qSetGlobalQHashSeed(int newSeed)
+{
+ if (qEnvironmentVariableIsSet("QT_HASH_SEED"))
+ return;
+ if (newSeed == -1) {
+ int x(qt_create_qhash_seed() & INT_MAX);
+ qt_qhash_seed.store(x);
+ } else {
+ qt_qhash_seed.store(newSeed & INT_MAX);
+ }
+}
+
/*!
\internal
@@ -1132,7 +1179,8 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
where you temporarily need deterministic behavior, for example for debugging or
regression testing. To disable the randomization, define the environment
variable \c QT_HASH_SEED. The contents of that variable, interpreted as a
- decimal value, will be used as the seed for qHash().
+ decimal value, will be used as the seed for qHash(). Alternatively, you can
+ call the qSetGlobalQHashSeed() function.
\sa QHashIterator, QMutableHashIterator, QMap, QSet
*/
@@ -1536,6 +1584,15 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa begin(), constEnd()
*/
+/*! \fn QHash::key_iterator QHash::keyBegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first key
+ in the hash.
+
+ \sa keyEnd()
+*/
+
/*! \fn QHash::iterator QHash::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
@@ -1566,6 +1623,15 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa cbegin(), end()
*/
+/*! \fn QHash::key_iterator QHash::keyEnd() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
+ item after the last key in the hash.
+
+ \sa keyBegin()
+*/
+
/*! \fn QHash::iterator QHash::erase(iterator pos)
Removes the (key, value) pair associated with the iterator \a pos
@@ -1729,6 +1795,26 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\internal
*/
+/*! \typedef QHash::key_iterator::difference_type
+ \internal
+*/
+
+/*! \typedef QHash::key_iterator::iterator_category
+ \internal
+*/
+
+/*! \typedef QHash::key_iterator::pointer
+ \internal
+*/
+
+/*! \typedef QHash::key_iterator::reference
+ \internal
+*/
+
+/*! \typedef QHash::key_iterator::value_type
+ \internal
+*/
+
/*! \class QHash::iterator
\inmodule QtCore
\brief The QHash::iterator class provides an STL-style non-const iterator for QHash and QMultiHash.
@@ -1802,7 +1888,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
while iterators are active on that container. For more information,
read \l{Implicit sharing iterator problem}.
- \sa QHash::const_iterator, QMutableHashIterator
+ \sa QHash::const_iterator, QHash::key_iterator, QMutableHashIterator
*/
/*! \fn QHash::iterator::iterator()
@@ -2155,6 +2241,114 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator+=(), operator-()
*/
+/*! \class QHash::key_iterator
+ \inmodule QtCore
+ \since 5.6
+ \brief The QHash::key_iterator class provides an STL-style const iterator for QHash and QMultiHash keys.
+
+ QHash::key_iterator is essentially the same as QHash::const_iterator
+ with the difference that operator*() and operator->() return a key
+ instead of a value.
+
+ For most uses QHash::iterator and QHash::const_iterator should be used,
+ you can easily access the key by calling QHash::iterator::key():
+
+ \snippet code/src_corelib_tools_qhash.cpp 27
+
+ However, to have interoperability between QHash's keys and STL-style
+ algorithms we need an iterator that dereferences to a key instead
+ of a value. With QHash::key_iterator we can apply an algorithm to a
+ range of keys without having to call QHash::keys(), which is inefficient
+ as it costs one QHash iteration and memory allocation to create a temporary
+ QList.
+
+ \snippet code/src_corelib_tools_qhash.cpp 28
+
+ QHash::key_iterator is const, it's not possible to modify the key.
+
+ The default QHash::key_iterator constructor creates an uninitialized
+ iterator. You must initialize it using a QHash function like
+ QHash::keyBegin() or QHash::keyEnd().
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QHash::const_iterator, QHash::iterator
+*/
+
+/*! \fn const T &QHash::key_iterator::operator*() const
+
+ Returns the current item's key.
+*/
+
+/*! \fn const T *QHash::key_iterator::operator->() const
+
+ Returns a pointer to the current item's key.
+*/
+
+/*! \fn bool QHash::key_iterator::operator==(key_iterator other) const
+
+ Returns \c true if \a other points to the same item as this
+ iterator; otherwise returns \c false.
+
+ \sa operator!=()
+*/
+
+/*! \fn bool QHash::key_iterator::operator!=(key_iterator other) const
+
+ Returns \c true if \a other points to a different item than this
+ iterator; otherwise returns \c false.
+
+ \sa operator==()
+*/
+
+/*!
+ \fn QHash::key_iterator &QHash::key_iterator::operator++()
+
+ The prefix ++ operator (\c{++i}) advances the iterator to the
+ next item in the hash and returns an iterator to the new current
+ item.
+
+ Calling this function on QHash::keyEnd() leads to undefined results.
+
+ \sa operator--()
+*/
+
+/*! \fn QHash::key_iterator QHash::key_iterator::operator++(int)
+
+ \overload
+
+ The postfix ++ operator (\c{i++}) advances the iterator to the
+ next item in the hash and returns an iterator to the previous
+ item.
+*/
+
+/*! \fn QHash::key_iterator &QHash::key_iterator::operator--()
+
+ The prefix -- operator (\c{--i}) makes the preceding item
+ current and returns an iterator pointing to the new current item.
+
+ Calling this function on QHash::keyBegin() leads to undefined
+ results.
+
+ \sa operator++()
+*/
+
+/*! \fn QHash::key_iterator QHash::key_iterator::operator--(int)
+
+ \overload
+
+ The postfix -- operator (\c{i--}) makes the preceding item
+ current and returns an iterator pointing to the previous
+ item.
+*/
+
+/*! \fn const_iterator QHash::key_iterator::base() const
+ Returns the underlying const_iterator this key_iterator is based on.
+*/
+
/*! \fn QDataStream &operator<<(QDataStream &out, const QHash<Key, T>& hash)
\relates QHash
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index a9ece12670..a18dd74706 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -38,10 +38,9 @@
#include <QtCore/qchar.h>
#include <QtCore/qiterator.h>
#include <QtCore/qlist.h>
-#include <QtCore/qpair.h>
#include <QtCore/qrefcount.h>
+#include <QtCore/qhashfunctions.h>
-#include <numeric> // for std::accumulate
#ifdef Q_COMPILER_INITIALIZER_LISTS
#include <initializer_list>
#endif
@@ -54,101 +53,6 @@
QT_BEGIN_NAMESPACE
-class QBitArray;
-class QByteArray;
-class QString;
-class QStringRef;
-class QLatin1String;
-
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHashBits(const void *p, size_t size, uint seed = 0) Q_DECL_NOTHROW;
-
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(char key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(uchar key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(signed char key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(ushort key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(short key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(uint key, uint seed = 0) Q_DECL_NOTHROW { return key ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(int key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(ulong key, uint seed = 0) Q_DECL_NOTHROW
-{
- return (sizeof(ulong) > sizeof(uint))
- ? (uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)) ^ seed)
- : (uint(key & (~0U)) ^ seed);
-}
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(long key, uint seed = 0) Q_DECL_NOTHROW { return qHash(ulong(key), seed); }
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(quint64 key, uint seed = 0) Q_DECL_NOTHROW
-{
- return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)) ^ seed;
-}
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(qint64 key, uint seed = 0) Q_DECL_NOTHROW { return qHash(quint64(key), seed); }
-Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(float key, uint seed = 0) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(double key, uint seed = 0) Q_DECL_NOTHROW;
-#ifndef Q_OS_DARWIN
-Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(long double key, uint seed = 0) Q_DECL_NOTHROW;
-#endif
-Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(const QChar key, uint seed = 0) Q_DECL_NOTHROW { return qHash(key.unicode(), seed); }
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QByteArray &key, uint seed = 0) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QString &key, uint seed = 0) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QStringRef &key, uint seed = 0) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QBitArray &key, uint seed = 0) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(QLatin1String key, uint seed = 0) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash(const QString &key) Q_DECL_NOTHROW;
-Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash(const QStringRef &key) Q_DECL_NOTHROW;
-
-template <class T> inline uint qHash(const T *key, uint seed = 0) Q_DECL_NOTHROW
-{
- return qHash(reinterpret_cast<quintptr>(key), seed);
-}
-template<typename T> inline uint qHash(const T &t, uint seed)
- Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
-{ return (qHash(t) ^ seed); }
-
-namespace QtPrivate {
-
-struct QHashCombine {
- typedef uint result_type;
- template <typename T>
- Q_DECL_CONSTEXPR result_type operator()(uint seed, const T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
- // combiner taken from N3876 / boost::hash_combine
- { return seed ^ (qHash(t) + 0x9e3779b9 + (seed << 6) + (seed >> 2)) ; }
-};
-
-struct QHashCombineCommutative {
- // QHashCombine is a good hash combiner, but is not commutative,
- // ie. it depends on the order of the input elements. That is
- // usually what we want: {0,1,3} should hash differently than
- // {1,3,0}. Except when it isn't (e.g. for QSet and
- // QHash). Therefore, provide a commutative combiner, too.
- typedef uint result_type;
- template <typename T>
- Q_DECL_CONSTEXPR result_type operator()(uint seed, const T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
- { return seed + qHash(t); } // don't use xor!
-};
-
-} // namespace QtPrivate
-
-template <typename InputIterator>
-inline uint qHashRange(InputIterator first, InputIterator last, uint seed = 0)
- Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(*first))) // assume iterator operations don't throw
-{
- return std::accumulate(first, last, seed, QtPrivate::QHashCombine());
-}
-
-template <typename InputIterator>
-inline uint qHashRangeCommutative(InputIterator first, InputIterator last, uint seed = 0)
- Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(*first))) // assume iterator operations don't throw
-{
- return std::accumulate(first, last, seed, QtPrivate::QHashCombineCommutative());
-}
-
-template <typename T1, typename T2> inline uint qHash(const QPair<T1, T2> &key, uint seed = 0)
- Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(key.first, seed)) && noexcept(qHash(key.second, seed)))
-{
- uint h1 = qHash(key.first, seed);
- uint h2 = qHash(key.second, seed);
- return ((h1 << 16) | (h1 >> 16)) ^ h2 ^ seed;
-}
-
struct Q_CORE_EXPORT QHashData
{
struct Node {
@@ -345,7 +249,7 @@ public:
#ifdef Q_COMPILER_RVALUE_REFS
QHash(QHash &&other) Q_DECL_NOTHROW : d(other.d) { other.d = const_cast<QHashData *>(&QHashData::shared_null); }
QHash &operator=(QHash &&other) Q_DECL_NOTHROW
- { qSwap(d, other.d); return *this; }
+ { QHash moved(std::move(other)); swap(moved); return *this; }
#endif
void swap(QHash &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
@@ -402,7 +306,7 @@ public:
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(0) { }
+ inline iterator() : i(Q_NULLPTR) { }
explicit inline iterator(void *node) : i(reinterpret_cast<QHashData::Node *>(node)) { }
inline const Key &key() const { return concrete(i)->key; }
@@ -449,6 +353,7 @@ public:
class const_iterator
{
friend class iterator;
+ friend class QSet<Key>;
QHashData::Node *i;
public:
@@ -458,7 +363,7 @@ public:
typedef const T *pointer;
typedef const T &reference;
- inline const_iterator() : i(0) { }
+ inline const_iterator() : i(Q_NULLPTR) { }
explicit inline const_iterator(void *node)
: i(reinterpret_cast<QHashData::Node *>(node)) { }
#ifdef QT_STRICT_ITERATORS
@@ -508,6 +413,31 @@ public:
};
friend class const_iterator;
+ class key_iterator
+ {
+ const_iterator i;
+
+ public:
+ typedef typename const_iterator::iterator_category iterator_category;
+ typedef typename const_iterator::difference_type difference_type;
+ typedef Key value_type;
+ typedef const Key *pointer;
+ typedef const Key &reference;
+
+ explicit key_iterator(const_iterator o) : i(o) { }
+
+ const Key &operator*() const { return i.key(); }
+ const Key *operator->() const { return &i.key(); }
+ bool operator==(key_iterator o) const { return i == o.i; }
+ bool operator!=(key_iterator o) const { return i != o.i; }
+
+ inline key_iterator &operator++() { ++i; return *this; }
+ inline key_iterator operator++(int) { return key_iterator(i++);}
+ inline key_iterator &operator--() { --i; return *this; }
+ inline key_iterator operator--(int) { return key_iterator(i--); }
+ const_iterator base() const { return i; }
+ };
+
// STL style
inline iterator begin() { detach(); return iterator(d->firstNode()); }
inline const_iterator begin() const { return const_iterator(d->firstNode()); }
@@ -517,6 +447,9 @@ public:
inline const_iterator end() const { return const_iterator(e); }
inline const_iterator cend() const { return const_iterator(e); }
inline const_iterator constEnd() const { return const_iterator(e); }
+ inline key_iterator keyBegin() const { return key_iterator(begin()); }
+ inline key_iterator keyEnd() const { return key_iterator(end()); }
+
iterator erase(iterator it);
// more Qt
@@ -546,7 +479,8 @@ public:
private:
void detach_helper();
void freeData(QHashData *d);
- Node **findNode(const Key &key, uint *hp = 0) const;
+ Node **findNode(const Key &key, uint *hp = Q_NULLPTR) const;
+ Node **findNode(const Key &key, uint h) const;
Node *createNode(uint h, const Key &key, const T &value, Node **nextNode);
void deleteNode(Node *node);
static void deleteNode2(QHashData::Node *node);
@@ -590,7 +524,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE void QHash<Key, T>::duplicateNode(QHashData::Node *node, void *newNode)
{
Node *concreteNode = concrete(node);
- new (newNode) Node(concreteNode->key, concreteNode->value, concreteNode->h, 0);
+ new (newNode) Node(concreteNode->key, concreteNode->value, concreteNode->h, Q_NULLPTR);
}
template <class Key, class T>
@@ -942,17 +876,10 @@ Q_INLINE_TEMPLATE bool QHash<Key, T>::contains(const Key &akey) const
}
template <class Key, class T>
-Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(const Key &akey,
- uint *ahp) const
+Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(const Key &akey, uint h) const
{
Node **node;
- uint h = 0;
- if (d->numBuckets || ahp) {
- h = qHash(akey, d->seed);
- if (ahp)
- *ahp = h;
- }
if (d->numBuckets) {
node = reinterpret_cast<Node **>(&d->buckets[h % d->numBuckets]);
Q_ASSERT(*node == e || (*node)->next);
@@ -965,6 +892,20 @@ Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(cons
}
template <class Key, class T>
+Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(const Key &akey,
+ uint *ahp) const
+{
+ uint h = 0;
+
+ if (d->numBuckets || ahp) {
+ h = qHash(akey, d->seed);
+ if (ahp)
+ *ahp = h;
+ }
+ return findNode(akey, h);
+}
+
+template <class Key, class T>
Q_OUTOFLINE_TEMPLATE bool QHash<Key, T>::operator==(const QHash &other) const
{
if (size() != other.size())
@@ -994,7 +935,7 @@ template <class Key, class T>
class QMultiHash : public QHash<Key, T>
{
public:
- QMultiHash() {}
+ QMultiHash() Q_DECL_NOTHROW {}
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QMultiHash(std::initializer_list<std::pair<Key,T> > list)
{
@@ -1003,8 +944,14 @@ public:
insert(it->first, it->second);
}
#endif
+ // compiler-generated copy/move ctors/assignment operators are fine!
+ // compiler-generated destructor is fine!
+
QMultiHash(const QHash<Key, T> &other) : QHash<Key, T>(other) {}
- void swap(QMultiHash &other) { QHash<Key, T>::swap(other); } // prevent QMultiHash<->QHash swaps
+#ifdef Q_COMPILER_RVALUE_REFS
+ QMultiHash(QHash<Key, T> &&other) Q_DECL_NOTHROW : QHash<Key, T>(std::move(other)) {}
+#endif
+ void swap(QMultiHash &other) Q_DECL_NOTHROW { QHash<Key, T>::swap(other); } // prevent QMultiHash<->QHash swaps
inline typename QHash<Key, T>::iterator replace(const Key &key, const T &value)
{ return QHash<Key, T>::insert(key, value); }
@@ -1093,6 +1040,9 @@ Q_INLINE_TEMPLATE int QMultiHash<Key, T>::count(const Key &key, const T &value)
return n;
}
+Q_CORE_EXPORT int qGlobalQHashSeed();
+Q_CORE_EXPORT void qSetGlobalQHashSeed(int newSeed);
+
Q_DECLARE_ASSOCIATIVE_ITERATOR(Hash)
Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR(Hash)
diff --git a/src/corelib/tools/qhashfunctions.h b/src/corelib/tools/qhashfunctions.h
new file mode 100644
index 0000000000..e15fbb07ac
--- /dev/null
+++ b/src/corelib/tools/qhashfunctions.h
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHASHFUNCTIONS_H
+#define QHASHFUNCTIONS_H
+
+#include <QtCore/qchar.h>
+#include <QtCore/qpair.h>
+
+#include <numeric> // for std::accumulate
+
+#if 0
+#pragma qt_class(QHashFunctions)
+#endif
+
+#if defined(Q_CC_MSVC)
+#pragma warning( push )
+#pragma warning( disable : 4311 ) // disable pointer truncation warning
+#pragma warning( disable : 4127 ) // conditional expression is constant
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QBitArray;
+class QByteArray;
+class QString;
+class QStringRef;
+class QLatin1String;
+
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHashBits(const void *p, size_t size, uint seed = 0) Q_DECL_NOTHROW;
+
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(char key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(uchar key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(signed char key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(ushort key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(short key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(uint key, uint seed = 0) Q_DECL_NOTHROW { return key ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(int key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(ulong key, uint seed = 0) Q_DECL_NOTHROW
+{
+ return (sizeof(ulong) > sizeof(uint))
+ ? (uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)) ^ seed)
+ : (uint(key & (~0U)) ^ seed);
+}
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(long key, uint seed = 0) Q_DECL_NOTHROW { return qHash(ulong(key), seed); }
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(quint64 key, uint seed = 0) Q_DECL_NOTHROW
+{
+ return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)) ^ seed;
+}
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(qint64 key, uint seed = 0) Q_DECL_NOTHROW { return qHash(quint64(key), seed); }
+Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(float key, uint seed = 0) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(double key, uint seed = 0) Q_DECL_NOTHROW;
+#ifndef Q_OS_DARWIN
+Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(long double key, uint seed = 0) Q_DECL_NOTHROW;
+#endif
+Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(const QChar key, uint seed = 0) Q_DECL_NOTHROW { return qHash(key.unicode(), seed); }
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QByteArray &key, uint seed = 0) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QString &key, uint seed = 0) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QStringRef &key, uint seed = 0) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QBitArray &key, uint seed = 0) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qHash(QLatin1String key, uint seed = 0) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash(const QString &key) Q_DECL_NOTHROW;
+Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash(const QStringRef &key) Q_DECL_NOTHROW;
+
+template <class T> inline uint qHash(const T *key, uint seed = 0) Q_DECL_NOTHROW
+{
+ return qHash(reinterpret_cast<quintptr>(key), seed);
+}
+template<typename T> inline uint qHash(const T &t, uint seed)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
+{ return qHash(t) ^ seed; }
+
+namespace QtPrivate {
+
+struct QHashCombine {
+ typedef uint result_type;
+ template <typename T>
+ Q_DECL_CONSTEXPR result_type operator()(uint seed, const T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
+ // combiner taken from N3876 / boost::hash_combine
+ { return seed ^ (qHash(t) + 0x9e3779b9 + (seed << 6) + (seed >> 2)) ; }
+};
+
+struct QHashCombineCommutative {
+ // QHashCombine is a good hash combiner, but is not commutative,
+ // ie. it depends on the order of the input elements. That is
+ // usually what we want: {0,1,3} should hash differently than
+ // {1,3,0}. Except when it isn't (e.g. for QSet and
+ // QHash). Therefore, provide a commutative combiner, too.
+ typedef uint result_type;
+ template <typename T>
+ Q_DECL_CONSTEXPR result_type operator()(uint seed, const T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
+ { return seed + qHash(t); } // don't use xor!
+};
+
+} // namespace QtPrivate
+
+template <typename InputIterator>
+inline uint qHashRange(InputIterator first, InputIterator last, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(*first))) // assume iterator operations don't throw
+{
+ return std::accumulate(first, last, seed, QtPrivate::QHashCombine());
+}
+
+template <typename InputIterator>
+inline uint qHashRangeCommutative(InputIterator first, InputIterator last, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(*first))) // assume iterator operations don't throw
+{
+ return std::accumulate(first, last, seed, QtPrivate::QHashCombineCommutative());
+}
+
+template <typename T1, typename T2> inline uint qHash(const QPair<T1, T2> &key, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(key.first, seed)) && noexcept(qHash(key.second, seed)))
+{
+ uint h1 = qHash(key.first, seed);
+ uint h2 = qHash(key.second, seed);
+ return ((h1 << 16) | (h1 >> 16)) ^ h2 ^ seed;
+}
+
+QT_END_NAMESPACE
+
+#if defined(Q_CC_MSVC)
+#pragma warning( pop )
+#endif
+
+#endif // QHASHFUNCTIONS_H
diff --git a/src/corelib/tools/qlinkedlist.cpp b/src/corelib/tools/qlinkedlist.cpp
index fbd263e88b..5d91bfe924 100644
--- a/src/corelib/tools/qlinkedlist.cpp
+++ b/src/corelib/tools/qlinkedlist.cpp
@@ -388,6 +388,52 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa constBegin(), end()
*/
+/*! \fn QLinkedList::reverse_iterator QLinkedList::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the list, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QLinkedList::const_reverse_iterator QLinkedList::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QLinkedList::const_reverse_iterator QLinkedList::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the list, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QLinkedList::reverse_iterator QLinkedList::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last item in the list, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QLinkedList::const_reverse_iterator QLinkedList::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QLinkedList::const_reverse_iterator QLinkedList::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last item in the list, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*! \fn QLinkedList::iterator QLinkedList::insert(iterator before, const T &value)
Inserts \a value in front of the item pointed to by the iterator
@@ -423,6 +469,38 @@ const QLinkedListData QLinkedListData::shared_null = {
Qt-style synonym for QLinkedList::const_iterator.
*/
+/*! \typedef QLinkedList::reverse_iterator
+ \since 5.6
+
+ The QLinkedList::reverse_iterator typedef provides an STL-style non-const
+ reverse iterator for QLinkedList.
+
+ It is simply a typedef for \c{std::reverse_iterator<QLinkedList::iterator>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QLinkedList::rbegin(), QLinkedList::rend(), QLinkedList::const_reverse_iterator, QLinkedList::iterator
+*/
+
+/*! \typedef QLinkedList::const_reverse_iterator
+ \since 5.6
+
+ The QLinkedList::const_reverse_iterator typedef provides an STL-style const
+ reverse iterator for QLinkedList.
+
+ It is simply a typedef for \c{std::reverse_iterator<QLinkedList::const_iterator>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QLinkedList::rbegin(), QLinkedList::rend(), QLinkedList::reverse_iterator, QLinkedList::const_iterator
+*/
+
/*!
\typedef QLinkedList::size_type
diff --git a/src/corelib/tools/qlinkedlist.h b/src/corelib/tools/qlinkedlist.h
index 7908bf5137..110529d843 100644
--- a/src/corelib/tools/qlinkedlist.h
+++ b/src/corelib/tools/qlinkedlist.h
@@ -74,7 +74,7 @@ class QLinkedList
union { QLinkedListData *d; QLinkedListNode<T> *e; };
public:
- inline QLinkedList() : d(const_cast<QLinkedListData *>(&QLinkedListData::shared_null)) { }
+ inline QLinkedList() Q_DECL_NOTHROW : d(const_cast<QLinkedListData *>(&QLinkedListData::shared_null)) { }
inline QLinkedList(const QLinkedList<T> &l) : d(l.d) { d->ref.ref(); if (!d->sharable) detach(); }
#if defined(Q_COMPILER_INITIALIZER_LISTS)
inline QLinkedList(std::initializer_list<T> list)
@@ -86,11 +86,12 @@ public:
~QLinkedList();
QLinkedList<T> &operator=(const QLinkedList<T> &);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QLinkedList(QLinkedList<T> &&other) : d(other.d) { other.d = const_cast<QLinkedListData *>(&QLinkedListData::shared_null); }
- inline QLinkedList<T> &operator=(QLinkedList<T> &&other)
- { qSwap(d, other.d); return *this; }
+ QLinkedList(QLinkedList<T> &&other) Q_DECL_NOTHROW
+ : d(other.d) { other.d = const_cast<QLinkedListData *>(&QLinkedListData::shared_null); }
+ QLinkedList<T> &operator=(QLinkedList<T> &&other) Q_DECL_NOTHROW
+ { QLinkedList moved(std::move(other)); swap(moved); return *this; }
#endif
- inline void swap(QLinkedList<T> &other) { qSwap(d, other.d); }
+ inline void swap(QLinkedList<T> &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
bool operator==(const QLinkedList<T> &l) const;
inline bool operator!=(const QLinkedList<T> &l) const { return !(*this == l); }
@@ -182,14 +183,25 @@ public:
friend class const_iterator;
// stl style
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
inline iterator begin() { detach(); return e->n; }
- inline const_iterator begin() const { return e->n; }
- inline const_iterator cbegin() const { return e->n; }
- inline const_iterator constBegin() const { return e->n; }
+ inline const_iterator begin() const Q_DECL_NOTHROW { return e->n; }
+ inline const_iterator cbegin() const Q_DECL_NOTHROW { return e->n; }
+ inline const_iterator constBegin() const Q_DECL_NOTHROW { return e->n; }
inline iterator end() { detach(); return e; }
- inline const_iterator end() const { return e; }
- inline const_iterator cend() const { return e; }
- inline const_iterator constEnd() const { return e; }
+ inline const_iterator end() const Q_DECL_NOTHROW { return e; }
+ inline const_iterator cend() const Q_DECL_NOTHROW { return e; }
+ inline const_iterator constEnd() const Q_DECL_NOTHROW { return e; }
+
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
+
iterator insert(iterator before, const T &t);
iterator erase(iterator pos);
iterator erase(iterator first, iterator last);
diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp
index db00dcb458..5710f3925b 100644
--- a/src/corelib/tools/qlist.cpp
+++ b/src/corelib/tools/qlist.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2015 Intel Corporation.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -148,6 +149,17 @@ void QListData::realloc(int alloc)
d->begin = d->end = 0;
}
+void QListData::realloc_grow(int growth)
+{
+ Q_ASSERT(!d->ref.isShared());
+ int alloc = grow(d->alloc + growth);
+ Data *x = static_cast<Data *>(::realloc(d, DataHeaderSize + alloc * sizeof(void *)));
+ Q_CHECK_PTR(x);
+
+ d = x;
+ d->alloc = alloc;
+}
+
void QListData::dispose(Data *d)
{
Q_ASSERT(!d->ref.isShared());
@@ -167,7 +179,7 @@ void **QListData::append(int n)
::memcpy(d->array, d->array + b, e * sizeof(void *));
d->begin = 0;
} else {
- realloc(grow(d->alloc + n));
+ realloc_grow(n);
}
}
d->end = e + n;
@@ -191,7 +203,7 @@ void **QListData::prepend()
Q_ASSERT(!d->ref.isShared());
if (d->begin == 0) {
if (d->end >= d->alloc / 3)
- realloc(grow(d->alloc + 1));
+ realloc_grow(1);
if (d->end < d->alloc / 3)
d->begin = d->alloc - 2 * d->end;
@@ -218,7 +230,7 @@ void **QListData::insert(int i)
if (d->begin == 0) {
if (d->end == d->alloc) {
// If the array is full, we expand it and move some items rightward
- realloc(grow(d->alloc + 1));
+ realloc_grow(1);
} else {
// If there is free space at the end of the array, we move some items rightward
}
@@ -332,41 +344,56 @@ void **QListData::erase(void **xi)
\reentrant
QList\<T\> is one of Qt's generic \l{container classes}. It
- stores a list of values and provides fast index-based access as
- well as fast insertions and removals.
+ stores items in a list that provides fast index-based access
+ and index-based insertions and removals.
QList\<T\>, QLinkedList\<T\>, and QVector\<T\> provide similar
- functionality. Here's an overview:
+ APIs and functionality. They are often interchangeable, but there
+ are performance consequences. Here is an overview of use cases:
\list
- \li For most purposes, QList is the right class to use. Its
- index-based API is more convenient than QLinkedList's
- iterator-based API, and it is usually faster than
- QVector because of the way it stores its items in
- memory. It also expands to less code in your executable.
- \li If you need a real linked list, with guarantees of \l{constant
- time} insertions in the middle of the list and iterators to
- items rather than indexes, use QLinkedList.
- \li If you want the items to occupy adjacent memory positions,
- use QVector.
+ \li QVector should be your default first choice.
+ QVector\<T\> will usually give better performance than QList\<T\>,
+ because QVector\<T\> always stores its items sequentially in memory,
+ where QList\<T\> will allocate its items on the heap unless
+ \c {sizeof(T) <= sizeof(void*)} and T has been declared to be
+ either a \c{Q_MOVABLE_TYPE} or a \c{Q_PRIMITIVE_TYPE} using
+ \l {Q_DECLARE_TYPEINFO}. See the \l {Pros and Cons of Using QList}
+ for an explanation.
+ \li However, QList is used throughout the Qt APIs for passing
+ parameters and for returning values. Use QList to interface with
+ those APIs.
+ \li If you need a real linked list, which guarantees
+ \l {Algorithmic Complexity}{constant time} insertions mid-list and
+ uses iterators to items rather than indexes, use QLinkedList.
\endlist
+ \note QVector and QVarLengthArray both guarantee C-compatible
+ array layout. QList does not. This might be important if your
+ application must interface with a C API.
- Internally, QList\<T\> is represented as an array of pointers to
- items of type T. If T is itself a pointer type or a basic type
- that is no larger than a pointer, or if T is one of Qt's \l{shared
- classes}, then QList\<T\> stores the items directly in the pointer
- array. For lists under a thousand items, this array representation
- allows for very fast insertions in the middle, and it allows
- index-based access. Furthermore, operations like prepend() and
- append() are very fast, because QList preallocates memory at both
+ \note Iterators into a QLinkedList and references into
+ heap-allocating QLists remain valid long as the referenced items
+ remain in the container. This is not true for iterators and
+ references into a QVector and non-heap-allocating QLists.
+
+ Internally, QList\<T\> is represented as an array of T if
+ \c{sizeof(T) <= sizeof(void*)} and T has been declared to be
+ either a \c{Q_MOVABLE_TYPE} or a \c{Q_PRIMITIVE_TYPE} using
+ \l {Q_DECLARE_TYPEINFO}. Otherwise, QList\<T\> is represented
+ as an array of T* and the items are allocated on the heap.
+
+ The array representation allows very fast insertions and
+ index-based access. The prepend() and append() operations are
+ also very fast because QList preallocates memory at both
ends of its internal array. (See \l{Algorithmic Complexity} for
- details.) Note, however, that for unshared list items that are
- larger than a pointer, each append or insert of a new item
- requires allocating the new item on the heap, and this per item
- allocation might make QVector a better choice in cases that do
- lots of appending or inserting, since QVector allocates memory for
- its items in a single heap allocation.
+ details.
+
+ Note, however, that when the conditions specified above are not met,
+ each append or insert of a new item requires allocating the new item
+ on the heap, and this per item allocation will make QVector a better
+ choice for use cases that do a lot of appending or inserting, because
+ QVector can allocate memory for many items in a single heap allocation.
Note that the internal array only ever gets bigger over the life
of the list. It never shrinks. The internal array is deallocated
@@ -401,9 +428,10 @@ void **QListData::erase(void **xi)
\snippet code/src_corelib_tools_qlistdata.cpp 2
- Because QList is implemented as an array of pointers, this
- operation is very fast (\l{constant time}). For read-only access,
- an alternative syntax is to use at():
+ Because QList is implemented as an array of pointers for types
+ that are larger than a pointer or are not movable, this operation
+ requires (\l{Algorithmic Complexity}{constant time}). For read-only
+ access, an alternative syntax is to use at():
\snippet code/src_corelib_tools_qlistdata.cpp 3
@@ -417,10 +445,10 @@ void **QListData::erase(void **xi)
\snippet code/src_corelib_tools_qlistdata.cpp 4
- Inserting and removing items at either ends of the list is very
- fast (\l{constant time} in most cases), because QList
- preallocates extra space on both sides of its internal buffer to
- allow for fast growth at both ends of the list.
+ Inserting and removing items at either end of the list is very
+ fast (\l{Algorithmic Complexity}{constant time} in most cases),
+ because QList preallocates extra space on both sides of its
+ internal buffer to allow for fast growth at both ends of the list.
If you want to find all occurrences of a particular value in a
list, use indexOf() or lastIndexOf(). The former searches forward
@@ -481,6 +509,11 @@ void **QListData::erase(void **xi)
\l{QStringList::removeDuplicates()}{removeDuplicates},
\l{QStringList::sort()}{sort}.
+ \section1 More Information on Using Qt Containers
+
+ For a detailed discussion comparing Qt containers with each other and
+ with STL containers, see \l {Understand the Qt Containers}.
+
\sa QListIterator, QMutableListIterator, QLinkedList, QVector
*/
@@ -512,10 +545,11 @@ void **QListData::erase(void **xi)
Constructs a copy of \a other.
- This operation takes \l{constant time}, because QList is
- \l{implicitly shared}. This makes returning a QList from a
- function very fast. If a shared instance is modified, it will be
- copied (copy-on-write), and that takes \l{linear time}.
+ This operation takes \l{Algorithmic Complexity}{constant time},
+ because QList is \l{implicitly shared}. This makes returning a
+ QList from a function very fast. If a shared instance is modified,
+ it will be copied (copy-on-write), and that takes
+ \l{Algorithmic Complexity}{linear time}.
\sa operator=()
*/
@@ -584,6 +618,65 @@ void **QListData::erase(void **xi)
\sa operator==()
*/
+/*! \fn bool operator<(const QList<T> &lhs, const QList<T> &rhs)
+ \since 5.6
+ \relates QList
+
+ Returns \c true if list \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically less than} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator<=(const QList<T> &lhs, const QList<T> &rhs)
+ \since 5.6
+ \relates QList
+
+ Returns \c true if list \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically less than or equal to} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator>(const QList<T> &lhs, const QList<T> &rhs)
+ \since 5.6
+ \relates QList
+
+ Returns \c true if list \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically greater than} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator>=(const QList<T> &lhs, const QList<T> &rhs)
+ \since 5.6
+ \relates QList
+
+ Returns \c true if list \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically greater than or equal to} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*!
+ \fn uint qHash(const QList<T> &key, uint seed = 0)
+ \since 5.6
+ \relates QList
+
+ Returns the hash value for \a key,
+ using \a seed to seed the calculation.
+
+ This function requires qHash() to be overloaded for the value type \c T.
+*/
+
/*!
\fn int QList::size() const
@@ -641,7 +734,7 @@ void **QListData::erase(void **xi)
Returns the item at index position \a i in the list. \a i must be
a valid index position in the list (i.e., 0 <= \a i < size()).
- This function is very fast (\l{constant time}).
+ This function is very fast (\l{Algorithmic Complexity}{constant time}).
\sa value(), operator[]()
*/
@@ -654,8 +747,8 @@ void **QListData::erase(void **xi)
If this function is called on a list that is currently being shared, it
will trigger a copy of all elements. Otherwise, this function runs in
- \l{constant time}. If you do not want to modify the list you should use
- QList::at().
+ \l{Algorithmic Complexity}{constant time}. If you do not want to modify
+ the list you should use QList::at().
\sa at(), value()
*/
@@ -664,7 +757,7 @@ void **QListData::erase(void **xi)
\overload
- Same as at(). This function runs in \l{constant time}.
+ Same as at(). This function runs in \l{Algorithmic Complexity}{constant time}.
*/
/*! \fn QList::reserve(int alloc)
@@ -690,9 +783,9 @@ void **QListData::erase(void **xi)
This is the same as list.insert(size(), \a value).
If this list is not shared, this operation is typically
- very fast (amortized \l{constant time}), because QList
- preallocates extra space on both sides of its internal
- buffer to allow for fast growth at both ends of the list.
+ very fast (amortized \l{Algorithmic Complexity}{constant time}),
+ because QList preallocates extra space on both sides of its
+ internal buffer to allow for fast growth at both ends of the list.
\sa operator<<(), prepend(), insert()
*/
@@ -718,17 +811,17 @@ void **QListData::erase(void **xi)
This is the same as list.insert(0, \a value).
If this list is not shared, this operation is typically
- very fast (amortized \l{constant time}), because QList
- preallocates extra space on both sides of its internal
- buffer to allow for fast growth at both ends of the list.
+ very fast (amortized \l{Algorithmic Complexity}{constant time}),
+ because QList preallocates extra space on both sides of its
+ internal buffer to allow for fast growth at both ends of the list.
\sa append(), insert()
*/
/*! \fn void QList::insert(int i, const T &value)
- Inserts \a value at index position \a i in the list. If \a i
- is 0, the value is prepended to the list. If \a i is size(), the
+ Inserts \a value at index position \a i in the list. If \a i <= 0,
+ the value is prepended to the list. If \a i >= size(), the
value is appended to the list.
Example:
@@ -811,7 +904,8 @@ void **QListData::erase(void **xi)
same as takeAt(0). This function assumes the list is not empty. To
avoid failure, call isEmpty() before calling this function.
- If this list is not shared, this operation takes \l{constant time}.
+ If this list is not shared, this operation takes
+ \l {Algorithmic Complexity}{constant time}.
If you don't use the return value, removeFirst() is more
efficient.
@@ -826,7 +920,8 @@ void **QListData::erase(void **xi)
not empty. To avoid failure, call isEmpty() before calling this
function.
- If this list is not shared, this operation takes \l{constant time}.
+ If this list is not shared, this operation takes
+ \l {Algorithmic Complexity}{constant time}.
If you don't use the return value, removeLast() is more
efficient.
@@ -1000,6 +1095,52 @@ void **QListData::erase(void **xi)
\sa constBegin(), end()
*/
+/*! \fn QList::reverse_iterator QList::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the list, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QList::const_reverse_iterator QList::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QList::const_reverse_iterator QList::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the list, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QList::reverse_iterator QList::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last item in the list, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QList::const_reverse_iterator QList::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QList::const_reverse_iterator QList::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last item in the list, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*! \fn QList::iterator QList::erase(iterator pos)
Removes the item associated with the iterator \a pos from the
@@ -1070,6 +1211,38 @@ void **QListData::erase(void **xi)
Typedef for const T &. Provided for STL compatibility.
*/
+/*! \typedef QList::reverse_iterator
+ \since 5.6
+
+ The QList::reverse_iterator typedef provides an STL-style non-const
+ reverse iterator for QList.
+
+ It is simply a typedef for \c{std::reverse_iterator<iterator>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QList::rbegin(), QList::rend(), QList::const_reverse_iterator, QList::iterator
+*/
+
+/*! \typedef QList::const_reverse_iterator
+ \since 5.6
+
+ The QList::const_reverse_iterator typedef provides an STL-style const
+ reverse iterator for QList.
+
+ It is simply a typedef for \c{std::reverse_iterator<const_iterator>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QList::rbegin(), QList::rend(), QList::reverse_iterator, QList::const_iterator
+*/
+
/*! \fn int QList::count() const
Returns the number of items in the list. This is effectively the
@@ -1090,7 +1263,7 @@ void **QListData::erase(void **xi)
not be empty. If the list can be empty, call isEmpty() before
calling this function.
- \sa last(), isEmpty()
+ \sa constFirst(), last(), isEmpty()
*/
/*! \fn const T& QList::first() const
@@ -1098,13 +1271,23 @@ void **QListData::erase(void **xi)
\overload
*/
+/*! \fn const T& QList::constFirst() const
+ \since 5.6
+
+ Returns a const reference to the first item in the list. The list must
+ not be empty. If the list can be empty, call isEmpty() before
+ calling this function.
+
+ \sa constLast(), isEmpty(), first()
+*/
+
/*! \fn T& QList::last()
Returns a reference to the last item in the list. The list must
not be empty. If the list can be empty, call isEmpty() before
calling this function.
- \sa first(), isEmpty()
+ \sa constLast(), first(), isEmpty()
*/
/*! \fn const T& QList::last() const
@@ -1112,6 +1295,16 @@ void **QListData::erase(void **xi)
\overload
*/
+/*! \fn const T& QList::constLast() const
+ \since 5.6
+
+ Returns a reference to the last item in the list. The list must
+ not be empty. If the list can be empty, call isEmpty() before
+ calling this function.
+
+ \sa constFirst(), isEmpty(), last()
+*/
+
/*! \fn void QList::removeFirst()
Removes the first item in the list. Calling this function is
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index f5ff952f97..9a57a2c6a5 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -38,6 +38,7 @@
#include <QtCore/qiterator.h>
#include <QtCore/qrefcount.h>
#include <QtCore/qarraydata.h>
+#include <QtCore/qhashfunctions.h>
#include <iterator>
#include <list>
@@ -89,6 +90,7 @@ struct Q_CORE_EXPORT QListData {
Data *detach(int alloc);
Data *detach_grow(int *i, int n);
void realloc(int alloc);
+ void realloc_grow(int growth);
inline void dispose() { dispose(d); }
static void dispose(Data *d);
static const Data shared_null;
@@ -102,11 +104,11 @@ struct Q_CORE_EXPORT QListData {
void remove(int i);
void remove(int i, int n);
void move(int from, int to);
- inline int size() const { return d->end - d->begin; }
- inline bool isEmpty() const { return d->end == d->begin; }
- inline void **at(int i) const { return d->array + d->begin + i; }
- inline void **begin() const { return d->array + d->begin; }
- inline void **end() const { return d->array + d->end; }
+ inline int size() const Q_DECL_NOTHROW { return d->end - d->begin; }
+ inline bool isEmpty() const Q_DECL_NOTHROW { return d->end == d->begin; }
+ inline void **at(int i) const Q_DECL_NOTHROW { return d->array + d->begin + i; }
+ inline void **begin() const Q_DECL_NOTHROW { return d->array + d->begin; }
+ inline void **end() const Q_DECL_NOTHROW { return d->array + d->end; }
};
template <typename T>
@@ -141,11 +143,12 @@ public:
~QList();
QList<T> &operator=(const QList<T> &l);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QList(QList<T> &&other) : d(other.d) { other.d = const_cast<QListData::Data *>(&QListData::shared_null); }
- inline QList &operator=(QList<T> &&other)
- { qSwap(d, other.d); return *this; }
+ inline QList(QList<T> &&other) Q_DECL_NOTHROW
+ : d(other.d) { other.d = const_cast<QListData::Data *>(&QListData::shared_null); }
+ inline QList &operator=(QList<T> &&other) Q_DECL_NOTHROW
+ { QList moved(std::move(other)); swap(moved); return *this; }
#endif
- inline void swap(QList<T> &other) { qSwap(d, other.d); }
+ inline void swap(QList<T> &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QList(std::initializer_list<T> args)
: d(const_cast<QListData::Data *>(&QListData::shared_null))
@@ -154,7 +157,7 @@ public:
bool operator==(const QList<T> &l) const;
inline bool operator!=(const QList<T> &l) const { return !(*this == l); }
- inline int size() const { return p.size(); }
+ inline int size() const Q_DECL_NOTHROW { return p.size(); }
inline void detach() { if (d->ref.isShared()) detach_helper(); }
@@ -177,9 +180,9 @@ public:
d->ref.setSharable(sharable);
}
#endif
- inline bool isSharedWith(const QList<T> &other) const { return d == other.d; }
+ inline bool isSharedWith(const QList<T> &other) const Q_DECL_NOTHROW { return d == other.d; }
- inline bool isEmpty() const { return p.isEmpty(); }
+ inline bool isEmpty() const Q_DECL_NOTHROW { return p.isEmpty(); }
void clear();
@@ -218,30 +221,34 @@ public:
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(0) {}
- inline iterator(Node *n) : i(n) {}
- inline iterator(const iterator &o): i(o.i){}
+ inline iterator() Q_DECL_NOTHROW : i(Q_NULLPTR) {}
+ inline iterator(Node *n) Q_DECL_NOTHROW : i(n) {}
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ // can't remove it in Qt 5, since doing so would make the type trivial,
+ // which changes the way it's passed to functions by value.
+ inline iterator(const iterator &o) Q_DECL_NOTHROW : i(o.i){}
+#endif
inline T &operator*() const { return i->t(); }
inline T *operator->() const { return &i->t(); }
inline T &operator[](difference_type j) const { return i[j].t(); }
- inline bool operator==(const iterator &o) const { return i == o.i; }
- inline bool operator!=(const iterator &o) const { return i != o.i; }
- inline bool operator<(const iterator& other) const { return i < other.i; }
- inline bool operator<=(const iterator& other) const { return i <= other.i; }
- inline bool operator>(const iterator& other) const { return i > other.i; }
- inline bool operator>=(const iterator& other) const { return i >= other.i; }
+ inline bool operator==(const iterator &o) const Q_DECL_NOTHROW { return i == o.i; }
+ inline bool operator!=(const iterator &o) const Q_DECL_NOTHROW { return i != o.i; }
+ inline bool operator<(const iterator& other) const Q_DECL_NOTHROW { return i < other.i; }
+ inline bool operator<=(const iterator& other) const Q_DECL_NOTHROW { return i <= other.i; }
+ inline bool operator>(const iterator& other) const Q_DECL_NOTHROW { return i > other.i; }
+ inline bool operator>=(const iterator& other) const Q_DECL_NOTHROW { return i >= other.i; }
#ifndef QT_STRICT_ITERATORS
- inline bool operator==(const const_iterator &o) const
+ inline bool operator==(const const_iterator &o) const Q_DECL_NOTHROW
{ return i == o.i; }
- inline bool operator!=(const const_iterator &o) const
+ inline bool operator!=(const const_iterator &o) const Q_DECL_NOTHROW
{ return i != o.i; }
- inline bool operator<(const const_iterator& other) const
+ inline bool operator<(const const_iterator& other) const Q_DECL_NOTHROW
{ return i < other.i; }
- inline bool operator<=(const const_iterator& other) const
+ inline bool operator<=(const const_iterator& other) const Q_DECL_NOTHROW
{ return i <= other.i; }
- inline bool operator>(const const_iterator& other) const
+ inline bool operator>(const const_iterator& other) const Q_DECL_NOTHROW
{ return i > other.i; }
- inline bool operator>=(const const_iterator& other) const
+ inline bool operator>=(const const_iterator& other) const Q_DECL_NOTHROW
{ return i >= other.i; }
#endif
inline iterator &operator++() { ++i; return *this; }
@@ -266,23 +273,27 @@ public:
typedef const T *pointer;
typedef const T &reference;
- inline const_iterator() : i(0) {}
- inline const_iterator(Node *n) : i(n) {}
- inline const_iterator(const const_iterator &o): i(o.i) {}
+ inline const_iterator() Q_DECL_NOTHROW : i(Q_NULLPTR) {}
+ inline const_iterator(Node *n) Q_DECL_NOTHROW : i(n) {}
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ // can't remove it in Qt 5, since doing so would make the type trivial,
+ // which changes the way it's passed to functions by value.
+ inline const_iterator(const const_iterator &o) Q_DECL_NOTHROW : i(o.i) {}
+#endif
#ifdef QT_STRICT_ITERATORS
- inline explicit const_iterator(const iterator &o): i(o.i) {}
+ inline explicit const_iterator(const iterator &o) Q_DECL_NOTHROW : i(o.i) {}
#else
- inline const_iterator(const iterator &o): i(o.i) {}
+ inline const_iterator(const iterator &o) Q_DECL_NOTHROW : i(o.i) {}
#endif
inline const T &operator*() const { return i->t(); }
inline const T *operator->() const { return &i->t(); }
inline const T &operator[](difference_type j) const { return i[j].t(); }
- inline bool operator==(const const_iterator &o) const { return i == o.i; }
- inline bool operator!=(const const_iterator &o) const { return i != o.i; }
- inline bool operator<(const const_iterator& other) const { return i < other.i; }
- inline bool operator<=(const const_iterator& other) const { return i <= other.i; }
- inline bool operator>(const const_iterator& other) const { return i > other.i; }
- inline bool operator>=(const const_iterator& other) const { return i >= other.i; }
+ inline bool operator==(const const_iterator &o) const Q_DECL_NOTHROW { return i == o.i; }
+ inline bool operator!=(const const_iterator &o) const Q_DECL_NOTHROW { return i != o.i; }
+ inline bool operator<(const const_iterator& other) const Q_DECL_NOTHROW { return i < other.i; }
+ inline bool operator<=(const const_iterator& other) const Q_DECL_NOTHROW { return i <= other.i; }
+ inline bool operator>(const const_iterator& other) const Q_DECL_NOTHROW { return i > other.i; }
+ inline bool operator>=(const const_iterator& other) const Q_DECL_NOTHROW { return i >= other.i; }
inline const_iterator &operator++() { ++i; return *this; }
inline const_iterator operator++(int) { Node *n = i; ++i; return n; }
inline const_iterator &operator--() { i--; return *this; }
@@ -296,14 +307,22 @@ public:
friend class const_iterator;
// stl style
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
inline iterator begin() { detach(); return reinterpret_cast<Node *>(p.begin()); }
- inline const_iterator begin() const { return reinterpret_cast<Node *>(p.begin()); }
- inline const_iterator cbegin() const { return reinterpret_cast<Node *>(p.begin()); }
- inline const_iterator constBegin() const { return reinterpret_cast<Node *>(p.begin()); }
+ inline const_iterator begin() const Q_DECL_NOTHROW { return reinterpret_cast<Node *>(p.begin()); }
+ inline const_iterator cbegin() const Q_DECL_NOTHROW { return reinterpret_cast<Node *>(p.begin()); }
+ inline const_iterator constBegin() const Q_DECL_NOTHROW { return reinterpret_cast<Node *>(p.begin()); }
inline iterator end() { detach(); return reinterpret_cast<Node *>(p.end()); }
- inline const_iterator end() const { return reinterpret_cast<Node *>(p.end()); }
- inline const_iterator cend() const { return reinterpret_cast<Node *>(p.end()); }
- inline const_iterator constEnd() const { return reinterpret_cast<Node *>(p.end()); }
+ inline const_iterator end() const Q_DECL_NOTHROW { return reinterpret_cast<Node *>(p.end()); }
+ inline const_iterator cend() const Q_DECL_NOTHROW { return reinterpret_cast<Node *>(p.end()); }
+ inline const_iterator constEnd() const Q_DECL_NOTHROW { return reinterpret_cast<Node *>(p.end()); }
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
iterator insert(iterator before, const T &t);
iterator erase(iterator pos);
iterator erase(iterator first, iterator last);
@@ -314,9 +333,11 @@ public:
inline int count() const { return p.size(); }
inline int length() const { return p.size(); } // Same as count()
inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); }
+ inline const T& constFirst() const { return first(); }
inline const T& first() const { Q_ASSERT(!isEmpty()); return at(0); }
T& last() { Q_ASSERT(!isEmpty()); return *(--end()); }
const T& last() const { Q_ASSERT(!isEmpty()); return at(count() - 1); }
+ inline const T& constLast() const { return last(); }
inline void removeFirst() { Q_ASSERT(!isEmpty()); erase(begin()); }
inline void removeLast() { Q_ASSERT(!isEmpty()); erase(--end()); }
inline bool startsWith(const T &t) const { return !isEmpty() && first() == t; }
@@ -378,7 +399,7 @@ private:
void node_copy(Node *from, Node *to, Node *src);
void node_destruct(Node *from, Node *to);
- bool isValidIterator(const iterator &i) const
+ bool isValidIterator(const iterator &i) const Q_DECL_NOTHROW
{
return (constBegin().i <= i.i) && (i.i <= constEnd().i);
}
@@ -1020,6 +1041,43 @@ inline int QList<T>::count_impl(const T &t, QListData::ArrayCompatibleLayout) co
Q_DECLARE_SEQUENTIAL_ITERATOR(List)
Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(List)
+template <typename T>
+uint qHash(const QList<T> &key, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHashRange(key.cbegin(), key.cend(), seed)))
+{
+ return qHashRange(key.cbegin(), key.cend(), seed);
+}
+
+template <typename T>
+bool operator<(const QList<T> &lhs, const QList<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(std::lexicographical_compare(lhs.begin(), lhs.end(),
+ rhs.begin(), rhs.end())))
+{
+ return std::lexicographical_compare(lhs.begin(), lhs.end(),
+ rhs.begin(), rhs.end());
+}
+
+template <typename T>
+inline bool operator>(const QList<T> &lhs, const QList<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return rhs < lhs;
+}
+
+template <typename T>
+inline bool operator<=(const QList<T> &lhs, const QList<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return !(lhs > rhs);
+}
+
+template <typename T>
+inline bool operator>=(const QList<T> &lhs, const QList<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return !(lhs < rhs);
+}
+
QT_END_NAMESPACE
#include <QtCore/qbytearraylist.h>
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index 824b70c3fd..890a8fb95d 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -42,6 +42,7 @@
#include "qdatastream.h"
#include "qdebug.h"
+#include "qhashfunctions.h"
#include "qstring.h"
#include "qlocale.h"
#include "qlocale_p.h"
@@ -88,9 +89,9 @@ QLocale::Language QLocalePrivate::codeToLanguage(const QString &code)
int len = code.length();
if (len != 2 && len != 3)
return QLocale::C;
- ushort uc1 = len-- > 0 ? code[0].toLower().unicode() : 0;
- ushort uc2 = len-- > 0 ? code[1].toLower().unicode() : 0;
- ushort uc3 = len-- > 0 ? code[2].toLower().unicode() : 0;
+ ushort uc1 = code[0].toLower().unicode();
+ ushort uc2 = code[1].toLower().unicode();
+ ushort uc3 = len > 2 ? code[2].toLower().unicode() : 0;
const unsigned char *c = language_code_list;
for (; *c != 0; c += 3) {
@@ -115,6 +116,13 @@ QLocale::Language QLocalePrivate::codeToLanguage(const QString &code)
Q_STATIC_ASSERT(QLocale::Moldavian == QLocale::Romanian);
return QLocale::Moldavian;
}
+ // Android uses the following deprecated codes
+ if (uc1 == 'i' && uc2 == 'w' && uc3 == 0) // iw -> he
+ return QLocale::Hebrew;
+ if (uc1 == 'i' && uc2 == 'n' && uc3 == 0) // in -> id
+ return QLocale::Indonesian;
+ if (uc1 == 'j' && uc2 == 'i' && uc3 == 0) // ji -> yi
+ return QLocale::Yiddish;
return QLocale::C;
}
@@ -144,9 +152,9 @@ QLocale::Country QLocalePrivate::codeToCountry(const QString &code)
int len = code.length();
if (len != 2 && len != 3)
return QLocale::AnyCountry;
- ushort uc1 = len-- > 0 ? code[0].toUpper().unicode() : 0;
- ushort uc2 = len-- > 0 ? code[1].toUpper().unicode() : 0;
- ushort uc3 = len-- > 0 ? code[2].toUpper().unicode() : 0;
+ ushort uc1 = code[0].toUpper().unicode();
+ ushort uc2 = code[1].toUpper().unicode();
+ ushort uc3 = len > 2 ? code[2].toUpper().unicode() : 0;
const unsigned char *c = country_code_list;
for (; *c != 0; c += 3) {
@@ -420,7 +428,7 @@ bool qt_splitLocaleName(const QString &name, QString &lang, QString &script, QSt
state = ScriptState;
break;
case ScriptState: {
- QString scripts = QString::fromLatin1((const char *)script_code_list, sizeof(script_code_list));
+ QString scripts = QString::fromLatin1((const char *)script_code_list, sizeof(script_code_list) - 1);
if (value.length() == 4 && scripts.indexOf(value) % 4 == 0) {
// script name is always 4 characters
script = value;
@@ -525,7 +533,7 @@ static uint default_number_options = 0;
static const QLocaleData *const c_data = locale_data;
static QLocalePrivate *c_private()
{
- static QLocalePrivate c_locale = { c_data, Q_BASIC_ATOMIC_INITIALIZER(1), 0 };
+ static QLocalePrivate c_locale = { c_data, Q_BASIC_ATOMIC_INITIALIZER(1), QLocale::OmitGroupSeparator };
return &c_locale;
}
@@ -697,7 +705,8 @@ static QLocalePrivate *localePrivateByName(const QString &name)
{
if (name == QLatin1String("C"))
return c_private();
- return QLocalePrivate::create(findLocaleData(name));
+ const QLocaleData *data = findLocaleData(name);
+ return QLocalePrivate::create(data, data->m_language_id == QLocale::C ? QLocale::OmitGroupSeparator : 0);
}
static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script,
@@ -866,6 +875,21 @@ bool QLocale::operator!=(const QLocale &other) const
}
/*!
+ \since 5.6
+ \relates QLocale
+
+ Returns the hash value for \a key, using
+ \a seed to seed the calculation.
+*/
+uint qHash(const QLocale &key, uint seed) Q_DECL_NOTHROW
+{
+ QtPrivate::QHashCombine hash;
+ seed = hash(seed, key.d->m_data);
+ seed = hash(seed, key.d->m_numberOptions);
+ return seed;
+}
+
+/*!
\since 4.2
Sets the \a options related to number conversions for this
@@ -2726,9 +2750,9 @@ QString QLocaleData::doubleToString(const QChar _zero, const QChar plus, const Q
const QChar exponential, const QChar group, const QChar decimal,
double d, int precision, DoubleForm form, int width, unsigned flags)
{
- if (precision == -1)
+ if (precision < 0)
precision = 6;
- if (width == -1)
+ if (width < 0)
width = 0;
bool negative = false;
diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h
index 61574ba44f..729fd73a5d 100644
--- a/src/corelib/tools/qlocale.h
+++ b/src/corelib/tools/qlocale.h
@@ -45,6 +45,7 @@ QT_BEGIN_NAMESPACE
class QDataStream;
class QDate;
class QDateTime;
+class QLocale;
class QTime;
class QVariant;
class QTextStream;
@@ -52,6 +53,8 @@ class QTextStreamPrivate;
class QLocalePrivate;
+Q_CORE_EXPORT uint qHash(const QLocale &key, uint seed = 0) Q_DECL_NOTHROW;
+
class Q_CORE_EXPORT QLocale
{
Q_GADGET
@@ -828,6 +831,7 @@ public:
Q_ENUM(Language)
Q_ENUM(Country)
+ Q_ENUM(Script)
enum MeasurementSystem {
MetricSystem,
@@ -868,23 +872,23 @@ public:
QString nativeLanguageName() const;
QString nativeCountryName() const;
- short toShort(const QString &s, bool *ok = 0) const;
- ushort toUShort(const QString &s, bool *ok = 0) const;
- int toInt(const QString &s, bool *ok = 0) const;
- uint toUInt(const QString &s, bool *ok = 0) const;
- qlonglong toLongLong(const QString &s, bool *ok = 0) const;
- qulonglong toULongLong(const QString &s, bool *ok = 0) const;
- float toFloat(const QString &s, bool *ok = 0) const;
- double toDouble(const QString &s, bool *ok = 0) const;
-
- short toShort(const QStringRef &s, bool *ok = 0) const;
- ushort toUShort(const QStringRef &s, bool *ok = 0) const;
- int toInt(const QStringRef &s, bool *ok = 0) const;
- uint toUInt(const QStringRef &s, bool *ok = 0) const;
- qlonglong toLongLong(const QStringRef &s, bool *ok = 0) const;
- qulonglong toULongLong(const QStringRef &s, bool *ok = 0) const;
- float toFloat(const QStringRef &s, bool *ok = 0) const;
- double toDouble(const QStringRef &s, bool *ok = 0) const;
+ short toShort(const QString &s, bool *ok = Q_NULLPTR) const;
+ ushort toUShort(const QString &s, bool *ok = Q_NULLPTR) const;
+ int toInt(const QString &s, bool *ok = Q_NULLPTR) const;
+ uint toUInt(const QString &s, bool *ok = Q_NULLPTR) const;
+ qlonglong toLongLong(const QString &s, bool *ok = Q_NULLPTR) const;
+ qulonglong toULongLong(const QString &s, bool *ok = Q_NULLPTR) const;
+ float toFloat(const QString &s, bool *ok = Q_NULLPTR) const;
+ double toDouble(const QString &s, bool *ok = Q_NULLPTR) const;
+
+ short toShort(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ ushort toUShort(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ int toInt(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ uint toUInt(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ qlonglong toLongLong(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ qulonglong toULongLong(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ float toFloat(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ double toDouble(const QStringRef &s, bool *ok = Q_NULLPTR) const;
QString toString(qlonglong i) const;
QString toString(qulonglong i) const;
@@ -979,6 +983,8 @@ public:
private:
QLocale(QLocalePrivate &dd);
friend class QLocalePrivate;
+ friend Q_CORE_EXPORT uint qHash(const QLocale &key, uint seed) Q_DECL_NOTHROW;
+
QSharedDataPointer<QLocalePrivate> d;
};
Q_DECLARE_TYPEINFO(QLocale, Q_MOVABLE_TYPE);
diff --git a/src/corelib/tools/qlocale_mac.mm b/src/corelib/tools/qlocale_mac.mm
index 37a63a2ca4..c0818f07d7 100644
--- a/src/corelib/tools/qlocale_mac.mm
+++ b/src/corelib/tools/qlocale_mac.mm
@@ -44,18 +44,6 @@
QT_BEGIN_NAMESPACE
-namespace {
-class AutoReleasePool
-{
-public:
- AutoReleasePool(): pool([[NSAutoreleasePool alloc] init]) {}
- ~AutoReleasePool() { [pool release]; }
-
-private:
- NSAutoreleasePool *pool;
-};
-}
-
/******************************************************************************
** Wrappers for Mac locale system functions
*/
@@ -426,7 +414,7 @@ QLocale QSystemLocale::fallbackUiLocale() const
QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
{
- AutoReleasePool pool;
+ QMacAutoReleasePool pool;
switch(type) {
// case Name:
// return getMacLocaleName();
diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h
index 430f95dcda..b3fd7a96b8 100644
--- a/src/corelib/tools/qlocale_p.h
+++ b/src/corelib/tools/qlocale_p.h
@@ -122,6 +122,8 @@ private:
QSystemLocale(bool);
friend class QSystemLocaleSingleton;
};
+Q_DECLARE_TYPEINFO(QSystemLocale::QueryType, Q_PRIMITIVE_TYPE);
+Q_DECLARE_TYPEINFO(QSystemLocale::CurrencyToStringArgument, Q_MOVABLE_TYPE);
#endif
#ifdef QT_USE_ICU
@@ -153,6 +155,7 @@ struct QLocaleId
ushort language_id, script_id, country_id;
};
+Q_DECLARE_TYPEINFO(QLocaleId, Q_PRIMITIVE_TYPE);
struct QLocaleData
{
diff --git a/src/corelib/tools/qlocale_win.cpp b/src/corelib/tools/qlocale_win.cpp
index 1cad9b32e3..a5eb7ec058 100644
--- a/src/corelib/tools/qlocale_win.cpp
+++ b/src/corelib/tools/qlocale_win.cpp
@@ -48,12 +48,12 @@
#endif
#ifdef Q_OS_WINRT
+#include <qfunctions_winrt.h>
+
#include <wrl.h>
#include <windows.foundation.h>
#include <windows.foundation.collections.h>
-#ifndef Q_OS_WINPHONE
#include <windows.globalization.h>
-#endif
#endif // Q_OS_WINRT
QT_BEGIN_NAMESPACE
@@ -639,7 +639,6 @@ QVariant QSystemLocalePrivate::uiLanguages()
return QStringList(QString::fromLatin1(winLangCodeToIsoName(GetUserDefaultUILanguage())));
#else // !Q_OS_WINRT
QStringList result;
-#ifndef Q_OS_WINPHONE
ComPtr<ABI::Windows::Globalization::IApplicationLanguagesStatics> appLanguagesStatics;
if (FAILED(GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Globalization_ApplicationLanguages).Get(), &appLanguagesStatics))) {
qWarning("Could not obtain ApplicationLanguagesStatic");
@@ -647,23 +646,52 @@ QVariant QSystemLocalePrivate::uiLanguages()
}
ComPtr<ABI::Windows::Foundation::Collections::IVectorView<HSTRING> > languageList;
- appLanguagesStatics->get_ManifestLanguages(&languageList);
-
- if (!languageList)
- return QStringList();
-
+ // Languages is a ranked list of "long names" (e.g. en-US) of preferred languages, which matches
+ // languages from the manifest with languages from the user's system.
+ HRESULT hr = appLanguagesStatics->get_Languages(&languageList);
+ Q_ASSERT_SUCCEEDED(hr);
unsigned int size;
- languageList->get_Size(&size);
+ hr = languageList->get_Size(&size);
+ Q_ASSERT_SUCCEEDED(hr);
+ result.reserve(size);
for (unsigned int i = 0; i < size; ++i) {
HString language;
- languageList->GetAt(i, language.GetAddressOf());
+ hr = languageList->GetAt(i, language.GetAddressOf());
+ Q_ASSERT_SUCCEEDED(hr);
UINT32 length;
PCWSTR rawString = language.GetRawBuffer(&length);
result << QString::fromWCharArray(rawString, length);
}
-#else // !Q_OS_WINPHONE
- result << QString::fromWCharArray(lcName);
-#endif // Q_OS_WINPHONE
+
+ // ManifestLanguages covers all languages given in the manifest and uses short names (like "en").
+ hr = appLanguagesStatics->get_ManifestLanguages(&languageList);
+ Q_ASSERT_SUCCEEDED(hr);
+ hr = languageList->get_Size(&size);
+ Q_ASSERT_SUCCEEDED(hr);
+ for (unsigned int i = 0; i < size; ++i) {
+ HString language;
+ hr = languageList->GetAt(i, language.GetAddressOf());
+ Q_ASSERT_SUCCEEDED(hr);
+ UINT32 length;
+ PCWSTR rawString = language.GetRawBuffer(&length);
+ const QString qLanguage = QString::fromWCharArray(rawString, length);
+ bool found = false;
+ // Since ApplicationLanguages:::Languages uses long names, we compare the "pre-dash" part of
+ // the language and filter it out, if it is already covered by a more specialized form.
+ foreach (const QString &lang, result) {
+ int dashIndex = lang.indexOf('-');
+ // There will not be any long name after the first short name was found, so we can stop.
+ if (dashIndex == -1)
+ break;
+
+ if (lang.leftRef(dashIndex) == qLanguage) {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ result << qLanguage;
+ }
return result;
#endif // Q_OS_WINRT
@@ -813,6 +841,7 @@ QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
case ZeroDigit:
return d->zeroDigit();
case LanguageId:
+ case ScriptId:
case CountryId: {
QString locale = QString::fromLatin1(getWinLocaleName());
QLocale::Language lang;
@@ -821,12 +850,12 @@ QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
QLocalePrivate::getLangAndCountry(locale, lang, script, cntry);
if (type == LanguageId)
return lang;
+ if (type == ScriptId)
+ return script == QLocale::AnyScript ? fallbackUiLocale().script() : script;
if (cntry == QLocale::AnyCountry)
return fallbackUiLocale().country();
return cntry;
}
- case ScriptId:
- return QVariant(QLocale::AnyScript);
case MeasurementSystem:
return d->measurementSystem();
case AMText:
diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp
index 1b7a8007cd..e49a1a098d 100644
--- a/src/corelib/tools/qmap.cpp
+++ b/src/corelib/tools/qmap.cpp
@@ -858,6 +858,15 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa begin(), constEnd()
*/
+/*! \fn QMap::key_iterator QMap::keyBegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first key
+ in the map.
+
+ \sa keyEnd(), firstKey()
+*/
+
/*! \fn QMap::iterator QMap::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
@@ -888,6 +897,15 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa constBegin(), end()
*/
+/*! \fn QMap::key_iterator QMap::keyEnd() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
+ item after the last key in the map.
+
+ \sa keyBegin(), lastKey()
+*/
+
/*! \fn const Key &QMap::firstKey() const
\since 5.2
@@ -896,7 +914,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
This executes in \l{constant time}.
- \sa lastKey(), first(), isEmpty()
+ \sa lastKey(), first(), keyBegin(), isEmpty()
*/
/*! \fn const Key &QMap::lastKey() const
@@ -907,7 +925,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
This executes in \l{logarithmic time}.
- \sa firstKey(), last(), isEmpty()
+ \sa firstKey(), last(), keyEnd(), isEmpty()
*/
/*! \fn T &QMap::first()
@@ -1161,6 +1179,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
are stored under \a key.
*/
+/*!
+ \fn QPair<const_iterator, const_iterator> QMap::equal_range(const Key &key) const
+ \overload
+ \since 5.6
+*/
+
/*! \class QMap::iterator
\inmodule QtCore
@@ -1229,7 +1253,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
while iterators are active on that container. For more information,
read \l{Implicit sharing iterator problem}.
- \sa QMap::const_iterator, QMutableMapIterator
+ \sa QMap::const_iterator, QMap::key_iterator, QMutableMapIterator
*/
/*! \typedef QMap::iterator::difference_type
@@ -1452,7 +1476,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
while iterators are active on that container. For more information,
read \l{Implicit sharing iterator problem}.
- \sa QMap::iterator, QMapIterator
+ \sa QMap::iterator, QMap::key_iterator, QMapIterator
*/
/*! \typedef QMap::const_iterator::difference_type
@@ -1628,6 +1652,134 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator+=(), operator-()
*/
+/*! \class QMap::key_iterator
+ \inmodule QtCore
+ \since 5.6
+ \brief The QMap::key_iterator class provides an STL-style const iterator for QMap and QMultiMap keys.
+
+ QMap::key_iterator is essentially the same as QMap::const_iterator
+ with the difference that operator*() and operator->() return a key
+ instead of a value.
+
+ For most uses QMap::iterator and QMap::const_iterator should be used,
+ you can easily access the key by calling QMap::iterator::key():
+
+ \snippet code/src_corelib_tools_qmap.cpp keyiterator1
+
+ However, to have interoperability between QMap's keys and STL-style
+ algorithms we need an iterator that dereferences to a key instead
+ of a value. With QMap::key_iterator we can apply an algorithm to a
+ range of keys without having to call QMap::keys(), which is inefficient
+ as it costs one QMap iteration and memory allocation to create a temporary
+ QList.
+
+ \snippet code/src_corelib_tools_qmap.cpp keyiterator2
+
+ QMap::key_iterator is const, it's not possible to modify the key.
+
+ The default QMap::key_iterator constructor creates an uninitialized
+ iterator. You must initialize it using a QMap function like
+ QMap::keyBegin() or QMap::keyEnd().
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QMap::const_iterator, QMap::iterator
+*/
+
+/*! \typedef QMap::key_iterator::difference_type
+ \internal
+*/
+
+/*! \typedef QMap::key_iterator::iterator_category
+ \internal
+*/
+
+/*! \typedef QMap::key_iterator::pointer
+ \internal
+*/
+
+/*! \typedef QMap::key_iterator::reference
+ \internal
+*/
+
+/*! \typedef QMap::key_iterator::value_type
+ \internal
+*/
+
+/*! \fn const T &QMap::key_iterator::operator*() const
+
+ Returns the current item's key.
+*/
+
+/*! \fn const T *QMap::key_iterator::operator->() const
+
+ Returns a pointer to the current item's key.
+*/
+
+/*! \fn bool QMap::key_iterator::operator==(key_iterator other) const
+
+ Returns \c true if \a other points to the same item as this
+ iterator; otherwise returns \c false.
+
+ \sa operator!=()
+*/
+
+/*! \fn bool QMap::key_iterator::operator!=(key_iterator other) const
+
+ Returns \c true if \a other points to a different item than this
+ iterator; otherwise returns \c false.
+
+ \sa operator==()
+*/
+
+/*!
+ \fn QMap::key_iterator &QMap::key_iterator::operator++()
+
+ The prefix ++ operator (\c{++i}) advances the iterator to the
+ next item in the hash and returns an iterator to the new current
+ item.
+
+ Calling this function on QMap::keyEnd() leads to undefined results.
+
+ \sa operator--()
+*/
+
+/*! \fn QMap::key_iterator QMap::key_iterator::operator++(int)
+
+ \overload
+
+ The postfix ++ operator (\c{i++}) advances the iterator to the
+ next item in the hash and returns an iterator to the previous
+ item.
+*/
+
+/*! \fn QMap::key_iterator &QMap::key_iterator::operator--()
+
+ The prefix -- operator (\c{--i}) makes the preceding item
+ current and returns an iterator pointing to the new current item.
+
+ Calling this function on QMap::keyBegin() leads to undefined
+ results.
+
+ \sa operator++()
+*/
+
+/*! \fn QMap::key_iterator QMap::key_iterator::operator--(int)
+
+ \overload
+
+ The postfix -- operator (\c{i--}) makes the preceding item
+ current and returns an iterator pointing to the previous
+ item.
+*/
+
+/*! \fn const_iterator QMap::key_iterator::base() const
+ Returns the underlying const_iterator this key_iterator is based on.
+*/
+
/*! \fn QDataStream &operator<<(QDataStream &out, const QMap<Key, T> &map)
\relates QMap
diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h
index 1f80e8f0f4..fe9ddaaa32 100644
--- a/src/corelib/tools/qmap.h
+++ b/src/corelib/tools/qmap.h
@@ -38,6 +38,7 @@
#include <QtCore/qlist.h>
#include <QtCore/qrefcount.h>
#include <QtCore/qpair.h>
+#include <QtCore/qtypetraits.h>
#ifdef Q_MAP_DEBUG
#include <QtCore/qdebug.h>
@@ -94,6 +95,13 @@ struct Q_CORE_EXPORT QMapNodeBase
void setColor(Color c) { if (c == Black) p |= Black; else p &= ~Black; }
QMapNodeBase *parent() const { return reinterpret_cast<QMapNodeBase *>(p & ~Mask); }
void setParent(QMapNodeBase *pp) { p = (p & Mask) | quintptr(pp); }
+
+ template <typename T>
+ static typename QtPrivate::QEnableIf<QTypeInfo<T>::isComplex>::Type
+ callDestructorIfNecessary(T &t) Q_DECL_NOTHROW { Q_UNUSED(t); t.~T(); } // Q_UNUSED: silence MSVC unused 't' warning
+ template <typename T>
+ static typename QtPrivate::QEnableIf<!QTypeInfo<T>::isComplex>::Type
+ callDestructorIfNecessary(T &) Q_DECL_NOTHROW {}
};
template <class Key, class T>
@@ -112,12 +120,26 @@ struct QMapNode : public QMapNodeBase
QMapNode<Key, T> *copy(QMapData<Key, T> *d) const;
- void destroySubTree();
+ void destroySubTree()
+ {
+ callDestructorIfNecessary(key);
+ callDestructorIfNecessary(value);
+ doDestroySubTree(QtPrivate::integral_constant<bool, QTypeInfo<T>::isComplex || QTypeInfo<Key>::isComplex>());
+ }
QMapNode<Key, T> *lowerBound(const Key &key);
QMapNode<Key, T> *upperBound(const Key &key);
private:
+ void doDestroySubTree(QtPrivate::false_type) {}
+ void doDestroySubTree(QtPrivate::true_type)
+ {
+ if (left)
+ leftNode()->destroySubTree();
+ if (right)
+ rightNode()->destroySubTree();
+ }
+
QMapNode() Q_DECL_EQ_DELETE;
Q_DISABLE_COPY(QMapNode)
};
@@ -126,7 +148,7 @@ template <class Key, class T>
inline QMapNode<Key, T> *QMapNode<Key, T>::lowerBound(const Key &akey)
{
QMapNode<Key, T> *n = this;
- QMapNode<Key, T> *lastNode = 0;
+ QMapNode<Key, T> *lastNode = Q_NULLPTR;
while (n) {
if (!qMapLessThanKey(n->key, akey)) {
lastNode = n;
@@ -142,7 +164,7 @@ template <class Key, class T>
inline QMapNode<Key, T> *QMapNode<Key, T>::upperBound(const Key &akey)
{
QMapNode<Key, T> *n = this;
- QMapNode<Key, T> *lastNode = 0;
+ QMapNode<Key, T> *lastNode = Q_NULLPTR;
while (n) {
if (qMapLessThanKey(akey, n->key)) {
lastNode = n;
@@ -194,7 +216,7 @@ struct QMapData : public QMapDataBase
Node *findNode(const Key &akey) const;
void nodeRange(const Key &akey, Node **firstNode, Node **lastNode);
- Node *createNode(const Key &k, const T &v, Node *parent = 0, bool left = false)
+ Node *createNode(const Key &k, const T &v, Node *parent = Q_NULLPTR, bool left = false)
{
Node *n = static_cast<Node *>(QMapDataBase::createNode(sizeof(Node), Q_ALIGNOF(Node),
parent, left));
@@ -235,48 +257,22 @@ QMapNode<Key, T> *QMapNode<Key, T>::copy(QMapData<Key, T> *d) const
n->left = leftNode()->copy(d);
n->left->setParent(n);
} else {
- n->left = 0;
+ n->left = Q_NULLPTR;
}
if (right) {
n->right = rightNode()->copy(d);
n->right->setParent(n);
} else {
- n->right = 0;
+ n->right = Q_NULLPTR;
}
return n;
}
-#if defined(Q_CC_MSVC)
-#pragma warning( push )
-#pragma warning( disable : 4127 ) // conditional expression is constant
-#endif
-
-template <class Key, class T>
-void QMapNode<Key, T>::destroySubTree()
-{
- if (QTypeInfo<Key>::isComplex)
- key.~Key();
- if (QTypeInfo<T>::isComplex)
- value.~T();
- if (QTypeInfo<Key>::isComplex || QTypeInfo<T>::isComplex) {
- if (left)
- leftNode()->destroySubTree();
- if (right)
- rightNode()->destroySubTree();
- }
-}
-
-#if defined(Q_CC_MSVC)
-#pragma warning( pop )
-#endif
-
template <class Key, class T>
void QMapData<Key, T>::deleteNode(QMapNode<Key, T> *z)
{
- if (QTypeInfo<Key>::isComplex)
- z->key.~Key();
- if (QTypeInfo<T>::isComplex)
- z->value.~T();
+ QMapNodeBase::callDestructorIfNecessary(z->key);
+ QMapNodeBase::callDestructorIfNecessary(z->value);
freeNodeAndRebalance(z);
}
@@ -288,7 +284,7 @@ QMapNode<Key, T> *QMapData<Key, T>::findNode(const Key &akey) const
if (lb && !qMapLessThanKey(akey, lb->key))
return lb;
}
- return 0;
+ return Q_NULLPTR;
}
@@ -304,10 +300,10 @@ void QMapData<Key, T>::nodeRange(const Key &akey, QMapNode<Key, T> **firstNode,
} else if (qMapLessThanKey(n->key, akey)) {
n = n->rightNode();
} else {
- *firstNode = n->leftNode() ? n->leftNode()->lowerBound(akey) : 0;
+ *firstNode = n->leftNode() ? n->leftNode()->lowerBound(akey) : Q_NULLPTR;
if (!*firstNode)
*firstNode = n;
- *lastNode = n->rightNode() ? n->rightNode()->upperBound(akey) : 0;
+ *lastNode = n->rightNode() ? n->rightNode()->upperBound(akey) : Q_NULLPTR;
if (!*lastNode)
*lastNode = l;
return;
@@ -325,7 +321,7 @@ class QMap
QMapData<Key, T> *d;
public:
- inline QMap() : d(static_cast<QMapData<Key, T> *>(const_cast<QMapDataBase *>(&QMapDataBase::shared_null))) { }
+ inline QMap() Q_DECL_NOTHROW : d(static_cast<QMapData<Key, T> *>(const_cast<QMapDataBase *>(&QMapDataBase::shared_null))) { }
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QMap(std::initializer_list<std::pair<Key,T> > list)
: d(static_cast<QMapData<Key, T> *>(const_cast<QMapDataBase *>(&QMapDataBase::shared_null)))
@@ -340,17 +336,17 @@ public:
QMap<Key, T> &operator=(const QMap<Key, T> &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QMap(QMap<Key, T> &&other)
+ inline QMap(QMap<Key, T> &&other) Q_DECL_NOTHROW
: d(other.d)
{
other.d = static_cast<QMapData<Key, T> *>(
const_cast<QMapDataBase *>(&QMapDataBase::shared_null));
}
- inline QMap<Key, T> &operator=(QMap<Key, T> &&other)
- { qSwap(d, other.d); return *this; }
+ inline QMap<Key, T> &operator=(QMap<Key, T> &&other) Q_DECL_NOTHROW
+ { QMap moved(std::move(other)); swap(moved); return *this; }
#endif
- inline void swap(QMap<Key, T> &other) { qSwap(d, other.d); }
+ inline void swap(QMap<Key, T> &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
explicit QMap(const typename std::map<Key, T> &other);
std::map<Key, T> toStdMap() const;
@@ -416,7 +412,7 @@ public:
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(0) { }
+ inline iterator() : i(Q_NULLPTR) { }
inline iterator(Node *node) : i(node) { }
inline const Key &key() const { return i->key; }
@@ -473,7 +469,7 @@ public:
typedef const T *pointer;
typedef const T &reference;
- inline const_iterator() : i(0) { }
+ inline const_iterator() : i(Q_NULLPTR) { }
inline const_iterator(const Node *node) : i(node) { }
#ifdef QT_STRICT_ITERATORS
explicit inline const_iterator(const iterator &o)
@@ -522,6 +518,32 @@ public:
};
friend class const_iterator;
+ class key_iterator
+ {
+ const_iterator i;
+
+ public:
+ typedef typename const_iterator::iterator_category iterator_category;
+ typedef typename const_iterator::difference_type difference_type;
+ typedef Key value_type;
+ typedef const Key *pointer;
+ typedef const Key &reference;
+
+ explicit key_iterator(const_iterator o) : i(o) { }
+
+ const Key &operator*() const { return i.key(); }
+ const Key *operator->() const { return &i.key(); }
+ bool operator==(key_iterator o) const { return i == o.i; }
+ bool operator!=(key_iterator o) const { return i != o.i; }
+
+ inline key_iterator &operator++() { ++i; return *this; }
+ inline key_iterator operator++(int) { return key_iterator(i++);}
+ inline key_iterator &operator--() { --i; return *this; }
+ inline key_iterator operator--(int) { return key_iterator(i--); }
+ const_iterator base() const { return i; }
+ };
+
+
// STL style
inline iterator begin() { detach(); return iterator(d->begin()); }
inline const_iterator begin() const { return const_iterator(d->begin()); }
@@ -531,6 +553,8 @@ public:
inline const_iterator end() const { return const_iterator(d->end()); }
inline const_iterator constEnd() const { return const_iterator(d->end()); }
inline const_iterator cend() const { return const_iterator(d->end()); }
+ inline key_iterator keyBegin() const { return key_iterator(begin()); }
+ inline key_iterator keyEnd() const { return key_iterator(end()); }
iterator erase(iterator it);
// more Qt
@@ -557,6 +581,7 @@ public:
typedef int size_type;
inline bool empty() const { return isEmpty(); }
QPair<iterator, iterator> equal_range(const Key &akey);
+ QPair<const_iterator, const_iterator> equal_range(const Key &akey) const;
#ifdef Q_MAP_DEBUG
void dump() const;
@@ -653,7 +678,7 @@ Q_INLINE_TEMPLATE int QMap<Key, T>::count(const Key &akey) const
template <class Key, class T>
Q_INLINE_TEMPLATE bool QMap<Key, T>::contains(const Key &akey) const
{
- return d->findNode(akey) != 0;
+ return d->findNode(akey) != Q_NULLPTR;
}
template <class Key, class T>
@@ -662,7 +687,7 @@ Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::insert(const Key
detach();
Node *n = d->root();
Node *y = d->end();
- Node *lastNode = 0;
+ Node *lastNode = Q_NULLPTR;
bool left = true;
while (n) {
y = n;
@@ -737,15 +762,15 @@ typename QMap<Key, T>::iterator QMap<Key, T>::insert(const_iterator pos, const K
}
// we need to insert (not overwrite)
- if (prev->right == 0) {
+ if (prev->right == Q_NULLPTR) {
Node *z = d->createNode(akey, avalue, prev, false);
return iterator(z);
}
- if (next->left == 0) {
+ if (next->left == Q_NULLPTR) {
Node *z = d->createNode(akey, avalue, next, true);
return iterator(z);
}
- Q_ASSERT(false); // We should have prev->right == 0 or next->left == 0.
+ Q_ASSERT(false); // We should have prev->right == Q_NULLPTR or next->left == Q_NULLPTR.
return this->insert(akey, avalue);
}
}
@@ -759,7 +784,7 @@ Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::insertMulti(cons
Node* y = d->end();
Node* x = static_cast<Node *>(d->root());
bool left = true;
- while (x != 0) {
+ while (x != Q_NULLPTR) {
left = !qMapLessThanKey(x->key, akey);
y = x;
x = left ? x->leftNode() : x->rightNode();
@@ -806,15 +831,15 @@ typename QMap<Key, T>::iterator QMap<Key, T>::insertMulti(const_iterator pos, co
return this->insertMulti(akey, avalue); // ignore hint
// Hint is ok - do insert
- if (prev->right == 0) {
+ if (prev->right == Q_NULLPTR) {
Node *z = d->createNode(akey, avalue, prev, false);
return iterator(z);
}
- if (next->left == 0) {
+ if (next->left == Q_NULLPTR) {
Node *z = d->createNode(akey, avalue, next, true);
return iterator(z);
}
- Q_ASSERT(false); // We should have prev->right == 0 or next->left == 0.
+ Q_ASSERT(false); // We should have prev->right == Q_NULLPTR or next->left == Q_NULLPTR.
return this->insertMulti(akey, avalue);
}
}
@@ -864,6 +889,15 @@ QPair<typename QMap<Key, T>::iterator, typename QMap<Key, T>::iterator> QMap<Key
return QPair<iterator, iterator>(iterator(firstNode), iterator(lastNode));
}
+template <class Key, class T>
+QPair<typename QMap<Key, T>::const_iterator, typename QMap<Key, T>::const_iterator>
+QMap<Key, T>::equal_range(const Key &akey) const
+{
+ Node *firstNode, *lastNode;
+ d->nodeRange(akey, &firstNode, &lastNode);
+ return qMakePair(const_iterator(firstNode), const_iterator(lastNode));
+}
+
#ifdef Q_MAP_DEBUG
template <class Key, class T>
void QMap<Key, T>::dump() const
@@ -1051,7 +1085,7 @@ Q_OUTOFLINE_TEMPLATE QList<T> QMap<Key, T>::values(const Key &akey) const
template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::const_iterator QMap<Key, T>::lowerBound(const Key &akey) const
{
- Node *lb = d->root() ? d->root()->lowerBound(akey) : 0;
+ Node *lb = d->root() ? d->root()->lowerBound(akey) : Q_NULLPTR;
if (!lb)
lb = d->end();
return const_iterator(lb);
@@ -1061,7 +1095,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::lowerBound(const Key &akey)
{
detach();
- Node *lb = d->root() ? d->root()->lowerBound(akey) : 0;
+ Node *lb = d->root() ? d->root()->lowerBound(akey) : Q_NULLPTR;
if (!lb)
lb = d->end();
return iterator(lb);
@@ -1071,7 +1105,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::const_iterator
QMap<Key, T>::upperBound(const Key &akey) const
{
- Node *ub = d->root() ? d->root()->upperBound(akey) : 0;
+ Node *ub = d->root() ? d->root()->upperBound(akey) : Q_NULLPTR;
if (!ub)
ub = d->end();
return const_iterator(ub);
@@ -1081,7 +1115,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::upperBound(const Key &akey)
{
detach();
- Node *ub = d->root() ? d->root()->upperBound(akey) : 0;
+ Node *ub = d->root() ? d->root()->upperBound(akey) : Q_NULLPTR;
if (!ub)
ub = d->end();
return iterator(ub);
@@ -1134,7 +1168,7 @@ template <class Key, class T>
class QMultiMap : public QMap<Key, T>
{
public:
- QMultiMap() {}
+ QMultiMap() Q_DECL_NOTHROW {}
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QMultiMap(std::initializer_list<std::pair<Key,T> > list)
{
@@ -1143,7 +1177,10 @@ public:
}
#endif
QMultiMap(const QMap<Key, T> &other) : QMap<Key, T>(other) {}
- inline void swap(QMultiMap<Key, T> &other) { QMap<Key, T>::swap(other); }
+#ifdef Q_COMPILER_RVALUE_REFS
+ QMultiMap(QMap<Key, T> &&other) Q_DECL_NOTHROW : QMap<Key, T>(std::move(other)) {}
+#endif
+ void swap(QMultiMap<Key, T> &other) Q_DECL_NOTHROW { QMap<Key, T>::swap(other); }
inline typename QMap<Key, T>::iterator replace(const Key &key, const T &value)
{ return QMap<Key, T>::insert(key, value); }
diff --git a/src/corelib/tools/qqueue.cpp b/src/corelib/tools/qqueue.cpp
index 65b50c4e03..a8b5051616 100644
--- a/src/corelib/tools/qqueue.cpp
+++ b/src/corelib/tools/qqueue.cpp
@@ -71,19 +71,6 @@
*/
/*!
- \fn QQueue::QQueue()
-
- Constructs an empty queue.
-*/
-
-/*!
- \fn QQueue::~QQueue()
-
- Destroys the queue. References to the values in the queue, and all
- iterators over this queue, become invalid.
-*/
-
-/*!
\fn void QQueue::swap(QQueue<T> &other)
\since 4.8
diff --git a/src/corelib/tools/qqueue.h b/src/corelib/tools/qqueue.h
index 9d5bda1210..0cb8353d0f 100644
--- a/src/corelib/tools/qqueue.h
+++ b/src/corelib/tools/qqueue.h
@@ -43,9 +43,8 @@ template <class T>
class QQueue : public QList<T>
{
public:
- inline QQueue() {}
- inline ~QQueue() {}
- inline void swap(QQueue<T> &other) { QList<T>::swap(other); } // prevent QList<->QQueue swaps
+ // compiler-generated special member functions are fine!
+ inline void swap(QQueue<T> &other) Q_DECL_NOTHROW { QList<T>::swap(other); } // prevent QList<->QQueue swaps
#ifndef Q_QDOC
// bring in QList::swap(int, int). We cannot say using QList<T>::swap,
// because we don't want to make swap(QList&) available.
diff --git a/src/corelib/tools/qrect.cpp b/src/corelib/tools/qrect.cpp
index b2174745e4..847f650a70 100644
--- a/src/corelib/tools/qrect.cpp
+++ b/src/corelib/tools/qrect.cpp
@@ -2403,7 +2403,6 @@ QRect QRectF::toAlignedRect() const Q_DECL_NOTHROW
/*!
\fn QRectF QRectF::marginsAdded(const QMarginsF &margins) const
- \relates QRectF
\since 5.3
Returns a rectangle grown by the \a margins.
@@ -2413,7 +2412,6 @@ QRect QRectF::toAlignedRect() const Q_DECL_NOTHROW
/*!
\fn QRectF QRectF::marginsRemoved(const QMarginsF &margins) const
- \relates QRectF
\since 5.3
Removes the \a margins from the rectangle, shrinking it.
@@ -2423,7 +2421,6 @@ QRect QRectF::toAlignedRect() const Q_DECL_NOTHROW
/*!
\fn QRectF QRectF::operator+=(const QMarginsF &margins)
- \relates QRectF
\since 5.3
Adds the \a margins to the rectangle, growing it.
@@ -2433,7 +2430,6 @@ QRect QRectF::toAlignedRect() const Q_DECL_NOTHROW
/*!
\fn QRectF QRectF::operator-=(const QMarginsF &margins)
- \relates QRectF
\since 5.3
Returns a rectangle shrunk by the \a margins.
diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp
index f896828e2e..82de664a56 100644
--- a/src/corelib/tools/qregexp.cpp
+++ b/src/corelib/tools/qregexp.cpp
@@ -38,6 +38,7 @@
#include "qcache.h"
#include "qdatastream.h"
#include "qdebug.h"
+#include "qhashfunctions.h"
#include "qlist.h"
#include "qmap.h"
#include "qmutex.h"
@@ -491,7 +492,7 @@ int qFindString(const QChar *haystack, int haystackLen, int from,
when it is followed by 'char'.
\endtable
- \keyword QRegExp wildcard matching
+ \target QRegExp wildcard matching
\section1 Wildcard Matching
Most command shells such as \e bash or \e cmd.exe support "file
@@ -886,6 +887,15 @@ static bool operator==(const QRegExpEngineKey &key1, const QRegExpEngineKey &key
&& key1.cs == key2.cs;
}
+static uint qHash(const QRegExpEngineKey &key, uint seed = 0) Q_DECL_NOTHROW
+{
+ QtPrivate::QHashCombine hash;
+ seed = hash(seed, key.pattern);
+ seed = hash(seed, key.patternSyntax);
+ seed = hash(seed, key.cs);
+ return seed;
+}
+
class QRegExpEngine;
//Q_DECLARE_TYPEINFO(QVector<int>, Q_MOVABLE_TYPE);
@@ -1019,9 +1029,6 @@ class QRegExpCharClass
{
public:
QRegExpCharClass();
- inline QRegExpCharClass(const QRegExpCharClass &cc) { operator=(cc); }
-
- QRegExpCharClass &operator=(const QRegExpCharClass &cc);
void clear();
bool negative() const { return n; }
@@ -2319,17 +2326,6 @@ QRegExpCharClass::QRegExpCharClass()
#endif
}
-QRegExpCharClass &QRegExpCharClass::operator=(const QRegExpCharClass &cc)
-{
- c = cc.c;
- r = cc.r;
- n = cc.n;
-#ifndef QT_NO_REGEXP_OPTIM
- occ1 = cc.occ1;
-#endif
- return *this;
-}
-
void QRegExpCharClass::clear()
{
c = 0;
@@ -3811,11 +3807,6 @@ struct QRegExpPrivate
};
#if !defined(QT_NO_REGEXP_OPTIM)
-uint qHash(const QRegExpEngineKey &key, uint seed = 0) Q_DECL_NOTHROW
-{
- return qHash(key.pattern, seed);
-}
-
typedef QCache<QRegExpEngineKey, QRegExpEngine> EngineCache;
Q_GLOBAL_STATIC(EngineCache, globalEngineCache)
static QBasicMutex globalEngineCacheMutex;
@@ -4037,6 +4028,21 @@ bool QRegExp::operator==(const QRegExp &rx) const
}
/*!
+ \since 5.6
+ \relates QRegExp
+
+ Returns the hash value for \a key, using
+ \a seed to seed the calculation.
+*/
+uint qHash(const QRegExp &key, uint seed) Q_DECL_NOTHROW
+{
+ QtPrivate::QHashCombine hash;
+ seed = hash(seed, key.priv->engineKey);
+ seed = hash(seed, key.priv->minimal);
+ return seed;
+}
+
+/*!
\fn bool QRegExp::operator!=(const QRegExp &rx) const
Returns \c true if this regular expression is not equal to \a rx;
diff --git a/src/corelib/tools/qregexp.h b/src/corelib/tools/qregexp.h
index b08a8bd282..f384e6c51f 100644
--- a/src/corelib/tools/qregexp.h
+++ b/src/corelib/tools/qregexp.h
@@ -45,6 +45,9 @@ QT_BEGIN_NAMESPACE
struct QRegExpPrivate;
class QStringList;
+class QRegExp;
+
+Q_CORE_EXPORT uint qHash(const QRegExp &key, uint seed = 0) Q_DECL_NOTHROW;
class Q_CORE_EXPORT QRegExp
{
@@ -104,6 +107,8 @@ public:
static QString escape(const QString &str);
+ friend Q_CORE_EXPORT uint qHash(const QRegExp &key, uint seed) Q_DECL_NOTHROW;
+
private:
QRegExpPrivate *priv;
};
diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp
index 070e68154f..81b108059b 100644
--- a/src/corelib/tools/qregularexpression.cpp
+++ b/src/corelib/tools/qregularexpression.cpp
@@ -38,6 +38,7 @@
#ifndef QT_NO_REGULAREXPRESSION
#include <QtCore/qcoreapplication.h>
+#include <QtCore/qhashfunctions.h>
#include <QtCore/qmutex.h>
#include <QtCore/qvector.h>
#include <QtCore/qstringlist.h>
@@ -1842,6 +1843,21 @@ bool QRegularExpression::operator==(const QRegularExpression &re) const
*/
/*!
+ \since 5.6
+ \relates QRegularExpression
+
+ Returns the hash value for \a key, using
+ \a seed to seed the calculation.
+*/
+uint qHash(const QRegularExpression &key, uint seed) Q_DECL_NOTHROW
+{
+ QtPrivate::QHashCombine hash;
+ seed = hash(seed, key.d->pattern);
+ seed = hash(seed, key.d->patternOptions);
+ return seed;
+}
+
+/*!
Escapes all characters of \a str so that they no longer have any special
meaning when used as a regular expression pattern string, and returns
the escaped string. For instance:
@@ -2109,7 +2125,8 @@ QStringRef QRegularExpressionMatch::capturedRef(const QString &name) const
QStringList QRegularExpressionMatch::capturedTexts() const
{
QStringList texts;
- for (int i = 0; i <= lastCapturedIndex(); ++i)
+ texts.reserve(d->capturedCount);
+ for (int i = 0; i < d->capturedCount; ++i)
texts << captured(i);
return texts;
}
@@ -2462,7 +2479,7 @@ QDataStream &operator>>(QDataStream &in, QRegularExpression &re)
QDebug operator<<(QDebug debug, const QRegularExpression &re)
{
QDebugStateSaver saver(debug);
- debug.nospace() << "QRegularExpression(" << re.pattern() << ", " << re.patternOptions() << ")";
+ debug.nospace() << "QRegularExpression(" << re.pattern() << ", " << re.patternOptions() << ')';
return debug;
}
@@ -2504,7 +2521,7 @@ QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions patternOption
flags.chop(1);
}
- debug.nospace() << "QRegularExpression::PatternOptions(" << flags << ")";
+ debug.nospace() << "QRegularExpression::PatternOptions(" << flags << ')';
return debug;
}
@@ -2533,7 +2550,7 @@ QDebug operator<<(QDebug debug, const QRegularExpressionMatch &match)
for (int i = 0; i <= match.lastCapturedIndex(); ++i) {
debug << i
<< ":(" << match.capturedStart(i) << ", " << match.capturedEnd(i)
- << ", " << match.captured(i) << ")";
+ << ", " << match.captured(i) << ')';
if (i < match.lastCapturedIndex())
debug << ", ";
}
@@ -2541,12 +2558,12 @@ QDebug operator<<(QDebug debug, const QRegularExpressionMatch &match)
debug << ", has partial match: ("
<< match.capturedStart(0) << ", "
<< match.capturedEnd(0) << ", "
- << match.captured(0) << ")";
+ << match.captured(0) << ')';
} else {
debug << ", no match";
}
- debug << ")";
+ debug << ')';
return debug;
}
diff --git a/src/corelib/tools/qregularexpression.h b/src/corelib/tools/qregularexpression.h
index d2abfc7701..2bca6a211b 100644
--- a/src/corelib/tools/qregularexpression.h
+++ b/src/corelib/tools/qregularexpression.h
@@ -49,6 +49,9 @@ QT_BEGIN_NAMESPACE
class QRegularExpressionMatch;
class QRegularExpressionMatchIterator;
struct QRegularExpressionPrivate;
+class QRegularExpression;
+
+Q_CORE_EXPORT uint qHash(const QRegularExpression &key, uint seed = 0) Q_DECL_NOTHROW;
class Q_CORE_EXPORT QRegularExpression
{
@@ -139,6 +142,7 @@ private:
friend class QRegularExpressionMatch;
friend struct QRegularExpressionMatchPrivate;
friend class QRegularExpressionMatchIterator;
+ friend Q_CORE_EXPORT uint qHash(const QRegularExpression &key, uint seed) Q_DECL_NOTHROW;
QRegularExpression(QRegularExpressionPrivate &dd);
QExplicitlySharedDataPointer<QRegularExpressionPrivate> d;
diff --git a/src/corelib/tools/qringbuffer.cpp b/src/corelib/tools/qringbuffer.cpp
new file mode 100644
index 0000000000..85cfdaf129
--- /dev/null
+++ b/src/corelib/tools/qringbuffer.cpp
@@ -0,0 +1,314 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2015 Alex Trotsenko <alex1973tr@gmail.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qringbuffer_p.h"
+#include "private/qbytearray_p.h"
+#include <string.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \internal
+
+ Access the bytes at a specified position the out-variable length will
+ contain the amount of bytes readable from there, e.g. the amount still
+ the same QByteArray
+*/
+const char *QRingBuffer::readPointerAtPosition(qint64 pos, qint64 &length) const
+{
+ if (pos >= 0) {
+ pos += head;
+ for (int i = 0; i < buffers.size(); ++i) {
+ length = (i == tailBuffer ? tail : buffers[i].size());
+ if (length > pos) {
+ length -= pos;
+ return buffers[i].constData() + pos;
+ }
+ pos -= length;
+ }
+ }
+
+ length = 0;
+ return 0;
+}
+
+void QRingBuffer::free(qint64 bytes)
+{
+ while (bytes > 0) {
+ const qint64 blockSize = buffers.first().size() - head;
+
+ if (tailBuffer == 0 || blockSize > bytes) {
+ // keep a single block around if it does not exceed
+ // the basic block size, to avoid repeated allocations
+ // between uses of the buffer
+ if (bufferSize <= bytes) {
+ if (buffers.first().size() <= basicBlockSize) {
+ bufferSize = 0;
+ head = tail = 0;
+ } else {
+ clear(); // try to minify/squeeze us
+ }
+ } else {
+ Q_ASSERT(bytes < MaxByteArraySize);
+ head += int(bytes);
+ bufferSize -= bytes;
+ }
+ return;
+ }
+
+ bufferSize -= blockSize;
+ bytes -= blockSize;
+ buffers.removeFirst();
+ --tailBuffer;
+ head = 0;
+ }
+}
+
+char *QRingBuffer::reserve(qint64 bytes)
+{
+ if (bytes <= 0 || bytes >= MaxByteArraySize)
+ return 0;
+
+ const qint64 newSize = bytes + tail;
+ // if need buffer reallocation
+ if (newSize > buffers.last().size()) {
+ if (newSize > buffers.last().capacity() && (tail >= basicBlockSize
+ || newSize >= MaxByteArraySize)) {
+ // shrink this buffer to its current size
+ buffers.last().resize(tail);
+
+ // create a new QByteArray
+ buffers.append(QByteArray());
+ ++tailBuffer;
+ tail = 0;
+ }
+ buffers.last().resize(qMax(basicBlockSize, tail + int(bytes)));
+ }
+
+ char *writePtr = buffers.last().data() + tail;
+ bufferSize += bytes;
+ Q_ASSERT(bytes < MaxByteArraySize);
+ tail += int(bytes);
+ return writePtr;
+}
+
+/*!
+ \internal
+
+ Allocate data at buffer head
+*/
+char *QRingBuffer::reserveFront(qint64 bytes)
+{
+ if (bytes <= 0 || bytes >= MaxByteArraySize)
+ return 0;
+
+ if (head < bytes) {
+ buffers.first().remove(0, head);
+ if (tailBuffer == 0)
+ tail -= head;
+
+ head = qMax(basicBlockSize, int(bytes));
+ if (bufferSize == 0) {
+ tail = head;
+ } else {
+ buffers.prepend(QByteArray());
+ ++tailBuffer;
+ }
+ buffers.first().resize(head);
+ }
+
+ head -= int(bytes);
+ bufferSize += bytes;
+ return buffers.first().data() + head;
+}
+
+void QRingBuffer::chop(qint64 bytes)
+{
+ while (bytes > 0) {
+ if (tailBuffer == 0 || tail > bytes) {
+ // keep a single block around if it does not exceed
+ // the basic block size, to avoid repeated allocations
+ // between uses of the buffer
+ if (bufferSize <= bytes) {
+ if (buffers.first().size() <= basicBlockSize) {
+ bufferSize = 0;
+ head = tail = 0;
+ } else {
+ clear(); // try to minify/squeeze us
+ }
+ } else {
+ Q_ASSERT(bytes < MaxByteArraySize);
+ tail -= int(bytes);
+ bufferSize -= bytes;
+ }
+ return;
+ }
+
+ bufferSize -= tail;
+ bytes -= tail;
+ buffers.removeLast();
+ --tailBuffer;
+ tail = buffers.last().size();
+ }
+}
+
+void QRingBuffer::clear()
+{
+ buffers.erase(buffers.begin() + 1, buffers.end());
+ buffers.first().clear();
+
+ head = tail = 0;
+ tailBuffer = 0;
+ bufferSize = 0;
+}
+
+qint64 QRingBuffer::indexOf(char c, qint64 maxLength) const
+{
+ qint64 index = 0;
+ qint64 j = head;
+ for (int i = 0; index < maxLength && i < buffers.size(); ++i) {
+ const char *ptr = buffers[i].constData() + j;
+ j = qMin(index + (i == tailBuffer ? tail : buffers[i].size()) - j, maxLength);
+
+ while (index < j) {
+ if (*ptr++ == c)
+ return index;
+ ++index;
+ }
+ j = 0;
+ }
+ return -1;
+}
+
+qint64 QRingBuffer::read(char *data, qint64 maxLength)
+{
+ const qint64 bytesToRead = qMin(size(), maxLength);
+ qint64 readSoFar = 0;
+ while (readSoFar < bytesToRead) {
+ const qint64 bytesToReadFromThisBlock = qMin(bytesToRead - readSoFar,
+ nextDataBlockSize());
+ if (data)
+ memcpy(data + readSoFar, readPointer(), bytesToReadFromThisBlock);
+ readSoFar += bytesToReadFromThisBlock;
+ free(bytesToReadFromThisBlock);
+ }
+ return readSoFar;
+}
+
+/*!
+ \internal
+
+ Read an unspecified amount (will read the first buffer)
+*/
+QByteArray QRingBuffer::read()
+{
+ if (bufferSize == 0)
+ return QByteArray();
+
+ QByteArray qba(buffers.takeFirst());
+
+ qba.reserve(0); // avoid that resizing needlessly reallocates
+ if (tailBuffer == 0) {
+ qba.resize(tail);
+ tail = 0;
+ buffers.append(QByteArray());
+ } else {
+ --tailBuffer;
+ }
+ qba.remove(0, head); // does nothing if head is 0
+ head = 0;
+ bufferSize -= qba.size();
+ return qba;
+}
+
+/*!
+ \internal
+
+ Peek the bytes from a specified position
+*/
+qint64 QRingBuffer::peek(char *data, qint64 maxLength, qint64 pos) const
+{
+ qint64 readSoFar = 0;
+
+ if (pos >= 0) {
+ pos += head;
+ for (int i = 0; readSoFar < maxLength && i < buffers.size(); ++i) {
+ qint64 blockLength = (i == tailBuffer ? tail : buffers[i].size());
+
+ if (pos < blockLength) {
+ blockLength = qMin(blockLength - pos, maxLength - readSoFar);
+ memcpy(data + readSoFar, buffers[i].constData() + pos, blockLength);
+ readSoFar += blockLength;
+ pos = 0;
+ } else {
+ pos -= blockLength;
+ }
+ }
+ }
+
+ return readSoFar;
+}
+
+/*!
+ \internal
+
+ Append a new buffer to the end
+*/
+void QRingBuffer::append(const QByteArray &qba)
+{
+ if (tail == 0) {
+ buffers.last() = qba;
+ } else {
+ buffers.last().resize(tail);
+ buffers.append(qba);
+ ++tailBuffer;
+ }
+ tail = qba.size();
+ bufferSize += tail;
+}
+
+qint64 QRingBuffer::readLine(char *data, qint64 maxLength)
+{
+ if (!data || --maxLength <= 0)
+ return -1;
+
+ qint64 i = indexOf('\n', maxLength);
+ i = read(data, i >= 0 ? (i + 1) : maxLength);
+
+ // Terminate it.
+ data[i] = '\0';
+ return i;
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/tools/qringbuffer_p.h b/src/corelib/tools/qringbuffer_p.h
index ead85e9da0..68509a6a80 100644
--- a/src/corelib/tools/qringbuffer_p.h
+++ b/src/corelib/tools/qringbuffer_p.h
@@ -58,7 +58,7 @@ public:
buffers.append(QByteArray());
}
- inline int nextDataBlockSize() const {
+ inline qint64 nextDataBlockSize() const {
return (tailBuffer == 0 ? tail : buffers.first().size()) - head;
}
@@ -66,112 +66,17 @@ public:
return bufferSize == 0 ? Q_NULLPTR : (buffers.first().constData() + head);
}
- // access the bytes at a specified position
- // the out-variable length will contain the amount of bytes readable
- // from there, e.g. the amount still the same QByteArray
- inline const char *readPointerAtPosition(qint64 pos, qint64 &length) const {
- if (pos >= 0) {
- pos += head;
- for (int i = 0; i < buffers.size(); ++i) {
- length = (i == tailBuffer ? tail : buffers[i].size());
- if (length > pos) {
- length -= pos;
- return buffers[i].constData() + pos;
- }
- pos -= length;
- }
- }
-
- length = 0;
- return 0;
- }
-
- inline void free(int bytes) {
- while (bytes > 0) {
- int blockSize = buffers.first().size() - head;
-
- if (tailBuffer == 0 || blockSize > bytes) {
- // keep a single block around if it does not exceed
- // the basic block size, to avoid repeated allocations
- // between uses of the buffer
- if (bufferSize <= bytes) {
- if (buffers.first().size() <= basicBlockSize) {
- bufferSize = 0;
- head = tail = 0;
- } else {
- clear(); // try to minify/squeeze us
- }
- } else {
- head += bytes;
- bufferSize -= bytes;
- }
- return;
- }
-
- bufferSize -= blockSize;
- bytes -= blockSize;
- buffers.removeFirst();
- --tailBuffer;
- head = 0;
- }
- }
-
- inline char *reserve(int bytes) {
- if (bytes <= 0)
- return 0;
-
- // if need buffer reallocation
- if (tail + bytes > buffers.last().size()) {
- if (tail + bytes > buffers.last().capacity() && tail >= basicBlockSize) {
- // shrink this buffer to its current size
- buffers.last().resize(tail);
-
- // create a new QByteArray
- buffers.append(QByteArray());
- ++tailBuffer;
- tail = 0;
- }
- buffers.last().resize(qMax(basicBlockSize, tail + bytes));
- }
+ Q_CORE_EXPORT const char *readPointerAtPosition(qint64 pos, qint64 &length) const;
+ Q_CORE_EXPORT void free(qint64 bytes);
+ Q_CORE_EXPORT char *reserve(qint64 bytes);
+ Q_CORE_EXPORT char *reserveFront(qint64 bytes);
- char *writePtr = buffers.last().data() + tail;
- bufferSize += bytes;
- tail += bytes;
- return writePtr;
- }
-
- inline void truncate(int pos) {
+ inline void truncate(qint64 pos) {
if (pos < size())
chop(size() - pos);
}
- inline void chop(int bytes) {
- while (bytes > 0) {
- if (tailBuffer == 0 || tail > bytes) {
- // keep a single block around if it does not exceed
- // the basic block size, to avoid repeated allocations
- // between uses of the buffer
- if (bufferSize <= bytes) {
- if (buffers.first().size() <= basicBlockSize) {
- bufferSize = 0;
- head = tail = 0;
- } else {
- clear(); // try to minify/squeeze us
- }
- } else {
- tail -= bytes;
- bufferSize -= bytes;
- }
- return;
- }
-
- bufferSize -= tail;
- bytes -= tail;
- buffers.removeLast();
- --tailBuffer;
- tail = buffers.last().size();
- }
- }
+ Q_CORE_EXPORT void chop(qint64 bytes);
inline bool isEmpty() const {
return bufferSize == 0;
@@ -190,131 +95,36 @@ public:
*ptr = c;
}
- inline void ungetChar(char c) {
- --head;
- if (head < 0) {
- if (bufferSize != 0) {
- buffers.prepend(QByteArray());
- ++tailBuffer;
- } else {
- tail = basicBlockSize;
- }
- buffers.first().resize(basicBlockSize);
- head = basicBlockSize - 1;
- }
- buffers.first()[head] = c;
- ++bufferSize;
- }
-
- inline int size() const {
- return bufferSize;
- }
-
- inline void clear() {
- buffers.erase(buffers.begin() + 1, buffers.end());
- buffers.first().clear();
-
- head = tail = 0;
- tailBuffer = 0;
- bufferSize = 0;
- }
-
- inline int indexOf(char c) const {
- int index = 0;
- int j = head;
- for (int i = 0; i < buffers.size(); ++i) {
- const char *ptr = buffers[i].constData() + j;
- j = index + (i == tailBuffer ? tail : buffers[i].size()) - j;
-
- while (index < j) {
- if (*ptr++ == c)
- return index;
- ++index;
- }
- j = 0;
- }
- return -1;
- }
-
- inline int indexOf(char c, int maxLength) const {
- int index = 0;
- int j = head;
- for (int i = 0; index < maxLength && i < buffers.size(); ++i) {
- const char *ptr = buffers[i].constData() + j;
- j = qMin(index + (i == tailBuffer ? tail : buffers[i].size()) - j, maxLength);
-
- while (index < j) {
- if (*ptr++ == c)
- return index;
- ++index;
- }
- j = 0;
- }
- return -1;
- }
-
- inline int read(char *data, int maxLength) {
- int bytesToRead = qMin(size(), maxLength);
- int readSoFar = 0;
- while (readSoFar < bytesToRead) {
- int bytesToReadFromThisBlock = qMin(bytesToRead - readSoFar, nextDataBlockSize());
- if (data)
- memcpy(data + readSoFar, readPointer(), bytesToReadFromThisBlock);
- readSoFar += bytesToReadFromThisBlock;
- free(bytesToReadFromThisBlock);
+ void ungetChar(char c)
+ {
+ if (head > 0) {
+ --head;
+ buffers.first()[head] = c;
+ ++bufferSize;
+ } else {
+ char *ptr = reserveFront(1);
+ *ptr = c;
}
- return readSoFar;
}
- // read an unspecified amount (will read the first buffer)
- inline QByteArray read() {
- if (bufferSize == 0)
- return QByteArray();
- QByteArray qba(buffers.takeFirst());
-
- qba.reserve(0); // avoid that resizing needlessly reallocates
- if (tailBuffer == 0) {
- qba.resize(tail);
- tail = 0;
- buffers.append(QByteArray());
- } else {
- --tailBuffer;
- }
- qba.remove(0, head); // does nothing if head is 0
- head = 0;
- bufferSize -= qba.size();
- return qba;
+ inline qint64 size() const {
+ return bufferSize;
}
- // append a new buffer to the end
- inline void append(const QByteArray &qba) {
- if (tail == 0) {
- buffers.last() = qba;
- } else {
- buffers.last().resize(tail);
- buffers.append(qba);
- ++tailBuffer;
- }
- tail = qba.size();
- bufferSize += tail;
- }
+ Q_CORE_EXPORT void clear();
+ inline qint64 indexOf(char c) const { return indexOf(c, size()); }
+ Q_CORE_EXPORT qint64 indexOf(char c, qint64 maxLength) const;
+ Q_CORE_EXPORT qint64 read(char *data, qint64 maxLength);
+ Q_CORE_EXPORT QByteArray read();
+ Q_CORE_EXPORT qint64 peek(char *data, qint64 maxLength, qint64 pos = 0) const;
+ Q_CORE_EXPORT void append(const QByteArray &qba);
- inline int skip(int length) {
+ inline qint64 skip(qint64 length) {
return read(0, length);
}
- inline int readLine(char *data, int maxLength) {
- if (!data || --maxLength <= 0)
- return -1;
-
- int i = indexOf('\n', maxLength);
- i = read(data, i >= 0 ? (i + 1) : maxLength);
-
- // Terminate it.
- data[i] = '\0';
- return i;
- }
+ Q_CORE_EXPORT qint64 readLine(char *data, qint64 maxLength);
inline bool canReadLine() const {
return indexOf('\n') >= 0;
@@ -325,7 +135,7 @@ private:
int head, tail;
int tailBuffer; // always buffers.size() - 1
const int basicBlockSize;
- int bufferSize;
+ qint64 bufferSize;
};
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h
index 819ab00584..8d478f81f9 100644
--- a/src/corelib/tools/qscopedpointer.h
+++ b/src/corelib/tools/qscopedpointer.h
@@ -91,7 +91,7 @@ class QScopedPointer
{
typedef T *QScopedPointer:: *RestrictedBool;
public:
- explicit inline QScopedPointer(T *p = 0) : d(p)
+ explicit inline QScopedPointer(T *p = Q_NULLPTR) : d(p)
{
}
@@ -121,12 +121,12 @@ public:
#if defined(Q_QDOC)
inline operator bool() const
{
- return isNull() ? 0 : &QScopedPointer::d;
+ return isNull() ? Q_NULLPTR : &QScopedPointer::d;
}
#else
inline operator RestrictedBool() const
{
- return isNull() ? 0 : &QScopedPointer::d;
+ return isNull() ? Q_NULLPTR : &QScopedPointer::d;
}
#endif
@@ -140,7 +140,7 @@ public:
return !d;
}
- inline void reset(T *other = 0)
+ inline void reset(T *other = Q_NULLPTR)
{
if (d == other)
return;
@@ -152,7 +152,7 @@ public:
inline T *take()
{
T *oldD = d;
- d = 0;
+ d = Q_NULLPTR;
return oldD;
}
@@ -206,10 +206,10 @@ template <typename T, typename Cleanup = QScopedPointerArrayDeleter<T> >
class QScopedArrayPointer : public QScopedPointer<T, Cleanup>
{
public:
- inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(0) {}
+ inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(Q_NULLPTR) {}
template <typename D>
- explicit inline QScopedArrayPointer(D *p, typename QtPrivate::QScopedArrayEnsureSameType<T,D>::Type = 0)
+ explicit inline QScopedArrayPointer(D *p, typename QtPrivate::QScopedArrayEnsureSameType<T,D>::Type = Q_NULLPTR)
: QScopedPointer<T, Cleanup>(p)
{
}
diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h
index e4688711d6..3f4208e8b3 100644
--- a/src/corelib/tools/qset.h
+++ b/src/corelib/tools/qset.h
@@ -39,6 +39,8 @@
#include <initializer_list>
#endif
+#include <iterator>
+
QT_BEGIN_NAMESPACE
@@ -48,7 +50,7 @@ class QSet
typedef QHash<T, QHashDummyValue> Hash;
public:
- inline QSet() {}
+ inline QSet() Q_DECL_NOTHROW {}
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QSet(std::initializer_list<T> list)
{
@@ -57,16 +59,10 @@ public:
insert(*it);
}
#endif
- inline QSet(const QSet<T> &other) : q_hash(other.q_hash) {}
-
- inline QSet<T> &operator=(const QSet<T> &other)
- { q_hash = other.q_hash; return *this; }
-#ifdef Q_COMPILER_RVALUE_REFS
- inline QSet(QSet &&other) : q_hash(qMove(other.q_hash)) {}
- inline QSet<T> &operator=(QSet<T> &&other)
- { qSwap(q_hash, other.q_hash); return *this; }
-#endif
- inline void swap(QSet<T> &other) { q_hash.swap(other.q_hash); }
+ // compiler-generated copy/move ctor/assignment operators are fine!
+ // compiler-generated destructor is fine!
+
+ inline void swap(QSet<T> &other) Q_DECL_NOTHROW { q_hash.swap(other.q_hash); }
inline bool operator==(const QSet<T> &other) const
{ return q_hash == other.q_hash; }
@@ -137,6 +133,7 @@ public:
typedef QHash<T, QHashDummyValue> Hash;
typename Hash::const_iterator i;
friend class iterator;
+ friend class QSet<T>;
public:
typedef std::bidirectional_iterator_tag iterator_category;
@@ -166,14 +163,25 @@ public:
};
// STL style
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
inline iterator begin() { return q_hash.begin(); }
- inline const_iterator begin() const { return q_hash.begin(); }
- inline const_iterator cbegin() const { return q_hash.begin(); }
- inline const_iterator constBegin() const { return q_hash.constBegin(); }
+ inline const_iterator begin() const Q_DECL_NOTHROW { return q_hash.begin(); }
+ inline const_iterator cbegin() const Q_DECL_NOTHROW { return q_hash.begin(); }
+ inline const_iterator constBegin() const Q_DECL_NOTHROW { return q_hash.constBegin(); }
inline iterator end() { return q_hash.end(); }
- inline const_iterator end() const { return q_hash.end(); }
- inline const_iterator cend() const { return q_hash.end(); }
- inline const_iterator constEnd() const { return q_hash.constEnd(); }
+ inline const_iterator end() const Q_DECL_NOTHROW { return q_hash.end(); }
+ inline const_iterator cend() const Q_DECL_NOTHROW { return q_hash.end(); }
+ inline const_iterator constEnd() const Q_DECL_NOTHROW { return q_hash.constEnd(); }
+
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
+
iterator erase(iterator i)
{
Q_ASSERT_X(isValidIterator(i), "QSet::erase", "The specified const_iterator argument 'i' is invalid");
@@ -191,6 +199,7 @@ public:
inline const_iterator constFind(const T &value) const { return find(value); }
QSet<T> &unite(const QSet<T> &other);
QSet<T> &intersect(const QSet<T> &other);
+ bool intersects(const QSet<T> &other) const;
QSet<T> &subtract(const QSet<T> &other);
// STL compatibility
@@ -284,6 +293,34 @@ Q_INLINE_TEMPLATE QSet<T> &QSet<T>::intersect(const QSet<T> &other)
}
template <class T>
+Q_INLINE_TEMPLATE bool QSet<T>::intersects(const QSet<T> &other) const
+{
+ const bool otherIsBigger = other.size() > size();
+ const QSet &smallestSet = otherIsBigger ? *this : other;
+ const QSet &biggestSet = otherIsBigger ? other : *this;
+ const bool equalSeeds = q_hash.d->seed == other.q_hash.d->seed;
+ typename QSet::const_iterator i = smallestSet.cbegin();
+ typename QSet::const_iterator e = smallestSet.cend();
+
+ if (Q_LIKELY(equalSeeds)) {
+ // If seeds are equal we take the fast path so no hash is recalculated.
+ while (i != e) {
+ if (*biggestSet.q_hash.findNode(*i, i.i.i->h) != biggestSet.q_hash.e)
+ return true;
+ ++i;
+ }
+ } else {
+ while (i != e) {
+ if (biggestSet.contains(*i))
+ return true;
+ ++i;
+ }
+ }
+
+ return false;
+}
+
+template <class T>
Q_INLINE_TEMPLATE QSet<T> &QSet<T>::subtract(const QSet<T> &other)
{
QSet<T> copy1(*this);
diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc
index 072e65af0e..542def4651 100644
--- a/src/corelib/tools/qset.qdoc
+++ b/src/corelib/tools/qset.qdoc
@@ -114,40 +114,6 @@
*/
/*!
- \fn QSet::QSet(const QSet<T> &other)
-
- Constructs a copy of \a other.
-
- This operation occurs in \l{constant time}, because QSet is
- \l{implicitly shared}. This makes returning a QSet from a
- function very fast. If a shared instance is modified, it will be
- copied (copy-on-write), and this takes \l{linear time}.
-
- \sa operator=()
-*/
-
-/*!
- \fn QSet::QSet(QSet && other)
-
- Move-constructs a QSet instance, making it point to the same object that
- \a other was pointing to.
-*/
-
-
-/*!
- \fn QSet<T> &QSet::operator=(const QSet<T> &other)
-
- Assigns the \a other set to this set and returns a reference to
- this set.
-*/
-
-/*!
- \fn QSet<T> &QSet::operator=(QSet<T> &&other)
-
- Move-assigns the \a other set to this set.
-*/
-
-/*!
\fn void QSet::swap(QSet<T> &other)
Swaps set \a other with this set. This operation is very fast and
@@ -418,6 +384,52 @@
\sa constBegin(), end()
*/
+/*! \fn QSet::reverse_iterator QSet::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the set, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QSet::const_reverse_iterator QSet::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QSet::const_reverse_iterator QSet::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the set, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QSet::reverse_iterator QSet::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last item in the set, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QSet::const_reverse_iterator QSet::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QSet::const_reverse_iterator QSet::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last item in the set, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*!
\typedef QSet::Iterator
\since 4.2
@@ -479,6 +491,38 @@
Typedef for T. Provided for STL compatibility.
*/
+/*! \typedef QSet::reverse_iterator
+ \since 5.6
+
+ The QSet::reverse_iterator typedef provides an STL-style non-const
+ reverse iterator for QSet.
+
+ It is simply a typedef for \c{std::reverse_iterator<QSet::iterator>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QSet::rbegin(), QSet::rend(), QSet::const_reverse_iterator, QSet::iterator
+*/
+
+/*! \typedef QSet::const_reverse_iterator
+ \since 5.6
+
+ The QSet::const_reverse_iterator typedef provides an STL-style const
+ reverse iterator for QSet.
+
+ It is simply a typedef for \c{std::reverse_iterator<QSet::const_iterator>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QSet::rbegin(), QSet::rend(), QSet::reverse_iterator, QSet::const_iterator
+*/
+
/*!
\fn QSet::const_iterator QSet::insert(const T &value)
@@ -504,7 +548,17 @@
Removes all items from this set that are not contained in the
\a other set. A reference to this set is returned.
- \sa operator&=(), unite(), subtract()
+ \sa intersects(), operator&=(), unite(), subtract()
+*/
+
+/*!
+ \fn bool QSet::intersects(const QSet<T> &other) const
+ \since 5.6
+
+ Returns \c true if this set has at least one item in common with
+ \a other.
+
+ \sa contains(), intersect()
*/
/*!
diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h
index 9dd8fff9cb..6a0900cf3f 100644
--- a/src/corelib/tools/qshareddata.h
+++ b/src/corelib/tools/qshareddata.h
@@ -36,7 +36,10 @@
#include <QtCore/qglobal.h>
#include <QtCore/qatomic.h>
+#if QT_DEPRECATED_SINCE(5, 5)
#include <QtCore/qhash.h>
+#endif
+#include <QtCore/qhashfunctions.h>
QT_BEGIN_NAMESPACE
@@ -76,7 +79,7 @@ public:
inline bool operator==(const QSharedDataPointer<T> &other) const { return d == other.d; }
inline bool operator!=(const QSharedDataPointer<T> &other) const { return d != other.d; }
- inline QSharedDataPointer() { d = 0; }
+ inline QSharedDataPointer() { d = Q_NULLPTR; }
inline ~QSharedDataPointer() { if (d && !d->ref.deref()) delete d; }
explicit QSharedDataPointer(T *data) Q_DECL_NOTHROW;
@@ -142,17 +145,17 @@ public:
if(d && !d->ref.deref())
delete d;
- d = 0;
+ d = Q_NULLPTR;
}
- inline operator bool () const { return d != 0; }
+ inline operator bool () const { return d != Q_NULLPTR; }
inline bool operator==(const QExplicitlySharedDataPointer<T> &other) const { return d == other.d; }
inline bool operator!=(const QExplicitlySharedDataPointer<T> &other) const { return d != other.d; }
inline bool operator==(const T *ptr) const { return d == ptr; }
inline bool operator!=(const T *ptr) const { return d != ptr; }
- inline QExplicitlySharedDataPointer() { d = 0; }
+ inline QExplicitlySharedDataPointer() { d = Q_NULLPTR; }
inline ~QExplicitlySharedDataPointer() { if (d && !d->ref.deref()) delete d; }
explicit QExplicitlySharedDataPointer(T *data) Q_DECL_NOTHROW;
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index 9e6b48a97d..bd98cb326c 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -55,7 +55,10 @@ QT_END_NAMESPACE
#include <new>
#include <QtCore/qatomic.h>
#include <QtCore/qobject.h> // for qobject_cast
-#include <QtCore/qhash.h> // for qHash
+#if QT_DEPRECATED_SINCE(5, 5)
+#include <QtCore/qhash.h>
+#endif
+#include <QtCore/qhashfunctions.h>
#if defined(Q_COMPILER_RVALUE_REFS) && defined(Q_COMPILER_VARIADIC_TEMPLATES)
# include <utility> // for std::forward
@@ -297,12 +300,12 @@ public:
inline T *data() const { return value; }
inline bool isNull() const { return !data(); }
- inline operator RestrictedBool() const { return isNull() ? 0 : &QSharedPointer::value; }
+ inline operator RestrictedBool() const { return isNull() ? Q_NULLPTR : &QSharedPointer::value; }
inline bool operator !() const { return isNull(); }
inline T &operator*() const { return *data(); }
inline T *operator->() const { return data(); }
- QSharedPointer() : value(0), d(0) { }
+ QSharedPointer() : value(Q_NULLPTR), d(Q_NULLPTR) { }
~QSharedPointer() { deref(); }
inline explicit QSharedPointer(T *ptr) : value(ptr) // noexcept
@@ -324,14 +327,32 @@ public:
inline QSharedPointer(QSharedPointer &&other)
: value(other.value), d(other.d)
{
- other.d = 0;
- other.value = 0;
+ other.d = Q_NULLPTR;
+ other.value = Q_NULLPTR;
}
inline QSharedPointer &operator=(QSharedPointer &&other)
{
- swap(other);
+ QSharedPointer moved(std::move(other));
+ swap(moved);
+ return *this;
+ }
+
+ template <class X>
+ QSharedPointer(QSharedPointer<X> &&other) Q_DECL_NOTHROW
+ : value(other.value), d(other.d)
+ {
+ other.d = Q_NULLPTR;
+ other.value = Q_NULLPTR;
+ }
+
+ template <class X>
+ QSharedPointer &operator=(QSharedPointer<X> &&other) Q_DECL_NOTHROW
+ {
+ QSharedPointer moved(std::move(other));
+ swap(moved);
return *this;
}
+
#endif
template <class X>
@@ -341,13 +362,13 @@ public:
template <class X>
inline QSharedPointer &operator=(const QSharedPointer<X> &other)
{
- QSHAREDPOINTER_VERIFY_AUTO_CAST(T, X); // if you get an error in this line, the cast is invalid
- internalCopy(other);
+ QSharedPointer copy(other);
+ swap(copy);
return *this;
}
template <class X>
- inline QSharedPointer(const QWeakPointer<X> &other) : value(0), d(0)
+ inline QSharedPointer(const QWeakPointer<X> &other) : value(Q_NULLPTR), d(Q_NULLPTR)
{ *this = other; }
template <class X>
@@ -463,9 +484,9 @@ public:
private:
explicit QSharedPointer(Qt::Initialization) {}
- inline void deref()
+ void deref() Q_DECL_NOTHROW
{ deref(d); }
- static inline void deref(Data *d)
+ static void deref(Data *d) Q_DECL_NOTHROW
{
if (!d) return;
if (!d->strongref.deref()) {
@@ -478,7 +499,7 @@ private:
template <class X>
inline void enableSharedFromThis(const QEnableSharedFromThis<X> *ptr)
{
- ptr->initializeFromSharedPointer(*this);
+ ptr->initializeFromSharedPointer(constCast<typename QtPrivate::remove_cv<T>::type>());
}
inline void enableSharedFromThis(...) {}
@@ -487,7 +508,7 @@ private:
inline void internalConstruct(T *ptr, Deleter deleter)
{
if (!ptr) {
- d = 0;
+ d = Q_NULLPTR;
return;
}
@@ -506,19 +527,7 @@ private:
enableSharedFromThis(ptr);
}
- template <class X>
- inline void internalCopy(const QSharedPointer<X> &other)
- {
- Data *o = other.d;
- T *actual = other.value;
- if (o)
- other.ref();
- qSwap(d, o);
- qSwap(this->value, actual);
- deref(o);
- }
-
- inline void internalSwap(QSharedPointer &other)
+ void internalSwap(QSharedPointer &other) Q_DECL_NOTHROW
{
qSwap(d, other.d);
qSwap(this->value, other.value);
@@ -531,7 +540,7 @@ public:
template <class X> friend class QWeakPointer;
template <class X, class Y> friend QSharedPointer<X> QtSharedPointer::copyAndSetPointer(X * ptr, const QSharedPointer<Y> &src);
#endif
- inline void ref() const { d->weakref.ref(); d->strongref.ref(); }
+ void ref() const Q_DECL_NOTHROW { d->weakref.ref(); d->strongref.ref(); }
inline void internalSet(Data *o, T *actual)
{
@@ -550,14 +559,14 @@ public:
o->weakref.ref();
} else {
o->checkQObjectShared(actual);
- o = 0;
+ o = Q_NULLPTR;
}
}
qSwap(d, o);
qSwap(this->value, actual);
if (!d || d->strongref.load() == 0)
- this->value = 0;
+ this->value = Q_NULLPTR;
// dereference saved data
deref(o);
@@ -582,19 +591,19 @@ public:
typedef const value_type &const_reference;
typedef qptrdiff difference_type;
- inline bool isNull() const { return d == 0 || d->strongref.load() == 0 || value == 0; }
- inline operator RestrictedBool() const { return isNull() ? 0 : &QWeakPointer::value; }
+ inline bool isNull() const { return d == Q_NULLPTR || d->strongref.load() == 0 || value == Q_NULLPTR; }
+ inline operator RestrictedBool() const { return isNull() ? Q_NULLPTR : &QWeakPointer::value; }
inline bool operator !() const { return isNull(); }
- inline T *data() const { return d == 0 || d->strongref.load() == 0 ? 0 : value; }
+ inline T *data() const { return d == Q_NULLPTR || d->strongref.load() == 0 ? Q_NULLPTR : value; }
- Q_DECL_CONSTEXPR inline QWeakPointer() : d(0), value(0) { }
+ inline QWeakPointer() : d(Q_NULLPTR), value(Q_NULLPTR) { }
inline ~QWeakPointer() { if (d && !d->weakref.deref()) delete d; }
#ifndef QT_NO_QOBJECT
// special constructor that is enabled only if X derives from QObject
#if QT_DEPRECATED_SINCE(5, 0)
template <class X>
- QT_DEPRECATED inline QWeakPointer(X *ptr) : d(ptr ? Data::getAndRef(ptr) : 0), value(ptr)
+ QT_DEPRECATED inline QWeakPointer(X *ptr) : d(ptr ? Data::getAndRef(ptr) : Q_NULLPTR), value(ptr)
{ }
#endif
#endif
@@ -628,7 +637,7 @@ public:
}
template <class X>
- inline QWeakPointer(const QWeakPointer<X> &o) : d(0), value(0)
+ inline QWeakPointer(const QWeakPointer<X> &o) : d(Q_NULLPTR), value(Q_NULLPTR)
{ *this = o; }
template <class X>
@@ -649,7 +658,7 @@ public:
{ return !(*this == o); }
template <class X>
- inline QWeakPointer(const QSharedPointer<X> &o) : d(0), value(0)
+ inline QWeakPointer(const QSharedPointer<X> &o) : d(Q_NULLPTR), value(Q_NULLPTR)
{ *this = o; }
template <class X>
@@ -693,7 +702,7 @@ public:
#ifndef QT_NO_QOBJECT
template <class X>
- inline QWeakPointer(X *ptr, bool) : d(ptr ? Data::getAndRef(ptr) : 0), value(ptr)
+ inline QWeakPointer(X *ptr, bool) : d(ptr ? Data::getAndRef(ptr) : Q_NULLPTR), value(ptr)
{ }
#endif
diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp
index 4459d89e07..f07eb098f2 100644
--- a/src/corelib/tools/qsimd.cpp
+++ b/src/corelib/tools/qsimd.cpp
@@ -43,7 +43,9 @@
#if defined(Q_OS_WIN)
# if defined(Q_OS_WINCE)
# include <qt_windows.h>
-# include <cmnintrin.h>
+# if _WIN32_WCE < 0x800
+# include <cmnintrin.h>
+# endif
# endif
# if !defined(Q_CC_GNU)
# ifndef Q_OS_WINCE
@@ -76,28 +78,28 @@ static inline uint detectProcessorFeatures()
return 0;
}
#elif defined (Q_OS_WINCE)
-static inline uint detectProcessorFeatures()
+static inline quint64 detectProcessorFeatures()
{
- uint features = 0;
+ quint64 features = 0;
#if defined (ARM)
# ifdef PF_ARM_NEON
if (IsProcessorFeaturePresent(PF_ARM_NEON))
- features |= ARM_NEON;
+ features |= Q_UINT64_C(1) << CpuFeatureNEON;
# endif
#elif defined(_X86_)
if (IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE))
- features |= SSE2;
+ features |= Q_UINT64_C(1) << CpuFeatureSSE2;
if (IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE))
- features |= SSE3;
+ features |= Q_UINT64_C(1) << CpuFeatureSSE3;
#endif
return features;
}
#elif defined(Q_PROCESSOR_ARM)
-static inline uint detectProcessorFeatures()
+static inline quint64 detectProcessorFeatures()
{
- uint features = 0;
+ quint64 features = 0;
#if defined(Q_OS_LINUX)
int auxv = qt_safe_open("/proc/self/auxv", O_RDONLY);
@@ -115,7 +117,7 @@ static inline uint detectProcessorFeatures()
for (int i = 0; i < max; i += 2)
if (vector[i] == AT_HWCAP) {
if (vector[i+1] & HWCAP_NEON)
- features |= NEON;
+ features |= Q_UINT64_C(1) << CpuFeatureNEON;
break;
}
}
@@ -127,7 +129,7 @@ static inline uint detectProcessorFeatures()
#endif
#if defined(__ARM_NEON__)
- features = NEON;
+ features = Q_UINT64_C(1) << CpuFeatureNEON;
#endif
return features;
@@ -203,21 +205,24 @@ static void cpuidFeatures01(uint &ecx, uint &edx)
inline void __cpuidex(int info[4], int, __int64) { memset(info, 0, 4*sizeof(int));}
#endif
-static void cpuidFeatures07_00(uint &ebx)
+static void cpuidFeatures07_00(uint &ebx, uint &ecx)
{
#if defined(Q_CC_GNU)
qregisteruint rbx; // in case it's 64-bit
+ qregisteruint rcx = 0;
asm ("xchg " PICreg", %0\n"
"cpuid\n"
"xchg " PICreg", %0\n"
- : "=&r" (rbx)
- : "a" (7), "c" (0)
+ : "=&r" (rbx), "+&c" (rcx)
+ : "a" (7)
: "%edx");
ebx = rbx;
+ ecx = rcx;
#elif defined(Q_OS_WIN)
int info[4];
__cpuidex(info, 7, 0);
ebx = info[1];
+ ecx = info[2];
#endif
}
@@ -238,7 +243,7 @@ static void xgetbv(uint in, uint &eax, uint &edx)
#endif
}
-static inline uint detectProcessorFeatures()
+static quint64 detectProcessorFeatures()
{
// Flags from the CR0 / XCR0 state register
enum XCR0Flags {
@@ -255,8 +260,15 @@ static inline uint detectProcessorFeatures()
AVXState = XMM0_15 | YMM0_15Hi128,
AVX512State = AVXState | OpMask | ZMM0_15Hi256 | ZMM16_31
};
-
- uint features = 0;
+ static const quint64 AllAVX512 = (Q_UINT64_C(1) << CpuFeatureAVX512F) | (Q_UINT64_C(1) << CpuFeatureAVX512CD) |
+ (Q_UINT64_C(1) << CpuFeatureAVX512ER) | (Q_UINT64_C(1) << CpuFeatureAVX512PF) |
+ (Q_UINT64_C(1) << CpuFeatureAVX512BW) | (Q_UINT64_C(1) << CpuFeatureAVX512DQ) |
+ (Q_UINT64_C(1) << CpuFeatureAVX512VL) |
+ (Q_UINT64_C(1) << CpuFeatureAVX512IFMA) | (Q_UINT64_C(1) << CpuFeatureAVX512VBMI);
+ static const quint64 AllAVX2 = (Q_UINT64_C(1) << CpuFeatureAVX2) | AllAVX512;
+ static const quint64 AllAVX = (Q_UINT64_C(1) << CpuFeatureAVX) | AllAVX2;
+
+ quint64 features = 0;
int cpuidLevel = maxBasicCpuidSupported();
#if Q_PROCESSOR_X86 < 5
if (cpuidLevel < 1)
@@ -267,28 +279,23 @@ static inline uint detectProcessorFeatures()
uint cpuid01ECX = 0, cpuid01EDX = 0;
cpuidFeatures01(cpuid01ECX, cpuid01EDX);
+
+ // the low 32-bits of features is cpuid01ECX
+ // note: we need to check OS support for saving the AVX register state
+ features = cpuid01ECX;
+
#if defined(Q_PROCESSOR_X86_32)
// x86 might not have SSE2 support
if (cpuid01EDX & (1u << 26))
- features |= SSE2;
+ features |= Q_UINT64_C(1) << CpuFeatureSSE2;
+ else
+ features &= ~(Q_UINT64_C(1) << CpuFeatureSSE2);
// we should verify that the OS enabled saving of the SSE state...
#else
// x86-64 or x32
- features = SSE2;
+ features |= Q_UINT64_C(1) << CpuFeatureSSE2;
#endif
- // common part between 32- and 64-bit
- if (cpuid01ECX & (1u))
- features |= SSE3;
- if (cpuid01ECX & (1u << 9))
- features |= SSSE3;
- if (cpuid01ECX & (1u << 19))
- features |= SSE4_1;
- if (cpuid01ECX & (1u << 20))
- features |= SSE4_2;
- if (cpuid01ECX & (1u << 25))
- features |= 0; // AES, enable if needed
-
uint xgetbvA = 0, xgetbvD = 0;
if (cpuid01ECX & (1u << 27)) {
// XGETBV enabled
@@ -296,22 +303,27 @@ static inline uint detectProcessorFeatures()
}
uint cpuid0700EBX = 0;
- if (cpuidLevel >= 7)
- cpuidFeatures07_00(cpuid0700EBX);
-
- if ((xgetbvA & AVXState) == AVXState) {
- // support for YMM and XMM registers is enabled
- if (cpuid01ECX & (1u << 28))
- features |= AVX;
+ uint cpuid0700ECX = 0;
+ if (cpuidLevel >= 7) {
+ cpuidFeatures07_00(cpuid0700EBX, cpuid0700ECX);
- if (cpuid0700EBX & (1u << 5))
- features |= AVX2;
+ // the high 32-bits of features is cpuid0700EBX
+ features |= quint64(cpuid0700EBX) << 32;
}
- if (cpuid0700EBX & (1u << 4))
- features |= HLE; // Hardware Lock Ellision
- if (cpuid0700EBX & (1u << 11))
- features |= RTM; // Restricted Transactional Memory
+ if ((xgetbvA & AVXState) != AVXState) {
+ // support for YMM registers is disabled, disable all AVX
+ features &= ~AllAVX;
+ } else if ((xgetbvA & AVX512State) != AVX512State) {
+ // support for ZMM registers or mask registers is disabled, disable all AVX512
+ features &= ~AllAVX512;
+ } else {
+ // this feature is out of order
+ if (cpuid0700ECX & (1u << 1))
+ features |= Q_UINT64_C(1) << CpuFeatureAVX512VBMI;
+ else
+ features &= ~(Q_UINT64_C(1) << CpuFeatureAVX512VBMI);
+ }
return features;
}
@@ -428,24 +440,24 @@ static bool procCpuinfoContains(const char *prefix, const char *string)
}
#endif
-static inline uint detectProcessorFeatures()
+static inline quint64 detectProcessorFeatures()
{
// NOTE: MIPS 74K cores are the only ones supporting DSPr2.
- uint flags = 0;
+ quint64 flags = 0;
#if defined __mips_dsp
- flags |= DSP;
+ flags |= Q_UINT64_C(1) << CpuFeatureDSP;
# if defined __mips_dsp_rev && __mips_dsp_rev >= 2
- flags |= DSPR2;
+ flags |= Q_UINT64_C(1) << CpuFeatureDSPR2;
# elif defined(Q_OS_LINUX)
if (procCpuinfoContains("cpu model", "MIPS 74Kc") || procCpuinfoContains("cpu model", "MIPS 74Kf"))
- flags |= DSPR2;
+ flags |= Q_UINT64_C(1) << CpuFeatureDSPR2;
# endif
#elif defined(Q_OS_LINUX)
if (procCpuinfoContains("ASEs implemented", "dsp")) {
- flags |= DSP;
+ flags |= Q_UINT64_C(1) << CpuFeatureDSP;
if (procCpuinfoContains("cpu model", "MIPS 74Kc") || procCpuinfoContains("cpu model", "MIPS 74Kf"))
- flags |= DSPR2;
+ flags |= Q_UINT64_C(1) << CpuFeatureDSPR2;
}
#endif
@@ -460,70 +472,179 @@ static inline uint detectProcessorFeatures()
#endif
/*
- * Use kdesdk/scripts/generate_string_table.pl to update the table below.
- * Here's the data (don't forget the ONE leading space):
+ * Use kdesdk/scripts/generate_string_table.pl to update the table below. Note
+ * that the x86 version has a lot of blanks that must be kept and that the
+ * offset table's type is changed to make the table smaller. We also remove the
+ * terminating -1 that the script adds.
+ */
+// begin generated
+#if defined(Q_PROCESSOR_ARM)
+/* Data:
neon
- sse2
+ */
+static const char features_string[] = " neon\0";
+static const int features_indices[] = { 0 };
+#elif defined(Q_PROCESSOR_MIPS)
+/* Data:
+ dsp
+ dspr2
+*/
+static const char features_string[] =
+ " dsp\0"
+ " dspr2\0"
+ "\0";
+
+static const int features_indices[] = {
+ 0, 5
+};
+#elif defined(Q_PROCESSOR_X86)
+/* Data:
sse3
+ sse2
+ avx512vbmi
+
+
+
+
+
+
ssse3
+
+
+ fma
+ cmpxchg16b
+
+
+
+
+
sse4.1
sse4.2
+
+ movbe
+ popcnt
+
+ aes
+
+
avx
- avx2
+ f16c
+ rdrand
+
+
+
+
+ bmi
hle
+ avx2
+
+
+ bmi2
+
+
rtm
- dsp
- dspr2
- */
-// begin generated
+
+
+
+ avx512f
+ avx512dq
+ rdseed
+
+
+ avx512ifma
+
+
+
+
+ avx512pf
+ avx512er
+ avx512cd
+ sha
+ avx512bw
+ avx512vl
+ */
static const char features_string[] =
- "\0"
- " neon\0"
- " sse2\0"
" sse3\0"
+ " sse2\0"
+ " avx512vbmi\0"
" ssse3\0"
+ " fma\0"
+ " cmpxchg16b\0"
" sse4.1\0"
" sse4.2\0"
+ " movbe\0"
+ " popcnt\0"
+ " aes\0"
" avx\0"
- " avx2\0"
+ " f16c\0"
+ " rdrand\0"
+ " bmi\0"
" hle\0"
+ " avx2\0"
+ " bmi2\0"
" rtm\0"
- " dsp\0"
- " dspr2\0"
+ " avx512f\0"
+ " avx512dq\0"
+ " rdseed\0"
+ " avx512ifma\0"
+ " avx512pf\0"
+ " avx512er\0"
+ " avx512cd\0"
+ " sha\0"
+ " avx512bw\0"
+ " avx512vl\0"
"\0";
-static const int features_indices[] = {
- 0, 1, 7, 13, 19, 26, 34, 42,
- 47, 53, 58, 63, 68, -1
+static const quint8 features_indices[] = {
+ 0, 6, 12, 5, 5, 5, 5, 5,
+ 5, 24, 5, 5, 31, 36, 5, 5,
+ 5, 5, 5, 48, 56, 5, 64, 71,
+ 5, 79, 5, 5, 84, 89, 95, 5,
+ 5, 5, 5, 103, 108, 113, 5, 5,
+ 119, 5, 5, 125, 5, 5, 5, 5,
+ 130, 139, 149, 5, 5, 157, 5, 5,
+ 5, 5, 169, 179, 189, 199, 204, 214
};
+#else
+static const char features_string[] = "";
+static const int features_indices[] = { };
+#endif
// end generated
-static const int features_count = (sizeof features_indices - 1) / (sizeof features_indices[0]);
+static const int features_count = (sizeof features_indices) / (sizeof features_indices[0]);
// record what CPU features were enabled by default in this Qt build
-static const uint minFeature = qCompilerCpuFeatures;
+static const quint64 minFeature = qCompilerCpuFeatures;
#ifdef Q_OS_WIN
#if defined(Q_CC_GNU)
-# define ffs __builtin_ffs
+# define ffsll __builtin_ffsll
#else
-int ffs(int i)
+int ffsll(quint64 i)
{
-#ifndef Q_OS_WINCE
+#if defined(Q_OS_WIN64)
unsigned long result;
- return _BitScanForward(&result, i) ? result : 0;
+ return _BitScanForward64(&result, i) ? result : 0;
+#elif !defined(Q_OS_WINCE)
+ unsigned long result;
+ return _BitScanForward(&result, i) ? result :
+ _BitScanForward(&result, i >> 32) ? result + 32 : 0;
#else
return 0;
#endif
}
#endif
-#elif defined(Q_OS_ANDROID)
-# define ffs __builtin_ffs
+#elif defined(Q_OS_ANDROID) || defined(Q_OS_QNX) || defined(Q_OS_OSX) || defined(Q_OS_HAIKU)
+# define ffsll __builtin_ffsll
#endif
-QBasicAtomicInt qt_cpu_features = Q_BASIC_ATOMIC_INITIALIZER(0);
+#ifdef Q_ATOMIC_INT64_IS_SUPPORTED
+Q_CORE_EXPORT QBasicAtomicInteger<quint64> qt_cpu_features[1] = { Q_BASIC_ATOMIC_INITIALIZER(0) };
+#else
+Q_CORE_EXPORT QBasicAtomicInteger<unsigned> qt_cpu_features[2] = { Q_BASIC_ATOMIC_INITIALIZER(0), Q_BASIC_ATOMIC_INITIALIZER(0) };
+#endif
void qDetectCpuFeatures()
{
@@ -545,17 +666,17 @@ void qDetectCpuFeatures()
// contains all the features that the code required. Qt 4 ran for years
// like that, so it shouldn't be a problem.
- qt_cpu_features.store(minFeature | QSimdInitialized);
+ qt_cpu_features.store(minFeature | quint32(QSimdInitialized));
return;
# endif
#endif
- uint f = detectProcessorFeatures();
+ quint64 f = detectProcessorFeatures();
QByteArray disable = qgetenv("QT_NO_CPU_FEATURE");
if (!disable.isEmpty()) {
disable.prepend(' ');
for (int i = 0; i < features_count; ++i) {
if (disable.contains(features_string + features_indices[i]))
- f &= ~(1 << i);
+ f &= ~(Q_UINT64_C(1) << i);
}
}
@@ -565,29 +686,32 @@ void qDetectCpuFeatures()
bool runningOnValgrind = false;
#endif
if (!runningOnValgrind && (minFeature != 0 && (f & minFeature) != minFeature)) {
- uint missing = minFeature & ~f;
+ quint64 missing = minFeature & ~f;
fprintf(stderr, "Incompatible processor. This Qt build requires the following features:\n ");
for (int i = 0; i < features_count; ++i) {
- if (missing & (1 << i))
+ if (missing & (Q_UINT64_C(1) << i))
fprintf(stderr, "%s", features_string + features_indices[i]);
}
fprintf(stderr, "\n");
fflush(stderr);
- qFatal("Aborted. Incompatible processor: missing feature 0x%x -%s.", missing,
- features_string + features_indices[ffs(missing) - 1]);
+ qFatal("Aborted. Incompatible processor: missing feature 0x%llx -%s.", missing,
+ features_string + features_indices[ffsll(missing) - 1]);
}
- qt_cpu_features.store(f | QSimdInitialized);
+ qt_cpu_features[0].store(f | quint32(QSimdInitialized));
+#ifndef Q_ATOMIC_INT64_IS_SUPPORTED
+ qt_cpu_features[1].store(f >> 32);
+#endif
}
void qDumpCPUFeatures()
{
- uint features = qCpuFeatures();
+ quint64 features = qCpuFeatures() & ~quint64(QSimdInitialized);
printf("Processor features: ");
for (int i = 0; i < features_count; ++i) {
- if (features & (1 << i))
+ if (features & (Q_UINT64_C(1) << i))
printf("%s%s", features_string + features_indices[i],
- minFeature & (1 << i) ? "[required]" : "");
+ minFeature & (Q_UINT64_C(1) << i) ? "[required]" : "");
}
puts("");
}
diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h
index dd93b4fd26..12a329f36c 100644
--- a/src/corelib/tools/qsimd_p.h
+++ b/src/corelib/tools/qsimd_p.h
@@ -149,7 +149,7 @@
# define QT_FUNCTION_TARGET(x)
# endif
#else
-# define QT_COMPILER_SUPPORTS_HERE(x) defined(__ ## x ## __)
+# define QT_COMPILER_SUPPORTS_HERE(x) (__ ## x ## __)
# define QT_FUNCTION_TARGET(x)
#endif
@@ -217,6 +217,23 @@
# endif
#endif
+#define QT_FUNCTION_TARGET_STRING_AVX512F "avx512f"
+#define QT_FUNCTION_TARGET_STRING_AVX512CD "avx512cd"
+#define QT_FUNCTION_TARGET_STRING_AVX512ER "avx512er"
+#define QT_FUNCTION_TARGET_STRING_AVX512PF "avx512pf"
+#define QT_FUNCTION_TARGET_STRING_AVX512BW "avx512bw"
+#define QT_FUNCTION_TARGET_STRING_AVX512DQ "avx512dq"
+#define QT_FUNCTION_TARGET_STRING_AVX512VL "avx512vl"
+#define QT_FUNCTION_TARGET_STRING_AVX512IFMA "avx512ifma"
+#define QT_FUNCTION_TARGET_STRING_AVX512VBMI "avx512vbmi"
+
+#define QT_FUNCTION_TARGET_STRING_F16C "f16c"
+#define QT_FUNCTION_TARGET_STRING_RDRAND "rdrnd"
+#define QT_FUNCTION_TARGET_STRING_BMI "bmi"
+#define QT_FUNCTION_TARGET_STRING_BMI2 "bmi2"
+#define QT_FUNCTION_TARGET_STRING_RDSEED "rdseed"
+#define QT_FUNCTION_TARGET_STRING_SHA "sha"
+
// other x86 intrinsics
#if defined(Q_PROCESSOR_X86) && ((defined(Q_CC_GNU) && (Q_CC_GNU >= 404)) \
|| (defined(Q_CC_CLANG) && (Q_CC_CLANG >= 208)) \
@@ -233,9 +250,13 @@
// NEON intrinsics
// note: as of GCC 4.9, does not support function targets for ARM
-#if defined __ARM_NEON__
+#if defined(__ARM_NEON) || defined(__ARM_NEON__)
#include <arm_neon.h>
#define QT_FUNCTION_TARGET_STRING_ARM_NEON "neon"
+#ifndef __ARM_NEON__
+// __ARM_NEON__ is not defined on AArch64, but we need it in our NEON detection.
+#define __ARM_NEON__
+#endif
#endif
#undef QT_COMPILER_SUPPORTS_SIMD_ALWAYS
@@ -244,74 +265,170 @@ QT_BEGIN_NAMESPACE
enum CPUFeatures {
- NEON = 0x2, ARM_NEON = NEON,
- SSE2 = 0x4,
- SSE3 = 0x8,
- SSSE3 = 0x10,
- SSE4_1 = 0x20,
- SSE4_2 = 0x40,
- AVX = 0x80,
- AVX2 = 0x100,
- HLE = 0x200,
- RTM = 0x400,
- DSP = 0x800,
- DSPR2 = 0x1000,
+#if defined(Q_PROCESSOR_ARM)
+ CpuFeatureNEON = 0,
+ CpuFeatureARM_NEON = CpuFeatureNEON,
+#elif defined(Q_PROCESSOR_MIPS)
+ CpuFeatureDSP = 0,
+ CpuFeatureDSPR2 = 1,
+#elif defined(Q_PROCESSOR_X86)
+ // The order of the flags is jumbled so it matches most closely the bits in CPUID
+ // Out of order:
+ CpuFeatureSSE2 = 1, // uses the bit for PCLMULQDQ
+ // in level 1, ECX
+ CpuFeatureSSE3 = (0 + 0),
+ CpuFeatureSSSE3 = (0 + 9),
+ CpuFeatureSSE4_1 = (0 + 19),
+ CpuFeatureSSE4_2 = (0 + 20),
+ CpuFeatureMOVBE = (0 + 22),
+ CpuFeaturePOPCNT = (0 + 23),
+ CpuFeatureAES = (0 + 25),
+ CpuFeatureAVX = (0 + 28),
+ CpuFeatureF16C = (0 + 29),
+ CpuFeatureRDRAND = (0 + 30),
+ // 31 is always zero and we've used it for the QSimdInitialized
+
+ // in level 7, leaf 0, EBX
+ CpuFeatureBMI = (32 + 3),
+ CpuFeatureHLE = (32 + 4),
+ CpuFeatureAVX2 = (32 + 5),
+ CpuFeatureBMI2 = (32 + 8),
+ CpuFeatureRTM = (32 + 11),
+ CpuFeatureAVX512F = (32 + 16),
+ CpuFeatureAVX512DQ = (32 + 17),
+ CpuFeatureRDSEED = (32 + 18),
+ CpuFeatureAVX512IFMA = (32 + 21),
+ CpuFeatureAVX512PF = (32 + 26),
+ CpuFeatureAVX512ER = (32 + 27),
+ CpuFeatureAVX512CD = (32 + 28),
+ CpuFeatureSHA = (32 + 29),
+ CpuFeatureAVX512BW = (32 + 30),
+ CpuFeatureAVX512VL = (32 + 31),
+
+ // in level 7, leaf 0, ECX (out of order, for now)
+ CpuFeatureAVX512VBMI = 2, // uses the bit for DTES64
+#endif
// used only to indicate that the CPU detection was initialised
QSimdInitialized = 0x80000000
};
-static const uint qCompilerCpuFeatures = 0
+static const quint64 qCompilerCpuFeatures = 0
+#if defined __SHA__
+ | (Q_UINT64_C(1) << CpuFeatureSHA)
+#endif
+#if defined __AES__
+ | (Q_UINT64_C(1) << CpuFeatureAES)
+#endif
#if defined __RTM__
- | RTM
+ | (Q_UINT64_C(1) << CpuFeatureRTM)
+#endif
+#ifdef __RDRND__
+ | (Q_UINT64_C(1) << CpuFeatureRDRAND)
+#endif
+#ifdef __RDSEED__
+ | (Q_UINT64_C(1) << CpuFeatureRDSEED)
+#endif
+#if defined __BMI__
+ | (Q_UINT64_C(1) << CpuFeatureBMI)
+#endif
+#if defined __BMI2__
+ | (Q_UINT64_C(1) << CpuFeatureBMI2)
+#endif
+#if defined __F16C__
+ | (Q_UINT64_C(1) << CpuFeatureF16C)
+#endif
+#if defined __POPCNT__
+ | (Q_UINT64_C(1) << CpuFeaturePOPCNT)
+#endif
+#if defined __MOVBE__ // GCC and Clang don't seem to define this
+ | (Q_UINT64_C(1) << CpuFeatureMOVBE)
+#endif
+#if defined __AVX512F__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512F)
+#endif
+#if defined __AVX512CD__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512CD)
+#endif
+#if defined __AVX512ER__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512ER)
+#endif
+#if defined __AVX512PF__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512PF)
+#endif
+#if defined __AVX512BW__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512BW)
+#endif
+#if defined __AVX512DQ__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512DQ)
+#endif
+#if defined __AVX512VL__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512VL)
+#endif
+#if defined __AVX512IFMA__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512IFMA)
+#endif
+#if defined __AVX512VBMI__
+ | (Q_UINT64_C(1) << CpuFeatureAVX512VBMI)
#endif
#if defined __AVX2__
- | AVX2
+ | (Q_UINT64_C(1) << CpuFeatureAVX2)
#endif
#if defined __AVX__
- | AVX
+ | (Q_UINT64_C(1) << CpuFeatureAVX)
#endif
#if defined __SSE4_2__
- | SSE4_2
+ | (Q_UINT64_C(1) << CpuFeatureSSE4_2)
#endif
#if defined __SSE4_1__
- | SSE4_1
+ | (Q_UINT64_C(1) << CpuFeatureSSE4_1)
#endif
#if defined __SSSE3__
- | SSSE3
+ | (Q_UINT64_C(1) << CpuFeatureSSSE3)
#endif
#if defined __SSE3__
- | SSE3
+ | (Q_UINT64_C(1) << CpuFeatureSSE3)
#endif
#if defined __SSE2__
- | SSE2
+ | (Q_UINT64_C(1) << CpuFeatureSSE2)
#endif
#if defined __ARM_NEON__
- | NEON
+ | (Q_UINT64_C(1) << CpuFeatureNEON)
#endif
#if defined __mips_dsp
- | DSP
+ | (Q_UINT64_C(1) << CpuFeatureDSP)
#endif
#if defined __mips_dspr2
- | DSPR2
+ | (Q_UINT64_C(1) << CpuFeatureDSPR2)
#endif
;
-extern Q_CORE_EXPORT QBasicAtomicInt qt_cpu_features;
+#ifdef Q_ATOMIC_INT64_IS_SUPPORTED
+extern Q_CORE_EXPORT QBasicAtomicInteger<quint64> qt_cpu_features[1];
+#else
+extern Q_CORE_EXPORT QBasicAtomicInteger<unsigned> qt_cpu_features[2];
+#endif
Q_CORE_EXPORT void qDetectCpuFeatures();
-static inline uint qCpuFeatures()
+static inline quint64 qCpuFeatures()
{
- int features = qt_cpu_features.load();
+ quint64 features = qt_cpu_features[0].load();
+#ifndef Q_ATOMIC_INT64_IS_SUPPORTED
+ features |= quint64(qt_cpu_features[1].load()) << 32;
+#endif
if (Q_UNLIKELY(features == 0)) {
qDetectCpuFeatures();
- features = qt_cpu_features.load();
+ features = qt_cpu_features[0].load();
+#ifndef Q_ATOMIC_INT64_IS_SUPPORTED
+ features |= quint64(qt_cpu_features[1].load()) << 32;
+#endif
Q_ASSUME(features != 0);
}
- return uint(features);
+ return features;
}
-#define qCpuHasFeature(feature) ((qCompilerCpuFeatures & (feature)) || (qCpuFeatures() & (feature)))
+#define qCpuHasFeature(feature) ((qCompilerCpuFeatures & (Q_UINT64_C(1) << CpuFeature ## feature)) \
+ || (qCpuFeatures() & (Q_UINT64_C(1) << CpuFeature ## feature)))
#ifdef Q_PROCESSOR_X86
// Bit scan functions for x86
diff --git a/src/corelib/tools/qstack.cpp b/src/corelib/tools/qstack.cpp
index e367622c0d..224f72926b 100644
--- a/src/corelib/tools/qstack.cpp
+++ b/src/corelib/tools/qstack.cpp
@@ -71,19 +71,6 @@
*/
/*!
- \fn QStack::QStack()
-
- Constructs an empty stack.
-*/
-
-/*!
- \fn QStack::~QStack()
-
- Destroys the stack. References to the values in the stack, and all
- iterators over this stack, become invalid.
-*/
-
-/*!
\fn void QStack::swap(QStack<T> &other)
\since 4.8
diff --git a/src/corelib/tools/qstack.h b/src/corelib/tools/qstack.h
index fa05e22de1..cb72316c32 100644
--- a/src/corelib/tools/qstack.h
+++ b/src/corelib/tools/qstack.h
@@ -43,9 +43,8 @@ template<class T>
class QStack : public QVector<T>
{
public:
- inline QStack() {}
- inline ~QStack() {}
- inline void swap(QStack<T> &other) { QVector<T>::swap(other); } // prevent QVector<->QStack swaps
+ // compiler-generated special member functions are fine!
+ inline void swap(QStack<T> &other) Q_DECL_NOTHROW { QVector<T>::swap(other); } // prevent QVector<->QStack swaps
inline void push(const T &t) { QVector<T>::append(t); }
T pop();
T &top();
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index b623c62043..89d9889b2f 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -50,7 +50,6 @@
#include "qstringmatcher.h"
#include "qvarlengtharray.h"
#include "qtools_p.h"
-#include "qhash.h"
#include "qdebug.h"
#include "qendian.h"
#include "qcollator.h"
@@ -204,7 +203,7 @@ inline RetType UnrollTailLoop<0>::exec(int, RetType returnIfExited, Functor1, Fu
#endif
// conversion between Latin 1 and UTF-16
-void qt_from_latin1(ushort *dst, const char *str, size_t size)
+void qt_from_latin1(ushort *dst, const char *str, size_t size) Q_DECL_NOTHROW
{
/* SIMD:
* Unpacking with SSE has been shown to improve performance on recent CPUs
@@ -1201,6 +1200,22 @@ const QString::Null QString::null = { };
\sa QString::const_iterator
*/
+/*! \typedef QString::const_reverse_iterator
+ \since 5.6
+
+ This typedef provides an STL-style const reverse iterator for QString.
+
+ \sa QString::reverse_iterator, QString::const_iterator
+*/
+
+/*! \typedef QString::reverse_iterator
+ \since 5.6
+
+ This typedef provides an STL-style non-const reverse iterator for QString.
+
+ \sa QString::const_reverse_iterator, QString::iterator
+*/
+
/*!
\typedef QString::size_type
@@ -1304,6 +1319,52 @@ const QString::Null QString::null = { };
\sa constBegin(), end()
*/
+/*! \fn QString::reverse_iterator QString::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ character in the string, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QString::const_reverse_iterator QString::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QString::const_reverse_iterator QString::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ character in the string, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QString::reverse_iterator QString::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last character in the string, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QString::const_reverse_iterator QString::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QString::const_reverse_iterator QString::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last character in the string, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*!
\fn QString::QString()
@@ -1448,7 +1509,7 @@ QString::QString(const QChar *unicode, int size)
} else {
if (size < 0) {
size = 0;
- while (unicode[size] != 0)
+ while (!unicode[size].isNull())
++size;
}
if (!size) {
@@ -1615,20 +1676,11 @@ void QString::resize(int size)
return;
}
- if (size == 0 && !d->capacityReserved) {
- Data *x = Data::allocate(0);
- if (!d->ref.deref())
- Data::deallocate(d);
- d = x;
- } else {
- if (d->ref.isShared() || uint(size) + 1u > d->alloc
- || (!d->capacityReserved && size < d->size
- && uint(size) + 1u < uint(d->alloc >> 1)))
- reallocData(uint(size) + 1u, true);
- if (d->alloc) {
- d->size = size;
- d->data()[size] = '\0';
- }
+ if (d->ref.isShared() || uint(size) + 1u > d->alloc)
+ reallocData(uint(size) + 1u, true);
+ if (d->alloc) {
+ d->size = size;
+ d->data()[size] = '\0';
}
}
@@ -1757,6 +1809,17 @@ QString &QString::operator=(const QString &other) Q_DECL_NOTHROW
Assigns the Latin-1 string \a str to this string.
*/
+QString &QString::operator=(QLatin1String other)
+{
+ if (isDetached() && other.size() <= capacity()) { // assumes d->alloc == 0 → !isDetached() (sharedNull)
+ d->size = other.size();
+ d->data()[other.size()] = 0;
+ qt_from_latin1(d->data(), other.latin1(), other.size());
+ } else {
+ *this = fromLatin1(other.latin1(), other.size());
+ }
+ return *this;
+}
/*! \fn QString &QString::operator=(const QByteArray &ba)
@@ -1807,7 +1870,16 @@ QString &QString::operator=(const QString &other) Q_DECL_NOTHROW
*/
QString &QString::operator=(QChar ch)
{
- return operator=(QString(ch));
+ if (isDetached() && capacity() >= 1) { // assumes d->alloc == 0 → !isDetached() (sharedNull)
+ // re-use existing capacity:
+ ushort *dat = d->data();
+ dat[0] = ch.unicode();
+ dat[1] = 0;
+ d->size = 1;
+ } else {
+ operator=(QString(ch));
+ }
+ return *this;
}
/*!
@@ -1828,6 +1900,51 @@ QString &QString::operator=(QChar ch)
/*!
+ \fn QString& QString::insert(int position, const QStringRef &str)
+ \since 5.5
+ \overload insert()
+
+ Inserts the string reference \a str at the given index \a position and
+ returns a reference to this string.
+
+ If the given \a position is greater than size(), the array is
+ first extended using resize().
+*/
+
+
+/*!
+ \fn QString& QString::insert(int position, const char *str)
+ \since 5.5
+ \overload insert()
+
+ Inserts the C string \a str at the given index \a position and
+ returns a reference to this string.
+
+ If the given \a position is greater than size(), the array is
+ first extended using resize().
+
+ This function is not available when QT_NO_CAST_FROM_ASCII is
+ defined.
+*/
+
+
+/*!
+ \fn QString& QString::insert(int position, const QByteArray &str)
+ \since 5.5
+ \overload insert()
+
+ Inserts the byte array \a str at the given index \a position and
+ returns a reference to this string.
+
+ If the given \a position is greater than size(), the array is
+ first extended using resize().
+
+ This function is not available when QT_NO_CAST_FROM_ASCII is
+ defined.
+*/
+
+
+/*!
\fn QString &QString::insert(int position, QLatin1String str)
\overload insert()
@@ -2027,6 +2144,22 @@ QString &QString::append(QChar ch)
Prepends the Latin-1 string \a str to this string.
*/
+/*! \fn QString &QString::prepend(const QChar *str, int len)
+ \since 5.5
+ \overload prepend()
+
+ Prepends \a len characters from the QChar array \a str to this string and
+ returns a reference to this string.
+*/
+
+/*! \fn QString &QString::prepend(const QStringRef &str)
+ \since 5.5
+ \overload prepend()
+
+ Prepends the string reference \a str to the beginning of this string and
+ returns a reference to this string.
+*/
+
/*! \fn QString &QString::prepend(const QByteArray &ba)
\overload prepend()
@@ -2558,6 +2691,8 @@ bool operator==(const QString &s1, const QString &s2)
/*!
\overload operator==()
+ Returns \c true if this string is equal to \a other; otherwise
+ returns \c false.
*/
bool QString::operator==(QLatin1String other) const
{
@@ -2616,7 +2751,7 @@ bool operator<(const QString &s1, const QString &s2)
}
/*!
\overload operator<()
- \relates QString
+
Returns \c true if this string is lexically less than the parameter
string called \a other; otherwise returns \c false.
*/
@@ -2659,9 +2794,9 @@ bool QString::operator<(QLatin1String other) const
go through QObject::tr(), for example.
*/
-/*! \fn bool QString::operator<=(const QString &s1, const QString &s2)
+/*! \fn bool operator<=(const QString &s1, const QString &s2)
- \relates Qstring
+ \relates QString
Returns \c true if string \a s1 is lexically less than or equal to
string \a s2; otherwise returns \c false.
@@ -2707,7 +2842,7 @@ bool QString::operator<(QLatin1String other) const
go through QObject::tr(), for example.
*/
-/*! \fn bool QString::operator>(const QString &s1, const QString &s2)
+/*! \fn bool operator>(const QString &s1, const QString &s2)
\relates QString
Returns \c true if string \a s1 is lexically greater than string \a s2;
@@ -2721,7 +2856,7 @@ bool QString::operator<(QLatin1String other) const
/*!
\overload operator>()
- \relates QString
+
Returns \c true if this string is lexically greater than the parameter
string \a other; otherwise returns \c false.
*/
@@ -3184,6 +3319,7 @@ struct QStringCapture
int len;
int no;
};
+Q_DECLARE_TYPEINFO(QStringCapture, Q_PRIMITIVE_TYPE);
#endif
#ifndef QT_NO_REGEXP
@@ -3491,9 +3627,14 @@ int QString::count(const QString &str, Qt::CaseSensitivity cs) const
}
/*!
- \overload count()
+ \overload count()
+
+ Returns the number of occurrences of character \a ch in the string.
+
+ If \a cs is Qt::CaseSensitive (default), the search is
+ case sensitive; otherwise the search is case insensitive.
- Returns the number of occurrences of character \a ch in the string.
+ \sa contains(), indexOf()
*/
int QString::count(QChar ch, Qt::CaseSensitivity cs) const
@@ -3716,7 +3857,7 @@ int QString::indexOf(const QRegularExpression& re, int from) const
Example:
- \snippet qstring/main.cpp 97
+ \snippet qstring/main.cpp 99
*/
int QString::indexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const
{
@@ -3767,7 +3908,7 @@ int QString::lastIndexOf(const QRegularExpression &re, int from) const
Example:
- \snippet qstring/main.cpp 98
+ \snippet qstring/main.cpp 100
*/
int QString::lastIndexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const
{
@@ -3939,10 +4080,9 @@ int QString::count(const QRegularExpression &re) const
QString QString::section(const QString &sep, int start, int end, SectionFlags flags) const
{
- QStringList sections = split(sep, KeepEmptyParts,
- (flags & SectionCaseInsensitiveSeps) ? Qt::CaseInsensitive : Qt::CaseSensitive);
+ const QVector<QStringRef> sections = splitRef(sep, KeepEmptyParts,
+ (flags & SectionCaseInsensitiveSeps) ? Qt::CaseInsensitive : Qt::CaseSensitive);
const int sectionsSize = sections.size();
-
if (!(flags & SectionSkipEmpty)) {
if (start < 0)
start += sectionsSize;
@@ -3962,11 +4102,10 @@ QString QString::section(const QString &sep, int start, int end, SectionFlags fl
if (start >= sectionsSize || end < 0 || start > end)
return QString();
- int x = 0;
QString ret;
int first_i = start, last_i = end;
- for (int i = 0; x <= end && i < sectionsSize; ++i) {
- QString section = sections.at(i);
+ for (int x = 0, i = 0; x <= end && i < sectionsSize; ++i) {
+ const QStringRef &section = sections.at(i);
const bool empty = section.isEmpty();
if (x >= start) {
if(x == start)
@@ -3991,9 +4130,9 @@ QString QString::section(const QString &sep, int start, int end, SectionFlags fl
class qt_section_chunk {
public:
qt_section_chunk() {}
- qt_section_chunk(int l, QString s) : length(l), string(qMove(s)) {}
+ qt_section_chunk(int l, QStringRef s) : length(l), string(qMove(s)) {}
int length;
- QString string;
+ QStringRef string;
};
Q_DECLARE_TYPEINFO(qt_section_chunk, Q_MOVABLE_TYPE);
@@ -4086,12 +4225,12 @@ QString QString::section(const QRegExp &reg, int start, int end, SectionFlags fl
QVector<qt_section_chunk> sections;
int n = length(), m = 0, last_m = 0, last_len = 0;
while ((m = sep.indexIn(*this, m)) != -1) {
- sections.append(qt_section_chunk(last_len, QString(uc + last_m, m - last_m)));
+ sections.append(qt_section_chunk(last_len, QStringRef(this, last_m, m - last_m)));
last_m = m;
last_len = sep.matchedLength();
m += qMax(sep.matchedLength(), 1);
}
- sections.append(qt_section_chunk(last_len, QString(uc + last_m, n - last_m)));
+ sections.append(qt_section_chunk(last_len, QStringRef(this, last_m, n - last_m)));
return extractSections(sections, start, end, flags);
}
@@ -4134,11 +4273,11 @@ QString QString::section(const QRegularExpression &re, int start, int end, Secti
while (iterator.hasNext()) {
QRegularExpressionMatch match = iterator.next();
m = match.capturedStart();
- sections.append(qt_section_chunk(last_len, QString(uc + last_m, m - last_m)));
+ sections.append(qt_section_chunk(last_len, QStringRef(this, last_m, m - last_m)));
last_m = m;
last_len = match.capturedLength();
}
- sections.append(qt_section_chunk(last_len, QString(uc + last_m, n - last_m)));
+ sections.append(qt_section_chunk(last_len, QStringRef(this, last_m, n - last_m)));
return extractSections(sections, start, end, flags);
}
@@ -4149,8 +4288,8 @@ QString QString::section(const QRegularExpression &re, int start, int end, Secti
Returns a substring that contains the \a n leftmost characters
of the string.
- The entire string is returned if \a n is greater than size() or
- less than zero.
+ The entire string is returned if \a n is greater than or equal
+ to size(), or less than zero.
\snippet qstring/main.cpp 31
@@ -4167,8 +4306,8 @@ QString QString::left(int n) const
Returns a substring that contains the \a n rightmost characters
of the string.
- The entire string is returned if \a n is greater than size() or
- less than zero.
+ The entire string is returned if \a n is greater than or equal
+ to size(), or less than zero.
\snippet qstring/main.cpp 48
@@ -4822,7 +4961,7 @@ modifiable reference.
If \a position is negative, it is equivalent to passing zero.
- \sa chop(), resize(), left()
+ \sa chop(), resize(), left(), QStringRef::truncate()
*/
void QString::truncate(int pos)
@@ -4835,7 +4974,8 @@ void QString::truncate(int pos)
/*!
Removes \a n characters from the end of the string.
- If \a n is greater than size(), the result is an empty string.
+ If \a n is greater than or equal to size(), the result is an
+ empty string.
Example:
\snippet qstring/main.cpp 15
@@ -5537,34 +5677,36 @@ QString QString::rightJustified(int width, QChar fill, bool truncate) const
*/
namespace QUnicodeTables {
-struct LowercaseTraits
-{
- static signed short caseDiff(const Properties *prop)
- { return prop->lowerCaseDiff; }
- static bool caseSpecial(const Properties *prop)
- { return prop->lowerCaseSpecial; }
-};
-
-struct UppercaseTraits
-{
- static signed short caseDiff(const Properties *prop)
- { return prop->upperCaseDiff; }
- static bool caseSpecial(const Properties *prop)
- { return prop->upperCaseSpecial; }
-};
+/*
+ \internal
+ Converts the \a str string starting from the position pointed to by the \a
+ it iterator, using the Unicode case traits \c Traits, and returns the
+ result. The input string must not be empty (the convertCase function below
+ guarantees that).
+
+ The string type \c{T} is also a template and is either \c{const QString} or
+ \c{QString}. This function can do both copy-conversion and in-place
+ conversion depending on the state of the \a str parameter:
+ \list
+ \li \c{T} is \c{const QString}: copy-convert
+ \li \c{T} is \c{QString} and its refcount != 1: copy-convert
+ \li \c{T} is \c{QString} and its refcount == 1: in-place convert
+ \endlist
-struct CasefoldTraits
-{
- static signed short caseDiff(const Properties *prop)
- { return prop->caseFoldDiff; }
- static bool caseSpecial(const Properties *prop)
- { return prop->caseFoldSpecial; }
-};
+ In copy-convert mode, the local variable \c{s} is detached from the input
+ \a str. In the in-place convert mode, \a str is in moved-from state (which
+ this function requires to be a valid, empty string) and \c{s} contains the
+ only copy of the string, without reallocation (thus, \a it is still valid).
+ There's one pathological case left: when the in-place conversion needs to
+ reallocate memory to grow the buffer. In that case, we need to adjust the \a
+ it pointer.
+ */
template <typename Traits, typename T>
Q_NEVER_INLINE
static QString detachAndConvertCase(T &str, QStringIterator it)
{
+ Q_ASSERT(!str.isEmpty());
QString s = qMove(str); // will copy if T is const QString
QChar *pp = s.begin() + it.index(); // will detach if necessary
uint uc = it.nextUnchecked();
@@ -5573,12 +5715,19 @@ static QString detachAndConvertCase(T &str, QStringIterator it)
signed short caseDiff = Traits::caseDiff(prop);
if (Q_UNLIKELY(Traits::caseSpecial(prop))) {
- // slow path
+ // slow path: the string is growing
const ushort *specialCase = specialCaseMap + caseDiff;
ushort length = *specialCase++;
- int pos = pp - s.constBegin();
- s.replace(pos, 1, reinterpret_cast<const QChar *>(specialCase), length);
- pp = const_cast<QChar *>(s.constBegin()) + pos + length;
+ int inpos = it.index() - 1;
+ int outpos = pp - s.constBegin();
+
+ s.replace(outpos, 1, reinterpret_cast<const QChar *>(specialCase), length);
+ pp = const_cast<QChar *>(s.constBegin()) + outpos + length;
+
+ // do we need to adjust the input iterator too?
+ // if it is pointing to s's data, str is empty
+ if (str.isEmpty())
+ it = QStringIterator(s.constBegin(), inpos + length, s.constEnd());
} else if (QChar::requiresSurrogates(uc)) {
*pp++ = QChar::highSurrogate(uc + caseDiff);
*pp++ = QChar::lowSurrogate(uc + caseDiff);
@@ -7622,86 +7771,155 @@ static int getEscape(const QChar *uc, int *pos, int len, int maxNumber = 999)
return -1;
}
+/*
+ Algorithm for multiArg:
+
+ 1. Parse the string as a sequence of verbatim text and placeholders (%L?\d{,3}).
+ The L is parsed and accepted for compatibility with non-multi-arg, but since
+ multiArg only accepts strings as replacements, the localization request can
+ be safely ignored.
+ 2. The result of step (1) is a list of (string-ref,int)-tuples. The string-ref
+ either points at text to be copied verbatim (in which case the int is -1),
+ or, initially, at the textual representation of the placeholder. In that case,
+ the int contains the numerical number as parsed from the placeholder.
+ 3. Next, collect all the non-negative ints found, sort them in ascending order and
+ remove duplicates.
+ 3a. If the result has more entires than multiArg() was given replacement strings,
+ we have found placeholders we can't satisfy with replacement strings. That is
+ fine (there could be another .arg() call coming after this one), so just
+ truncate the result to the number of actual multiArg() replacement strings.
+ 3b. If the result has less entries than multiArg() was given replacement strings,
+ the string is missing placeholders. This is an error that the user should be
+ warned about.
+ 4. The result of step (3) is a mapping from the index of any replacement string to
+ placeholder number. This is the wrong way around, but since placeholder
+ numbers could get as large as 999, while we typically don't have more than 9
+ replacement strings, we trade 4K of sparsely-used memory for doing a reverse lookup
+ each time we need to map a placeholder number to a replacement string index
+ (that's a linear search; but still *much* faster than using an associative container).
+ 5. Next, for each of the tuples found in step (1), do the following:
+ 5a. If the int is negative, do nothing.
+ 5b. Otherwise, if the int is found in the result of step (3) at index I, replace
+ the string-ref with a string-ref for the (complete) I'th replacement string.
+ 5c. Otherwise, do nothing.
+ 6. Concatenate all string refs into a single result string.
+*/
+
namespace {
-class ArgMapper {
- QVarLengthArray<int, 16> argPosToNumberMap; // maps from argument position to number
-public:
- void found(int n) { argPosToNumberMap.push_back(n); }
+struct Part
+{
+ Part() : stringRef(), number(0) {}
+ Part(const QString &s, int pos, int len, int num = -1) Q_DECL_NOTHROW
+ : stringRef(&s, pos, len), number(num) {}
- struct AssignmentResult {
- int numArgs;
- int lastNumber;
- };
+ QStringRef stringRef;
+ int number;
+};
+} // unnamed namespace
- AssignmentResult assignArgumentNumberToEachOfTheNs(int numArgs)
- {
- std::sort(argPosToNumberMap.begin(), argPosToNumberMap.end());
- argPosToNumberMap.erase(std::unique(argPosToNumberMap.begin(), argPosToNumberMap.end()),
- argPosToNumberMap.end());
+template <>
+class QTypeInfo<Part> : public QTypeInfoMerger<Part, QStringRef, int> {}; // Q_DECLARE_METATYPE
- if (argPosToNumberMap.size() > numArgs)
- argPosToNumberMap.resize(numArgs);
- int lastNumber = argPosToNumberMap.empty() ? -1 : argPosToNumberMap.back();
- int arg = argPosToNumberMap.size();
+namespace {
- const AssignmentResult result = {arg, lastNumber};
- return result;
- }
+enum { ExpectedParts = 32 };
- int numberToArgsIndex(int number) const
- {
- if (number != -1) {
- const int * const it = std::find(argPosToNumberMap.begin(), argPosToNumberMap.end(), number);
- return it == argPosToNumberMap.end() ? -1 : it - argPosToNumberMap.begin();
- } else {
- return -1;
- }
- }
-};
-} // unnamed namespace
+typedef QVarLengthArray<Part, ExpectedParts> ParseResult;
+typedef QVarLengthArray<int, ExpectedParts/2> ArgIndexToPlaceholderMap;
-QString QString::multiArg(int numArgs, const QString **args) const
+static ParseResult parseMultiArgFormatString(const QString &s)
{
- QString result;
- ArgMapper mapper;
- const QChar *uc = (const QChar *) d->data();
- const int len = d->size;
+ ParseResult result;
+
+ const QChar *uc = s.constData();
+ const int len = s.size();
const int end = len - 1;
int i = 0;
+ int last = 0;
- // populate the arg-mapper with the %n's that actually occur in the string
while (i < end) {
if (uc[i] == QLatin1Char('%')) {
+ int percent = i;
int number = getEscape(uc, &i, len);
if (number != -1) {
- mapper.found(number);
+ if (last != percent)
+ result.push_back(Part(s, last, percent - last)); // literal text (incl. failed placeholders)
+ result.push_back(Part(s, percent, i - percent, number)); // parsed placeholder
+ last = i;
continue;
}
}
++i;
}
- const ArgMapper::AssignmentResult r = mapper.assignArgumentNumberToEachOfTheNs(numArgs);
+ if (last < len)
+ result.push_back(Part(s, last, len - last)); // trailing literal text
+
+ return result;
+}
+
+static ArgIndexToPlaceholderMap makeArgIndexToPlaceholderMap(const ParseResult &parts)
+{
+ ArgIndexToPlaceholderMap result;
- // sanity
- if (numArgs > r.numArgs) {
- qWarning("QString::arg: %d argument(s) missing in %s", numArgs - r.numArgs, toLocal8Bit().data());
- numArgs = r.numArgs;
+ for (ParseResult::const_iterator it = parts.begin(), end = parts.end(); it != end; ++it) {
+ if (it->number >= 0)
+ result.push_back(it->number);
}
- i = 0;
- while (i < len) {
- if (uc[i] == QLatin1Char('%') && i != end) {
- int number = getEscape(uc, &i, len, r.lastNumber);
- int arg = mapper.numberToArgsIndex(number);
- if (number != -1 && arg != -1) {
- result += *args[arg];
- continue;
- }
+ std::sort(result.begin(), result.end());
+ result.erase(std::unique(result.begin(), result.end()),
+ result.end());
+
+ return result;
+}
+
+static int resolveStringRefsAndReturnTotalSize(ParseResult &parts, const ArgIndexToPlaceholderMap &argIndexToPlaceholderMap, const QString *args[])
+{
+ int totalSize = 0;
+ for (ParseResult::iterator pit = parts.begin(), end = parts.end(); pit != end; ++pit) {
+ if (pit->number != -1) {
+ const ArgIndexToPlaceholderMap::const_iterator ait
+ = std::find(argIndexToPlaceholderMap.begin(), argIndexToPlaceholderMap.end(), pit->number);
+ if (ait != argIndexToPlaceholderMap.end())
+ pit->stringRef = QStringRef(args[ait - argIndexToPlaceholderMap.begin()]);
+ }
+ totalSize += pit->stringRef.size();
+ }
+ return totalSize;
+}
+
+} // unnamed namespace
+
+QString QString::multiArg(int numArgs, const QString **args) const
+{
+ // Step 1-2 above
+ ParseResult parts = parseMultiArgFormatString(*this);
+
+ // 3-4
+ ArgIndexToPlaceholderMap argIndexToPlaceholderMap = makeArgIndexToPlaceholderMap(parts);
+
+ if (argIndexToPlaceholderMap.size() > numArgs) // 3a
+ argIndexToPlaceholderMap.resize(numArgs);
+ else if (argIndexToPlaceholderMap.size() < numArgs) // 3b
+ qWarning("QString::arg: %d argument(s) missing in %s",
+ numArgs - argIndexToPlaceholderMap.size(), toLocal8Bit().data());
+
+ // 5
+ const int totalSize = resolveStringRefsAndReturnTotalSize(parts, argIndexToPlaceholderMap, args);
+
+ // 6:
+ QString result(totalSize, Qt::Uninitialized);
+ QChar *out = result.data();
+
+ for (ParseResult::const_iterator it = parts.begin(), end = parts.end(); it != end; ++it) {
+ if (const int sz = it->stringRef.size()) {
+ memcpy(out, it->stringRef.constData(), sz * sizeof(QChar));
+ out += sz;
}
- result += uc[i++];
}
+
return result;
}
@@ -8024,14 +8242,25 @@ QString &QString::setRawData(const QChar *unicode, int size)
\snippet code/src_corelib_tools_qstring.cpp 6
+ \note If the function you're calling with a QLatin1String
+ argument isn't actually overloaded to take QLatin1String, the
+ implicit conversion to QString will trigger a memory allocation,
+ which is usually what you want to avoid by using QLatin1String
+ in the first place. In those cases, using QStringLiteral may be
+ the better option.
+
\sa QString, QLatin1Char, {QStringLiteral()}{QStringLiteral}
*/
+/*! \fn QLatin1String::QLatin1String()
+ \since 5.6
+
+ Constructs a QLatin1String object that stores a nullptr.
+*/
+
/*! \fn QLatin1String::QLatin1String(const char *str)
- Constructs a QLatin1String object that stores \a str. Note that if
- \a str is 0, an empty string is created; this case is handled by
- QString.
+ Constructs a QLatin1String object that stores \a str.
The string data is \e not copied. The caller must be able to
guarantee that \a str will not be deleted or modified as long as
@@ -8043,8 +8272,6 @@ QString &QString::setRawData(const QChar *unicode, int size)
/*! \fn QLatin1String::QLatin1String(const char *str, int size)
Constructs a QLatin1String object that stores \a str with \a size.
- Note that if \a str is 0, an empty string is created; this case
- is handled by QString.
The string data is \e not copied. The caller must be able to
guarantee that \a str will not be deleted or modified as long as
@@ -9125,8 +9352,8 @@ QString &QString::append(const QStringRef &str)
Returns a substring reference to the \a n leftmost characters
of the string.
- If \a n is greater than size() or less than zero, a reference to the entire
- string is returned.
+ If \a n is greater than or equal to size(), or less than zero,
+ a reference to the entire string is returned.
\sa right(), mid(), startsWith()
*/
@@ -9143,8 +9370,8 @@ QStringRef QStringRef::left(int n) const
Returns a substring reference to the \a n leftmost characters
of the string.
- If \a n is greater than size() or less than zero, a reference to the entire
- string is returned.
+ If \a n is greater than or equal to size(), or less than zero,
+ a reference to the entire string is returned.
\snippet qstring/main.cpp leftRef
@@ -9164,8 +9391,8 @@ QStringRef QString::leftRef(int n) const
Returns a substring reference to the \a n rightmost characters
of the string.
- If \a n is greater than size() or less than zero, a reference to the entire
- string is returned.
+ If \a n is greater than or equal to size(), or less than zero,
+ a reference to the entire string is returned.
\sa left(), mid(), endsWith()
*/
@@ -9182,8 +9409,8 @@ QStringRef QStringRef::right(int n) const
Returns a substring reference to the \a n rightmost characters
of the string.
- If \a n is greater than size() or less than zero, a reference to the entire
- string is returned.
+ If \a n is greater than or equal to size(), or less than zero,
+ a reference to the entire string is returned.
\snippet qstring/main.cpp rightRef
@@ -9268,6 +9495,20 @@ QStringRef QString::midRef(int position, int n) const
}
/*!
+ \fn void QStringRef::truncate(int position)
+ \since 5.6
+
+ Truncates the string at the given \a position index.
+
+ If the specified \a position index is beyond the end of the
+ string, nothing happens.
+
+ If \a position is negative, it is equivalent to passing zero.
+
+ \sa QString::truncate()
+*/
+
+/*!
\since 4.8
Returns the index position of the first occurrence of the string \a
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index d44a5baf2a..1fbcff35d1 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -44,6 +44,7 @@
#include <QtCore/qnamespace.h>
#include <string>
+#include <iterator>
#if defined(Q_OS_ANDROID)
// std::wstring is disabled on android's glibc, as bionic lacks certain features
@@ -82,20 +83,21 @@ template <typename T> class QVector;
class QLatin1String
{
public:
- Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s) : m_size(s ? int(strlen(s)) : 0), m_data(s) {}
- Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s, int sz) : m_size(sz), m_data(s) {}
- inline explicit QLatin1String(const QByteArray &s) : m_size(int(qstrnlen(s.constData(), s.size()))), m_data(s.constData()) {}
-
- inline const char *latin1() const { return m_data; }
- inline int size() const { return m_size; }
- inline const char *data() const { return m_data; }
-
- inline bool operator==(const QString &s) const;
- inline bool operator!=(const QString &s) const;
- inline bool operator>(const QString &s) const;
- inline bool operator<(const QString &s) const;
- inline bool operator>=(const QString &s) const;
- inline bool operator<=(const QString &s) const;
+ Q_DECL_CONSTEXPR inline QLatin1String() Q_DECL_NOTHROW : m_size(0), m_data(Q_NULLPTR) {}
+ Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s) Q_DECL_NOTHROW : m_size(s ? int(strlen(s)) : 0), m_data(s) {}
+ Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s, int sz) Q_DECL_NOTHROW : m_size(sz), m_data(s) {}
+ inline explicit QLatin1String(const QByteArray &s) Q_DECL_NOTHROW : m_size(int(qstrnlen(s.constData(), s.size()))), m_data(s.constData()) {}
+
+ Q_DECL_CONSTEXPR const char *latin1() const Q_DECL_NOTHROW { return m_data; }
+ Q_DECL_CONSTEXPR int size() const Q_DECL_NOTHROW { return m_size; }
+ Q_DECL_CONSTEXPR const char *data() const Q_DECL_NOTHROW { return m_data; }
+
+ inline bool operator==(const QString &s) const Q_DECL_NOTHROW;
+ inline bool operator!=(const QString &s) const Q_DECL_NOTHROW;
+ inline bool operator>(const QString &s) const Q_DECL_NOTHROW;
+ inline bool operator<(const QString &s) const Q_DECL_NOTHROW;
+ inline bool operator>=(const QString &s) const Q_DECL_NOTHROW;
+ inline bool operator<=(const QString &s) const Q_DECL_NOTHROW;
#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline QT_ASCII_CAST_WARN bool operator==(const char *s) const;
@@ -219,7 +221,7 @@ public:
inline ~QString();
QString &operator=(QChar c);
QString &operator=(const QString &) Q_DECL_NOTHROW;
- inline QString &operator=(QLatin1String latin1);
+ QString &operator=(QLatin1String latin1);
#ifdef Q_COMPILER_RVALUE_REFS
inline QString(QString && other) Q_DECL_NOTHROW : d(other.d) { other.d = Data::sharedNull(); }
inline QString &operator=(QString &&other) Q_DECL_NOTHROW
@@ -420,6 +422,7 @@ public:
QString &insert(int i, QChar c);
QString &insert(int i, const QChar *uc, int len);
inline QString &insert(int i, const QString &s) { return insert(i, s.constData(), s.length()); }
+ inline QString &insert(int i, const QStringRef &s);
QString &insert(int i, QLatin1String s);
QString &append(QChar c);
QString &append(const QChar *uc, int len);
@@ -427,7 +430,9 @@ public:
QString &append(const QStringRef &s);
QString &append(QLatin1String s);
inline QString &prepend(QChar c) { return insert(0, c); }
+ inline QString &prepend(const QChar *uc, int len) { return insert(0, uc, len); }
inline QString &prepend(const QString &s) { return insert(0, s); }
+ inline QString &prepend(const QStringRef &s) { return insert(0, s); }
inline QString &prepend(QLatin1String s) { return insert(0, s); }
inline QString &operator+=(QChar c) {
@@ -534,11 +539,11 @@ public:
return fromLocal8Bit_helper(str, (str && size == -1) ? int(strlen(str)) : size);
}
static inline QString fromLatin1(const QByteArray &str)
- { return fromLatin1(str.data(), qstrnlen(str.constData(), str.size())); }
+ { return str.isNull() ? QString() : fromLatin1(str.data(), qstrnlen(str.constData(), str.size())); }
static inline QString fromUtf8(const QByteArray &str)
- { return fromUtf8(str.data(), qstrnlen(str.constData(), str.size())); }
+ { return str.isNull() ? QString() : fromUtf8(str.data(), qstrnlen(str.constData(), str.size())); }
static inline QString fromLocal8Bit(const QByteArray &str)
- { return fromLocal8Bit(str.data(), qstrnlen(str.constData(), str.size())); }
+ { return str.isNull() ? QString() : fromLocal8Bit(str.data(), qstrnlen(str.constData(), str.size())); }
static QString fromUtf16(const ushort *, int size = -1);
static QString fromUcs4(const uint *, int size = -1);
static QString fromRawData(const QChar *, int size);
@@ -591,16 +596,16 @@ public:
static int localeAwareCompare(const QString& s1, const QStringRef& s2);
// ### Qt6: make inline except for the long long versions
- short toShort(bool *ok=0, int base=10) const;
- ushort toUShort(bool *ok=0, int base=10) const;
- int toInt(bool *ok=0, int base=10) const;
- uint toUInt(bool *ok=0, int base=10) const;
- long toLong(bool *ok=0, int base=10) const;
- ulong toULong(bool *ok=0, int base=10) const;
- qlonglong toLongLong(bool *ok=0, int base=10) const;
- qulonglong toULongLong(bool *ok=0, int base=10) const;
- float toFloat(bool *ok=0) const;
- double toDouble(bool *ok=0) const;
+ short toShort(bool *ok=Q_NULLPTR, int base=10) const;
+ ushort toUShort(bool *ok=Q_NULLPTR, int base=10) const;
+ int toInt(bool *ok=Q_NULLPTR, int base=10) const;
+ uint toUInt(bool *ok=Q_NULLPTR, int base=10) const;
+ long toLong(bool *ok=Q_NULLPTR, int base=10) const;
+ ulong toULong(bool *ok=Q_NULLPTR, int base=10) const;
+ qlonglong toLongLong(bool *ok=Q_NULLPTR, int base=10) const;
+ qulonglong toULongLong(bool *ok=Q_NULLPTR, int base=10) const;
+ float toFloat(bool *ok=Q_NULLPTR) const;
+ double toDouble(bool *ok=Q_NULLPTR) const;
QString &setNum(short, int base=10);
QString &setNum(ushort, int base=10);
@@ -668,6 +673,10 @@ public:
{ return append(QString::fromUtf8(s)); }
inline QT_ASCII_CAST_WARN QString &append(const QByteArray &s)
{ return append(QString::fromUtf8(s)); }
+ inline QT_ASCII_CAST_WARN QString &insert(int i, const char *s)
+ { return insert(i, QString::fromUtf8(s)); }
+ inline QT_ASCII_CAST_WARN QString &insert(int i, const QByteArray &s)
+ { return insert(i, QString::fromUtf8(s)); }
inline QT_ASCII_CAST_WARN QString &operator+=(const char *s)
{ return append(QString::fromUtf8(s)); }
inline QT_ASCII_CAST_WARN QString &operator+=(const QByteArray &s)
@@ -708,14 +717,22 @@ public:
typedef const QChar *const_iterator;
typedef iterator Iterator;
typedef const_iterator ConstIterator;
- iterator begin();
- const_iterator begin() const;
- const_iterator cbegin() const;
- const_iterator constBegin() const;
- iterator end();
- const_iterator end() const;
- const_iterator cend() const;
- const_iterator constEnd() const;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ inline iterator begin();
+ inline const_iterator begin() const;
+ inline const_iterator cbegin() const;
+ inline const_iterator constBegin() const;
+ inline iterator end();
+ inline const_iterator end() const;
+ inline const_iterator cend() const;
+ inline const_iterator constEnd() const;
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(begin()); }
// STL compatibility
typedef int size_type;
@@ -867,11 +884,6 @@ inline void QString::detach()
{ if (d->ref.isShared() || (d->offset != sizeof(QStringData))) reallocData(uint(d->size) + 1u); }
inline bool QString::isDetached() const
{ return !d->ref.isShared(); }
-inline QString &QString::operator=(QLatin1String s)
-{
- *this = fromLatin1(s.latin1(), s.size());
- return *this;
-}
inline void QString::clear()
{ if (!isNull()) *this = QString(); }
inline QString::QString(const QString &other) Q_DECL_NOTHROW : d(other.d)
@@ -1114,34 +1126,34 @@ inline bool operator!=(QString::Null, QString::Null) { return false; }
inline bool operator!=(QString::Null, const QString &s) { return !s.isNull(); }
inline bool operator!=(const QString &s, QString::Null) { return !s.isNull(); }
-inline bool operator==(QLatin1String s1, QLatin1String s2)
+inline bool operator==(QLatin1String s1, QLatin1String s2) Q_DECL_NOTHROW
{ return (s1.size() == s2.size() && !memcmp(s1.latin1(), s2.latin1(), s1.size())); }
-inline bool operator!=(QLatin1String s1, QLatin1String s2)
+inline bool operator!=(QLatin1String s1, QLatin1String s2) Q_DECL_NOTHROW
{ return (s1.size() != s2.size() || memcmp(s1.latin1(), s2.latin1(), s1.size())); }
-inline bool operator<(QLatin1String s1, QLatin1String s2)
+inline bool operator<(QLatin1String s1, QLatin1String s2) Q_DECL_NOTHROW
{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
return (r < 0) || (r == 0 && s1.size() < s2.size()); }
-inline bool operator<=(QLatin1String s1, QLatin1String s2)
+inline bool operator<=(QLatin1String s1, QLatin1String s2) Q_DECL_NOTHROW
{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
return (r < 0) || (r == 0 && s1.size() <= s2.size()); }
-inline bool operator>(QLatin1String s1, QLatin1String s2)
+inline bool operator>(QLatin1String s1, QLatin1String s2) Q_DECL_NOTHROW
{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
return (r > 0) || (r == 0 && s1.size() > s2.size()); }
-inline bool operator>=(QLatin1String s1, QLatin1String s2)
+inline bool operator>=(QLatin1String s1, QLatin1String s2) Q_DECL_NOTHROW
{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
return (r > 0) || (r == 0 && s1.size() >= s2.size()); }
-inline bool QLatin1String::operator==(const QString &s) const
+inline bool QLatin1String::operator==(const QString &s) const Q_DECL_NOTHROW
{ return s == *this; }
-inline bool QLatin1String::operator!=(const QString &s) const
+inline bool QLatin1String::operator!=(const QString &s) const Q_DECL_NOTHROW
{ return s != *this; }
-inline bool QLatin1String::operator>(const QString &s) const
+inline bool QLatin1String::operator>(const QString &s) const Q_DECL_NOTHROW
{ return s < *this; }
-inline bool QLatin1String::operator<(const QString &s) const
+inline bool QLatin1String::operator<(const QString &s) const Q_DECL_NOTHROW
{ return s > *this; }
-inline bool QLatin1String::operator>=(const QString &s) const
+inline bool QLatin1String::operator>=(const QString &s) const Q_DECL_NOTHROW
{ return s <= *this; }
-inline bool QLatin1String::operator<=(const QString &s) const
+inline bool QLatin1String::operator<=(const QString &s) const Q_DECL_NOTHROW
{ return s >= *this; }
#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
@@ -1215,26 +1227,26 @@ inline QT_ASCII_CAST_WARN bool QString::operator==(const QByteArray &s) const
inline QT_ASCII_CAST_WARN bool QString::operator!=(const QByteArray &s) const
{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) != 0; }
inline QT_ASCII_CAST_WARN bool QString::operator<(const QByteArray &s) const
-{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) < 0; }
+{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) < 0; }
inline QT_ASCII_CAST_WARN bool QString::operator>(const QByteArray &s) const
-{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) > 0; }
+{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) > 0; }
inline QT_ASCII_CAST_WARN bool QString::operator<=(const QByteArray &s) const
-{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) <= 0; }
+{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) <= 0; }
inline QT_ASCII_CAST_WARN bool QString::operator>=(const QByteArray &s) const
-{ return QString::compare_helper(constData(), size(), s.constData(), qstrnlen(s.constData(), s.size())) >= 0; }
+{ return QString::compare_helper(constData(), size(), s.constData(), s.size()) >= 0; }
inline bool QByteArray::operator==(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) == 0; }
inline bool QByteArray::operator!=(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) != 0; }
inline bool QByteArray::operator<(const QString &s) const
-{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) > 0; }
+{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) > 0; }
inline bool QByteArray::operator>(const QString &s) const
-{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) < 0; }
+{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) < 0; }
inline bool QByteArray::operator<=(const QString &s) const
-{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) >= 0; }
+{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) >= 0; }
inline bool QByteArray::operator>=(const QString &s) const
-{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) <= 0; }
+{ return QString::compare_helper(s.constData(), s.size(), constData(), size()) <= 0; }
#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
#ifndef QT_NO_CAST_TO_ASCII
@@ -1343,28 +1355,32 @@ public:
typedef QString::const_reference const_reference;
// ### Qt 6: make this constructor constexpr, after the destructor is made trivial
- inline QStringRef():m_string(0), m_position(0), m_size(0){}
+ inline QStringRef() : m_string(Q_NULLPTR), m_position(0), m_size(0) {}
inline QStringRef(const QString *string, int position, int size);
inline QStringRef(const QString *string);
- // ### Qt 6: remove this copy constructor, the implicit one is fine
- inline QStringRef(const QStringRef &other)
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ // ### Qt 6: remove all of these, the implicit ones are fine
+ QStringRef(const QStringRef &other) Q_DECL_NOTHROW
:m_string(other.m_string), m_position(other.m_position), m_size(other.m_size)
{}
-
- // ### Qt 6: remove this destructor, the implicit one is fine
+#ifdef Q_COMPILER_RVALUE_REFS
+ QStringRef(QStringRef &&other) Q_DECL_NOTHROW : m_string(other.m_string), m_position(other.m_position), m_size(other.m_size) {}
+ QStringRef &operator=(QStringRef &&other) Q_DECL_NOTHROW { return *this = other; }
+#endif
+ QStringRef &operator=(const QStringRef &other) Q_DECL_NOTHROW {
+ m_string = other.m_string; m_position = other.m_position;
+ m_size = other.m_size; return *this;
+ }
inline ~QStringRef(){}
+#endif // Qt < 6.0.0
+
inline const QString *string() const { return m_string; }
inline int position() const { return m_position; }
inline int size() const { return m_size; }
inline int count() const { return m_size; }
inline int length() const { return m_size; }
- inline QStringRef &operator=(const QStringRef &other) {
- m_string = other.m_string; m_position = other.m_position;
- m_size = other.m_size; return *this;
- }
-
int indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
int indexOf(QLatin1String str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
@@ -1392,6 +1408,8 @@ public:
QStringRef right(int n) const Q_REQUIRED_RESULT;
QStringRef mid(int pos, int n = -1) const Q_REQUIRED_RESULT;
+ void truncate(int pos) Q_DECL_NOTHROW { m_size = qBound(0, pos, m_size); }
+
bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
bool startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
@@ -1425,10 +1443,10 @@ public:
QByteArray toLocal8Bit() const Q_REQUIRED_RESULT;
QVector<uint> toUcs4() const Q_REQUIRED_RESULT;
- inline void clear() { m_string = 0; m_position = m_size = 0; }
+ inline void clear() { m_string = Q_NULLPTR; m_position = m_size = 0; }
QString toString() const;
inline bool isEmpty() const { return m_size == 0; }
- inline bool isNull() const { return m_string == 0 || m_string->isNull(); }
+ inline bool isNull() const { return m_string == Q_NULLPTR || m_string->isNull(); }
QStringRef appendTo(QString *string) const;
@@ -1461,16 +1479,16 @@ public:
static int localeAwareCompare(const QStringRef &s1, const QStringRef &s2);
QStringRef trimmed() const Q_REQUIRED_RESULT;
- short toShort(bool *ok = 0, int base = 10) const;
- ushort toUShort(bool *ok = 0, int base = 10) const;
- int toInt(bool *ok = 0, int base = 10) const;
- uint toUInt(bool *ok = 0, int base = 10) const;
- long toLong(bool *ok = 0, int base = 10) const;
- ulong toULong(bool *ok = 0, int base = 10) const;
- qlonglong toLongLong(bool *ok = 0, int base = 10) const;
- qulonglong toULongLong(bool *ok = 0, int base = 10) const;
- float toFloat(bool *ok = 0) const;
- double toDouble(bool *ok = 0) const;
+ short toShort(bool *ok = Q_NULLPTR, int base = 10) const;
+ ushort toUShort(bool *ok = Q_NULLPTR, int base = 10) const;
+ int toInt(bool *ok = Q_NULLPTR, int base = 10) const;
+ uint toUInt(bool *ok = Q_NULLPTR, int base = 10) const;
+ long toLong(bool *ok = Q_NULLPTR, int base = 10) const;
+ ulong toULong(bool *ok = Q_NULLPTR, int base = 10) const;
+ qlonglong toLongLong(bool *ok = Q_NULLPTR, int base = 10) const;
+ qulonglong toULongLong(bool *ok = Q_NULLPTR, int base = 10) const;
+ float toFloat(bool *ok = Q_NULLPTR) const;
+ double toDouble(bool *ok = Q_NULLPTR) const;
};
Q_DECLARE_TYPEINFO(QStringRef, Q_PRIMITIVE_TYPE);
@@ -1576,6 +1594,9 @@ inline bool QStringRef::contains(QChar c, Qt::CaseSensitivity cs) const
inline bool QStringRef::contains(const QStringRef &s, Qt::CaseSensitivity cs) const
{ return indexOf(s, 0, cs) != -1; }
+inline QString &QString::insert(int i, const QStringRef &s)
+{ return insert(i, s.constData(), s.length()); }
+
namespace Qt {
#if QT_DEPRECATED_SINCE(5, 0)
QT_DEPRECATED inline QString escape(const QString &plain) {
diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h
index 1dbc005bca..3d41aeee18 100644
--- a/src/corelib/tools/qstringbuilder.h
+++ b/src/corelib/tools/qstringbuilder.h
@@ -421,7 +421,7 @@ QString &operator+=(QString &a, const QStringBuilder<A, B> &b)
a.reserve(len);
QChar *it = a.data() + a.size();
QConcatenable< QStringBuilder<A, B> >::appendTo(b, it);
- a.resize(it - a.constData()); //may be smaller than len if there was conversion from utf8
+ a.resize(int(it - a.constData())); //may be smaller than len if there was conversion from utf8
return a;
}
diff --git a/src/corelib/tools/qstringiterator_p.h b/src/corelib/tools/qstringiterator_p.h
index 06b05de833..1c098a314d 100644
--- a/src/corelib/tools/qstringiterator_p.h
+++ b/src/corelib/tools/qstringiterator_p.h
@@ -69,6 +69,13 @@ public:
{
}
+ inline explicit QStringIterator(const QChar *begin, int idx, const QChar *end)
+ : i(begin),
+ pos(begin + idx),
+ e(end)
+ {
+ }
+
inline QString::const_iterator position() const
{
return pos;
diff --git a/src/corelib/tools/qtextboundaryfinder.h b/src/corelib/tools/qtextboundaryfinder.h
index beec5de607..a79fb50dad 100644
--- a/src/corelib/tools/qtextboundaryfinder.h
+++ b/src/corelib/tools/qtextboundaryfinder.h
@@ -68,7 +68,7 @@ public:
Q_DECLARE_FLAGS( BoundaryReasons, BoundaryReason )
QTextBoundaryFinder(BoundaryType type, const QString &string);
- QTextBoundaryFinder(BoundaryType type, const QChar *chars, int length, unsigned char *buffer = 0, int bufferSize = 0);
+ QTextBoundaryFinder(BoundaryType type, const QChar *chars, int length, unsigned char *buffer = Q_NULLPTR, int bufferSize = 0);
inline bool isValid() const { return d; }
diff --git a/src/corelib/tools/qtimeline.h b/src/corelib/tools/qtimeline.h
index 21139b37a8..94e60dce45 100644
--- a/src/corelib/tools/qtimeline.h
+++ b/src/corelib/tools/qtimeline.h
@@ -70,7 +70,7 @@ public:
CosineCurve
};
- explicit QTimeLine(int duration = 1000, QObject *parent = 0);
+ explicit QTimeLine(int duration = 1000, QObject *parent = Q_NULLPTR);
virtual ~QTimeLine();
State state() const;
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index 3627045a40..333a5c3471 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -116,8 +116,9 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
\class QTimeZone
\inmodule QtCore
\since 5.2
- \brief The QTimeZone class converts between between UTC and local time in a
- specific time zone.
+
+ \brief The QTimeZone class converts between UTC and local time in a specific
+ time zone.
\threadsafe
@@ -198,14 +199,15 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
The difference between UTC and the local time in a time zone is expressed
as an offset in seconds from UTC, i.e. the number of seconds to add to UTC
to obtain the local time. The total offset is comprised of two component
- parts, the standard time offset and the daylight time offset. The standard
- time offset is the number of seconds to add to UTC to obtain standard time
- in the time zone. The daylight time offset is the number of seconds to add
- to the standard time offset to obtain daylight time in the time zone.
+ parts, the standard time offset and the daylight-saving time offset. The
+ standard time offset is the number of seconds to add to UTC to obtain
+ standard time in the time zone. The daylight-saving time offset is the
+ number of seconds to add to the standard time offset to obtain
+ daylight-saving time (abbreviated DST and sometimes called "daylight time"
+ or "summer time") in the time zone.
- Note that the standard and daylight offsets for a time zone may change over
- time as countries have changed daylight time laws or even their standard
- time offset.
+ Note that the standard and DST offsets for a time zone may change over time
+ as countries have changed DST laws or even their standard time offset.
\section2 License
@@ -240,21 +242,20 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
\enum QTimeZone::TimeType
The type of time zone time, for example when requesting the name. In time
- zones that do not apply daylight time, all three values may return the
- same result.
+ zones that do not apply DST, all three values may return the same result.
\value StandardTime
- The standard time in a time zone, i.e. when Daylight Savings is not
+ The standard time in a time zone, i.e. when Daylight-Saving is not
in effect.
For example when formatting a display name this will show something
like "Pacific Standard Time".
\value DaylightTime
- A time when Daylight Savings is in effect.
+ A time when Daylight-Saving is in effect.
For example when formatting a display name this will show something
- like "Pacific daylight time".
+ like "Pacific daylight-saving time".
\value GenericTime
- A time which is not specifically Standard or Daylight time, either
- an unknown time or a neutral form.
+ A time which is not specifically Standard or Daylight-Saving time,
+ either an unknown time or a neutral form.
For example when formatting a display name this will show something
like "Pacific Time".
*/
@@ -285,11 +286,11 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
\li OffsetData::atUtc The datetime of the offset data in UTC time.
\li OffsetData::offsetFromUtc The total offset from UTC in effect at the datetime.
\li OffsetData::standardTimeOffset The standard time offset component of the total offset.
- \li OffsetData::daylightTimeOffset The daylight time offset component of the total offset.
+ \li OffsetData::daylightTimeOffset The DST offset component of the total offset.
\li OffsetData::abbreviation The abbreviation in effect at the datetime.
\endlist
- For example, for time zone "Europe/Berlin" the OffsetDate in standard and daylight time might be:
+ For example, for time zone "Europe/Berlin" the OffsetDate in standard and DST might be:
\list
\li atUtc = QDateTime(QDate(2013, 1, 1), QTime(0, 0, 0), Qt::UTC)
@@ -310,9 +311,8 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
/*!
\typedef QTimeZone::OffsetDataList
- \relates QTimeZone
- Synonym for QList<OffsetData>.
+ Synonym for QVector<OffsetData>.
*/
/*!
@@ -531,8 +531,7 @@ QString QTimeZone::comment() const
If the \a locale is not provided then the application default locale will
be used.
- The display name may change depending on daylight time or historical
- events.
+ The display name may change depending on DST or historical events.
\sa abbreviation()
*/
@@ -572,8 +571,7 @@ QString QTimeZone::displayName(TimeType timeType, NameType nameType,
/*!
Returns the time zone abbreviation at the given \a atDateTime. The
- abbreviation may change depending on daylight time or even
- historical events.
+ abbreviation may change depending on DST or even historical events.
Note that the abbreviation is not guaranteed to be unique to this time zone
and should not be used in place of the ID or display name.
@@ -592,13 +590,13 @@ QString QTimeZone::abbreviation(const QDateTime &atDateTime) const
/*!
Returns the total effective offset at the given \a atDateTime, i.e. the
number of seconds to add to UTC to obtain the local time. This includes
- any daylight time offset that may be in effect, i.e. it is the sum of
+ any DST offset that may be in effect, i.e. it is the sum of
standardTimeOffset() and daylightTimeOffset() for the given datetime.
For example, for the time zone "Europe/Berlin" the standard time offset is
- +3600 seconds and the daylight time offset is +3600 seconds. During standard
- time offsetFromUtc() will return +3600 (UTC+01:00), and during daylight time
- it will return +7200 (UTC+02:00).
+ +3600 seconds and the DST offset is +3600 seconds. During standard time
+ offsetFromUtc() will return +3600 (UTC+01:00), and during DST it will
+ return +7200 (UTC+02:00).
\sa standardTimeOffset(), daylightTimeOffset()
*/
@@ -614,11 +612,11 @@ int QTimeZone::offsetFromUtc(const QDateTime &atDateTime) const
/*!
Returns the standard time offset at the given \a atDateTime, i.e. the
number of seconds to add to UTC to obtain the local Standard Time. This
- excludes any daylight time offset that may be in effect.
+ excludes any DST offset that may be in effect.
For example, for the time zone "Europe/Berlin" the standard time offset is
- +3600 seconds. During both standard and daylight time offsetFromUtc() will
- return +3600 (UTC+01:00).
+ +3600 seconds. During both standard and DST offsetFromUtc() will return
+ +3600 (UTC+01:00).
\sa offsetFromUtc(), daylightTimeOffset()
*/
@@ -632,13 +630,13 @@ int QTimeZone::standardTimeOffset(const QDateTime &atDateTime) const
}
/*!
- Returns the daylight time offset at the given \a atDateTime, i.e. the
- number of seconds to add to the standard time offset to obtain the local
- daylight time.
+ Returns the daylight-saving time offset at the given \a atDateTime,
+ i.e. the number of seconds to add to the standard time offset to obtain the
+ local daylight-saving time.
- For example, for the time zone "Europe/Berlin" the daylight time offset
- is +3600 seconds. During standard time daylightTimeOffset() will return
- 0, and during daylight time it will return +3600.
+ For example, for the time zone "Europe/Berlin" the DST offset is +3600
+ seconds. During standard time daylightTimeOffset() will return 0, and when
+ daylight-saving is in effect it will return +3600.
\sa offsetFromUtc(), standardTimeOffset()
*/
@@ -652,7 +650,7 @@ int QTimeZone::daylightTimeOffset(const QDateTime &atDateTime) const
}
/*!
- Returns \c true if the time zone has observed daylight time at any time.
+ Returns \c true if the time zone has practiced daylight-saving at any time.
\sa isDaylightTime(), daylightTimeOffset()
*/
@@ -666,7 +664,7 @@ bool QTimeZone::hasDaylightTime() const
}
/*!
- Returns \c true if the given \a atDateTime is in daylight time.
+ Returns \c true if daylight-saving was in effect at the given \a atDateTime.
\sa hasDaylightTime(), daylightTimeOffset()
*/
@@ -697,6 +695,11 @@ QTimeZone::OffsetData QTimeZone::offsetData(const QDateTime &forDateTime) const
/*!
Returns \c true if the system backend supports obtaining transitions.
+
+ Transitions are changes in the time-zone: these happen when DST turns on or
+ off and when authorities alter the offsets for the time-zone.
+
+ \sa nextTransition(), previousTransition(), transitions()
*/
bool QTimeZone::hasTransitions() const
@@ -764,6 +767,7 @@ QTimeZone::OffsetDataList QTimeZone::transitions(const QDateTime &fromDateTime,
if (hasTransitions()) {
QTimeZonePrivate::DataList plist = d->transitions(fromDateTime.toMSecsSinceEpoch(),
toDateTime.toMSecsSinceEpoch());
+ list.reserve(plist.count());
foreach (const QTimeZonePrivate::Data &pdata, plist)
list.append(d->toOffsetData(pdata));
}
diff --git a/src/corelib/tools/qtimezoneprivate.cpp b/src/corelib/tools/qtimezoneprivate.cpp
index 8e6a0a0578..ab8332aea3 100644
--- a/src/corelib/tools/qtimezoneprivate.cpp
+++ b/src/corelib/tools/qtimezoneprivate.cpp
@@ -246,8 +246,8 @@ QTimeZonePrivate::Data QTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const
QTimeZonePrivate::Data QTimeZonePrivate::dataForLocalTime(qint64 forLocalMSecs) const
{
if (!hasDaylightTime() ||!hasTransitions()) {
- // No daylight time means same offset for all local msecs
- // Having daylight time but no transitions means we can't calculate, so use nearest
+ // No DST means same offset for all local msecs
+ // Having DST but no transitions means we can't calculate, so use nearest
return data(forLocalMSecs - (standardTimeOffset(forLocalMSecs) * 1000));
}
@@ -276,16 +276,16 @@ QTimeZonePrivate::Data QTimeZonePrivate::dataForLocalTime(qint64 forLocalMSecs)
}
if (tran.daylightTimeOffset == 0) {
- // If tran is in StandardTime, then need to check if falls close either daylight transition
+ // If tran is in StandardTime, then need to check if falls close to either DST transition.
// If it does, then it may need adjusting for missing hour or for second occurrence
qint64 diffPrevTran = forLocalMSecs
- (tran.atMSecsSinceEpoch + (tran.offsetFromUtc * 1000));
qint64 diffNextTran = nextTran.atMSecsSinceEpoch + (nextTran.offsetFromUtc * 1000)
- forLocalMSecs;
if (diffPrevTran >= 0 && diffPrevTran < MSECS_TRAN_WINDOW) {
- // If tran picked is for standard time check if changed from daylight in last 6 hours,
+ // If tran picked is for standard time check if changed from DST in last 6 hours,
// as the local msecs may be ambiguous and represent two valid utc msecs.
- // If in last 6 hours then get prev tran and if diff falls within the daylight offset
+ // If in last 6 hours then get prev tran and if diff falls within the DST offset
// then use the prev tran as we default to the FirstOccurrence
// TODO Check if faster to just always get prev tran, or if faster using 6 hour check.
Data dstTran = previousTransition(tran.atMSecsSinceEpoch);
@@ -700,6 +700,7 @@ QByteArray QUtcTimeZonePrivate::systemTimeZoneId() const
QList<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds() const
{
QList<QByteArray> result;
+ result.reserve(utcDataTableSize);
for (int i = 0; i < utcDataTableSize; ++i)
result << utcId(utcData(i));
std::sort(result.begin(), result.end()); // ### or already sorted??
diff --git a/src/corelib/tools/qtimezoneprivate_android.cpp b/src/corelib/tools/qtimezoneprivate_android.cpp
index 6178fe935a..e66d00c67c 100644
--- a/src/corelib/tools/qtimezoneprivate_android.cpp
+++ b/src/corelib/tools/qtimezoneprivate_android.cpp
@@ -150,7 +150,7 @@ int QAndroidTimeZonePrivate::daylightTimeOffset(qint64 atMSecsSinceEpoch) const
bool QAndroidTimeZonePrivate::hasDaylightTime() const
{
if ( androidTimeZone.isValid() )
- /* note: the Java function only tests for future daylight transtions, not past */
+ /* note: the Java function only tests for future DST transtions, not past */
return androidTimeZone.callMethod<jboolean>("useDaylightTime" );
else
return false;
@@ -210,34 +210,34 @@ QTimeZonePrivate::Data QAndroidTimeZonePrivate::dataForLocalTime(qint64 forLocal
} else {
qint64 UTCepochMSecs;
- // compare the UTC time with standard offset against normal daylight offset of one hour
+ // compare the UTC time with standard offset against normal DST offset of one hour
qint64 standardUTCMSecs(forLocalMSecs - (standardTimeOffset(forLocalMSecs) * 1000));
qint64 daylightUTCMsecs;
- // Check if daylight time does apply,
- // checking also for daylight time boundaries
+ // Check if daylight-saving time applies,
+ // checking also for DST boundaries
if (isDaylightTime(standardUTCMSecs)) {
- // If daylight does apply, then standardUTCMSecs will be an hour or so ahead of the real epoch time
+ // If DST does apply, then standardUTCMSecs will be an hour or so ahead of the real epoch time
// so check that time
daylightUTCMsecs = standardUTCMSecs - daylightTimeOffset(standardUTCMSecs)*1000;
if (isDaylightTime(daylightUTCMsecs)) {
- // daylight time confirmed
+ // DST confirmed
UTCepochMSecs = daylightUTCMsecs;
} else {
- // daylight time has just finished
+ // DST has just finished
UTCepochMSecs = standardUTCMSecs;
}
} else {
// Standard time indicated, but check for a false negative.
- // Would a standard one-hour daylight offset indicate daylight time?
+ // Would a standard one-hour DST offset indicate DST?
daylightUTCMsecs = standardUTCMSecs - 3600000; // 3600000 MSECS_PER_HOUR
if (isDaylightTime(daylightUTCMsecs)) {
- // daylight time may have just started,
- // but double check against timezone's own daylight offset
+ // DST may have just started,
+ // but double check against timezone's own DST offset
// (don't necessarily assume a one-hour offset)
daylightUTCMsecs = standardUTCMSecs - daylightTimeOffset(daylightUTCMsecs)*1000;
if (isDaylightTime(daylightUTCMsecs)) {
- // daylight time confirmed
+ // DST confirmed
UTCepochMSecs = daylightUTCMsecs;
} else {
// false positive, apply standard time after all
diff --git a/src/corelib/tools/qtimezoneprivate_p.h b/src/corelib/tools/qtimezoneprivate_p.h
index e15ac801bc..14aeac3a02 100644
--- a/src/corelib/tools/qtimezoneprivate_p.h
+++ b/src/corelib/tools/qtimezoneprivate_p.h
@@ -165,6 +165,7 @@ public:
protected:
QByteArray m_id;
};
+Q_DECLARE_TYPEINFO(QTimeZonePrivate::Data, Q_MOVABLE_TYPE);
template<> QTimeZonePrivate *QSharedDataPointer<QTimeZonePrivate>::clone();
diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp
index 35380b882a..85ed345869 100644
--- a/src/corelib/tools/qtimezoneprivate_tz.cpp
+++ b/src/corelib/tools/qtimezoneprivate_tz.cpp
@@ -637,6 +637,7 @@ void QTzTimeZonePrivate::init(const QByteArray &ianaId)
}
// Now for each transition time calculate our rule and save them
+ m_tranTimes.reserve(tranList.count());
foreach (const QTzTransition &tz_tran, tranList) {
QTzTransitionTime tran;
QTzTransitionRule rule;
@@ -917,6 +918,13 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const
if (!ianaId.isEmpty() && ianaId.at(0) == ':')
ianaId = ianaId.mid(1);
+ // The TZ value can be ":/etc/localtime" which libc considers
+ // to be a "default timezone", in which case it will be read
+ // by one of the blocks below, so unset it here so it is not
+ // considered as a valid/found ianaId
+ if (ianaId == "/etc/localtime")
+ ianaId.clear();
+
// On Debian Etch and later /etc/localtime is real file with name held in /etc/timezone
if (ianaId.isEmpty()) {
QFile tzif(QStringLiteral("/etc/timezone"));
diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp
index 73dce81d4a..14e4fd10aa 100644
--- a/src/corelib/tools/qunicodetables.cpp
+++ b/src/corelib/tools/qunicodetables.cpp
@@ -31,7 +31,7 @@
**
****************************************************************************/
-/* This file is autogenerated from the Unicode 7.0 database. Do not edit */
+/* This file is autogenerated from the Unicode 8.0 database. Do not edit */
#include "qunicodetables_p.h"
@@ -40,7 +40,7 @@ QT_BEGIN_NAMESPACE
namespace QUnicodeTables {
static const unsigned short uc_property_trie[] = {
- // 0 - 0x11000
+ // [0x0..0x11000)
6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480,
6512, 6544, 6576, 6608, 6640, 6672, 6704, 6736,
@@ -62,803 +62,803 @@ static const unsigned short uc_property_trie[] = {
10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480,
10512, 10512, 10544, 10576, 10608, 10640, 10672, 10704,
10736, 10768, 10800, 10768, 10832, 10864, 10896, 10928,
- 10960, 10768, 10992, 11024, 11056, 11088, 11088, 11120,
- 11152, 11184, 11184, 11184, 11184, 11184, 11184, 11184,
- 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184,
- 11184, 11184, 11184, 11216, 11248, 11280, 11280, 11312,
- 11344, 11376, 11408, 11440, 11472, 11504, 11536, 11568,
- 11600, 11632, 11664, 11696, 11728, 11760, 11792, 11824,
- 11856, 11888, 11920, 11952, 11984, 12016, 12048, 12080,
- 12112, 12144, 12176, 12208, 12240, 12272, 9904, 9904,
- 12304, 12336, 12368, 12400, 12432, 12464, 12496, 12528,
- 12560, 12592, 12624, 12656, 9904, 9904, 12688, 12720,
- 12752, 12784, 12816, 12848, 12880, 12912, 12944, 12976,
- 13008, 13008, 13008, 13008, 13040, 13008, 13008, 13072,
- 13104, 13136, 13168, 13200, 13232, 13264, 13296, 13328,
-
- 13360, 13392, 13424, 13456, 13488, 13520, 13552, 13584,
- 13616, 13648, 13680, 13712, 13744, 13776, 13808, 13840,
- 13872, 13904, 13936, 13968, 14000, 14032, 14064, 14096,
- 14128, 14160, 14192, 14224, 14256, 14288, 14320, 14352,
- 14384, 14416, 14448, 14480, 14512, 14544, 14576, 14608,
- 14384, 14384, 14384, 14384, 14640, 14672, 14704, 14736,
- 14768, 14800, 14384, 14832, 14864, 14896, 14928, 14960,
- 14992, 15024, 15056, 15088, 15120, 15152, 15184, 15216,
- 15248, 15248, 15248, 15248, 15248, 15248, 15248, 15248,
- 15280, 15280, 15280, 15280, 15312, 15344, 15376, 15408,
- 15440, 15472, 15280, 15504, 15536, 15568, 15600, 15632,
- 15664, 15696, 15728, 15760, 15792, 15824, 15856, 9904,
- 15888, 15920, 15952, 15984, 16016, 16016, 16016, 16048,
- 16080, 16112, 16144, 16176, 16208, 16240, 16240, 16272,
- 16304, 16336, 16368, 9904, 16400, 16432, 16432, 16464,
- 16496, 16496, 16496, 16496, 16496, 16496, 16528, 16560,
-
- 16592, 16624, 16656, 16688, 16720, 16752, 16784, 16816,
- 16848, 16880, 16912, 16912, 16944, 16976, 17008, 17040,
- 17072, 17104, 17136, 17168, 17104, 17200, 17232, 17264,
- 17296, 17296, 17328, 17360, 17392, 17392, 17424, 17456,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
-
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488,
- 17488, 17488, 17488, 17488, 17488, 17520, 17552, 17552,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
-
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
-
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
-
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
-
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
-
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584,
- 17584, 17584, 17584, 17584, 17584, 17616, 17648, 17680,
-
- 17712, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
- 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
- 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
- 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
- 17744, 17744, 17744, 17744, 17776, 17808, 17840, 17872,
- 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
- 17936, 17968, 18000, 18032, 18064, 18096, 18096, 18128,
- 18160, 18192, 18224, 18256, 18288, 18320, 9904, 18352,
- 18384, 18416, 18448, 18480, 18512, 18544, 18576, 18608,
- 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18864,
- 18896, 18928, 18960, 18992, 19024, 19056, 19088, 19120,
- 19152, 19184, 19216, 19248, 9904, 9904, 19280, 19312,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376,
- 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408,
- 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440,
-
- 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472,
- 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504,
- 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376,
- 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408,
- 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440,
- 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472,
- 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504,
- 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376,
- 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408,
- 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440,
- 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472,
- 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504,
-
- 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376,
- 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408,
- 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440,
- 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472,
- 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504,
- 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
- 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376,
- 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408,
- 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440,
- 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472,
- 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504,
- 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
-
- 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376,
- 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408,
- 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440,
- 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472,
- 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504,
- 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
- 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344,
- 19376, 19408, 19440, 19472, 19504, 19568, 19600, 19632,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
- 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664,
-
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
-
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696,
- 19728, 19728, 19728, 19728, 19728, 19728, 19728, 19728,
- 19760, 19792, 19824, 19856, 19888, 19888, 19920, 17680,
- 19952, 19984, 20016, 20048, 20048, 20080, 20112, 20048,
- 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048,
- 20048, 20144, 20176, 20048, 20208, 20048, 20240, 20272,
- 20304, 20336, 20368, 20400, 20048, 20048, 20048, 20432,
- 20464, 20496, 20528, 20560, 20592, 20624, 20656, 20688,
-
- 20720, 20752, 20784, 9904, 20816, 20816, 20816, 20848,
- 20880, 20912, 20944, 20976, 21008, 21040, 21072, 21104,
- 9904, 9904, 9904, 9904, 21136, 21168, 21200, 21232,
- 21264, 21296, 21328, 21360, 21392, 21424, 21456, 9904,
- 21488, 21520, 21552, 21584, 21616, 21648, 9904, 9904,
- 21680, 21712, 21744, 21776, 9904, 9904, 9904, 9904,
- 21808, 21808, 21808, 21808, 21808, 21808, 21808, 21808,
+ 10960, 10768, 10992, 11024, 11056, 11088, 11120, 11152,
+ 11184, 11216, 11216, 11216, 11216, 11216, 11216, 11216,
+ 11216, 11216, 11216, 11216, 11216, 11216, 11216, 11216,
+ 11216, 11216, 11216, 11248, 11280, 11312, 11312, 11344,
+ 11376, 11408, 11440, 11472, 11504, 11536, 11568, 11600,
+ 11632, 11664, 11696, 11728, 11760, 11792, 11824, 11856,
+ 11888, 11920, 11952, 11984, 12016, 12048, 12080, 12112,
+ 12144, 12176, 12208, 12240, 12272, 12304, 9904, 9904,
+ 12336, 12368, 12400, 12432, 12464, 12496, 12528, 12560,
+ 12592, 12624, 12656, 12688, 9904, 9904, 12720, 12752,
+ 12784, 12816, 12848, 12880, 12912, 12944, 12976, 13008,
+ 13040, 13040, 13040, 13040, 13072, 13040, 13040, 13104,
+ 13136, 13168, 13200, 13232, 13264, 13296, 13328, 13360,
+
+ 13392, 13424, 13456, 13488, 13520, 13552, 13584, 13616,
+ 13648, 13680, 13712, 13744, 13776, 13808, 13840, 13872,
+ 13904, 13936, 13968, 14000, 14032, 14064, 14096, 14128,
+ 14160, 14192, 14224, 14256, 14288, 14320, 14352, 14384,
+ 14416, 14448, 14480, 14512, 14544, 14576, 14608, 14640,
+ 14416, 14416, 14416, 14416, 14672, 14704, 14736, 14768,
+ 14800, 14832, 14416, 14864, 14896, 14928, 14960, 14992,
+ 15024, 15056, 15088, 15120, 15152, 15184, 15216, 15248,
+ 15280, 15280, 15280, 15280, 15280, 15280, 15280, 15280,
+ 15312, 15312, 15312, 15312, 15344, 15376, 15408, 15440,
+ 15472, 15504, 15312, 15536, 15568, 15600, 15632, 15664,
+ 15696, 15728, 15760, 15792, 15824, 15856, 15888, 15920,
+ 15952, 15984, 16016, 16048, 16080, 16080, 16080, 16112,
+ 16144, 16176, 16208, 16240, 16272, 16304, 16304, 16336,
+ 16368, 16400, 16432, 9904, 16464, 16496, 16496, 16528,
+ 16560, 16560, 16560, 16560, 16560, 16560, 16592, 16624,
+
+ 16656, 16688, 16720, 16752, 16784, 16816, 16848, 16880,
+ 16912, 16944, 16976, 16976, 17008, 17040, 17072, 17104,
+ 17136, 17168, 17200, 17232, 17168, 17264, 17296, 17328,
+ 17360, 17360, 17392, 17424, 17456, 17456, 17488, 17520,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
+ 17552, 17552, 17552, 17552, 17552, 17584, 17616, 17616,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 17648, 17648, 17648, 17648, 17648, 17680, 17712, 17744,
+
+ 17776, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
+ 17808, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
+ 17808, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
+ 17808, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
+ 17808, 17808, 17808, 17808, 17840, 17872, 17904, 17936,
+ 17968, 17968, 17968, 17968, 17968, 17968, 17968, 17968,
+ 18000, 18032, 18064, 18096, 18128, 18160, 18160, 18192,
+ 18224, 18256, 18288, 18320, 18352, 18384, 9904, 18416,
+ 18448, 18480, 18512, 18544, 18576, 18608, 18640, 18672,
+ 18704, 18736, 18768, 18800, 18832, 18864, 18896, 18928,
+ 18960, 18992, 19024, 19056, 19088, 19120, 19152, 19184,
+ 19216, 19248, 19280, 19312, 19344, 19376, 19408, 19440,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+ 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
+ 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
+
+ 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
+ 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
+ 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+ 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
+ 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
+ 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
+ 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
+ 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+ 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
+ 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
+ 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
+ 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
+
+ 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+ 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
+ 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
+ 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
+ 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
+ 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+ 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
+ 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
+ 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
+ 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
+ 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+
+ 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
+ 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
+ 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
+ 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
+ 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
+ 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
+ 19504, 19536, 19568, 19600, 19632, 19696, 19728, 19760,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+ 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
+
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
+ 19856, 19856, 19856, 19856, 19856, 19856, 19856, 19856,
+ 19888, 19920, 19952, 19984, 20016, 20016, 20048, 17744,
+ 20080, 20112, 20144, 20176, 20176, 20208, 20240, 20176,
+ 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
+ 20176, 20272, 20304, 20176, 20336, 20176, 20368, 20400,
+ 20432, 20464, 20496, 20528, 20176, 20176, 20176, 20560,
+ 20592, 20624, 20656, 20688, 20720, 20752, 20784, 20816,
+
+ 20848, 20880, 20912, 9904, 20944, 20944, 20944, 20976,
+ 21008, 21040, 21072, 21104, 21136, 21168, 21200, 21232,
+ 9904, 9904, 9904, 9904, 21264, 21296, 21328, 21360,
+ 21392, 21424, 21456, 21488, 21520, 21552, 21584, 9904,
+ 21616, 21648, 21680, 21712, 21744, 21776, 9904, 9904,
21808, 21840, 21872, 21904, 9904, 9904, 9904, 9904,
- 21936, 21968, 22000, 22032, 22064, 22096, 8400, 8400,
- 22128, 22160, 8400, 8400, 22192, 22224, 8400, 8400,
- 22256, 22288, 22320, 22352, 22384, 8400, 22416, 22448,
- 22480, 22512, 22544, 22576, 22608, 22640, 8400, 8400,
- 22672, 22672, 22704, 8400, 8400, 8400, 8400, 8400,
+ 21936, 21936, 21936, 21936, 21936, 21936, 21936, 21936,
+ 21936, 21968, 22000, 22032, 9904, 9904, 9904, 9904,
+ 22064, 22096, 22128, 22160, 22192, 22224, 8400, 22256,
+ 22288, 22320, 8400, 8400, 22352, 22384, 22416, 22448,
+ 22480, 22512, 22544, 22576, 22608, 8400, 22640, 22672,
+ 22704, 22736, 22768, 22800, 22832, 22864, 8400, 8400,
+ 22896, 22896, 22928, 8400, 22960, 22992, 23024, 23056,
8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400,
- 8400, 8400, 8400, 22736, 8400, 8400, 8400, 8400,
+ 8400, 8400, 8400, 23088, 8400, 8400, 8400, 8400,
8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400,
- // 0x11000 - 0x110000
-
- 22768, 23024, 23280, 23536, 23792, 24048, 24304, 24560,
- 24816, 24560, 25072, 24560, 24560, 24560, 24560, 24560,
- 25328, 25328, 25328, 25584, 25840, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 26096, 26096, 26352, 26608, 26864, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 27120, 27120, 27376, 27632, 24560, 24560, 24560, 27888,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 28144, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 28400, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 28656, 28912, 29168, 29424, 29680, 29936, 30192, 30448,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 30704, 30960, 30960, 30960, 30960, 30960, 31216, 30960,
- 31472, 31728, 31984, 32240, 32496, 32752, 33008, 33264,
- 33520, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
-
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032,
- 34032, 34032, 34032, 34032, 34032, 34032, 34288, 34544,
- 34544, 34544, 34544, 34544, 34544, 34544, 34544, 34544,
- 34544, 34544, 34544, 34544, 34544, 34544, 34544, 34800,
- 35056, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35568, 35568, 35824, 35312, 35312, 35312, 35312, 36080,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
-
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312,
- 35312, 35312, 35312, 35312, 35312, 35312, 35312, 36080,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 36336, 36592, 36848, 36848, 36848, 36848, 36848, 36848,
- 36848, 36848, 36848, 36848, 36848, 36848, 36848, 36848,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
-
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560,
- 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
-
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37360,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
-
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104,
- 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37360,
+ // [0x11000..0x110000)
+
+ 23120, 23376, 23632, 23888, 24144, 24400, 24656, 24912,
+ 25168, 25424, 25680, 25424, 25424, 25424, 25424, 25424,
+ 25936, 25936, 25936, 26192, 26448, 26704, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 26960, 26960, 27216, 27472, 27728, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 27984, 28240, 28496, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 28752, 28752, 29008, 29264, 25424, 25424, 25424, 29520,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 29776, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 30032, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 30288, 30544, 30800, 31056, 31312, 31568, 31824, 32080,
+ 32336, 32336, 32592, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 32848, 33104, 33104, 33104, 33104, 33104, 33360, 33104,
+ 33616, 33872, 34128, 34384, 34640, 34896, 35152, 35408,
+ 35664, 35920, 25424, 25424, 25424, 25424, 25424, 36176,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
+ 36432, 36432, 36432, 36432, 36432, 36432, 36688, 36944,
+ 36944, 36944, 36944, 36944, 36944, 36944, 36944, 36944,
+ 36944, 36944, 36944, 36944, 36944, 36944, 36944, 37200,
+ 37456, 37712, 37712, 37712, 37712, 37712, 37712, 37712,
+ 37712, 37712, 37712, 37712, 37712, 37712, 37712, 37712,
+ 37712, 37712, 37712, 37712, 37712, 37712, 37968, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38480, 38480, 38736, 38224, 38224, 38224, 38224, 38992,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
+ 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38992,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 39248, 39504, 39760, 39760, 39760, 39760, 39760, 39760,
+ 39760, 39760, 39760, 39760, 39760, 39760, 39760, 39760,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
+ 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40272,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
+ 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40272,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -964,594 +964,569 @@ static const unsigned short uc_property_trie[] = {
149, 78, 78, 149, 78, 78, 78, 150,
149, 151, 152, 152, 153, 78, 78, 78,
78, 78, 154, 78, 100, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 155, 78,
+ 78, 78, 78, 78, 78, 155, 156, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 156, 156, 156, 156, 156, 114, 114,
- 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 158, 158, 159, 159, 159, 159, 159,
-
- 160, 160, 42, 42, 42, 42, 158, 158,
- 161, 158, 158, 158, 161, 158, 158, 158,
- 159, 159, 42, 42, 42, 42, 42, 162,
- 52, 52, 52, 52, 52, 52, 42, 163,
-
- 157, 157, 157, 157, 157, 42, 42, 42,
- 42, 42, 164, 164, 165, 166, 167, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168,
-
- 169, 169, 169, 169, 169, 170, 169, 169,
- 169, 169, 169, 169, 169, 170, 170, 169,
- 170, 169, 170, 169, 169, 171, 172, 172,
- 172, 172, 171, 173, 172, 172, 172, 172,
-
- 172, 174, 174, 175, 175, 175, 175, 176,
- 176, 172, 172, 172, 172, 175, 175, 172,
- 175, 175, 172, 172, 177, 177, 177, 177,
- 178, 172, 172, 172, 172, 170, 170, 170,
-
- 179, 179, 169, 179, 179, 180, 181, 182,
- 182, 182, 181, 181, 181, 182, 182, 183,
- 184, 184, 184, 185, 185, 185, 185, 184,
- 186, 187, 187, 188, 189, 190, 190, 191,
-
- 192, 192, 193, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 195, 196, 195, 196, 197, 198, 195, 196,
- 199, 199, 200, 201, 201, 201, 202, 203,
-
- 199, 199, 199, 199, 204, 205, 206, 207,
- 208, 208, 208, 199, 209, 199, 210, 210,
- 211, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212,
-
- 212, 212, 199, 212, 212, 212, 212, 212,
- 212, 212, 213, 213, 214, 215, 215, 215,
- 216, 217, 217, 217, 217, 217, 217, 217,
- 217, 217, 217, 217, 217, 217, 217, 217,
-
- 217, 217, 218, 217, 217, 217, 217, 217,
- 217, 217, 219, 219, 220, 221, 221, 222,
- 223, 224, 225, 226, 226, 227, 228, 229,
- 230, 231, 232, 233, 232, 233, 232, 233,
-
- 232, 233, 234, 235, 234, 235, 234, 235,
- 234, 235, 234, 235, 234, 235, 234, 235,
- 236, 237, 238, 239, 240, 241, 242, 243,
- 244, 245, 243, 244, 246, 247, 247, 247,
-
- 248, 249, 250, 249, 250, 250, 250, 249,
- 250, 250, 250, 250, 249, 248, 249, 250,
- 251, 251, 251, 251, 251, 251, 251, 251,
- 251, 252, 251, 251, 251, 251, 251, 251,
-
- 251, 251, 251, 251, 251, 251, 251, 251,
- 251, 251, 251, 251, 251, 251, 251, 251,
- 253, 253, 253, 253, 253, 253, 253, 253,
- 253, 254, 253, 253, 253, 253, 253, 253,
-
- 253, 253, 253, 253, 253, 253, 253, 253,
- 253, 253, 253, 253, 253, 253, 253, 253,
- 255, 256, 257, 256, 257, 257, 257, 256,
- 257, 257, 257, 257, 256, 255, 256, 257,
-
- 258, 259, 258, 259, 258, 259, 258, 259,
- 258, 259, 258, 259, 258, 259, 258, 259,
- 258, 259, 258, 259, 258, 259, 260, 261,
- 258, 259, 258, 259, 258, 259, 258, 259,
-
- 258, 259, 262, 263, 263, 170, 170, 264,
- 265, 265, 266, 267, 268, 269, 268, 269,
- 258, 259, 258, 259, 258, 259, 258, 259,
- 258, 259, 258, 259, 258, 259, 258, 259,
-
- 258, 259, 258, 259, 258, 259, 258, 259,
- 258, 259, 258, 259, 258, 259, 258, 259,
- 258, 259, 258, 259, 258, 259, 258, 259,
- 258, 259, 258, 259, 258, 259, 258, 259,
-
- 270, 260, 261, 258, 259, 266, 267, 258,
- 259, 266, 267, 258, 259, 266, 267, 271,
- 260, 261, 260, 261, 258, 259, 260, 261,
- 258, 259, 260, 261, 260, 261, 260, 261,
-
- 258, 259, 260, 261, 260, 261, 260, 261,
- 258, 259, 260, 261, 272, 273, 260, 261,
- 260, 261, 260, 261, 260, 261, 274, 275,
- 260, 261, 276, 277, 276, 277, 276, 277,
-
- 266, 267, 266, 267, 266, 267, 266, 267,
- 266, 267, 266, 267, 266, 267, 266, 267,
- 276, 277, 276, 277, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 278, 279,
-
- 278, 279, 278, 279, 280, 281, 282, 283,
- 284, 285, 284, 285, 284, 285, 284, 285,
- 199, 286, 286, 286, 286, 286, 286, 286,
- 286, 286, 286, 286, 286, 286, 286, 286,
-
- 286, 286, 286, 286, 286, 286, 286, 286,
- 286, 286, 286, 286, 286, 286, 286, 286,
- 286, 286, 286, 286, 286, 286, 286, 199,
- 199, 287, 288, 288, 288, 289, 288, 288,
-
- 199, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 290, 290, 290, 290, 290,
- 290, 290, 290, 290, 290, 290, 290, 290,
-
- 290, 290, 290, 290, 290, 290, 290, 291,
- 199, 292, 293, 199, 199, 294, 294, 295,
- 296, 297, 298, 298, 298, 298, 297, 298,
- 298, 298, 299, 297, 298, 298, 298, 298,
-
- 298, 298, 300, 297, 297, 297, 297, 297,
- 298, 298, 297, 298, 298, 299, 301, 298,
- 302, 303, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317,
-
- 318, 319, 320, 318, 298, 300, 321, 322,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 323, 323, 323, 323, 323, 323, 323, 323,
- 323, 323, 323, 323, 323, 323, 323, 323,
-
- 323, 323, 323, 323, 323, 323, 323, 323,
- 323, 323, 323, 296, 296, 296, 296, 296,
- 323, 323, 323, 324, 325, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 326, 326, 326, 326, 327, 328, 329, 329,
- 330, 331, 331, 332, 19, 333, 334, 334,
- 335, 335, 335, 335, 335, 335, 336, 336,
- 337, 338, 339, 340, 341, 342, 343, 344,
-
- 345, 346, 347, 347, 347, 347, 348, 349,
- 350, 349, 350, 350, 350, 350, 350, 349,
- 349, 349, 349, 350, 350, 350, 350, 350,
+ 78, 157, 157, 157, 157, 157, 114, 114,
+ 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 159, 159, 160, 160, 160, 160, 160,
+
+ 161, 161, 42, 42, 42, 42, 159, 159,
+ 162, 159, 159, 159, 162, 159, 159, 159,
+ 160, 160, 42, 42, 42, 42, 42, 163,
+ 52, 52, 52, 52, 52, 52, 42, 164,
+
+ 158, 158, 158, 158, 158, 42, 42, 42,
+ 42, 42, 165, 165, 166, 167, 168, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169,
+
+ 170, 170, 170, 170, 170, 171, 170, 170,
+ 170, 170, 170, 170, 170, 171, 171, 170,
+ 171, 170, 171, 170, 170, 172, 173, 173,
+ 173, 173, 172, 174, 173, 173, 173, 173,
+
+ 173, 175, 175, 176, 176, 176, 176, 177,
+ 177, 173, 173, 173, 173, 176, 176, 173,
+ 176, 176, 173, 173, 178, 178, 178, 178,
+ 179, 173, 173, 173, 173, 171, 171, 171,
+
+ 180, 180, 170, 180, 180, 181, 182, 183,
+ 183, 183, 182, 182, 182, 183, 183, 184,
+ 185, 185, 185, 186, 186, 186, 186, 185,
+ 187, 188, 188, 189, 190, 191, 191, 192,
+
+ 193, 193, 194, 195, 195, 195, 195, 195,
+ 195, 195, 195, 195, 195, 195, 195, 195,
+ 196, 197, 196, 197, 198, 199, 196, 197,
+ 200, 200, 201, 202, 202, 202, 203, 204,
+
+ 200, 200, 200, 200, 205, 206, 207, 208,
+ 209, 209, 209, 200, 210, 200, 211, 211,
+ 212, 213, 213, 213, 213, 213, 213, 213,
+ 213, 213, 213, 213, 213, 213, 213, 213,
+
+ 213, 213, 200, 213, 213, 213, 213, 213,
+ 213, 213, 214, 214, 215, 216, 216, 216,
+ 217, 218, 218, 218, 218, 218, 218, 218,
+ 218, 218, 218, 218, 218, 218, 218, 218,
+
+ 218, 218, 219, 218, 218, 218, 218, 218,
+ 218, 218, 220, 220, 221, 222, 222, 223,
+ 224, 225, 226, 227, 227, 228, 229, 230,
+ 231, 232, 233, 234, 233, 234, 233, 234,
+
+ 233, 234, 235, 236, 235, 236, 235, 236,
+ 235, 236, 235, 236, 235, 236, 235, 236,
+ 237, 238, 239, 240, 241, 242, 243, 244,
+ 245, 246, 244, 245, 247, 248, 248, 248,
+
+ 249, 250, 251, 250, 251, 251, 251, 250,
+ 251, 251, 251, 251, 250, 249, 250, 251,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 253, 252, 252, 252, 252, 252, 252,
+
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 255, 254, 254, 254, 254, 254, 254,
+
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 256, 257, 258, 257, 258, 258, 258, 257,
+ 258, 258, 258, 258, 257, 256, 257, 258,
+
+ 259, 260, 259, 260, 259, 260, 259, 260,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+ 259, 260, 259, 260, 259, 260, 261, 262,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+
+ 259, 260, 263, 264, 264, 171, 171, 265,
+ 266, 266, 267, 268, 269, 270, 269, 270,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+
+ 259, 260, 259, 260, 259, 260, 259, 260,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+ 259, 260, 259, 260, 259, 260, 259, 260,
+
+ 271, 261, 262, 259, 260, 267, 268, 259,
+ 260, 267, 268, 259, 260, 267, 268, 272,
+ 261, 262, 261, 262, 259, 260, 261, 262,
+ 259, 260, 261, 262, 261, 262, 261, 262,
+
+ 259, 260, 261, 262, 261, 262, 261, 262,
+ 259, 260, 261, 262, 273, 274, 261, 262,
+ 261, 262, 261, 262, 261, 262, 275, 276,
+ 261, 262, 277, 278, 277, 278, 277, 278,
+
+ 267, 268, 267, 268, 267, 268, 267, 268,
+ 267, 268, 267, 268, 267, 268, 267, 268,
+ 277, 278, 277, 278, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 279, 280,
+
+ 279, 280, 279, 280, 281, 282, 283, 284,
+ 285, 286, 285, 286, 285, 286, 285, 286,
+ 200, 287, 287, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 287, 287, 287,
+
+ 287, 287, 287, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 287, 287, 287,
+ 287, 287, 287, 287, 287, 287, 287, 200,
+ 200, 288, 289, 289, 289, 290, 289, 289,
+
+ 200, 291, 291, 291, 291, 291, 291, 291,
+ 291, 291, 291, 291, 291, 291, 291, 291,
+ 291, 291, 291, 291, 291, 291, 291, 291,
+ 291, 291, 291, 291, 291, 291, 291, 291,
+
+ 291, 291, 291, 291, 291, 291, 291, 292,
+ 200, 293, 294, 200, 200, 295, 295, 296,
+ 297, 298, 299, 299, 299, 299, 298, 299,
+ 299, 299, 300, 298, 299, 299, 299, 299,
+
+ 299, 299, 301, 298, 298, 298, 298, 298,
+ 299, 299, 298, 299, 299, 300, 302, 299,
+ 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, 317, 318,
+
+ 319, 320, 321, 319, 299, 301, 322, 323,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 324, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324,
+
+ 324, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 324, 297, 297, 297, 297, 297,
+ 324, 324, 324, 325, 326, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 327, 327, 327, 327, 328, 329, 330, 330,
+ 331, 332, 332, 333, 19, 334, 335, 335,
+ 336, 336, 336, 336, 336, 336, 337, 337,
+ 338, 339, 340, 341, 342, 343, 344, 345,
+
+ 346, 347, 348, 348, 348, 348, 349, 350,
+ 351, 350, 351, 351, 351, 351, 351, 350,
350, 350, 350, 351, 351, 351, 351, 351,
+ 351, 351, 351, 352, 352, 352, 352, 352,
- 352, 350, 350, 350, 350, 350, 350, 350,
- 349, 350, 350, 353, 354, 355, 356, 357,
- 358, 359, 360, 361, 361, 362, 363, 335,
- 335, 364, 364, 364, 365, 364, 364, 366,
+ 353, 351, 351, 351, 351, 351, 351, 351,
+ 350, 351, 351, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, 362, 363, 364, 336,
+ 336, 365, 365, 365, 366, 365, 365, 367,
- 367, 368, 369, 370, 371, 372, 373, 374,
- 375, 376, 377, 378, 379, 380, 381, 381,
- 382, 349, 349, 349, 346, 383, 383, 383,
- 384, 350, 350, 350, 350, 350, 350, 350,
+ 368, 369, 370, 371, 372, 373, 374, 375,
+ 376, 377, 378, 379, 380, 381, 382, 382,
+ 383, 350, 350, 350, 347, 384, 384, 384,
+ 385, 351, 351, 351, 351, 351, 351, 351,
- 350, 350, 350, 350, 350, 350, 350, 350,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 350, 350, 350, 350, 350, 350,
-
- 350, 350, 350, 350, 350, 350, 350, 350,
+ 351, 351, 351, 351, 351, 351, 351, 351,
350, 350, 350, 350, 350, 350, 350, 350,
350, 350, 350, 350, 350, 350, 350, 350,
- 385, 385, 350, 350, 350, 350, 350, 385,
-
- 347, 350, 348, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 350, 349, 350, 386,
- 350, 350, 349, 347, 387, 349, 388, 388,
- 388, 388, 388, 388, 388, 389, 390, 388,
-
- 388, 388, 388, 391, 388, 392, 392, 388,
- 388, 390, 391, 388, 388, 391, 393, 393,
- 394, 395, 396, 397, 398, 399, 400, 401,
- 402, 403, 385, 385, 385, 404, 404, 405,
-
- 406, 406, 406, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 342, 408,
- 409, 410, 411, 411, 411, 409, 409, 409,
- 409, 409, 411, 411, 411, 411, 409, 411,
-
- 411, 411, 411, 411, 411, 411, 411, 411,
- 409, 411, 409, 411, 409, 412, 412, 413,
- 414, 415, 414, 414, 415, 414, 414, 415,
- 415, 415, 414, 415, 415, 414, 415, 414,
-
- 414, 414, 415, 414, 415, 414, 415, 414,
- 415, 414, 414, 342, 342, 413, 412, 412,
- 416, 416, 416, 416, 416, 416, 416, 416,
- 416, 417, 417, 417, 416, 416, 416, 416,
-
- 416, 416, 416, 416, 416, 416, 416, 416,
- 416, 416, 416, 417, 417, 416, 351, 351,
- 351, 418, 351, 418, 418, 351, 351, 351,
- 418, 418, 351, 351, 351, 351, 351, 351,
-
- 419, 419, 419, 419, 419, 419, 419, 419,
- 419, 419, 419, 419, 419, 419, 419, 419,
- 419, 419, 419, 419, 419, 419, 419, 419,
- 419, 419, 419, 419, 419, 419, 419, 419,
-
- 419, 419, 419, 419, 419, 419, 420, 420,
+ 350, 350, 351, 351, 351, 351, 351, 351,
+
+ 351, 351, 351, 351, 351, 351, 351, 351,
+ 351, 351, 351, 351, 351, 351, 351, 351,
+ 351, 351, 351, 351, 351, 351, 351, 351,
+ 386, 386, 351, 351, 351, 351, 351, 386,
+
+ 348, 351, 349, 350, 350, 350, 350, 350,
+ 350, 350, 350, 350, 351, 350, 351, 387,
+ 351, 351, 350, 348, 388, 350, 389, 389,
+ 389, 389, 389, 389, 389, 390, 391, 389,
+
+ 389, 389, 389, 392, 389, 393, 393, 389,
+ 389, 391, 392, 389, 389, 392, 394, 394,
+ 395, 396, 397, 398, 399, 400, 401, 402,
+ 403, 404, 386, 386, 386, 405, 405, 406,
+
+ 407, 407, 407, 408, 408, 408, 408, 408,
+ 408, 408, 408, 408, 408, 408, 343, 409,
+ 410, 411, 412, 412, 412, 410, 410, 410,
+ 410, 410, 412, 412, 412, 412, 410, 412,
+
+ 412, 412, 412, 412, 412, 412, 412, 412,
+ 410, 412, 410, 412, 410, 413, 413, 414,
+ 415, 416, 415, 415, 416, 415, 415, 416,
+ 416, 416, 415, 416, 416, 415, 416, 415,
+
+ 415, 415, 416, 415, 416, 415, 416, 415,
+ 416, 415, 415, 343, 343, 414, 413, 413,
+ 417, 417, 417, 417, 417, 417, 417, 417,
+ 417, 418, 418, 418, 417, 417, 417, 417,
+
+ 417, 417, 417, 417, 417, 417, 417, 417,
+ 417, 417, 417, 418, 418, 417, 352, 352,
+ 352, 419, 352, 419, 419, 352, 352, 352,
+ 419, 419, 352, 352, 352, 352, 352, 352,
+
+ 420, 420, 420, 420, 420, 420, 420, 420,
+ 420, 420, 420, 420, 420, 420, 420, 420,
+ 420, 420, 420, 420, 420, 420, 420, 420,
420, 420, 420, 420, 420, 420, 420, 420,
- 420, 421, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
-
- 422, 423, 424, 425, 426, 427, 428, 429,
- 430, 431, 432, 432, 432, 432, 432, 432,
- 432, 432, 432, 432, 432, 432, 432, 432,
- 432, 432, 432, 432, 432, 432, 432, 432,
-
- 432, 432, 432, 432, 432, 432, 432, 432,
- 432, 432, 432, 433, 433, 433, 433, 433,
- 433, 433, 434, 433, 435, 435, 436, 437,
- 438, 439, 440, 296, 296, 296, 296, 296,
-
- 441, 441, 441, 441, 441, 441, 441, 441,
- 441, 441, 441, 441, 441, 441, 441, 441,
- 441, 441, 441, 441, 441, 441, 442, 442,
- 442, 442, 443, 442, 442, 442, 442, 442,
-
- 442, 442, 442, 442, 443, 442, 442, 442,
- 443, 442, 442, 442, 442, 442, 296, 296,
- 444, 444, 444, 444, 444, 444, 444, 444,
- 444, 444, 444, 444, 444, 444, 444, 296,
-
- 445, 446, 446, 446, 446, 446, 445, 446,
- 446, 445, 446, 446, 446, 446, 446, 445,
- 446, 446, 446, 446, 445, 446, 447, 447,
- 447, 448, 448, 448, 296, 296, 449, 296,
-
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 450, 451, 450, 450, 450, 450, 450, 450,
- 450, 450, 452, 452, 452, 453, 454, 451,
- 451, 454, 454, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
-
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
-
- 342, 342, 342, 342, 455, 455, 456, 455,
- 455, 456, 455, 455, 455, 456, 456, 456,
- 457, 458, 459, 455, 455, 455, 456, 455,
- 455, 456, 456, 455, 455, 455, 455, 460,
-
- 461, 462, 462, 463, 464, 465, 465, 465,
- 465, 465, 465, 465, 465, 465, 465, 465,
- 465, 465, 465, 465, 465, 465, 465, 465,
- 465, 465, 465, 465, 465, 465, 465, 465,
-
- 465, 465, 465, 465, 465, 465, 465, 465,
- 465, 466, 465, 465, 465, 465, 465, 465,
- 465, 466, 465, 465, 466, 465, 465, 465,
- 465, 465, 467, 468, 469, 465, 463, 463,
-
- 463, 462, 462, 462, 462, 462, 462, 462,
- 462, 463, 463, 463, 463, 470, 471, 468,
- 465, 170, 172, 472, 472, 461, 467, 467,
- 473, 473, 473, 473, 473, 473, 473, 473,
-
- 465, 465, 462, 462, 474, 474, 475, 476,
- 477, 478, 479, 480, 481, 482, 483, 484,
- 485, 486, 487, 488, 488, 488, 488, 488,
- 489, 490, 490, 491, 491, 492, 491, 491,
-
- 493, 494, 495, 495, 199, 496, 496, 496,
- 496, 496, 496, 496, 496, 199, 199, 496,
- 496, 199, 199, 496, 496, 496, 496, 496,
- 496, 496, 496, 496, 496, 496, 496, 496,
-
- 496, 496, 496, 496, 496, 496, 496, 496,
- 496, 199, 496, 496, 496, 496, 496, 496,
- 496, 199, 496, 199, 199, 199, 496, 496,
- 496, 496, 199, 199, 497, 498, 499, 495,
-
- 495, 494, 494, 494, 494, 199, 199, 495,
- 495, 199, 199, 500, 500, 501, 502, 199,
- 199, 199, 199, 199, 199, 199, 199, 499,
- 199, 199, 199, 199, 503, 503, 199, 503,
-
- 496, 496, 494, 494, 199, 199, 504, 505,
- 506, 507, 508, 509, 510, 511, 512, 513,
- 496, 496, 514, 514, 515, 515, 515, 515,
- 515, 516, 517, 518, 199, 199, 199, 199,
-
- 199, 519, 520, 521, 199, 522, 522, 522,
- 522, 522, 522, 199, 199, 199, 199, 522,
- 522, 199, 199, 522, 522, 522, 522, 522,
- 522, 522, 522, 522, 522, 522, 522, 522,
-
- 522, 522, 522, 522, 522, 522, 522, 522,
- 522, 199, 522, 522, 522, 522, 522, 522,
- 522, 199, 522, 523, 199, 522, 523, 199,
- 522, 522, 199, 199, 524, 199, 525, 525,
-
- 525, 520, 520, 199, 199, 199, 199, 520,
- 520, 199, 199, 520, 520, 526, 199, 199,
- 199, 527, 199, 199, 199, 199, 199, 199,
- 199, 523, 523, 523, 522, 199, 523, 199,
-
- 199, 199, 199, 199, 199, 199, 528, 529,
- 530, 531, 532, 533, 534, 535, 536, 537,
- 520, 520, 522, 522, 522, 527, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 538, 538, 539, 199, 540, 540, 540,
- 540, 540, 540, 540, 541, 540, 199, 540,
- 540, 540, 199, 540, 540, 540, 540, 540,
- 540, 540, 540, 540, 540, 540, 540, 540,
-
- 540, 540, 540, 540, 540, 540, 540, 540,
- 540, 199, 540, 540, 540, 540, 540, 540,
- 540, 199, 540, 540, 199, 540, 540, 540,
- 540, 540, 199, 199, 542, 540, 539, 539,
-
- 539, 538, 538, 538, 538, 538, 199, 538,
- 538, 539, 199, 539, 539, 543, 199, 199,
- 540, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 540, 541, 544, 544, 199, 199, 545, 546,
- 547, 548, 549, 550, 551, 552, 553, 554,
- 555, 556, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 557, 558, 558, 199, 559, 559, 559,
- 559, 559, 559, 559, 559, 199, 199, 559,
- 559, 199, 199, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 199, 559, 559, 559, 559, 559, 559,
- 559, 199, 559, 559, 199, 560, 559, 559,
- 559, 559, 199, 199, 561, 559, 562, 557,
-
- 558, 557, 557, 557, 563, 199, 199, 558,
- 564, 199, 199, 564, 564, 565, 199, 199,
- 199, 199, 199, 199, 199, 199, 566, 562,
- 199, 199, 199, 199, 567, 567, 199, 559,
-
- 559, 559, 563, 563, 199, 199, 568, 569,
- 570, 571, 572, 573, 574, 575, 576, 577,
- 578, 560, 579, 579, 579, 579, 579, 579,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 580, 581, 199, 581, 581, 581,
- 581, 581, 581, 199, 199, 199, 581, 581,
- 581, 199, 581, 581, 582, 581, 199, 199,
- 199, 581, 581, 199, 581, 199, 581, 581,
-
- 199, 199, 199, 581, 581, 199, 199, 199,
- 581, 581, 581, 199, 199, 199, 581, 581,
- 581, 581, 581, 581, 581, 581, 583, 581,
- 581, 581, 199, 199, 199, 199, 584, 585,
-
- 580, 585, 585, 199, 199, 199, 585, 585,
- 585, 199, 586, 586, 586, 587, 199, 199,
- 588, 199, 199, 199, 199, 199, 199, 584,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 589, 590,
- 591, 592, 593, 594, 595, 596, 597, 598,
- 599, 599, 599, 600, 600, 600, 600, 600,
- 600, 601, 600, 199, 199, 199, 199, 199,
-
- 602, 603, 603, 603, 199, 604, 604, 604,
- 604, 604, 604, 604, 604, 199, 604, 604,
- 604, 199, 604, 604, 604, 604, 604, 604,
- 604, 604, 604, 604, 604, 604, 604, 604,
-
- 604, 604, 604, 604, 604, 604, 604, 604,
- 604, 199, 604, 604, 604, 604, 604, 604,
- 604, 604, 604, 604, 605, 604, 604, 604,
- 604, 604, 199, 199, 199, 606, 607, 607,
-
- 607, 603, 603, 603, 603, 199, 607, 607,
- 608, 199, 607, 607, 607, 609, 199, 199,
- 199, 199, 199, 199, 199, 610, 611, 199,
- 606, 606, 199, 199, 199, 199, 199, 199,
-
- 604, 604, 612, 612, 199, 199, 613, 614,
- 615, 616, 617, 618, 619, 620, 621, 622,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 623, 623, 623, 623, 623, 623, 623, 624,
-
- 199, 625, 626, 626, 199, 627, 627, 627,
- 627, 627, 627, 627, 627, 199, 627, 627,
- 627, 199, 627, 627, 627, 627, 627, 627,
- 627, 627, 627, 627, 627, 627, 627, 627,
-
- 627, 627, 627, 627, 627, 627, 627, 627,
- 627, 199, 627, 627, 627, 627, 627, 627,
- 627, 627, 627, 627, 199, 627, 627, 627,
- 627, 627, 199, 199, 628, 629, 626, 630,
-
- 631, 626, 632, 626, 626, 199, 630, 631,
- 631, 199, 631, 631, 633, 634, 199, 199,
- 199, 199, 199, 199, 199, 632, 632, 199,
- 199, 199, 199, 199, 199, 199, 627, 199,
-
- 627, 627, 635, 635, 199, 199, 636, 637,
- 638, 639, 640, 641, 642, 643, 644, 645,
- 199, 646, 646, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 647, 648, 648, 199, 649, 649, 649,
- 649, 649, 649, 649, 649, 199, 649, 649,
- 649, 199, 649, 649, 649, 649, 649, 649,
- 649, 649, 649, 649, 649, 649, 649, 649,
-
- 649, 649, 649, 649, 649, 649, 649, 649,
- 649, 650, 649, 649, 649, 649, 649, 649,
- 649, 649, 649, 649, 649, 649, 649, 649,
- 649, 649, 650, 199, 199, 651, 652, 648,
-
- 648, 653, 653, 653, 654, 199, 648, 648,
- 648, 199, 655, 655, 655, 656, 650, 199,
- 199, 199, 199, 199, 199, 199, 199, 652,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 649, 649, 654, 654, 199, 199, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 667, 667, 667, 667, 667, 199, 199,
- 199, 668, 651, 651, 651, 651, 651, 651,
-
- 199, 199, 669, 669, 199, 670, 670, 670,
- 670, 670, 670, 670, 670, 670, 670, 670,
- 670, 670, 670, 670, 670, 670, 670, 199,
- 199, 199, 670, 670, 670, 670, 670, 670,
-
- 670, 670, 670, 670, 670, 670, 670, 670,
- 670, 670, 670, 670, 670, 670, 670, 670,
- 670, 670, 199, 670, 670, 670, 670, 670,
- 670, 670, 670, 670, 199, 670, 199, 199,
-
- 670, 670, 670, 670, 670, 670, 670, 199,
- 199, 199, 671, 199, 199, 199, 199, 672,
- 669, 669, 673, 673, 673, 199, 673, 199,
- 669, 669, 674, 669, 674, 674, 674, 672,
-
- 199, 199, 199, 199, 199, 199, 675, 676,
- 677, 678, 679, 680, 681, 682, 683, 684,
- 199, 199, 669, 669, 685, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 686, 686, 686, 686, 686, 686, 686,
- 686, 686, 686, 686, 686, 686, 686, 686,
- 686, 686, 686, 686, 686, 686, 686, 686,
- 686, 686, 686, 686, 686, 686, 686, 686,
-
- 686, 686, 686, 686, 686, 686, 686, 686,
- 686, 686, 686, 686, 686, 686, 686, 686,
- 686, 687, 686, 688, 687, 687, 687, 687,
- 689, 689, 690, 199, 199, 199, 199, 12,
-
- 686, 686, 686, 686, 686, 686, 691, 687,
- 692, 692, 692, 692, 687, 687, 687, 693,
- 694, 695, 696, 697, 698, 699, 700, 701,
- 702, 703, 704, 704, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 705, 705, 199, 705, 199, 199, 705,
- 705, 199, 705, 199, 199, 705, 199, 199,
- 199, 199, 199, 199, 705, 705, 705, 705,
- 199, 705, 705, 705, 705, 705, 705, 705,
-
- 199, 705, 705, 705, 199, 705, 199, 705,
- 199, 199, 705, 705, 199, 705, 705, 705,
- 705, 706, 705, 707, 706, 706, 706, 706,
- 708, 708, 199, 706, 706, 705, 199, 199,
-
- 705, 705, 705, 705, 705, 199, 709, 199,
- 710, 710, 710, 710, 706, 706, 199, 199,
- 711, 712, 713, 714, 715, 716, 717, 718,
- 719, 720, 199, 199, 721, 721, 722, 722,
-
- 723, 724, 724, 724, 725, 726, 725, 725,
- 727, 725, 725, 728, 729, 730, 730, 730,
- 730, 730, 727, 731, 730, 731, 731, 731,
- 732, 732, 731, 731, 731, 731, 731, 731,
-
- 733, 734, 735, 736, 737, 738, 739, 740,
- 741, 742, 743, 743, 743, 743, 743, 743,
- 743, 743, 743, 743, 744, 732, 731, 732,
- 731, 745, 746, 747, 746, 747, 748, 748,
-
- 723, 723, 723, 749, 723, 723, 723, 723,
- 199, 723, 723, 723, 723, 749, 723, 723,
- 723, 723, 749, 723, 723, 723, 723, 749,
- 723, 723, 723, 723, 749, 723, 723, 723,
-
- 723, 723, 723, 723, 723, 723, 723, 723,
- 723, 749, 750, 751, 751, 199, 199, 199,
- 199, 752, 753, 754, 755, 754, 754, 756,
- 754, 756, 753, 753, 753, 753, 757, 758,
-
- 753, 754, 759, 759, 760, 728, 759, 759,
- 723, 723, 723, 723, 761, 762, 762, 762,
- 757, 757, 757, 754, 757, 757, 763, 757,
- 199, 757, 757, 757, 757, 754, 757, 757,
-
- 757, 757, 754, 757, 757, 757, 757, 754,
- 757, 757, 757, 757, 754, 757, 763, 763,
- 763, 757, 757, 757, 757, 757, 757, 757,
- 763, 754, 763, 763, 763, 199, 764, 764,
-
- 765, 765, 765, 765, 765, 765, 766, 765,
- 765, 765, 765, 765, 765, 199, 767, 765,
- 768, 768, 769, 770, 771, 772, 772, 772,
- 772, 773, 773, 199, 199, 199, 199, 199,
-
- 774, 774, 774, 774, 774, 774, 774, 774,
- 774, 774, 774, 774, 774, 774, 774, 774,
- 774, 774, 774, 774, 774, 774, 774, 774,
- 774, 774, 774, 774, 774, 774, 774, 774,
-
- 774, 774, 775, 774, 774, 774, 776, 774,
- 775, 774, 774, 777, 778, 779, 780, 779,
- 779, 781, 779, 782, 782, 782, 779, 783,
- 778, 784, 785, 786, 786, 782, 782, 775,
-
- 787, 788, 789, 790, 791, 792, 793, 794,
- 795, 796, 797, 797, 798, 798, 798, 798,
- 774, 774, 774, 774, 774, 774, 781, 781,
- 779, 779, 775, 775, 775, 775, 782, 782,
-
- 782, 775, 777, 777, 777, 775, 775, 777,
- 777, 777, 777, 777, 777, 777, 775, 775,
- 775, 782, 782, 782, 782, 775, 775, 775,
- 775, 775, 775, 775, 775, 775, 775, 775,
-
- 775, 775, 782, 777, 786, 782, 782, 777,
- 777, 777, 777, 777, 777, 799, 775, 777,
- 800, 801, 802, 803, 804, 805, 806, 807,
- 808, 809, 810, 810, 810, 811, 812, 812,
-
- 813, 813, 813, 813, 813, 813, 813, 813,
- 813, 813, 813, 813, 813, 813, 813, 813,
- 813, 813, 813, 813, 813, 813, 813, 813,
- 813, 813, 813, 813, 813, 813, 813, 813,
-
- 813, 813, 813, 813, 813, 813, 199, 814,
- 199, 199, 199, 199, 199, 814, 199, 199,
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
-
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 815,
- 815, 815, 815, 815, 815, 815, 815, 816,
- 816, 817, 817, 818, 819, 820, 820, 820,
- 821, 821, 821, 821, 821, 821, 821, 821,
- 821, 821, 821, 821, 821, 821, 821, 821,
+ 420, 420, 420, 420, 420, 420, 421, 421,
+ 421, 421, 421, 421, 421, 421, 421, 421,
+ 421, 422, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+
+ 423, 424, 425, 426, 427, 428, 429, 430,
+ 431, 432, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 433, 433, 433, 433, 433,
+
+ 433, 433, 433, 433, 433, 433, 433, 433,
+ 433, 433, 433, 434, 434, 434, 434, 434,
+ 434, 434, 435, 434, 436, 436, 437, 438,
+ 439, 440, 441, 297, 297, 297, 297, 297,
+
+ 442, 442, 442, 442, 442, 442, 442, 442,
+ 442, 442, 442, 442, 442, 442, 442, 442,
+ 442, 442, 442, 442, 442, 442, 443, 443,
+ 443, 443, 444, 443, 443, 443, 443, 443,
+
+ 443, 443, 443, 443, 444, 443, 443, 443,
+ 444, 443, 443, 443, 443, 443, 297, 297,
+ 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 297,
+
+ 446, 447, 447, 447, 447, 447, 446, 446,
+ 447, 446, 447, 447, 447, 447, 447, 447,
+ 447, 447, 447, 447, 446, 447, 448, 448,
+ 448, 449, 449, 449, 297, 297, 450, 297,
+
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 451, 452, 451, 451, 451, 451, 451, 451,
+ 451, 451, 453, 453, 453, 454, 455, 452,
+ 452, 455, 455, 456, 456, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+
+ 343, 343, 343, 457, 458, 458, 459, 458,
+ 458, 459, 458, 458, 458, 459, 459, 459,
+ 460, 461, 462, 458, 458, 458, 459, 458,
+ 458, 459, 459, 458, 458, 458, 458, 463,
+
+ 464, 465, 465, 466, 467, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468,
+
+ 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 469, 468, 468, 468, 468, 468, 468,
+ 468, 469, 468, 468, 469, 468, 468, 468,
+ 468, 468, 470, 471, 472, 468, 466, 466,
+
+ 466, 465, 465, 465, 465, 465, 465, 465,
+ 465, 466, 466, 466, 466, 473, 474, 471,
+ 468, 171, 173, 475, 475, 464, 470, 470,
+ 476, 476, 476, 476, 476, 476, 476, 476,
+
+ 468, 468, 465, 465, 477, 477, 478, 479,
+ 480, 481, 482, 483, 484, 485, 486, 487,
+ 488, 489, 490, 491, 491, 491, 491, 491,
+ 492, 493, 493, 494, 494, 495, 494, 494,
+
+ 496, 497, 498, 498, 200, 499, 499, 499,
+ 499, 499, 499, 499, 499, 200, 200, 499,
+ 499, 200, 200, 499, 499, 499, 499, 499,
+ 499, 499, 499, 499, 499, 499, 499, 499,
+
+ 499, 499, 499, 499, 499, 499, 499, 499,
+ 499, 200, 499, 499, 499, 499, 499, 499,
+ 499, 200, 499, 200, 200, 200, 499, 499,
+ 499, 499, 200, 200, 500, 501, 502, 498,
+
+ 498, 497, 497, 497, 497, 200, 200, 498,
+ 498, 200, 200, 503, 503, 504, 505, 200,
+ 200, 200, 200, 200, 200, 200, 200, 502,
+ 200, 200, 200, 200, 506, 506, 200, 506,
+
+ 499, 499, 497, 497, 200, 200, 507, 508,
+ 509, 510, 511, 512, 513, 514, 515, 516,
+ 499, 499, 517, 517, 518, 518, 518, 518,
+ 518, 519, 520, 521, 200, 200, 200, 200,
+
+ 200, 522, 523, 524, 200, 525, 525, 525,
+ 525, 525, 525, 200, 200, 200, 200, 525,
+ 525, 200, 200, 525, 525, 525, 525, 525,
+ 525, 525, 525, 525, 525, 525, 525, 525,
+
+ 525, 525, 525, 525, 525, 525, 525, 525,
+ 525, 200, 525, 525, 525, 525, 525, 525,
+ 525, 200, 525, 526, 200, 525, 526, 200,
+ 525, 525, 200, 200, 527, 200, 528, 528,
+
+ 528, 523, 523, 200, 200, 200, 200, 523,
+ 523, 200, 200, 523, 523, 529, 200, 200,
+ 200, 530, 200, 200, 200, 200, 200, 200,
+ 200, 526, 526, 526, 525, 200, 526, 200,
+
+ 200, 200, 200, 200, 200, 200, 531, 532,
+ 533, 534, 535, 536, 537, 538, 539, 540,
+ 523, 523, 525, 525, 525, 530, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 541, 541, 542, 200, 543, 543, 543,
+ 543, 543, 543, 543, 544, 543, 200, 543,
+ 543, 543, 200, 543, 543, 543, 543, 543,
+ 543, 543, 543, 543, 543, 543, 543, 543,
+
+ 543, 543, 543, 543, 543, 543, 543, 543,
+ 543, 200, 543, 543, 543, 543, 543, 543,
+ 543, 200, 543, 543, 200, 543, 543, 543,
+ 543, 543, 200, 200, 545, 543, 542, 542,
+
+ 542, 541, 541, 541, 541, 541, 200, 541,
+ 541, 542, 200, 542, 542, 546, 200, 200,
+ 543, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 543, 544, 547, 547, 200, 200, 548, 549,
+ 550, 551, 552, 553, 554, 555, 556, 557,
+ 558, 559, 200, 200, 200, 200, 200, 200,
+ 200, 560, 200, 200, 200, 200, 200, 200,
+
+ 200, 561, 562, 562, 200, 563, 563, 563,
+ 563, 563, 563, 563, 563, 200, 200, 563,
+ 563, 200, 200, 563, 563, 563, 563, 563,
+ 563, 563, 563, 563, 563, 563, 563, 563,
+
+ 563, 563, 563, 563, 563, 563, 563, 563,
+ 563, 200, 563, 563, 563, 563, 563, 563,
+ 563, 200, 563, 563, 200, 564, 563, 563,
+ 563, 563, 200, 200, 565, 563, 566, 561,
+
+ 562, 561, 561, 561, 567, 200, 200, 562,
+ 568, 200, 200, 568, 568, 569, 200, 200,
+ 200, 200, 200, 200, 200, 200, 570, 566,
+ 200, 200, 200, 200, 571, 571, 200, 563,
+
+ 563, 563, 567, 567, 200, 200, 572, 573,
+ 574, 575, 576, 577, 578, 579, 580, 581,
+ 582, 564, 583, 583, 583, 583, 583, 583,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 584, 585, 200, 585, 585, 585,
+ 585, 585, 585, 200, 200, 200, 585, 585,
+ 585, 200, 585, 585, 586, 585, 200, 200,
+ 200, 585, 585, 200, 585, 200, 585, 585,
+
+ 200, 200, 200, 585, 585, 200, 200, 200,
+ 585, 585, 585, 200, 200, 200, 585, 585,
+ 585, 585, 585, 585, 585, 585, 587, 585,
+ 585, 585, 200, 200, 200, 200, 588, 589,
+
+ 584, 589, 589, 200, 200, 200, 589, 589,
+ 589, 200, 590, 590, 590, 591, 200, 200,
+ 592, 200, 200, 200, 200, 200, 200, 588,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 593, 594,
+ 595, 596, 597, 598, 599, 600, 601, 602,
+ 603, 603, 603, 604, 604, 604, 604, 604,
+ 604, 605, 604, 200, 200, 200, 200, 200,
+
+ 606, 607, 607, 607, 200, 608, 608, 608,
+ 608, 608, 608, 608, 608, 200, 608, 608,
+ 608, 200, 608, 608, 608, 608, 608, 608,
+ 608, 608, 608, 608, 608, 608, 608, 608,
+
+ 608, 608, 608, 608, 608, 608, 608, 608,
+ 608, 200, 608, 608, 608, 608, 608, 608,
+ 608, 608, 608, 608, 609, 608, 608, 608,
+ 608, 608, 200, 200, 200, 610, 611, 611,
+
+ 611, 607, 607, 607, 607, 200, 611, 611,
+ 612, 200, 611, 611, 611, 613, 200, 200,
+ 200, 200, 200, 200, 200, 614, 615, 200,
+ 610, 610, 616, 200, 200, 200, 200, 200,
+
+ 608, 608, 617, 617, 200, 200, 618, 619,
+ 620, 621, 622, 623, 624, 625, 626, 627,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 628, 628, 628, 628, 628, 628, 628, 629,
+
+ 200, 630, 631, 631, 200, 632, 632, 632,
+ 632, 632, 632, 632, 632, 200, 632, 632,
+ 632, 200, 632, 632, 632, 632, 632, 632,
+ 632, 632, 632, 632, 632, 632, 632, 632,
+
+ 632, 632, 632, 632, 632, 632, 632, 632,
+ 632, 200, 632, 632, 632, 632, 632, 632,
+ 632, 632, 632, 632, 200, 632, 632, 632,
+ 632, 632, 200, 200, 633, 634, 631, 635,
+
+ 636, 631, 637, 631, 631, 200, 635, 636,
+ 636, 200, 636, 636, 638, 639, 200, 200,
+ 200, 200, 200, 200, 200, 637, 637, 200,
+ 200, 200, 200, 200, 200, 200, 632, 200,
+
+ 632, 632, 640, 640, 200, 200, 641, 642,
+ 643, 644, 645, 646, 647, 648, 649, 650,
+ 200, 651, 651, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 652, 653, 653, 200, 654, 654, 654,
+ 654, 654, 654, 654, 654, 200, 654, 654,
+ 654, 200, 654, 654, 654, 654, 654, 654,
+ 654, 654, 654, 654, 654, 654, 654, 654,
+
+ 654, 654, 654, 654, 654, 654, 654, 654,
+ 654, 655, 654, 654, 654, 654, 654, 654,
+ 654, 654, 654, 654, 654, 654, 654, 654,
+ 654, 654, 655, 200, 200, 656, 657, 653,
+
+ 653, 658, 658, 658, 659, 200, 653, 653,
+ 653, 200, 660, 660, 660, 661, 655, 200,
+ 200, 200, 200, 200, 200, 200, 200, 657,
+ 200, 200, 200, 200, 200, 200, 200, 662,
+
+ 654, 654, 659, 659, 200, 200, 663, 664,
+ 665, 666, 667, 668, 669, 670, 671, 672,
+ 673, 673, 673, 673, 673, 673, 200, 200,
+ 200, 674, 656, 656, 656, 656, 656, 656,
+
+ 200, 200, 675, 675, 200, 676, 676, 676,
+ 676, 676, 676, 676, 676, 676, 676, 676,
+ 676, 676, 676, 676, 676, 676, 676, 200,
+ 200, 200, 676, 676, 676, 676, 676, 676,
+
+ 676, 676, 676, 676, 676, 676, 676, 676,
+ 676, 676, 676, 676, 676, 676, 676, 676,
+ 676, 676, 200, 676, 676, 676, 676, 676,
+ 676, 676, 676, 676, 200, 676, 200, 200,
+
+ 676, 676, 676, 676, 676, 676, 676, 200,
+ 200, 200, 677, 200, 200, 200, 200, 678,
+ 675, 675, 679, 679, 679, 200, 679, 200,
+ 675, 675, 680, 675, 680, 680, 680, 678,
+
+ 200, 200, 200, 200, 200, 200, 681, 682,
+ 683, 684, 685, 686, 687, 688, 689, 690,
+ 200, 200, 675, 675, 691, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 692, 692, 692, 692, 692, 692, 692,
+ 692, 692, 692, 692, 692, 692, 692, 692,
+ 692, 692, 692, 692, 692, 692, 692, 692,
+ 692, 692, 692, 692, 692, 692, 692, 692,
+
+ 692, 692, 692, 692, 692, 692, 692, 692,
+ 692, 692, 692, 692, 692, 692, 692, 692,
+ 692, 693, 692, 694, 693, 693, 693, 693,
+ 695, 695, 696, 200, 200, 200, 200, 12,
+
+ 692, 692, 692, 692, 692, 692, 697, 693,
+ 698, 698, 698, 698, 693, 693, 693, 699,
+ 700, 701, 702, 703, 704, 705, 706, 707,
+ 708, 709, 710, 710, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 711, 711, 200, 711, 200, 200, 711,
+ 711, 200, 711, 200, 200, 711, 200, 200,
+ 200, 200, 200, 200, 711, 711, 711, 711,
+ 200, 711, 711, 711, 711, 711, 711, 711,
+
+ 200, 711, 711, 711, 200, 711, 200, 711,
+ 200, 200, 711, 711, 200, 711, 711, 711,
+ 711, 712, 711, 713, 712, 712, 712, 712,
+ 714, 714, 200, 712, 712, 711, 200, 200,
+
+ 711, 711, 711, 711, 711, 200, 715, 200,
+ 716, 716, 716, 716, 712, 712, 200, 200,
+ 717, 718, 719, 720, 721, 722, 723, 724,
+ 725, 726, 200, 200, 727, 727, 728, 728,
+
+ 729, 730, 730, 730, 731, 732, 731, 731,
+ 733, 731, 731, 734, 735, 736, 736, 736,
+ 736, 736, 733, 737, 736, 737, 737, 737,
+ 738, 738, 737, 737, 737, 737, 737, 737,
+
+ 739, 740, 741, 742, 743, 744, 745, 746,
+ 747, 748, 749, 749, 749, 749, 749, 749,
+ 749, 749, 749, 749, 750, 738, 737, 738,
+ 737, 751, 752, 753, 752, 753, 754, 754,
+
+ 729, 729, 729, 755, 729, 729, 729, 729,
+ 200, 729, 729, 729, 729, 755, 729, 729,
+ 729, 729, 755, 729, 729, 729, 729, 755,
+ 729, 729, 729, 729, 755, 729, 729, 729,
+
+ 729, 729, 729, 729, 729, 729, 729, 729,
+ 729, 755, 756, 757, 757, 200, 200, 200,
+ 200, 758, 759, 760, 761, 760, 760, 762,
+ 760, 762, 759, 759, 759, 759, 763, 764,
+
+ 759, 760, 765, 765, 766, 734, 765, 765,
+ 729, 729, 729, 729, 767, 768, 768, 768,
+ 763, 763, 763, 760, 763, 763, 769, 763,
+ 200, 763, 763, 763, 763, 760, 763, 763,
+
+ 763, 763, 760, 763, 763, 763, 763, 760,
+ 763, 763, 763, 763, 760, 763, 769, 769,
+ 769, 763, 763, 763, 763, 763, 763, 763,
+ 769, 760, 769, 769, 769, 200, 770, 770,
+
+ 771, 771, 771, 771, 771, 771, 772, 771,
+ 771, 771, 771, 771, 771, 200, 773, 771,
+ 774, 774, 775, 776, 777, 778, 778, 778,
+ 778, 779, 779, 200, 200, 200, 200, 200,
+
+ 780, 780, 780, 780, 780, 780, 780, 780,
+ 780, 780, 780, 780, 780, 780, 780, 780,
+ 780, 780, 780, 780, 780, 780, 780, 780,
+ 780, 780, 780, 780, 780, 780, 780, 780,
+
+ 780, 780, 781, 780, 780, 780, 782, 780,
+ 781, 780, 780, 783, 784, 785, 786, 785,
+ 785, 787, 785, 788, 788, 788, 785, 789,
+ 784, 790, 791, 792, 792, 788, 788, 781,
+
+ 793, 794, 795, 796, 797, 798, 799, 800,
+ 801, 802, 803, 803, 804, 804, 804, 804,
+ 780, 780, 780, 780, 780, 780, 787, 787,
+ 785, 785, 781, 781, 781, 781, 788, 788,
+
+ 788, 781, 783, 783, 783, 781, 781, 783,
+ 783, 783, 783, 783, 783, 783, 781, 781,
+ 781, 788, 788, 788, 788, 781, 781, 781,
+ 781, 781, 781, 781, 781, 781, 781, 781,
+
+ 781, 781, 788, 783, 792, 788, 788, 783,
+ 783, 783, 783, 783, 783, 805, 781, 783,
+ 806, 807, 808, 809, 810, 811, 812, 813,
+ 814, 815, 816, 816, 816, 817, 818, 818,
+
+ 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819,
+ 819, 819, 819, 819, 819, 819, 819, 819,
+
+ 819, 819, 819, 819, 819, 819, 200, 820,
+ 200, 200, 200, 200, 200, 820, 200, 200,
821, 821, 821, 821, 821, 821, 821, 821,
821, 821, 821, 821, 821, 821, 821, 821,
821, 821, 821, 821, 821, 821, 821, 821,
821, 821, 821, 821, 821, 821, 821, 821,
- 821, 821, 821, 821, 821, 821, 821, 821,
- 821, 821, 822, 822, 822, 822, 822, 821,
-
- 823, 824, 824, 824, 824, 824, 824, 824,
- 824, 824, 824, 824, 824, 824, 824, 824,
- 824, 824, 824, 824, 824, 824, 823, 823,
- 823, 823, 823, 823, 823, 823, 823, 823,
+ 821, 821, 821, 821, 821, 821, 821, 822,
+ 822, 823, 823, 824, 825, 826, 826, 826,
- 823, 823, 823, 823, 823, 823, 823, 823,
- 823, 823, 823, 823, 823, 823, 823, 823,
- 823, 823, 823, 823, 823, 823, 823, 823,
- 823, 823, 823, 823, 823, 823, 823, 823,
-
- 823, 823, 823, 825, 825, 825, 825, 825,
- 826, 826, 826, 826, 826, 826, 826, 826,
- 826, 826, 826, 826, 826, 826, 826, 826,
- 826, 826, 826, 826, 826, 826, 826, 826,
-
- 826, 826, 826, 827, 827, 827, 827, 827,
+ 827, 827, 827, 827, 827, 827, 827, 827,
827, 827, 827, 827, 827, 827, 827, 827,
827, 827, 827, 827, 827, 827, 827, 827,
827, 827, 827, 827, 827, 827, 827, 827,
@@ -1559,202 +1534,202 @@ static const unsigned short uc_property_trie[] = {
827, 827, 827, 827, 827, 827, 827, 827,
827, 827, 827, 827, 827, 827, 827, 827,
827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 828, 828, 828, 828, 828, 828,
-
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
+ 827, 827, 828, 828, 828, 828, 828, 827,
+ 829, 830, 830, 830, 830, 830, 830, 830,
+ 830, 830, 830, 830, 830, 830, 830, 830,
+ 830, 830, 830, 830, 830, 830, 829, 829,
829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
-
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 199, 829, 829, 829, 829, 199, 199,
- 829, 829, 829, 829, 829, 829, 829, 199,
- 829, 199, 829, 829, 829, 829, 199, 199,
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 199, 829, 829, 829, 829, 199, 199,
829, 829, 829, 829, 829, 829, 829, 829,
829, 829, 829, 829, 829, 829, 829, 829,
-
829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 199, 829, 829, 829, 829, 199, 199,
- 829, 829, 829, 829, 829, 829, 829, 199,
-
- 829, 199, 829, 829, 829, 829, 199, 199,
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 829, 829, 829, 829, 829, 829, 199,
829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
+ 829, 829, 829, 831, 831, 831, 831, 831,
+ 832, 832, 832, 832, 832, 832, 832, 832,
+ 832, 832, 832, 832, 832, 832, 832, 832,
+ 832, 832, 832, 832, 832, 832, 832, 832,
+
+ 832, 832, 832, 833, 833, 833, 833, 833,
+ 833, 833, 833, 833, 833, 833, 833, 833,
+ 833, 833, 833, 833, 833, 833, 833, 833,
+ 833, 833, 833, 833, 833, 833, 833, 833,
+
+ 833, 833, 833, 833, 833, 833, 833, 833,
+ 833, 833, 833, 833, 833, 833, 833, 833,
+ 833, 833, 833, 833, 833, 833, 833, 833,
+ 833, 833, 834, 834, 834, 834, 834, 834,
+
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 200, 835, 835, 835, 835, 200, 200,
+ 835, 835, 835, 835, 835, 835, 835, 200,
+ 835, 200, 835, 835, 835, 835, 200, 200,
+
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 200, 835, 835, 835, 835, 200, 200,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 200, 835, 835, 835, 835, 200, 200,
+ 835, 835, 835, 835, 835, 835, 835, 200,
+
+ 835, 200, 835, 835, 835, 835, 200, 200,
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 835, 835, 835, 835, 835, 835, 200,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 200, 835, 835, 835, 835, 200, 200,
+ 835, 835, 835, 835, 835, 835, 835, 836,
+
+ 835, 835, 835, 835, 835, 835, 835, 836,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 835, 835, 835, 835, 835,
+ 835, 835, 835, 200, 200, 837, 837, 838,
+
+ 839, 840, 841, 842, 842, 842, 842, 841,
+ 841, 843, 844, 845, 846, 847, 848, 849,
+ 850, 851, 852, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 200, 200, 200,
+
+ 836, 836, 836, 836, 836, 836, 836, 836,
+ 836, 836, 836, 836, 836, 836, 836, 836,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 200, 200, 200, 200, 200, 200,
+
+ 854, 855, 856, 857, 858, 859, 860, 861,
+ 862, 863, 864, 865, 866, 867, 868, 869,
+ 870, 871, 872, 873, 874, 875, 876, 877,
+ 878, 879, 880, 881, 882, 883, 884, 885,
+
+ 886, 887, 888, 889, 890, 891, 892, 893,
+ 894, 895, 896, 897, 898, 899, 900, 901,
+ 902, 903, 904, 905, 906, 907, 908, 909,
+ 910, 911, 912, 913, 914, 915, 916, 917,
+
+ 918, 919, 920, 921, 922, 923, 924, 925,
+ 926, 927, 928, 929, 930, 931, 932, 933,
+ 934, 934, 934, 934, 934, 935, 200, 200,
+ 936, 936, 936, 936, 936, 936, 200, 200,
+
+ 937, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938,
+
+ 938, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938,
+
+ 938, 938, 938, 938, 938, 938, 938, 938,
+ 938, 938, 938, 938, 938, 939, 940, 938,
+ 938, 938, 938, 938, 938, 938, 938, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 199, 829, 829, 829, 829, 199, 199,
- 829, 829, 829, 829, 829, 829, 829, 830,
+ 942, 943, 943, 943, 943, 943, 943, 943,
+ 943, 943, 943, 943, 943, 943, 943, 943,
+ 943, 943, 943, 943, 943, 943, 943, 943,
+ 943, 943, 943, 944, 945, 200, 200, 200,
- 829, 829, 829, 829, 829, 829, 829, 830,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 199, 199, 831, 831, 832,
+ 946, 946, 946, 946, 946, 946, 946, 946,
+ 946, 946, 946, 946, 946, 946, 946, 946,
+ 946, 946, 946, 946, 946, 946, 946, 946,
+ 946, 946, 946, 946, 946, 946, 946, 946,
- 833, 834, 835, 836, 836, 836, 836, 835,
- 835, 837, 838, 839, 840, 841, 842, 843,
- 844, 845, 846, 846, 846, 846, 846, 846,
- 846, 846, 846, 846, 846, 199, 199, 199,
+ 946, 946, 946, 946, 946, 946, 946, 946,
+ 946, 946, 946, 947, 947, 947, 948, 948,
+ 948, 949, 949, 949, 949, 949, 949, 949,
+ 949, 200, 200, 200, 200, 200, 200, 200,
- 830, 830, 830, 830, 830, 830, 830, 830,
- 830, 830, 830, 830, 830, 830, 830, 830,
- 847, 847, 847, 847, 847, 847, 847, 847,
- 847, 847, 199, 199, 199, 199, 199, 199,
-
- 848, 848, 848, 848, 848, 848, 848, 848,
- 848, 848, 848, 848, 848, 848, 848, 848,
- 848, 848, 848, 848, 848, 848, 848, 848,
- 848, 848, 848, 848, 848, 848, 848, 848,
-
- 848, 848, 848, 848, 848, 848, 848, 848,
- 848, 848, 848, 848, 848, 848, 848, 848,
- 848, 848, 848, 848, 848, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 849, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850,
-
- 850, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 850, 850, 850,
-
- 850, 850, 850, 850, 850, 850, 850, 850,
- 850, 850, 850, 850, 850, 851, 852, 850,
- 850, 850, 850, 850, 850, 850, 850, 853,
- 853, 853, 853, 853, 853, 853, 853, 853,
+ 950, 950, 950, 950, 950, 950, 950, 950,
+ 950, 950, 950, 950, 950, 200, 950, 950,
+ 950, 950, 951, 951, 952, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 854, 855, 855, 855, 855, 855, 855, 855,
- 855, 855, 855, 855, 855, 855, 855, 855,
- 855, 855, 855, 855, 855, 855, 855, 855,
- 855, 855, 855, 856, 857, 199, 199, 199,
-
- 858, 858, 858, 858, 858, 858, 858, 858,
- 858, 858, 858, 858, 858, 858, 858, 858,
- 858, 858, 858, 858, 858, 858, 858, 858,
- 858, 858, 858, 858, 858, 858, 858, 858,
-
- 858, 858, 858, 858, 858, 858, 858, 858,
- 858, 858, 858, 859, 859, 859, 860, 860,
- 860, 861, 861, 861, 861, 861, 861, 861,
- 861, 199, 199, 199, 199, 199, 199, 199,
-
- 862, 862, 862, 862, 862, 862, 862, 862,
- 862, 862, 862, 862, 862, 199, 862, 862,
- 862, 862, 863, 863, 864, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 865, 865, 865, 865, 865, 865, 865, 865,
- 865, 865, 865, 865, 865, 865, 865, 865,
- 865, 865, 866, 866, 867, 868, 868, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 869, 869, 869, 869, 869, 869,
- 869, 869, 870, 870, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 871, 871, 871, 871, 871, 871, 871, 871,
- 871, 871, 871, 871, 871, 199, 871, 871,
- 871, 199, 872, 872, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 873, 873, 873, 873, 873, 873, 873, 873,
- 873, 873, 873, 873, 873, 873, 873, 873,
- 873, 873, 873, 873, 873, 873, 873, 873,
- 873, 873, 873, 873, 873, 873, 873, 873,
-
- 873, 873, 873, 873, 873, 873, 873, 873,
- 873, 873, 873, 873, 873, 873, 873, 873,
- 873, 873, 873, 873, 874, 874, 875, 874,
- 874, 874, 874, 874, 874, 874, 875, 875,
-
- 875, 875, 875, 875, 875, 875, 874, 875,
- 875, 874, 874, 874, 874, 874, 874, 874,
- 874, 874, 876, 874, 877, 877, 878, 879,
- 877, 880, 877, 881, 873, 882, 199, 199,
-
- 883, 884, 885, 886, 887, 888, 889, 890,
- 891, 892, 199, 199, 199, 199, 199, 199,
- 893, 893, 893, 893, 893, 893, 893, 893,
- 893, 893, 199, 199, 199, 199, 199, 199,
-
- 894, 894, 895, 896, 897, 898, 899, 900,
- 901, 902, 903, 904, 904, 904, 905, 199,
- 906, 907, 908, 909, 910, 911, 912, 913,
- 914, 915, 199, 199, 199, 199, 199, 199,
-
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
-
- 916, 916, 916, 917, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
-
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 918, 918, 918, 918, 918, 918, 918, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 916, 916, 916, 916, 916, 916, 916,
-
- 916, 916, 916, 916, 916, 916, 916, 916,
- 916, 919, 920, 199, 199, 199, 199, 199,
- 853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 853, 853, 853, 853, 853, 853,
+ 953, 953, 953, 953, 953, 953, 953, 953,
+ 953, 953, 953, 953, 953, 953, 953, 953,
+ 953, 953, 954, 954, 955, 956, 956, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 853, 853, 853, 853, 853, 853,
+ 957, 957, 957, 957, 957, 957, 957, 957,
+ 957, 957, 957, 957, 957, 957, 957, 957,
+ 957, 957, 958, 958, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 853, 853, 853, 853, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 200, 959, 959,
+ 959, 200, 960, 960, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 921, 921, 921, 921, 921, 921, 921, 921,
- 921, 921, 921, 921, 921, 921, 921, 921,
- 921, 921, 921, 921, 921, 921, 921, 921,
- 921, 921, 921, 921, 921, 922, 922, 199,
+ 961, 961, 961, 961, 961, 961, 961, 961,
+ 961, 961, 961, 961, 961, 961, 961, 961,
+ 961, 961, 961, 961, 961, 961, 961, 961,
+ 961, 961, 961, 961, 961, 961, 961, 961,
- 923, 923, 923, 924, 924, 924, 924, 923,
- 923, 924, 924, 924, 199, 199, 199, 199,
- 924, 924, 923, 924, 924, 924, 924, 924,
- 924, 925, 926, 927, 199, 199, 199, 199,
+ 961, 961, 961, 961, 961, 961, 961, 961,
+ 961, 961, 961, 961, 961, 961, 961, 961,
+ 961, 961, 961, 961, 962, 962, 963, 962,
+ 962, 962, 962, 962, 962, 962, 963, 963,
- 928, 199, 199, 199, 929, 929, 930, 931,
- 932, 933, 934, 935, 936, 937, 938, 939,
- 940, 940, 940, 940, 940, 940, 940, 940,
- 940, 940, 940, 940, 940, 940, 940, 940,
+ 963, 963, 963, 963, 963, 963, 962, 963,
+ 963, 962, 962, 962, 962, 962, 962, 962,
+ 962, 962, 964, 962, 965, 965, 966, 967,
+ 965, 968, 965, 969, 961, 970, 200, 200,
- 940, 940, 940, 940, 940, 940, 940, 940,
- 940, 940, 940, 940, 940, 940, 199, 199,
- 940, 940, 940, 940, 940, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
+ 971, 972, 973, 974, 975, 976, 977, 978,
+ 979, 980, 200, 200, 200, 200, 200, 200,
+ 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 200, 200, 200, 200, 200, 200,
+
+ 982, 982, 983, 984, 985, 986, 987, 988,
+ 989, 990, 991, 992, 992, 992, 993, 200,
+ 994, 995, 996, 997, 998, 999, 1000, 1001,
+ 1002, 1003, 200, 200, 200, 200, 200, 200,
+
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+
+ 1004, 1004, 1004, 1005, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+
+ 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
+ 1004, 1007, 1008, 200, 200, 200, 200, 200,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 941, 941,
941, 941, 941, 941, 941, 941, 941, 941,
941, 941, 941, 941, 941, 941, 941, 941,
@@ -1762,159 +1737,189 @@ static const unsigned short uc_property_trie[] = {
941, 941, 941, 941, 941, 941, 941, 941,
941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 942, 942, 199, 199, 199, 199,
- 943, 943, 943, 943, 943, 944, 944, 944,
- 943, 943, 944, 943, 943, 943, 943, 943,
-
- 943, 941, 941, 941, 941, 941, 941, 941,
- 943, 943, 199, 199, 199, 199, 199, 199,
- 945, 946, 947, 948, 949, 950, 951, 952,
- 953, 954, 955, 199, 199, 199, 956, 956,
-
- 957, 957, 957, 957, 957, 957, 957, 957,
- 957, 957, 957, 957, 957, 957, 957, 957,
- 957, 957, 957, 957, 957, 957, 957, 957,
- 957, 957, 957, 957, 957, 957, 957, 957,
-
- 958, 958, 958, 958, 958, 958, 958, 958,
- 958, 958, 958, 958, 958, 958, 958, 958,
- 958, 958, 958, 958, 958, 958, 958, 959,
- 960, 961, 961, 962, 199, 199, 963, 963,
-
- 964, 964, 964, 964, 964, 964, 964, 964,
- 964, 964, 964, 964, 964, 964, 964, 964,
- 964, 964, 964, 964, 964, 964, 964, 964,
- 964, 964, 964, 964, 964, 964, 964, 964,
-
- 964, 964, 964, 964, 964, 964, 964, 964,
- 964, 964, 964, 964, 964, 964, 964, 964,
- 964, 964, 964, 964, 964, 965, 966, 965,
- 966, 966, 966, 966, 966, 966, 966, 199,
+ 941, 941, 941, 941, 941, 941, 941, 941,
+ 941, 941, 941, 941, 941, 941, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 967, 968, 966, 968, 968, 966, 966, 966,
- 966, 966, 966, 966, 966, 965, 965, 965,
- 965, 965, 965, 966, 966, 969, 969, 969,
- 969, 969, 969, 969, 969, 199, 199, 970,
+ 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
+ 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
+ 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
+ 1009, 1009, 1009, 1009, 1009, 1010, 1010, 200,
- 971, 972, 973, 974, 975, 976, 977, 978,
- 979, 980, 199, 199, 199, 199, 199, 199,
- 971, 972, 973, 974, 975, 976, 977, 978,
- 979, 980, 199, 199, 199, 199, 199, 199,
-
- 981, 981, 981, 981, 981, 981, 981, 982,
- 983, 983, 983, 983, 981, 981, 199, 199,
- 984, 984, 984, 984, 984, 985, 985, 985,
- 985, 985, 985, 984, 984, 985, 986, 199,
-
- 987, 987, 987, 987, 988, 989, 990, 989,
- 990, 989, 990, 989, 990, 989, 990, 989,
- 989, 989, 990, 989, 989, 989, 989, 989,
- 989, 989, 989, 989, 989, 989, 989, 989,
-
- 989, 989, 989, 989, 989, 989, 989, 989,
- 989, 989, 989, 989, 989, 989, 989, 989,
- 989, 989, 989, 989, 991, 992, 987, 987,
- 987, 987, 987, 993, 987, 993, 988, 988,
-
- 993, 993, 987, 993, 994, 989, 989, 989,
- 989, 989, 989, 989, 199, 199, 199, 199,
- 995, 996, 997, 998, 999, 1000, 1001, 1002,
- 1003, 1004, 1005, 1005, 1006, 1007, 1005, 1005,
-
- 1007, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
- 1008, 1008, 1008, 1009, 1010, 1009, 1009, 1009,
- 1009, 1009, 1009, 1009, 1008, 1008, 1008, 1008,
- 1008, 1008, 1008, 1008, 1008, 199, 199, 199,
-
- 1011, 1011, 1012, 1013, 1013, 1013, 1013, 1013,
- 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
- 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
- 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
-
- 1013, 1012, 1011, 1011, 1011, 1011, 1012, 1012,
- 1011, 1011, 1014, 1015, 1016, 1016, 1013, 1013,
- 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024,
- 1025, 1026, 1027, 1027, 1027, 1027, 1027, 1027,
+ 1011, 1011, 1011, 1012, 1012, 1012, 1012, 1011,
+ 1011, 1012, 1012, 1012, 200, 200, 200, 200,
+ 1012, 1012, 1011, 1012, 1012, 1012, 1012, 1012,
+ 1012, 1013, 1014, 1015, 200, 200, 200, 200,
+ 1016, 200, 200, 200, 1017, 1017, 1018, 1019,
+ 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
+
1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
- 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
+ 1028, 1028, 1028, 1028, 1028, 1028, 200, 200,
+ 1028, 1028, 1028, 1028, 1028, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1029, 1030, 1030, 200, 200, 200, 200,
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+
+ 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1029, 200, 200, 200, 200, 200, 200,
+ 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
+ 1039, 1040, 1041, 200, 200, 200, 1042, 1042,
+
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+ 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+
+ 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
+ 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
+ 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1045,
+ 1046, 1047, 1047, 1048, 200, 200, 1049, 1049,
+
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+ 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+ 1050, 1050, 1050, 1050, 1050, 1051, 1052, 1051,
+ 1052, 1052, 1052, 1052, 1052, 1052, 1052, 200,
+
+ 1053, 1054, 1052, 1054, 1054, 1052, 1052, 1052,
+ 1052, 1052, 1052, 1052, 1052, 1051, 1051, 1051,
+ 1051, 1051, 1051, 1052, 1052, 1055, 1055, 1055,
+ 1055, 1055, 1055, 1055, 1055, 200, 200, 1056,
+
+ 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
+ 1065, 1066, 200, 200, 200, 200, 200, 200,
+ 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
+ 1065, 1066, 200, 200, 200, 200, 200, 200,
+
+ 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1068,
+ 1069, 1069, 1069, 1069, 1067, 1067, 200, 200,
+ 1070, 1070, 1070, 1070, 1070, 1071, 1071, 1071,
+ 1071, 1071, 1071, 1070, 1070, 1071, 1072, 200,
+
+ 1073, 1073, 1073, 1073, 1074, 1075, 1076, 1075,
+ 1076, 1075, 1076, 1075, 1076, 1075, 1076, 1075,
+ 1075, 1075, 1076, 1075, 1075, 1075, 1075, 1075,
+ 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
- 1028, 1028, 1028, 1028, 1028, 1028, 1029, 1030,
- 1031, 1031, 1030, 1030, 1030, 1031, 1030, 1031,
- 1031, 1031, 1032, 1032, 199, 199, 199, 199,
- 199, 199, 199, 199, 1033, 1033, 1033, 1033,
-
- 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
- 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
- 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
- 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
-
- 1034, 1034, 1034, 1034, 1035, 1035, 1035, 1035,
- 1035, 1035, 1035, 1035, 1036, 1036, 1036, 1036,
- 1036, 1036, 1036, 1036, 1035, 1035, 1036, 1037,
- 199, 199, 199, 1038, 1038, 1039, 1039, 1039,
-
- 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047,
- 1048, 1049, 199, 199, 199, 1034, 1034, 1034,
- 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057,
- 1058, 1059, 1060, 1060, 1060, 1060, 1060, 1060,
-
- 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
- 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
- 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
- 1061, 1061, 1061, 1061, 1061, 1061, 1062, 1062,
-
- 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1064, 1064, 1064, 1065, 1066, 1067, 1067, 1067,
- 1067, 1067, 1064, 1064, 1067, 1067, 1067, 1067,
-
- 1064, 1068, 1066, 1066, 1066, 1066, 1066, 1066,
- 1066, 1069, 1069, 1069, 1069, 1067, 1069, 1069,
- 1069, 1069, 1068, 1070, 1071, 1072, 1072, 199,
- 984, 984, 199, 199, 199, 199, 199, 199,
+ 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
+ 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
+ 1075, 1075, 1075, 1075, 1077, 1078, 1073, 1073,
+ 1073, 1073, 1073, 1079, 1073, 1079, 1074, 1074,
+
+ 1079, 1079, 1073, 1079, 1080, 1075, 1075, 1075,
+ 1075, 1075, 1075, 1075, 200, 200, 200, 200,
+ 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
+ 1089, 1090, 1091, 1091, 1092, 1093, 1091, 1091,
+
+ 1093, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+ 1094, 1094, 1094, 1095, 1096, 1095, 1095, 1095,
+ 1095, 1095, 1095, 1095, 1094, 1094, 1094, 1094,
+ 1094, 1094, 1094, 1094, 1094, 200, 200, 200,
+
+ 1097, 1097, 1098, 1099, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+ 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+
+ 1099, 1098, 1097, 1097, 1097, 1097, 1098, 1098,
+ 1097, 1097, 1100, 1101, 1102, 1102, 1099, 1099,
+ 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110,
+ 1111, 1112, 1113, 1113, 1113, 1113, 1113, 1113,
+
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+
+ 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1116,
+ 1117, 1117, 1116, 1116, 1116, 1117, 1116, 1117,
+ 1117, 1117, 1118, 1118, 200, 200, 200, 200,
+ 200, 200, 200, 200, 1119, 1119, 1119, 1119,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1121, 1121, 1121, 1121,
+ 1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122,
+ 1122, 1122, 1122, 1122, 1121, 1121, 1122, 1123,
+ 200, 200, 200, 1124, 1124, 1125, 1125, 1125,
+
+ 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133,
+ 1134, 1135, 200, 200, 200, 1120, 1120, 1120,
+ 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143,
+ 1144, 1145, 1146, 1146, 1146, 1146, 1146, 1146,
+
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+ 1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148,
+
+ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1150, 1150, 1150, 1151, 1152, 1153, 1153, 1153,
+ 1153, 1153, 1150, 1150, 1153, 1153, 1153, 1153,
+
+ 1150, 1154, 1152, 1152, 1152, 1152, 1152, 1152,
+ 1152, 1155, 1155, 1155, 1155, 1153, 1155, 1155,
+ 1155, 1155, 1154, 1156, 1157, 1158, 1158, 200,
+ 1070, 1070, 200, 200, 200, 200, 200, 200,
114, 114, 114, 114, 114, 114, 114, 114,
114, 114, 114, 114, 114, 114, 114, 114,
114, 114, 114, 114, 114, 114, 114, 114,
114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 1073, 1073,
- 1073, 1073, 1073, 1074, 1075, 1075, 1075, 1076,
- 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
- 1075, 1075, 1075, 1076, 1075, 1075, 1075, 1075,
+ 114, 114, 114, 114, 114, 114, 1159, 1159,
+ 1159, 1159, 1159, 1160, 1161, 1161, 1161, 1162,
+ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ 1161, 1161, 1161, 1162, 1161, 1161, 1161, 1161,
- 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
- 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1075,
- 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
- 1075, 1075, 1075, 1075, 1075, 1077, 1077, 1077,
+ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ 1161, 1161, 1161, 1161, 1161, 1161, 1162, 1161,
+ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ 1161, 1161, 1161, 1161, 1161, 1163, 1163, 1163,
- 1077, 1077, 1075, 1075, 1075, 1075, 1077, 1077,
- 1077, 1077, 1077, 114, 115, 115, 115, 115,
+ 1163, 1163, 1161, 1161, 1161, 1161, 1163, 1163,
+ 1163, 1163, 1163, 114, 115, 115, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
- 1078, 1079, 115, 115, 115, 1080, 115, 115,
+ 1164, 1165, 115, 115, 115, 1166, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 1081, 1081, 1081, 1081, 1081,
+ 115, 115, 115, 1167, 1167, 1167, 1167, 1167,
- 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
- 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
- 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
- 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1082,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1168,
- 188, 188, 187, 188, 1083, 1083, 1083, 1083,
- 1083, 1083, 1084, 1085, 1085, 1086, 1087, 1088,
- 1089, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
- 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
+ 189, 189, 188, 189, 1169, 1169, 1169, 1169,
+ 1169, 1169, 1170, 1171, 1171, 1172, 1173, 1174,
+ 1175, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+ 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
- 1085, 1085, 1085, 1085, 1085, 1085, 1085, 984,
- 984, 984, 984, 984, 984, 984, 984, 984,
- 984, 984, 984, 984, 984, 984, 199, 199,
- 199, 199, 199, 199, 1090, 1067, 1083, 1084,
+ 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1070,
+ 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+ 1070, 1070, 1070, 1070, 1070, 1070, 200, 200,
+ 200, 200, 200, 200, 1176, 1153, 1169, 1170,
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
@@ -1923,258 +1928,258 @@ static const unsigned short uc_property_trie[] = {
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 1091, 1092,
- 1093, 1094, 1095, 1096, 1097, 1097, 1098, 1097,
+ 70, 71, 70, 71, 70, 71, 1177, 1178,
+ 1179, 1180, 1181, 1182, 1183, 1183, 1184, 1183,
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 1099, 1100, 1099, 1100, 1099, 1100,
-
- 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
- 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
- 1101, 1101, 1101, 1101, 1101, 1101, 199, 199,
- 1102, 1102, 1102, 1102, 1102, 1102, 199, 199,
-
- 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
- 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
- 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
- 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
-
- 1101, 1101, 1101, 1101, 1101, 1101, 199, 199,
- 1102, 1102, 1102, 1102, 1102, 1102, 199, 199,
- 1103, 1101, 1104, 1101, 1105, 1101, 1106, 1101,
- 199, 1102, 199, 1102, 199, 1102, 199, 1102,
-
- 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
- 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
- 1107, 1108, 1109, 1110, 1109, 1110, 1111, 1112,
- 1113, 1114, 1115, 1116, 1117, 1118, 199, 199,
-
- 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
- 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134,
- 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142,
- 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150,
-
- 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158,
- 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
- 1101, 1101, 1167, 1168, 1169, 199, 1170, 1171,
- 1102, 1102, 1172, 1173, 1174, 204, 1175, 204,
-
- 204, 1176, 1177, 1178, 1179, 199, 1180, 1181,
- 1182, 1183, 1182, 1183, 1184, 1176, 1176, 1176,
- 1101, 1101, 1185, 1186, 199, 199, 1187, 1188,
- 1102, 1102, 1189, 1190, 199, 1176, 1176, 1176,
-
- 1101, 1101, 1191, 1192, 1193, 1194, 1195, 1196,
- 1102, 1102, 1197, 1198, 1199, 1176, 1200, 1200,
- 199, 199, 1201, 1202, 1203, 199, 1204, 1205,
- 1206, 1207, 1208, 1209, 1210, 1211, 204, 199,
-
- 1212, 1212, 1213, 1213, 1213, 1213, 1213, 1214,
- 1213, 1213, 1213, 1215, 1216, 1217, 1218, 1219,
- 1220, 1221, 1220, 1222, 1223, 1224, 14, 1225,
- 1226, 1227, 1228, 1229, 1229, 1230, 1228, 1229,
-
- 14, 14, 14, 14, 1231, 1232, 1232, 1233,
- 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241,
- 13, 13, 13, 1242, 1242, 1243, 1244, 1244,
- 14, 1245, 1246, 14, 1247, 1248, 1225, 43,
-
- 43, 14, 14, 14, 1249, 16, 1250, 1251,
- 1252, 1252, 1253, 1253, 1253, 1253, 1254, 1254,
- 1254, 1254, 1255, 1256, 1257, 1258, 1259, 1260,
- 1259, 1259, 1259, 1259, 1258, 1259, 1259, 1261,
-
- 1262, 1263, 1263, 1263, 1264, 1265, 1266, 1267,
- 1268, 1269, 1270, 1270, 1270, 1270, 1270, 1270,
- 1271, 1272, 199, 199, 1273, 1274, 1275, 1276,
- 1277, 1278, 1279, 1279, 1280, 1281, 1282, 157,
-
- 1271, 63, 58, 59, 1273, 1274, 1275, 1276,
- 1277, 1278, 1279, 1279, 1280, 1281, 1282, 199,
- 1081, 1081, 1081, 1081, 1081, 1283, 1283, 1283,
- 1283, 1283, 1283, 1283, 1283, 199, 199, 199,
+ 70, 71, 1185, 1186, 1185, 1186, 1185, 1186,
+
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1187, 1187, 1187, 1187, 1187, 1187, 200, 200,
+ 1188, 1188, 1188, 1188, 1188, 1188, 200, 200,
+
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+
+ 1187, 1187, 1187, 1187, 1187, 1187, 200, 200,
+ 1188, 1188, 1188, 1188, 1188, 1188, 200, 200,
+ 1189, 1187, 1190, 1187, 1191, 1187, 1192, 1187,
+ 200, 1188, 200, 1188, 200, 1188, 200, 1188,
+
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1193, 1194, 1195, 1196, 1195, 1196, 1197, 1198,
+ 1199, 1200, 1201, 1202, 1203, 1204, 200, 200,
+
+ 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212,
+ 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220,
+ 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228,
+ 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
+
+ 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
+ 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252,
+ 1187, 1187, 1253, 1254, 1255, 200, 1256, 1257,
+ 1188, 1188, 1258, 1259, 1260, 205, 1261, 205,
+
+ 205, 1262, 1263, 1264, 1265, 200, 1266, 1267,
+ 1268, 1269, 1268, 1269, 1270, 1262, 1262, 1262,
+ 1187, 1187, 1271, 1272, 200, 200, 1273, 1274,
+ 1188, 1188, 1275, 1276, 200, 1262, 1262, 1262,
+
+ 1187, 1187, 1277, 1278, 1279, 1280, 1281, 1282,
+ 1188, 1188, 1283, 1284, 1285, 1262, 1286, 1286,
+ 200, 200, 1287, 1288, 1289, 200, 1290, 1291,
+ 1292, 1293, 1294, 1295, 1296, 1297, 205, 200,
+
+ 1298, 1298, 1299, 1299, 1299, 1299, 1299, 1300,
+ 1299, 1299, 1299, 1301, 1302, 1303, 1304, 1305,
+ 1306, 1307, 1306, 1308, 1309, 1310, 14, 1311,
+ 1312, 1313, 1314, 1315, 1315, 1316, 1314, 1315,
+
+ 14, 14, 14, 14, 1317, 1318, 1318, 1319,
+ 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
+ 13, 13, 13, 1328, 1328, 1329, 1330, 1330,
+ 14, 1331, 1332, 14, 1333, 1334, 1311, 43,
+
+ 43, 14, 14, 14, 1335, 16, 1336, 1337,
+ 1338, 1338, 1339, 1339, 1339, 1339, 1340, 1340,
+ 1340, 1340, 1341, 1342, 1343, 1344, 1345, 1346,
+ 1345, 1345, 1345, 1345, 1344, 1345, 1345, 1347,
+
+ 1348, 1349, 1349, 1349, 1350, 1351, 1352, 1353,
+ 1354, 1355, 1356, 1356, 1356, 1356, 1356, 1356,
+ 1357, 1358, 200, 200, 1359, 1360, 1361, 1362,
+ 1363, 1364, 1365, 1365, 1366, 1367, 1368, 158,
+
+ 1357, 63, 58, 59, 1359, 1360, 1361, 1362,
+ 1363, 1364, 1365, 1365, 1366, 1367, 1368, 200,
+ 1167, 1167, 1167, 1167, 1167, 1369, 1369, 1369,
+ 1369, 1369, 1369, 1369, 1369, 200, 200, 200,
12, 12, 12, 12, 12, 12, 12, 50,
- 1284, 12, 12, 1285, 1286, 1287, 1287, 1287,
- 1288, 1288, 1289, 1289, 1289, 1289, 1290, 1291,
- 1291, 1292, 1293, 1294, 1295, 1295, 1296, 1296,
-
- 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
- 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
- 170, 170, 177, 177, 170, 170, 170, 170,
- 177, 177, 177, 170, 170, 1297, 1297, 1297,
-
- 1297, 170, 1298, 1298, 1299, 1300, 1300, 194,
- 1301, 194, 1300, 1302, 1084, 1084, 1084, 1084,
- 1085, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1303, 1303, 1304, 1305, 51, 1303, 1303, 1304,
- 51, 1305, 1306, 1304, 1304, 1304, 1306, 1306,
- 1304, 1304, 1304, 1306, 51, 1304, 1307, 51,
- 36, 1304, 1304, 1304, 1304, 1304, 51, 51,
-
- 1303, 1303, 1303, 51, 1304, 51, 1308, 51,
- 1304, 51, 1309, 1310, 1304, 1304, 1311, 1306,
- 1304, 1304, 1312, 1304, 1306, 1313, 1313, 1313,
- 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1319,
-
- 1320, 1255, 1255, 1255, 1255, 1319, 1318, 1318,
- 1318, 1318, 1321, 1255, 1322, 1323, 1324, 1325,
- 1326, 1326, 1326, 65, 65, 65, 65, 65,
+ 1370, 12, 12, 1371, 1372, 1373, 1373, 1373,
+ 1374, 1374, 1375, 1375, 1375, 1375, 1376, 1377,
+ 1377, 1378, 1379, 1380, 1381, 1381, 1382, 1383,
+
+ 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+ 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+ 171, 171, 178, 178, 171, 171, 171, 171,
+ 178, 178, 178, 171, 171, 1384, 1384, 1384,
+
+ 1384, 171, 1385, 1385, 1386, 1387, 1387, 195,
+ 1388, 195, 1387, 1389, 1170, 1170, 1170, 1170,
+ 1171, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1390, 1390, 1391, 1392, 51, 1390, 1390, 1391,
+ 51, 1392, 1393, 1391, 1391, 1391, 1393, 1393,
+ 1391, 1391, 1391, 1393, 51, 1391, 1394, 51,
+ 36, 1391, 1391, 1391, 1391, 1391, 51, 51,
+
+ 1390, 1390, 1390, 51, 1391, 51, 1395, 51,
+ 1391, 51, 1396, 1397, 1391, 1391, 1398, 1393,
+ 1391, 1391, 1399, 1391, 1393, 1400, 1400, 1400,
+ 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1406,
+
+ 1407, 1341, 1341, 1341, 1341, 1406, 1405, 1405,
+ 1405, 1405, 1408, 1341, 1409, 1410, 1411, 1412,
+ 1413, 1413, 1413, 65, 65, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65,
- 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
- 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
- 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
- 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
+ 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+ 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+ 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415,
+ 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415,
- 1329, 1329, 1329, 111, 123, 1330, 1330, 1330,
- 1330, 1326, 199, 199, 199, 199, 199, 199,
+ 1416, 1416, 1416, 111, 123, 1417, 1417, 1417,
+ 1417, 1413, 1418, 1418, 200, 200, 200, 200,
36, 36, 36, 36, 36, 51, 51, 51,
- 51, 51, 1331, 1331, 51, 51, 51, 51,
+ 51, 51, 1419, 1419, 51, 51, 51, 51,
36, 51, 51, 36, 51, 51, 36, 51,
- 51, 51, 51, 51, 51, 51, 1331, 51,
+ 51, 51, 51, 51, 51, 51, 1419, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 1332, 1331, 1331,
+ 51, 51, 51, 51, 51, 1420, 1419, 1419,
51, 51, 36, 51, 36, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 1315, 1315, 1315, 1315, 1315,
- 1315, 1315, 1315, 1315, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
+ 51, 51, 51, 1402, 1402, 1402, 1402, 1402,
+ 1402, 1402, 1402, 1402, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 36, 36, 36, 36, 1331, 36, 36, 36,
- 1333, 1334, 1333, 1335, 1336, 1335, 36, 36,
- 36, 36, 18, 57, 36, 1337, 36, 36,
+ 36, 36, 36, 36, 1419, 36, 36, 36,
+ 1421, 1422, 1421, 1423, 1424, 1423, 36, 36,
+ 36, 36, 18, 57, 36, 1425, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 1331, 36, 1331, 36,
- 36, 36, 36, 36, 1280, 1280, 36, 1280,
- 1280, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 1338, 1339, 36, 36,
+ 36, 36, 36, 36, 1419, 36, 1419, 36,
+ 36, 36, 36, 36, 1366, 1366, 36, 1366,
+ 1366, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 1426, 1427, 36, 36,
- 36, 1331, 36, 1340, 1331, 36, 36, 1331,
- 36, 1331, 36, 36, 36, 36, 36, 36,
- 36, 36, 1338, 1339, 1338, 1339, 36, 36,
+ 36, 1419, 36, 1428, 1419, 36, 36, 1419,
+ 36, 1419, 36, 36, 36, 36, 36, 36,
+ 36, 36, 1426, 1427, 1426, 1427, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 1331, 36, 1331, 36, 1338, 1339, 1338, 1339,
- 1338, 1339, 1338, 1339, 36, 1331, 1341, 1342,
- 1341, 1342, 1338, 1339, 1341, 1342, 1338, 1339,
- 1341, 1342, 1338, 1339, 1338, 1339, 1338, 1339,
+ 1419, 36, 1419, 36, 1426, 1427, 1426, 1427,
+ 1426, 1427, 1426, 1427, 36, 1419, 1429, 1430,
+ 1429, 1430, 1426, 1427, 1429, 1430, 1426, 1427,
+ 1429, 1430, 1426, 1427, 1426, 1427, 1426, 1427,
- 1341, 1342, 1338, 1339, 1341, 1342, 1338, 1339,
- 1341, 1342, 1338, 1339, 36, 36, 36, 1338,
- 1339, 1338, 1339, 36, 36, 36, 36, 36,
- 1343, 36, 36, 36, 36, 36, 36, 36,
+ 1429, 1430, 1426, 1427, 1429, 1430, 1426, 1427,
+ 1429, 1430, 1426, 1427, 36, 36, 36, 1426,
+ 1427, 1426, 1427, 36, 36, 36, 36, 36,
+ 1431, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 1338, 1339, 36, 36, 1344, 36,
- 1345, 1346, 36, 1346, 1331, 1331, 1331, 1331,
- 1338, 1339, 1338, 1339, 1338, 1339, 1338, 1339,
+ 36, 36, 1426, 1427, 36, 36, 1432, 36,
+ 1433, 1434, 36, 1434, 1419, 1419, 1419, 1419,
+ 1426, 1427, 1426, 1427, 1426, 1427, 1426, 1427,
36, 36, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 36, 1338, 1339, 1338, 1339, 1347, 36, 36,
- 1338, 1339, 36, 36, 36, 36, 1338, 1339,
- 1338, 1339, 1338, 1339, 1338, 1339, 1338, 1339,
+ 36, 1426, 1427, 1426, 1427, 1435, 36, 36,
+ 1426, 1427, 36, 36, 36, 36, 1426, 1427,
+ 1426, 1427, 1426, 1427, 1426, 1427, 1426, 1427,
- 1341, 1342, 1341, 1342, 1338, 1339, 1338, 1339,
- 1338, 1339, 1341, 1342, 1341, 1342, 36, 36,
- 1338, 1339, 1348, 1348, 1348, 1255, 1349, 1349,
- 1255, 1255, 1350, 1350, 1350, 1351, 1351, 1255,
+ 1429, 1430, 1429, 1430, 1426, 1427, 1426, 1427,
+ 1426, 1427, 1429, 1430, 1429, 1430, 36, 1436,
+ 1426, 1427, 1437, 1437, 1437, 1341, 1438, 1438,
+ 1341, 1341, 1439, 1439, 1439, 1440, 1440, 1341,
- 51, 1315, 51, 51, 51, 51, 51, 51,
- 16, 1250, 16, 1250, 51, 51, 51, 51,
+ 51, 1402, 51, 51, 51, 51, 51, 51,
+ 16, 1336, 16, 1336, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 1352, 1352, 51, 51, 51, 51,
+ 51, 51, 1441, 1441, 51, 51, 51, 51,
36, 36, 51, 51, 51, 51, 51, 51,
- 51, 1353, 1354, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1355, 1355,
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
-
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
-
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
- 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
- 1355, 1355, 1355, 1315, 1255, 1315, 1315, 1315,
-
- 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
- 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
- 1315, 1315, 1315, 1315, 1315, 1356, 1315, 1315,
- 1315, 1315, 1315, 1255, 1255, 1255, 1255, 1255,
-
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1321, 1321, 1321, 1321,
- 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
-
- 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
- 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1357,
- 1357, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- 1322, 1322, 1322, 1322, 1358, 1358, 1358, 1358,
-
- 1358, 1358, 1323, 1323, 1323, 1323, 1323, 1323,
- 1359, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1361, 1361, 1361, 1361, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 199, 199, 199, 199, 199,
+ 51, 1442, 1443, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1402, 1341, 1402, 1402, 1402,
+
+ 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
+ 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
+ 1402, 1402, 1402, 1402, 1402, 1445, 1402, 1402,
+ 1402, 1402, 1402, 1341, 1341, 1341, 1341, 1341,
+
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1408, 1408, 1408, 1408,
+ 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+
+ 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+ 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1446,
+ 1446, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1447, 1447, 1447, 1447,
+
+ 1447, 1447, 1410, 1410, 1410, 1410, 1410, 1410,
+ 1448, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1450, 1450, 1450, 1450, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 200, 200, 200, 200, 200,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 1315, 1315, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
+ 51, 51, 51, 51, 51, 1402, 1402, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
+ 51, 51, 51, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370,
- 1371, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 1363, 1364, 1365, 1366,
- 1367, 1368, 1369, 1370, 1371, 65, 65, 65,
+ 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459,
+ 1460, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 1452, 1453, 1454, 1455,
+ 1456, 1457, 1458, 1459, 1460, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65,
- 63, 58, 59, 1273, 1274, 1275, 1276, 1277,
- 1278, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
- 1372, 1372, 1372, 1372, 1373, 1373, 1373, 1373,
+ 63, 58, 59, 1359, 1360, 1361, 1362, 1363,
+ 1364, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+ 1461, 1461, 1461, 1461, 1462, 1462, 1462, 1462,
- 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373,
- 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373,
- 1373, 1373, 1373, 1373, 1373, 1373, 1374, 1374,
- 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374,
+ 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462,
+ 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462,
+ 1462, 1462, 1462, 1462, 1462, 1462, 1463, 1463,
+ 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
- 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374,
- 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374,
- 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
- 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
+ 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+ 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
- 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
- 1375, 1375, 1376, 1377, 1377, 1377, 1377, 1377,
- 1377, 1377, 1377, 1377, 1377, 1378, 1379, 1380,
- 1381, 1382, 1383, 1384, 1385, 1386, 1377, 1387,
+ 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
+ 1464, 1464, 1465, 1466, 1466, 1466, 1466, 1466,
+ 1466, 1466, 1466, 1466, 1466, 1467, 1468, 1469,
+ 1470, 1471, 1472, 1473, 1474, 1475, 1466, 1476,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1321, 1321,
- 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
+ 51, 51, 51, 51, 51, 51, 1408, 1408,
+ 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
@@ -2188,3172 +2193,3552 @@ static const unsigned short uc_property_trie[] = {
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
+ 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1352, 1352, 1352, 1352, 51, 51, 51, 51,
+ 1441, 1441, 1441, 1441, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1388, 1388, 1321, 1321,
- 1389, 1315, 1352, 1352, 1352, 1352, 1352, 1352,
+ 51, 51, 51, 51, 1477, 1477, 1408, 1408,
+ 1478, 1402, 1441, 1441, 1441, 1441, 1441, 1441,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 1352, 1352, 1352, 51, 51, 51, 51,
+ 51, 1441, 1441, 1441, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1352, 51, 51, 51, 51, 51, 51, 36,
- 1315, 1315, 1321, 1321, 1321, 1321, 1321, 1321,
- 1321, 1321, 1321, 1321, 1321, 1321, 1322, 1389,
-
- 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
- 1321, 1321, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1322, 1322, 1322, 1322, 1322, 1322,
- 1322, 1322, 1322, 1322, 1322, 1390, 1359, 1359,
-
- 1357, 1357, 1322, 1322, 1322, 1322, 1322, 1322,
- 1322, 1322, 1322, 1322, 1391, 1322, 1322, 1322,
- 1322, 1322, 1323, 1390, 1390, 1390, 1390, 1390,
- 1390, 1390, 1390, 1390, 1390, 1392, 1392, 1392,
-
- 1393, 1393, 1393, 1393, 1392, 1392, 1392, 1392,
- 1392, 1359, 1359, 1359, 1359, 1392, 1360, 1392,
- 1392, 1392, 1359, 1392, 1392, 1359, 1359, 1359,
- 1392, 1392, 1359, 1359, 1392, 1359, 1359, 1392,
-
- 1392, 1392, 1360, 1359, 1360, 1360, 1360, 1360,
- 1359, 1359, 1392, 1359, 1359, 1359, 1359, 1359,
- 1359, 1392, 1392, 1392, 1392, 1392, 1359, 1392,
- 1392, 1392, 1392, 1359, 1359, 1392, 1392, 1392,
-
- 1394, 1352, 1352, 1352, 1352, 1360, 51, 51,
- 1352, 1352, 1361, 1361, 1352, 1352, 51, 51,
+ 1441, 51, 51, 51, 51, 51, 51, 36,
+ 1402, 1402, 1408, 1408, 1408, 1408, 1408, 1408,
+ 1408, 1408, 1408, 1408, 1408, 1408, 1409, 1478,
+
+ 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+ 1408, 1408, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1479, 1448, 1448,
+
+ 1446, 1446, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1480, 1409, 1409, 1409,
+ 1409, 1409, 1410, 1479, 1479, 1479, 1479, 1479,
+ 1479, 1479, 1479, 1479, 1479, 1481, 1481, 1481,
+
+ 1482, 1482, 1482, 1482, 1481, 1481, 1481, 1481,
+ 1481, 1448, 1448, 1448, 1448, 1481, 1449, 1481,
+ 1481, 1481, 1448, 1481, 1481, 1448, 1448, 1448,
+ 1481, 1481, 1448, 1448, 1481, 1448, 1448, 1481,
+
+ 1481, 1481, 1449, 1448, 1449, 1449, 1449, 1449,
+ 1448, 1448, 1481, 1448, 1448, 1448, 1448, 1448,
+ 1448, 1481, 1481, 1481, 1481, 1481, 1448, 1481,
+ 1481, 1481, 1481, 1448, 1448, 1481, 1481, 1481,
+
+ 1483, 1441, 1441, 1441, 1441, 1449, 51, 51,
+ 1441, 1441, 1450, 1450, 1441, 1441, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1360, 51, 51, 51, 51, 51, 51, 51,
+ 1449, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1360, 51, 1360, 51,
- 51, 51, 51, 1360, 1360, 1360, 51, 1359,
- 51, 51, 51, 1395, 1395, 1395, 1395, 1396,
-
- 1396, 51, 1397, 1397, 51, 51, 51, 51,
- 1398, 1399, 1398, 1399, 1398, 1399, 1398, 1399,
- 1398, 1399, 1398, 1399, 1398, 1399, 1400, 1401,
- 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409,
-
- 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407,
- 1408, 1409, 1400, 1401, 1402, 1403, 1404, 1405,
- 1406, 1407, 1408, 1409, 51, 1360, 1360, 1360,
+ 51, 51, 51, 51, 1449, 51, 1449, 51,
+ 51, 51, 51, 1449, 1449, 1449, 51, 1448,
+ 51, 51, 51, 1484, 1484, 1484, 1484, 1485,
+
+ 1485, 51, 1486, 1486, 51, 51, 51, 51,
+ 1487, 1488, 1487, 1488, 1487, 1488, 1487, 1488,
+ 1487, 1488, 1487, 1488, 1487, 1488, 1489, 1490,
+ 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498,
+
+ 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
+ 1497, 1498, 1489, 1490, 1491, 1492, 1493, 1494,
+ 1495, 1496, 1497, 1498, 51, 1449, 1449, 1449,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1360, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 1360,
-
- 1410, 1410, 1410, 1411, 1412, 1413, 1414, 1358,
- 1415, 1416, 1358, 1417, 1418, 1419, 1420, 1420,
- 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1255,
- 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1255,
-
- 1255, 1255, 1421, 1422, 1421, 1422, 1398, 1399,
- 1398, 1399, 1398, 1399, 1423, 1424, 1423, 1424,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
-
- 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
- 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
- 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
- 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
-
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
-
- 1255, 1255, 1255, 1398, 1399, 1398, 1399, 1398,
- 1399, 1398, 1399, 1398, 1399, 1426, 1427, 1428,
- 1429, 1398, 1399, 1398, 1399, 1398, 1399, 1398,
- 1399, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
-
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1430, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
-
- 1421, 1422, 1255, 1255, 1421, 1422, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1421,
- 1422, 1421, 1422, 1255, 1421, 1422, 1255, 1255,
- 1398, 1399, 1398, 1399, 1255, 1255, 1255, 1255,
-
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1431, 1255, 1255,
- 1421, 1422, 1255, 1255, 1398, 1399, 1255, 1255,
-
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1320, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
-
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1421, 1422, 1421, 1422, 1255,
- 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255,
- 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255,
-
- 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255,
- 1255, 1255, 1255, 1255, 1320, 1320, 1320, 1255,
- 1255, 1421, 1422, 1255, 1255, 1421, 1422, 1421,
-
- 1422, 1421, 1422, 1421, 1422, 1255, 1255, 1255,
- 1255, 1255, 1255, 1421, 1422, 1255, 1255, 1255,
- 1255, 1421, 1422, 1421, 1422, 1421, 1422, 1421,
- 1422, 1421, 1422, 1421, 1422, 1255, 1255, 1255,
-
- 1255, 1421, 1422, 1255, 1255, 1255, 1421, 1422,
- 1421, 1422, 1421, 1422, 1421, 1422, 1255, 1421,
- 1422, 1255, 1255, 1421, 1422, 1255, 1255, 1255,
- 1255, 1255, 1255, 1421, 1422, 1421, 1422, 1421,
-
- 1422, 1421, 1422, 1421, 1422, 1421, 1422, 1255,
- 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1421,
- 1422, 1421, 1422, 1421, 1422, 1421, 1422, 1255,
- 1255, 1255, 1255, 1255, 1432, 1255, 1433, 1255,
-
- 1255, 1255, 1255, 1434, 1435, 1434, 1255, 1255,
- 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255,
- 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1421,
- 1422, 1421, 1422, 1255, 1255, 1255, 1255, 1255,
-
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1322, 1322,
- 1322, 1322, 1322, 1322, 1323, 1323, 1323, 1323,
- 1323, 1323, 1323, 1390, 1390, 1390, 1390, 1390,
-
- 1323, 1323, 1323, 1323, 1390, 1390, 1390, 1390,
- 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
- 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418,
- 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418,
-
- 1418, 1418, 1418, 1418, 1418, 1390, 1390, 1418,
- 1418, 1418, 1418, 1418, 1418, 1362, 1362, 1362,
- 1390, 1390, 1390, 1390, 1390, 1359, 1359, 1359,
- 1359, 1359, 1362, 1362, 1362, 1362, 1362, 1362,
-
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 199, 199, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
-
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 199, 199,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
-
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 199, 199, 199, 1362, 1362, 1362,
-
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 199, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
-
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
- 1436, 1436, 1436, 1436, 1436, 1436, 1436, 199,
- 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
- 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
-
- 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
- 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
- 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
- 1437, 1437, 1437, 1437, 1437, 1437, 1437, 199,
-
- 127, 123, 1438, 1439, 1440, 1441, 1442, 127,
- 123, 127, 123, 127, 123, 1443, 1444, 1445,
- 1446, 1097, 1099, 1100, 1447, 127, 123, 1447,
- 1097, 1097, 1097, 1097, 1448, 1448, 1449, 1450,
-
- 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452,
- 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452,
- 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452,
- 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452,
-
- 1451, 1452, 1451, 1452, 1453, 1454, 1454, 1454,
- 1454, 1454, 1454, 1455, 1456, 1455, 1456, 1457,
- 1457, 1457, 1458, 1459, 199, 199, 199, 199,
- 199, 1460, 1461, 1461, 1461, 1462, 1460, 1461,
+ 1449, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 1449,
+
+ 1499, 1499, 1499, 1500, 1501, 1502, 1503, 1447,
+ 1504, 1505, 1447, 1506, 1507, 1508, 1509, 1509,
+ 1341, 1341, 1341, 1341, 1341, 1510, 1511, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1510, 1511, 1341,
+
+ 1341, 1341, 1510, 1511, 1510, 1511, 1487, 1488,
+ 1487, 1488, 1487, 1488, 1512, 1513, 1512, 1513,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+
+ 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+ 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+ 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+ 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+
+ 1341, 1341, 1341, 1487, 1488, 1487, 1488, 1487,
+ 1488, 1487, 1488, 1487, 1488, 1515, 1516, 1517,
+ 1518, 1487, 1488, 1487, 1488, 1487, 1488, 1487,
+ 1488, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1519, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+
+ 1510, 1511, 1341, 1341, 1510, 1511, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1510,
+ 1511, 1510, 1511, 1341, 1510, 1511, 1341, 1341,
+ 1487, 1488, 1487, 1488, 1341, 1341, 1341, 1341,
+
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1520, 1341, 1341,
+ 1510, 1511, 1341, 1341, 1487, 1488, 1341, 1341,
+
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1407, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1510, 1511, 1510, 1511, 1341,
+ 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
+
+ 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1407, 1407, 1407, 1341,
+ 1341, 1510, 1511, 1341, 1341, 1510, 1511, 1510,
+
+ 1511, 1510, 1511, 1510, 1511, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1510, 1511, 1341, 1341, 1341,
+ 1341, 1510, 1511, 1510, 1511, 1510, 1511, 1510,
+ 1511, 1510, 1511, 1510, 1511, 1341, 1341, 1341,
+
+ 1341, 1510, 1511, 1341, 1341, 1341, 1510, 1511,
+ 1510, 1511, 1510, 1511, 1510, 1511, 1341, 1510,
+ 1511, 1341, 1341, 1510, 1511, 1341, 1341, 1341,
+ 1341, 1341, 1341, 1510, 1511, 1510, 1511, 1510,
+
+ 1511, 1510, 1511, 1510, 1511, 1510, 1511, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1510, 1511, 1510,
+ 1511, 1510, 1511, 1510, 1511, 1510, 1511, 1341,
+ 1341, 1341, 1341, 1341, 1521, 1341, 1522, 1341,
+
+ 1341, 1341, 1341, 1523, 1524, 1523, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
+ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1510,
+ 1511, 1510, 1511, 1341, 1341, 1341, 1341, 1341,
+
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1410, 1410, 1410, 1410,
+ 1410, 1410, 1410, 1479, 1479, 1479, 1479, 1479,
+
+ 1410, 1410, 1410, 1410, 1479, 1479, 1479, 1479,
+ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+ 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+ 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+
+ 1507, 1507, 1507, 1507, 1507, 1479, 1479, 1507,
+ 1507, 1507, 1507, 1507, 1507, 1451, 1451, 1451,
+ 1479, 1479, 1479, 1479, 1479, 1448, 1448, 1448,
+ 1448, 1448, 1451, 1451, 1451, 1451, 1451, 1451,
+
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 200, 200, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 200, 200,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 200, 200, 200, 1451, 1451, 1451,
+
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 200, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 1418, 1418, 1418, 1418,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+ 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+ 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+ 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+
+ 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+ 1525, 1525, 1525, 1525, 1525, 1525, 1525, 200,
+ 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+ 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+
+ 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+ 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+ 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+ 1526, 1526, 1526, 1526, 1526, 1526, 1526, 200,
+
+ 127, 123, 1527, 1528, 1529, 1530, 1531, 127,
+ 123, 127, 123, 127, 123, 1532, 1533, 1534,
+ 1535, 1183, 1185, 1186, 1536, 127, 123, 1536,
+ 1183, 1183, 1183, 1183, 1537, 1537, 1538, 1539,
+
+ 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
+ 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
+ 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
+ 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
+
+ 1540, 1541, 1540, 1541, 1542, 1543, 1543, 1543,
+ 1543, 1543, 1543, 1544, 1545, 1544, 1545, 1546,
+ 1546, 1546, 1547, 1548, 200, 200, 200, 200,
+ 200, 1549, 1550, 1550, 1550, 1551, 1549, 1550,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+ 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
+ 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
+ 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
+ 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
- 1463, 1463, 1463, 1463, 1463, 1463, 199, 1464,
- 199, 199, 199, 199, 199, 1464, 199, 199,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
+ 1552, 1552, 1552, 1552, 1552, 1552, 200, 1553,
+ 200, 200, 200, 200, 200, 1553, 200, 200,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
- 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1465, 1465, 1465, 1465, 1465, 1465, 1466, 1466,
- 199, 199, 199, 199, 199, 199, 199, 1467,
- 1468, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 1469,
+ 1554, 1554, 1554, 1554, 1554, 1554, 1555, 1555,
+ 200, 200, 200, 200, 200, 200, 200, 1556,
+ 1557, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 1558,
+
+ 836, 836, 836, 836, 836, 836, 836, 836,
+ 836, 836, 836, 836, 836, 836, 836, 836,
+ 836, 836, 836, 836, 836, 836, 836, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 836, 836, 836, 836, 836, 836, 836, 200,
+ 836, 836, 836, 836, 836, 836, 836, 200,
+ 836, 836, 836, 836, 836, 836, 836, 200,
+ 836, 836, 836, 836, 836, 836, 836, 200,
+
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 265, 265, 265,
+
+ 1559, 1559, 1560, 1561, 1560, 1561, 1559, 1559,
+ 1559, 1560, 1561, 1559, 1560, 1561, 1345, 1345,
+ 1345, 1345, 1345, 1345, 1345, 1345, 1344, 1562,
+ 1563, 1564, 1565, 1566, 1560, 1561, 1566, 1566,
+
+ 1567, 1568, 1512, 1513, 1512, 1513, 1512, 1513,
+ 1512, 1513, 1564, 1564, 1564, 1564, 1569, 1570,
+ 1564, 1571, 1572, 1573, 1573, 1572, 1572, 1572,
+ 1572, 1572, 1574, 1574, 1575, 1576, 1576, 1577,
+
+ 1578, 1576, 1579, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 200, 1580, 1580, 1580, 1580, 1581,
+
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
+ 1580, 1580, 1580, 1581, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+
+ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+ 1581, 1581, 1581, 1581, 1581, 1581, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582,
+ 1582, 1582, 1582, 1582, 200, 200, 200, 200,
+
+ 1299, 1583, 1584, 1585, 1441, 1586, 1587, 1588,
+ 16, 1336, 16, 1336, 16, 1336, 16, 1336,
+ 16, 1336, 1441, 1441, 16, 1336, 16, 1336,
+ 16, 1336, 16, 1336, 1589, 1314, 1590, 1590,
+
+ 1441, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+ 1588, 1588, 1591, 1592, 172, 1593, 1594, 1594,
+ 1595, 1596, 1596, 1596, 1596, 1597, 1598, 1441,
+ 1599, 1599, 1599, 1600, 1601, 1602, 1582, 1441,
+
+ 200, 1603, 1604, 1603, 1604, 1603, 1604, 1603,
+ 1604, 1603, 1604, 1604, 1605, 1604, 1605, 1604,
+ 1605, 1604, 1605, 1604, 1605, 1604, 1605, 1604,
+ 1605, 1604, 1605, 1604, 1605, 1604, 1605, 1604,
+
+ 1605, 1604, 1605, 1603, 1604, 1605, 1604, 1605,
+ 1604, 1605, 1604, 1604, 1604, 1604, 1604, 1604,
+ 1605, 1605, 1604, 1605, 1605, 1604, 1605, 1605,
+ 1604, 1605, 1605, 1604, 1605, 1605, 1604, 1604,
+
+ 1604, 1604, 1604, 1603, 1604, 1603, 1604, 1603,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1603, 1604,
+ 1604, 1604, 1604, 1604, 1605, 1606, 1606, 200,
+ 200, 1607, 1607, 1608, 1608, 1609, 1610, 1611,
+
+ 1612, 1613, 1614, 1613, 1614, 1613, 1614, 1613,
+ 1614, 1613, 1614, 1614, 1615, 1614, 1615, 1614,
+ 1615, 1614, 1615, 1614, 1615, 1614, 1615, 1614,
+ 1615, 1614, 1615, 1614, 1615, 1614, 1615, 1614,
+
+ 1615, 1614, 1615, 1613, 1614, 1615, 1614, 1615,
+ 1614, 1615, 1614, 1614, 1614, 1614, 1614, 1614,
+ 1615, 1615, 1614, 1615, 1615, 1614, 1615, 1615,
+ 1614, 1615, 1615, 1614, 1615, 1615, 1614, 1614,
+
+ 1614, 1614, 1614, 1613, 1614, 1613, 1614, 1613,
+ 1614, 1614, 1614, 1614, 1614, 1614, 1613, 1614,
+ 1614, 1614, 1614, 1614, 1615, 1613, 1613, 1615,
+ 1615, 1615, 1615, 1616, 1617, 1618, 1619, 1620,
+
+ 200, 200, 200, 200, 200, 1621, 1621, 1621,
+ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+
+ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+ 1621, 1621, 1621, 1621, 1621, 1622, 200, 200,
+ 200, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 200,
+ 1624, 1624, 1625, 1625, 1625, 1625, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 830, 830, 830, 830, 830, 830, 830, 830,
- 830, 830, 830, 830, 830, 830, 830, 830,
- 830, 830, 830, 830, 830, 830, 830, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 830, 830, 830, 830, 830, 830, 830, 199,
- 830, 830, 830, 830, 830, 830, 830, 199,
- 830, 830, 830, 830, 830, 830, 830, 199,
- 830, 830, 830, 830, 830, 830, 830, 199,
-
- 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264,
- 264, 264, 264, 264, 264, 264, 264, 264,
-
- 1470, 1470, 1471, 1472, 1471, 1472, 1470, 1470,
- 1470, 1471, 1472, 1470, 1471, 1472, 1259, 1259,
- 1259, 1259, 1259, 1259, 1259, 1259, 1258, 1473,
- 1474, 1475, 1476, 1477, 1471, 1472, 1477, 1477,
-
- 1478, 1479, 1423, 1424, 1423, 1424, 1423, 1424,
- 1423, 1424, 1475, 1475, 1475, 1475, 1480, 1481,
- 1475, 1482, 1483, 1484, 1484, 1483, 1483, 1483,
- 1483, 1483, 1485, 1485, 1486, 1487, 1487, 1488,
-
- 1489, 1487, 1490, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 199, 1491, 1491, 1491, 1491, 1492,
-
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
-
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491,
- 1491, 1491, 1491, 1492, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492,
- 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492,
- 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492,
- 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492,
-
- 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492,
- 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492,
- 1492, 1492, 1492, 1492, 1492, 1492, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493,
- 1493, 1493, 1493, 1493, 199, 199, 199, 199,
-
- 1213, 1494, 1495, 1496, 1352, 1497, 1498, 1499,
- 16, 1250, 16, 1250, 16, 1250, 16, 1250,
- 16, 1250, 1352, 1352, 16, 1250, 16, 1250,
- 16, 1250, 16, 1250, 1500, 1228, 1501, 1501,
-
- 1352, 1499, 1499, 1499, 1499, 1499, 1499, 1499,
- 1499, 1499, 1502, 1503, 171, 1504, 1505, 1505,
- 1506, 1507, 1507, 1507, 1507, 1508, 1509, 1352,
- 1510, 1510, 1510, 1511, 1512, 1513, 1493, 1352,
-
- 199, 1514, 1515, 1514, 1515, 1514, 1515, 1514,
- 1515, 1514, 1515, 1515, 1516, 1515, 1516, 1515,
- 1516, 1515, 1516, 1515, 1516, 1515, 1516, 1515,
- 1516, 1515, 1516, 1515, 1516, 1515, 1516, 1515,
-
- 1516, 1515, 1516, 1514, 1515, 1516, 1515, 1516,
- 1515, 1516, 1515, 1515, 1515, 1515, 1515, 1515,
- 1516, 1516, 1515, 1516, 1516, 1515, 1516, 1516,
- 1515, 1516, 1516, 1515, 1516, 1516, 1515, 1515,
-
- 1515, 1515, 1515, 1514, 1515, 1514, 1515, 1514,
- 1515, 1515, 1515, 1515, 1515, 1515, 1514, 1515,
- 1515, 1515, 1515, 1515, 1516, 1517, 1517, 199,
- 199, 1518, 1518, 1519, 1519, 1520, 1521, 1522,
-
- 1523, 1524, 1525, 1524, 1525, 1524, 1525, 1524,
- 1525, 1524, 1525, 1525, 1526, 1525, 1526, 1525,
- 1526, 1525, 1526, 1525, 1526, 1525, 1526, 1525,
- 1526, 1525, 1526, 1525, 1526, 1525, 1526, 1525,
-
- 1526, 1525, 1526, 1524, 1525, 1526, 1525, 1526,
- 1525, 1526, 1525, 1525, 1525, 1525, 1525, 1525,
- 1526, 1526, 1525, 1526, 1526, 1525, 1526, 1526,
- 1525, 1526, 1526, 1525, 1526, 1526, 1525, 1525,
-
- 1525, 1525, 1525, 1524, 1525, 1524, 1525, 1524,
- 1525, 1525, 1525, 1525, 1525, 1525, 1524, 1525,
- 1525, 1525, 1525, 1525, 1526, 1524, 1524, 1526,
- 1526, 1526, 1526, 1527, 1528, 1529, 1530, 1531,
-
- 199, 199, 199, 199, 199, 1532, 1532, 1532,
- 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
- 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
- 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
-
- 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
- 1532, 1532, 1532, 1532, 1532, 1533, 199, 199,
- 199, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
-
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
-
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
- 1534, 1534, 1534, 1534, 1534, 1534, 1534, 199,
- 1535, 1535, 1536, 1536, 1536, 1536, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
-
- 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538,
- 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538,
- 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538,
- 1539, 1539, 1539, 199, 199, 199, 199, 199,
-
- 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
- 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
-
- 1393, 1393, 1393, 1393, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540,
- 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540,
-
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1542, 1542, 199,
-
- 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
- 1536, 1536, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
-
- 1537, 1537, 1537, 1537, 1543, 1543, 1543, 1543,
- 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
- 1545, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
-
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
- 1541, 1541, 1541, 1541, 1542, 1542, 1547, 1535,
-
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
- 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
-
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1545, 1545, 1545, 1545,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
+ 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
+ 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
+ 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
+ 1628, 1628, 1628, 200, 200, 200, 200, 200,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 199,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
+ 1482, 1482, 1482, 1482, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
+ 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
-
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1545,
- 1545, 1545, 1545, 1537, 1537, 1537, 1537, 1537,
-
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
-
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1545, 1545,
-
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537,
- 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1545,
-
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
-
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549,
- 1549, 1549, 1549, 1549, 1549, 1549, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
-
- 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551,
- 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551,
- 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551,
- 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551,
-
- 1551, 1551, 1551, 1551, 1551, 1551, 1552, 1552,
- 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
- 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
- 1552, 1552, 1552, 1552, 1553, 1553, 1553, 1553,
-
- 1553, 1553, 1553, 1553, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1555, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 1557, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
-
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
-
- 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
- 1556, 1556, 1556, 1556, 1556, 199, 199, 199,
- 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
- 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
-
- 1558, 1558, 1559, 1559, 1558, 1558, 1558, 1558,
- 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
- 1558, 1558, 1558, 1558, 1559, 1558, 1558, 1558,
- 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558,
-
- 1558, 1559, 1558, 1558, 1558, 1559, 1558, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560,
- 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560,
-
- 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560,
- 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560,
- 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560,
- 1561, 1561, 1561, 1561, 1561, 1561, 1562, 1563,
-
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
-
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
- 1564, 1564, 1564, 1564, 1565, 1566, 1567, 1568,
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
- 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564,
-
- 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576,
- 1577, 1578, 1564, 1564, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 278, 279, 278, 279, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 278, 279,
-
- 282, 283, 278, 279, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 1579, 264,
- 1580, 1580, 1580, 1581, 1582, 1582, 1582, 1582,
- 1582, 1582, 1582, 1582, 264, 264, 1581, 1583,
-
- 278, 279, 278, 279, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 278, 279,
- 278, 279, 278, 279, 278, 279, 278, 279,
- 284, 285, 284, 285, 1584, 1584, 199, 1582,
-
- 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
- 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
- 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
- 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
-
- 1585, 1585, 1585, 1585, 1585, 1585, 1586, 1586,
- 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586,
- 1587, 1587, 1588, 1589, 1590, 1590, 1590, 1589,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591,
- 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591,
- 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1592,
- 1592, 1592, 1592, 1481, 1481, 1481, 1481, 1481,
-
- 1593, 1593, 1099, 1100, 1099, 1100, 1099, 1100,
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1097, 1097, 1099, 1100, 1099, 1100, 1099, 1100,
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
-
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
-
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1448, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
- 1097, 1099, 1100, 1099, 1100, 1594, 1099, 1100,
-
- 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100,
- 1481, 1595, 1595, 1099, 1100, 1596, 1597, 199,
- 1598, 1599, 1600, 1601, 1602, 1602, 1603, 1604,
- 1603, 1604, 1603, 1604, 1603, 1604, 1603, 1604,
-
- 1598, 1599, 1598, 1599, 1598, 1599, 1598, 1599,
- 1598, 1599, 1605, 1606, 1607, 1608, 199, 199,
- 1609, 1610, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 1611,
- 1612, 1612, 1597, 1613, 1613, 1613, 1613, 1613,
-
- 1614, 1614, 1615, 1614, 1614, 1614, 1616, 1614,
- 1614, 1614, 1614, 1615, 1614, 1614, 1614, 1614,
- 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
- 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
-
- 1614, 1614, 1614, 1617, 1617, 1615, 1615, 1617,
- 1618, 1618, 1618, 1618, 199, 199, 199, 199,
- 1544, 1544, 1544, 1544, 1544, 1544, 772, 772,
- 1290, 1619, 199, 199, 199, 199, 199, 199,
-
- 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
- 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
- 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
- 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
-
- 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
- 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
- 1620, 1620, 1621, 1622, 1623, 1623, 1624, 1624,
- 199, 199, 199, 199, 199, 199, 199, 199,
+ 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1630, 1630, 1630, 1631, 1631, 200,
+ 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1626, 1626, 1626, 1626, 1626, 1626,
1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+
+ 1626, 1626, 1626, 1626, 1632, 1632, 1632, 1632,
+ 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
+ 1634, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
+ 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
+
+ 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1630, 1630, 1631, 1631, 1636, 1624,
+
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
+ 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1634, 1634, 1634, 1634,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 200,
+
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+ 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1625, 1625, 1625, 1625,
- 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
- 1625, 1625, 1625, 1625, 1627, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 1628, 1628,
- 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636,
- 1637, 1638, 199, 199, 199, 199, 199, 199,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1634,
+ 1634, 1634, 1634, 1626, 1626, 1626, 1626, 1626,
+
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1634, 1634,
+
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+ 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1634,
+ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+
+ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+ 1638, 1638, 1638, 1638, 1638, 1638, 1639, 1639,
1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+
+ 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
+ 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
+ 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
+ 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
+
+ 1640, 1640, 1640, 1640, 1640, 1640, 1641, 1641,
+ 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
+ 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
+ 1641, 1641, 1641, 1641, 1642, 1642, 1642, 1642,
+
+ 1642, 1642, 1642, 1642, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1644, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1639, 1639,
1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 490, 490, 490, 490, 490, 490,
- 1640, 1640, 1640, 490, 199, 199, 199, 199,
-
- 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648,
- 1649, 1650, 1651, 1651, 1651, 1651, 1651, 1651,
- 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651,
- 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651,
-
- 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652,
- 1652, 1652, 1652, 1653, 1653, 1653, 1654, 1655,
- 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656,
- 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656,
-
- 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1657,
- 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657,
- 1657, 1657, 1658, 1659, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 1660,
-
- 822, 822, 822, 822, 822, 822, 822, 822,
- 822, 822, 822, 822, 822, 822, 822, 822,
- 822, 822, 822, 822, 822, 822, 822, 822,
- 822, 822, 822, 822, 822, 199, 199, 199,
-
- 1661, 1661, 1661, 1662, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
-
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
- 1663, 1663, 1663, 1664, 1662, 1662, 1661, 1661,
- 1661, 1661, 1662, 1662, 1661, 1662, 1662, 1662,
-
- 1665, 1666, 1666, 1666, 1666, 1666, 1666, 1667,
- 1668, 1668, 1666, 1666, 1666, 1666, 199, 1669,
- 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677,
- 1678, 1679, 199, 199, 199, 199, 1666, 1666,
-
- 1680, 1680, 1680, 1680, 1680, 1681, 1682, 1680,
- 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
- 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690,
- 1691, 1692, 1680, 1680, 1680, 1680, 1680, 199,
-
- 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693,
- 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693,
- 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693,
- 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693,
-
- 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693,
- 1693, 1694, 1694, 1694, 1694, 1694, 1694, 1695,
- 1695, 1694, 1694, 1695, 1695, 1694, 1694, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1693, 1693, 1693, 1694, 1693, 1693, 1693, 1693,
- 1693, 1693, 1693, 1693, 1694, 1695, 199, 199,
- 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
- 1704, 1705, 199, 199, 1706, 1707, 1707, 1707,
-
- 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
- 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
- 1709, 1708, 1708, 1708, 1708, 1708, 1708, 1710,
- 1710, 1710, 1708, 810, 1681, 1711, 1680, 1680,
-
- 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
-
- 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- 1713, 1712, 1713, 1713, 1714, 1712, 1712, 1713,
- 1713, 1712, 1712, 1712, 1712, 1712, 1713, 1713,
-
- 1712, 1713, 1712, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 1712, 1712, 1715, 1716, 1716,
-
- 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
- 1717, 1717, 1717, 1718, 1719, 1719, 1718, 1718,
- 1720, 1720, 1717, 1721, 1721, 1718, 1722, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 1723, 1723, 1723, 1723, 1723, 1723, 199,
- 199, 1723, 1723, 1723, 1723, 1723, 1723, 199,
- 199, 1723, 1723, 1723, 1723, 1723, 1723, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 199,
- 1723, 1723, 1723, 1723, 1723, 1723, 1723, 199,
- 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
- 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
-
- 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
- 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
- 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
- 1602, 1602, 1602, 1724, 1725, 1725, 1725, 1725,
-
- 199, 199, 199, 199, 1602, 1726, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727,
- 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727,
- 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727,
- 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727,
-
- 1727, 1727, 1727, 1728, 1728, 1729, 1728, 1728,
- 1729, 1728, 1728, 1730, 1728, 1731, 199, 199,
- 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739,
- 1740, 1741, 199, 199, 199, 199, 199, 199,
-
- 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
- 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743,
-
- 1743, 1743, 1743, 1743, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 825, 825, 825, 825, 825, 825, 825, 825,
- 825, 825, 825, 825, 825, 825, 825, 825,
-
- 825, 825, 825, 825, 825, 825, 825, 199,
- 199, 199, 199, 828, 828, 828, 828, 828,
- 828, 828, 828, 828, 828, 828, 828, 828,
- 828, 828, 828, 828, 828, 828, 828, 828,
+
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1647, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+
+ 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1646, 1646, 1646, 1646, 1646, 200, 200, 200,
+ 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+ 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+ 1648, 1648, 1649, 1649, 1648, 1648, 1648, 1648,
+ 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+ 1648, 1648, 1648, 1648, 1649, 1648, 1648, 1648,
+ 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
+
+ 1648, 1649, 1648, 1648, 1648, 1649, 1648, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
+ 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
+
+ 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
+ 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
+ 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
+ 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1653,
+
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+ 1654, 1654, 1654, 1654, 1655, 1656, 1657, 1658,
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+
+ 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666,
+ 1667, 1668, 1654, 1654, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 279, 280, 279, 280, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 279, 280,
+
+ 283, 284, 279, 280, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 1669, 265,
+ 1670, 1670, 1670, 1671, 1672, 1672, 1672, 1672,
+ 1672, 1672, 1672, 1672, 265, 265, 1671, 1673,
+
+ 279, 280, 279, 280, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 279, 280,
+ 279, 280, 279, 280, 279, 280, 279, 280,
+ 285, 286, 285, 286, 1674, 1674, 1675, 1672,
+
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+
+ 1676, 1676, 1676, 1676, 1676, 1676, 1677, 1677,
+ 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
+ 1678, 1678, 1679, 1680, 1681, 1681, 1681, 1680,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1683,
+ 1683, 1683, 1683, 1570, 1570, 1570, 1570, 1570,
+
+ 1684, 1684, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1183, 1183, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1537, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
+ 1183, 1185, 1186, 1185, 1186, 1685, 1185, 1186,
+
+ 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
+ 1570, 1686, 1686, 1185, 1186, 1687, 1688, 1689,
+ 1690, 1691, 1692, 1693, 1694, 1694, 1695, 1696,
+ 1695, 1696, 1695, 1696, 1695, 1696, 1695, 1696,
+
+ 1690, 1691, 1690, 1691, 1690, 1691, 1690, 1691,
+ 1690, 1691, 1697, 1698, 1699, 1700, 200, 200,
+ 1701, 1702, 1703, 1704, 1705, 1706, 1705, 1706,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 1707,
+ 1708, 1708, 1688, 1709, 1709, 1709, 1709, 1709,
+
+ 1710, 1710, 1711, 1710, 1710, 1710, 1712, 1710,
+ 1710, 1710, 1710, 1711, 1710, 1710, 1710, 1710,
+ 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
+ 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
+
+ 1710, 1710, 1710, 1713, 1713, 1711, 1711, 1713,
+ 1714, 1714, 1714, 1714, 200, 200, 200, 200,
+ 1633, 1633, 1633, 1633, 1633, 1633, 778, 778,
+ 1376, 1715, 200, 200, 200, 200, 200, 200,
+
+ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+
+ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+ 1716, 1716, 1717, 1718, 1719, 1719, 1720, 1720,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1721, 1721, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+ 1722, 1722, 1722, 1722, 1721, 1721, 1721, 1721,
+ 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
+
+ 1721, 1721, 1721, 1721, 1723, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 1724, 1724,
+ 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732,
+ 1733, 1734, 200, 200, 200, 200, 200, 200,
+
+ 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+ 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+ 1735, 1735, 493, 493, 493, 493, 493, 493,
+ 1736, 1736, 1736, 493, 1737, 1738, 200, 200,
+
+ 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
+ 1747, 1748, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+
+ 1749, 1749, 1749, 1749, 1749, 1749, 1750, 1750,
+ 1750, 1750, 1750, 1751, 1751, 1751, 1752, 1753,
+ 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+ 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+
+ 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1756, 1757, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 1758,
828, 828, 828, 828, 828, 828, 828, 828,
828, 828, 828, 828, 828, 828, 828, 828,
828, 828, 828, 828, 828, 828, 828, 828,
- 828, 828, 828, 828, 199, 199, 199, 199,
-
- 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
- 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
- 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
- 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
-
- 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
- 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
- 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
- 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
-
- 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
- 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
- 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
- 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
-
- 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
- 1746, 1746, 1746, 1746, 1746, 1746, 1551, 1551,
- 1746, 1551, 1746, 1551, 1551, 1746, 1746, 1746,
- 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1551,
-
- 1746, 1551, 1746, 1551, 1551, 1746, 1746, 1551,
- 1551, 1551, 1746, 1746, 1746, 1746, 1747, 1747,
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
-
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
-
- 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
- 1748, 1748, 1748, 1749, 1749, 1749, 1550, 1550,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
-
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
-
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
- 1750, 1750, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 1751, 1752, 1753, 1754, 1755, 1756, 1756, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 1757, 1758, 1759, 1760, 1761,
- 199, 199, 199, 199, 199, 1762, 1763, 1764,
-
- 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
- 1765, 1766, 1764, 1764, 1764, 1764, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 296,
- 1764, 1764, 1764, 1764, 1764, 296, 1764, 296,
-
- 1764, 1764, 296, 1764, 1764, 296, 1764, 1764,
- 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1765,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
-
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
-
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768,
- 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
-
- 1768, 1768, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
-
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1501, 1228,
-
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
-
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 342, 342, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
-
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
- 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
-
- 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
- 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1770, 334, 342, 342,
-
- 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
- 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
- 1772, 1773, 1774, 1775, 1776, 1777, 1777, 1778,
- 1779, 1780, 199, 199, 199, 199, 199, 199,
-
- 170, 170, 170, 170, 1085, 1085, 1085, 985,
- 985, 985, 985, 985, 985, 985, 199, 199,
- 1781, 1782, 1782, 1783, 1783, 1784, 1785, 1784,
- 1785, 1784, 1785, 1784, 1785, 1784, 1785, 1784,
-
- 1785, 1784, 1785, 1784, 1785, 1513, 1513, 1786,
- 1787, 1781, 1781, 1781, 1781, 1783, 1783, 1783,
- 1788, 1789, 1790, 199, 1791, 1792, 1793, 1793,
- 1782, 1281, 1282, 1281, 1282, 1281, 1282, 1794,
-
- 1781, 1781, 1795, 1796, 1797, 1798, 1799, 199,
- 1781, 1284, 1242, 1781, 199, 199, 199, 199,
- 1767, 1767, 1767, 1800, 1767, 342, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
-
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
- 1767, 1767, 1767, 1767, 1767, 342, 342, 1801,
-
- 199, 1793, 1781, 1794, 1284, 1242, 1781, 1802,
- 1281, 1282, 1781, 1795, 1788, 1796, 1790, 1803,
- 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811,
- 1812, 1813, 1792, 1791, 1814, 1799, 1815, 1793,
-
- 1781, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
- 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
- 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
- 1816, 1816, 1816, 1817, 1781, 1818, 1819, 1783,
-
- 1819, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
- 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
- 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
- 1820, 1820, 1820, 1817, 1799, 1818, 1799, 1821,
-
- 1822, 1823, 1281, 1282, 1824, 1825, 1826, 1827,
- 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827,
- 1828, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
- 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
-
- 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
- 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
- 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
- 1826, 1826, 1826, 1826, 1826, 1826, 1829, 1829,
-
- 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
- 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
- 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
- 1830, 1830, 1830, 1830, 1830, 1830, 1830, 199,
-
- 199, 199, 1830, 1830, 1830, 1830, 1830, 1830,
- 199, 199, 1830, 1830, 1830, 1830, 1830, 1830,
- 199, 199, 1830, 1830, 1830, 1830, 1830, 1830,
- 199, 199, 1830, 1830, 1830, 199, 199, 199,
-
- 1831, 1284, 1799, 1819, 1509, 1284, 1284, 199,
- 1303, 1280, 1280, 1280, 1280, 1303, 1303, 199,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1832, 1832, 1832, 1833, 51, 1834, 1834,
-
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 199, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
-
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 199,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 199, 1835, 1835, 199, 1835,
-
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 199, 199,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 199, 199,
-
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
-
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
- 1835, 1835, 1835, 199, 199, 199, 199, 199,
-
- 1836, 1837, 1836, 199, 199, 199, 199, 1838,
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
-
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
- 1838, 1838, 1838, 1838, 199, 199, 199, 1839,
- 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839,
-
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
-
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840, 1840, 1840, 1840, 1841, 1841, 1841,
- 1841, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
-
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1841, 1843, 1844, 199, 199, 199,
- 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
- 1390, 1390, 1390, 1390, 199, 199, 199, 199,
-
- 1844, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
- 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
-
- 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
- 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
- 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
- 1325, 1325, 1325, 1325, 1325, 1088, 199, 199,
-
- 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845,
- 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845,
- 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845,
- 1845, 1845, 1845, 1845, 1845, 199, 199, 199,
-
- 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
- 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
- 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
- 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-
- 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
- 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
- 1846, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 985, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
- 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
- 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
- 1847, 1847, 1847, 1847, 199, 199, 199, 199,
-
- 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
- 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
- 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
- 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1849,
-
- 1850, 1850, 1850, 1850, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
- 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
-
- 1851, 1852, 1851, 1851, 1851, 1851, 1851, 1851,
- 1851, 1851, 1852, 199, 199, 199, 199, 199,
- 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
- 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
-
- 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
- 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
- 1853, 1853, 1853, 1853, 1853, 1853, 1854, 1854,
- 1854, 1854, 1854, 199, 199, 199, 199, 199,
-
- 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855,
- 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855,
- 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855,
- 1855, 1855, 1855, 1855, 1855, 1855, 199, 1856,
-
- 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
- 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
- 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
- 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
-
- 1857, 1857, 1857, 1857, 199, 199, 199, 199,
- 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
- 1858, 1859, 1859, 1859, 1859, 1859, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
- 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
- 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
- 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
-
- 1860, 1860, 1860, 1860, 1860, 1860, 1861, 1861,
- 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
- 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
- 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
-
- 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862,
- 1862, 1862, 1862, 1862, 1862, 1862, 1863, 1863,
- 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
- 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
-
- 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
- 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
- 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
- 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
-
- 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
- 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
- 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
- 1865, 1865, 1865, 1865, 1865, 1865, 199, 199,
-
- 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873,
- 1874, 1875, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
- 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
- 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
- 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
-
- 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
- 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
-
- 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
- 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
- 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
- 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
-
- 1877, 1877, 1877, 1877, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 1878,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
-
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 1879, 1879, 1879, 1879, 1879, 1879, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1880, 1880, 1880, 1880, 1880, 1880, 296, 296,
- 1880, 296, 1880, 1880, 1880, 1880, 1880, 1880,
- 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
- 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
-
- 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
- 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
- 1880, 1880, 1880, 1880, 1880, 1880, 296, 1880,
- 1880, 296, 296, 296, 1880, 296, 296, 1880,
-
- 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881,
- 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881,
- 1881, 1881, 1881, 1881, 1881, 1881, 296, 1882,
- 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
-
- 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
- 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
- 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1885,
- 1885, 1886, 1886, 1886, 1886, 1886, 1886, 1886,
-
- 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
- 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
- 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
- 1887, 1887, 1887, 1887, 1887, 1887, 1887, 296,
-
- 296, 296, 296, 296, 296, 296, 296, 1888,
- 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889,
- 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889,
- 1889, 1889, 1889, 1889, 1889, 1889, 1890, 1890,
- 1890, 1890, 1891, 1891, 296, 296, 296, 1892,
-
- 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
- 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
- 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
- 1893, 1893, 296, 296, 296, 296, 296, 1894,
-
- 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
- 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
- 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
- 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
-
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
- 296, 296, 296, 296, 296, 296, 1896, 1896,
-
- 1897, 1898, 1898, 1898, 296, 1898, 1898, 296,
- 296, 296, 296, 296, 1898, 1899, 1898, 1900,
- 1897, 1897, 1897, 1897, 296, 1897, 1897, 1897,
- 296, 1897, 1897, 1897, 1897, 1897, 1897, 1897,
-
- 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897,
- 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897,
- 1897, 1897, 1897, 1897, 296, 296, 296, 296,
- 1900, 1901, 1899, 296, 296, 296, 296, 1902,
-
- 1903, 1904, 1905, 1906, 1907, 1907, 1907, 1907,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 1908, 1908, 1908, 1908, 1908, 1908, 1909, 1909,
- 1910, 296, 296, 296, 296, 296, 296, 296,
-
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
- 1911, 1911, 1911, 1911, 1911, 1912, 1912, 1913,
-
- 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
- 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
- 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914,
- 1914, 1914, 1914, 1914, 1914, 1915, 1915, 1915,
-
- 1916, 1916, 1916, 1916, 1916, 1917, 1918, 1917,
- 1919, 1917, 1917, 1918, 1918, 1920, 1917, 1917,
- 1917, 1917, 1917, 1916, 1916, 1916, 1916, 1920,
- 1916, 1916, 1916, 1916, 1916, 1917, 1916, 1916,
-
- 1916, 1917, 1918, 1918, 1917, 1921, 1922, 296,
- 296, 296, 296, 1923, 1923, 1923, 1923, 1924,
- 1925, 1925, 1925, 1925, 1925, 1925, 1926, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
- 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
- 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
- 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
-
- 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
- 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
- 1927, 1927, 1927, 1927, 1927, 1927, 296, 296,
- 296, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
-
- 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929,
- 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929,
- 1929, 1929, 1929, 1929, 1929, 1929, 296, 296,
+ 828, 828, 828, 828, 828, 200, 200, 200,
+
+ 1759, 1759, 1759, 1760, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1762, 1760, 1760, 1759, 1759,
+ 1759, 1759, 1760, 1760, 1759, 1760, 1760, 1760,
+
+ 1763, 1764, 1764, 1764, 1764, 1764, 1764, 1765,
+ 1766, 1766, 1764, 1764, 1764, 1764, 200, 1767,
+ 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775,
+ 1776, 1777, 200, 200, 200, 200, 1764, 1764,
+
+ 1778, 1778, 1778, 1778, 1778, 1779, 1780, 1778,
+ 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+ 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788,
+ 1789, 1790, 1778, 1778, 1778, 1778, 1778, 200,
+
+ 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
+ 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
+ 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
+ 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
+
+ 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
+ 1791, 1792, 1792, 1792, 1792, 1792, 1792, 1793,
+ 1793, 1792, 1792, 1793, 1793, 1792, 1792, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1791, 1791, 1791, 1792, 1791, 1791, 1791, 1791,
+ 1791, 1791, 1791, 1791, 1792, 1793, 200, 200,
+ 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801,
+ 1802, 1803, 200, 200, 1804, 1805, 1805, 1805,
+
+ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
+ 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
+ 1807, 1806, 1806, 1806, 1806, 1806, 1806, 1808,
+ 1808, 1808, 1806, 816, 1779, 1809, 1778, 1778,
+
+ 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+ 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+ 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+ 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+
+ 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+ 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+ 1811, 1810, 1811, 1811, 1812, 1810, 1810, 1811,
+ 1811, 1810, 1810, 1810, 1810, 1810, 1811, 1811,
+
+ 1810, 1811, 1810, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 1810, 1810, 1813, 1814, 1814,
+
+ 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+ 1815, 1815, 1815, 1816, 1817, 1817, 1816, 1816,
+ 1818, 1818, 1815, 1819, 1819, 1816, 1820, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 1821, 1821, 1821, 1821, 1821, 1821, 200,
+ 200, 1821, 1821, 1821, 1821, 1821, 1821, 200,
+ 200, 1821, 1821, 1821, 1821, 1821, 1821, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1821, 1821, 1821, 1821, 1821, 1821, 1821, 200,
+ 1821, 1821, 1821, 1821, 1821, 1821, 1821, 200,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1822, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1823, 1824, 1824, 1824, 1824,
+
+ 1825, 1825, 1825, 1825, 1694, 1826, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834,
+ 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842,
+
+ 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850,
+ 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858,
+ 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866,
+ 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874,
+
+ 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882,
+ 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890,
+ 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898,
+ 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906,
+
+ 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+ 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+ 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+ 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+
+ 1907, 1907, 1907, 1908, 1908, 1909, 1908, 1908,
+ 1909, 1908, 1908, 1910, 1908, 1911, 200, 200,
+ 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919,
+ 1920, 1921, 200, 200, 200, 200, 200, 200,
+
+ 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+ 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
+
+ 1923, 1923, 1923, 1923, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 831, 831, 831, 831, 831, 831, 831, 831,
+ 831, 831, 831, 831, 831, 831, 831, 831,
+
+ 831, 831, 831, 831, 831, 831, 831, 200,
+ 200, 200, 200, 834, 834, 834, 834, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834,
+
+ 834, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 834, 834, 834, 834, 834, 834,
+ 834, 834, 834, 834, 200, 200, 200, 200,
+
+ 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
+ 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
+ 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
+ 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
+
+ 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+ 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+ 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+ 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+
+ 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+ 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+ 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+ 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+
+ 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+ 1926, 1926, 1926, 1926, 1926, 1926, 1640, 1640,
+ 1926, 1640, 1926, 1640, 1640, 1926, 1926, 1926,
+ 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1640,
+
+ 1926, 1640, 1926, 1640, 1640, 1926, 1926, 1640,
+ 1640, 1640, 1926, 1926, 1926, 1926, 1927, 1927,
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+
+ 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+ 1928, 1928, 1928, 1929, 1929, 1929, 1639, 1639,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
+ 1930, 1930, 1639, 1639, 1639, 1639, 1639, 1639,
+
+ 1931, 1932, 1933, 1934, 1935, 1936, 1936, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 1937, 1938, 1939, 1940, 1941,
+ 200, 200, 200, 200, 200, 1942, 1943, 1944,
+
+ 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+ 1945, 1946, 1944, 1944, 1944, 1944, 1944, 1944,
+ 1944, 1944, 1944, 1944, 1944, 1944, 1944, 297,
+ 1944, 1944, 1944, 1944, 1944, 297, 1944, 297,
+
+ 1944, 1944, 297, 1944, 1944, 297, 1944, 1944,
+ 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1945,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1948, 1948, 1948, 1948, 1948, 1948,
+ 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
+
+ 1948, 1948, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1590, 1314,
+
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 343, 343, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
+ 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
- 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931,
- 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931,
- 1931, 1931, 1931, 296, 296, 296, 296, 296,
- 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932,
-
- 1933, 1934, 1933, 1934, 1934, 1934, 1933, 1933,
- 1933, 1934, 1933, 1933, 1934, 1933, 1934, 1934,
- 1933, 1934, 296, 296, 296, 296, 296, 296,
- 296, 1935, 1935, 1935, 1935, 296, 296, 296,
-
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 1936, 1936, 1936, 1936, 1937, 1937, 1938,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939,
- 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939,
- 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939,
- 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939,
-
- 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939,
- 1939, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947,
- 1948, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
- 1949, 1949, 1949, 1949, 1949, 1949, 1949, 296,
-
- 1950, 1951, 1950, 1952, 1952, 1952, 1952, 1952,
- 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
- 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
- 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
- 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
- 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
- 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
+ 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1950, 335, 343, 343,
+
1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951,
- 1951, 1951, 1951, 1951, 1951, 1951, 1953, 1954,
- 1954, 1955, 1955, 1955, 1955, 1955, 199, 199,
- 199, 199, 1956, 1957, 1958, 1959, 1960, 1961,
- 1962, 1963, 1964, 1965, 1965, 1965, 1965, 1965,
- 1965, 1965, 1965, 1965, 1965, 1965, 1966, 1967,
- 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 1976,
- 1977, 1977, 1978, 1979, 1979, 1979, 1979, 1979,
- 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
- 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
- 1979, 1979, 1980, 1979, 1980, 1979, 1979, 1979,
- 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
- 1979, 1979, 1979, 1980, 1979, 1979, 1979, 1979,
- 1978, 1978, 1978, 1977, 1977, 1977, 1977, 1978,
- 1978, 1981, 1982, 1983, 1983, 1984, 1985, 1985,
- 1985, 1985, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986,
- 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986,
- 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986,
- 1986, 199, 199, 199, 199, 199, 199, 199,
- 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
- 1995, 1996, 199, 199, 199, 199, 199, 199,
-
- 1997, 1997, 1997, 1998, 1998, 1998, 1998, 1998,
- 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
- 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
- 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
- 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1999,
- 2000, 2000, 2000, 2000, 2001, 2000, 2002, 2002,
- 2000, 2000, 2000, 2003, 2003, 199, 2004, 2005,
- 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
- 2014, 2015, 2015, 2015, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016,
- 2016, 2016, 2016, 2017, 2018, 2019, 2016, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2020, 2020, 2021, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951,
+ 1952, 1953, 1954, 1955, 1956, 1957, 1957, 1958,
+ 1959, 1960, 200, 200, 200, 200, 200, 200,
+
+ 171, 171, 171, 171, 1171, 1171, 1171, 1071,
+ 1071, 1071, 1071, 1071, 1071, 1071, 1675, 1675,
+ 1961, 1962, 1962, 1963, 1963, 1964, 1965, 1964,
+ 1965, 1964, 1965, 1964, 1965, 1964, 1965, 1964,
+
+ 1965, 1964, 1965, 1964, 1965, 1602, 1602, 1966,
+ 1967, 1961, 1961, 1961, 1961, 1963, 1963, 1963,
+ 1968, 1969, 1970, 200, 1971, 1972, 1973, 1973,
+ 1962, 1367, 1368, 1367, 1368, 1367, 1368, 1974,
+
+ 1961, 1961, 1975, 1976, 1977, 1978, 1979, 200,
+ 1961, 1370, 1328, 1961, 200, 200, 200, 200,
+ 1947, 1947, 1947, 1980, 1947, 343, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
+ 1947, 1947, 1947, 1947, 1947, 343, 343, 1981,
+
+ 200, 1973, 1961, 1974, 1370, 1328, 1961, 1982,
+ 1367, 1368, 1961, 1975, 1968, 1976, 1970, 1983,
+ 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
+ 1992, 1993, 1972, 1971, 1994, 1979, 1995, 1973,
+
+ 1961, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+ 1996, 1996, 1996, 1997, 1961, 1998, 1999, 1963,
+
+ 1999, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
+ 2000, 2000, 2000, 1997, 1979, 1998, 1979, 2001,
+
+ 2002, 2003, 1367, 1368, 2004, 2005, 2006, 2007,
+ 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+ 2008, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+ 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+
+ 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+ 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+ 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+ 2006, 2006, 2006, 2006, 2006, 2006, 2009, 2009,
+
+ 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
+ 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
+ 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
+ 2010, 2010, 2010, 2010, 2010, 2010, 2010, 200,
+
+ 200, 200, 2010, 2010, 2010, 2010, 2010, 2010,
+ 200, 200, 2010, 2010, 2010, 2010, 2010, 2010,
+ 200, 200, 2010, 2010, 2010, 2010, 2010, 2010,
+ 200, 200, 2010, 2010, 2010, 200, 200, 200,
+
+ 2011, 1370, 1979, 1999, 1598, 1370, 1370, 200,
+ 1390, 1366, 1366, 1366, 1366, 1390, 1390, 200,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 2012, 2012, 2012, 2013, 51, 2014, 2014,
+
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 200, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 200,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 200, 2015, 2015, 200, 2015,
+
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 200, 200,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 200, 200,
+
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+ 2015, 2015, 2015, 200, 200, 200, 200, 200,
+
+ 2016, 2017, 2016, 200, 200, 200, 200, 2018,
+ 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
+ 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
+ 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
+
+ 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
+ 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
+ 2018, 2018, 2018, 2018, 200, 200, 200, 2019,
+ 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
+
+ 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+ 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+ 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+ 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+
+ 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+ 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
+ 2020, 2020, 2020, 2020, 2020, 2021, 2021, 2021,
+ 2021, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+
2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2021, 2021, 2021, 2020, 2020,
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2021,
- 2023, 2022, 2022, 2022, 2022, 2024, 2024, 2025,
- 2026, 199, 199, 199, 199, 2027, 199, 199,
- 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035,
- 2036, 2037, 2038, 199, 199, 199, 199, 199,
- 199, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
- 2039, 2039, 2039, 2039, 2039, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
+ 2022, 2022, 2021, 2023, 2024, 200, 200, 200,
+ 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+ 1479, 1479, 1479, 1479, 200, 200, 200, 200,
+
+ 2024, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1174, 200, 200,
+
+ 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
+ 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
+ 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
+ 2025, 2025, 2025, 2025, 2025, 200, 200, 200,
+
+ 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+ 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+ 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+ 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+
+ 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+ 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+ 2026, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1071, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+ 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+ 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+ 2027, 2027, 2027, 2027, 200, 200, 200, 200,
+
+ 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028,
+ 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028,
+ 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028,
+ 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2029,
+
+ 2030, 2030, 2030, 2030, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+ 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+
+ 2031, 2032, 2031, 2031, 2031, 2031, 2031, 2031,
+ 2031, 2031, 2032, 200, 200, 200, 200, 200,
+ 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+ 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+
+ 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+ 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+ 2033, 2033, 2033, 2033, 2033, 2033, 2034, 2034,
+ 2034, 2034, 2034, 200, 200, 200, 200, 200,
+
+ 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+ 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+ 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+ 2035, 2035, 2035, 2035, 2035, 2035, 200, 2036,
+
+ 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+ 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+ 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+ 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+
+ 2037, 2037, 2037, 2037, 200, 200, 200, 200,
+ 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
+ 2038, 2039, 2039, 2039, 2039, 2039, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
- 2040, 2040, 199, 2040, 2040, 2040, 2040, 2040,
2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
- 2040, 2040, 2040, 2040, 2041, 2041, 2041, 2042,
- 2042, 2042, 2041, 2041, 2042, 2043, 2044, 2042,
- 2045, 2045, 2046, 2045, 2045, 2046, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
- 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
- 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
- 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
- 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
- 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2048,
- 2049, 2049, 2049, 2048, 2048, 2048, 2048, 2048,
- 2048, 2050, 2051, 199, 199, 199, 199, 199,
- 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059,
- 2060, 2061, 199, 199, 199, 199, 199, 199,
-
- 199, 2062, 2063, 2063, 199, 2064, 2064, 2064,
- 2064, 2064, 2064, 2064, 2064, 199, 199, 2064,
- 2064, 199, 199, 2064, 2064, 2064, 2064, 2064,
+
+ 2040, 2040, 2040, 2040, 2040, 2040, 2041, 2041,
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+
+ 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+ 2042, 2042, 2042, 2042, 2042, 2042, 2043, 2043,
+ 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
+ 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
+
+ 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
+ 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
+ 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
+ 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
+
+ 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+ 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+ 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+ 2045, 2045, 2045, 2045, 2045, 2045, 200, 200,
+
+ 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053,
+ 2054, 2055, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+
+ 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+ 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+
+ 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+ 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+ 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+ 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+
+ 2057, 2057, 2057, 2057, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 2058,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 2059, 2059, 2059, 2059, 2059, 2059, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2060, 2060, 2060, 2060, 2060, 2060, 297, 297,
+ 2060, 297, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 297, 2060,
+ 2060, 297, 297, 297, 2060, 297, 297, 2060,
+
+ 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061,
+ 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061,
+ 2061, 2061, 2061, 2061, 2061, 2061, 297, 2062,
+ 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063,
+
2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
- 2064, 199, 2064, 2064, 2064, 2064, 2064, 2064,
- 2064, 199, 2064, 2064, 199, 2064, 2064, 2064,
- 2064, 2064, 199, 199, 2065, 2064, 2066, 2063,
- 2062, 2063, 2063, 2063, 2063, 199, 199, 2063,
- 2063, 199, 199, 2067, 2067, 2068, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 2066,
- 199, 199, 199, 199, 199, 2064, 2064, 2064,
- 2064, 2064, 2063, 2063, 199, 199, 2069, 2069,
- 2069, 2069, 2069, 2069, 2069, 199, 199, 199,
- 2069, 2069, 2069, 2069, 2069, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
- 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
- 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
- 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
- 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
- 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
- 2071, 2072, 2072, 2073, 2073, 2073, 2073, 2073,
- 2073, 2072, 2074, 2075, 2075, 2071, 2075, 2073,
- 2073, 2072, 2076, 2077, 2070, 2070, 2078, 2070,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086,
- 2087, 2088, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
- 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
- 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
- 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
- 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
- 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2090,
- 2091, 2091, 2092, 2092, 2092, 2092, 199, 199,
- 2091, 2091, 2093, 2093, 2092, 2092, 2091, 2094,
- 2095, 2096, 2097, 2097, 2098, 2098, 2099, 2099,
- 2099, 2097, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100,
- 2101, 2101, 2101, 2102, 2102, 2102, 2102, 2102,
- 2102, 2102, 2102, 2101, 2101, 2102, 2101, 2103,
- 2102, 2104, 2104, 2105, 2100, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113,
- 2114, 2115, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
- 2116, 2116, 2116, 2117, 2118, 2117, 2118, 2118,
- 2117, 2117, 2117, 2117, 2117, 2117, 2119, 2120,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128,
- 2129, 2130, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131,
- 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131,
- 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131,
- 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131,
- 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
- 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
- 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
- 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
- 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140,
- 2141, 2142, 2143, 2143, 2143, 2143, 2143, 2143,
- 2143, 2143, 2143, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 2144,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145,
- 2145, 199, 199, 199, 199, 199, 199, 199,
-
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
-
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
- 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147,
- 2147, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148,
- 2148, 2148, 2148, 2149, 2149, 2149, 2149, 2149,
- 2149, 2149, 2149, 2149, 2149, 2149, 2149, 199,
- 2150, 2150, 2150, 2150, 2151, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
-
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2153, 2153, 2153, 2154, 2154, 2154, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2154, 2152, 2152, 2152, 2153, 2154,
- 2153, 2154, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
-
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2153, 2154, 2154, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
-
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
- 2152, 2152, 2152, 2152, 2152, 2152, 2152, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
- 2155, 199, 199, 199, 199, 199, 199, 199,
- 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
- 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
- 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
- 2156, 2156, 2156, 2156, 2156, 2156, 2156, 199,
- 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164,
- 2165, 2166, 199, 199, 199, 199, 2167, 2167,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
- 2168, 2168, 2168, 2168, 2168, 2168, 199, 199,
- 2169, 2169, 2169, 2169, 2169, 2170, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2173,
- 2173, 2174, 2175, 2175, 2176, 2176, 2176, 2176,
- 2177, 2177, 2177, 2177, 2173, 2176, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185,
- 2186, 2187, 199, 2188, 2188, 2188, 2188, 2188,
- 2188, 2188, 199, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 199, 199, 199, 199, 199, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
- 2189, 2189, 2189, 2189, 2189, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2189, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
- 2190, 2190, 2190, 2190, 2190, 2190, 2190, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 2191,
- 2191, 2191, 2191, 2192, 2192, 2192, 2192, 2192,
- 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2193, 2194, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 199, 199, 199, 199, 199,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 2195, 2195, 2195, 199, 199, 199,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 199, 199, 199, 199, 199, 199, 199,
- 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195,
- 2195, 2195, 199, 199, 2196, 2197, 2198, 2199,
- 2200, 2200, 2200, 2200, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 199,
- 199, 1325, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2202, 2202,
- 2202, 2202, 2202, 2202, 2202, 2203, 2204, 2205,
- 2205, 2205, 2201, 2201, 2201, 2206, 2203, 2203,
- 2203, 2203, 2203, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2201, 2201, 2209, 2209, 2209,
- 2209, 2209, 2208, 2208, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2209, 2209, 2209, 2209, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2202, 2202, 2202, 2202, 2202,
- 2202, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
- 2201, 2201, 2201, 2201, 2201, 2201, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842,
- 1842, 1842, 2210, 2210, 2210, 1842, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
- 1357, 1357, 1357, 1357, 1357, 1357, 1357, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211,
- 2211, 2211, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 199, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2212, 199, 2212, 2212,
- 199, 199, 2212, 199, 199, 2212, 2212, 199,
- 199, 2212, 2212, 2212, 2212, 199, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213,
- 2213, 2213, 199, 2213, 199, 2213, 2213, 2213,
- 2213, 2214, 2213, 2213, 199, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
-
- 2213, 2213, 2213, 2213, 2212, 2212, 199, 2212,
- 2212, 2212, 2212, 199, 199, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 199, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 199, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 199, 2212, 2212, 2212, 2212, 199,
- 2212, 2212, 2212, 2212, 2212, 199, 2212, 199,
- 199, 199, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 199, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
-
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 1317, 1317, 199, 199,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2215, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2216, 2213, 2213, 2213, 2213,
- 2213, 2213, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2215, 2213, 2213, 2213, 2213,
-
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2216, 2213, 2213,
- 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2215, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2216,
- 2213, 2213, 2213, 2213, 2213, 2213, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2215,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2216, 2213, 2213, 2213, 2213, 2213, 2213,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212,
- 2212, 2215, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
- 2213, 2213, 2213, 2216, 2213, 2213, 2213, 2213,
- 2213, 2213, 2217, 2218, 199, 199, 2219, 2220,
- 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228,
- 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226,
- 2227, 2228, 2219, 2220, 2221, 2222, 2223, 2224,
- 2225, 2226, 2227, 2228, 2219, 2220, 2221, 2222,
- 2223, 2224, 2225, 2226, 2227, 2228, 2219, 2220,
- 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228,
-
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229,
- 2229, 2229, 2229, 2229, 2229, 296, 296, 2230,
- 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230,
- 2231, 2231, 2231, 2231, 2231, 2231, 2231, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
- 296, 296, 296, 296, 296, 296, 296, 296,
-
- 2232, 2232, 2232, 2232, 342, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
+ 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2065,
+ 2065, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 297,
+
+ 297, 297, 297, 297, 297, 297, 297, 2068,
+ 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
+ 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
+ 2069, 2069, 2069, 297, 2069, 2069, 297, 297,
+ 297, 297, 297, 2070, 2070, 2070, 2070, 2070,
+
+ 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
+ 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
+ 2071, 2071, 2071, 2071, 2071, 2071, 2072, 2072,
+ 2072, 2072, 2073, 2073, 297, 297, 297, 2074,
+
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+ 2075, 2075, 297, 297, 297, 297, 297, 2076,
+
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+
+ 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+ 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+ 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+ 297, 297, 297, 297, 2079, 2079, 2078, 2078,
+
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 297, 297, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+ 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
+
+ 2080, 2081, 2081, 2081, 297, 2081, 2081, 297,
+ 297, 297, 297, 297, 2081, 2082, 2081, 2083,
+ 2080, 2080, 2080, 2080, 297, 2080, 2080, 2080,
+ 297, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
+
+ 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
+ 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
+ 2080, 2080, 2080, 2080, 297, 297, 297, 297,
+ 2083, 2084, 2082, 297, 297, 297, 297, 2085,
+
+ 2086, 2087, 2088, 2089, 2090, 2090, 2090, 2090,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 2091, 2091, 2091, 2091, 2091, 2091, 2092, 2092,
+ 2093, 297, 297, 297, 297, 297, 297, 297,
+
+ 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+ 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+ 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+ 2094, 2094, 2094, 2094, 2094, 2095, 2095, 2096,
+
+ 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097,
+ 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097,
+ 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097,
+ 2097, 2097, 2097, 2097, 2097, 2098, 2098, 2098,
+
+ 2099, 2099, 2099, 2099, 2099, 2100, 2101, 2100,
+ 2102, 2100, 2100, 2101, 2101, 2103, 2100, 2100,
+ 2100, 2100, 2100, 2099, 2099, 2099, 2099, 2103,
+ 2099, 2099, 2099, 2099, 2099, 2100, 2099, 2099,
+
+ 2099, 2100, 2101, 2101, 2100, 2104, 2105, 297,
+ 297, 297, 297, 2106, 2106, 2106, 2106, 2107,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2109, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+ 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+ 2110, 2110, 2110, 2110, 2110, 2110, 297, 297,
+ 297, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
+
+ 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112,
+ 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112,
+ 2112, 2112, 2112, 2112, 2112, 2112, 297, 297,
+ 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113,
+
+ 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+ 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+ 2114, 2114, 2114, 297, 297, 297, 297, 297,
+ 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
+
+ 2116, 2117, 2116, 2117, 2117, 2117, 2116, 2116,
+ 2116, 2117, 2116, 2116, 2117, 2116, 2117, 2117,
+ 2116, 2117, 297, 297, 297, 297, 297, 297,
+ 297, 2118, 2118, 2118, 2118, 297, 297, 297,
+
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 2119, 2119, 2119, 2119, 2120, 2120, 2121,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
+ 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
+ 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
+ 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
+
+ 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
+ 2122, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+ 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+ 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+ 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+
+ 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+ 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+ 2123, 2123, 2123, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+ 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+ 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+ 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+
+ 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+ 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+ 2124, 2124, 2124, 297, 297, 297, 297, 297,
+ 297, 297, 2125, 2125, 2125, 2125, 2125, 2125,
+
+ 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133,
+ 2134, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+ 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+ 2135, 2135, 2135, 2135, 2135, 2135, 2135, 297,
+
+ 2136, 2137, 2136, 2138, 2138, 2138, 2138, 2138,
+ 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
+ 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
+ 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
+ 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
+ 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
+ 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
+ 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
+ 2137, 2137, 2137, 2137, 2137, 2137, 2139, 2140,
+ 2140, 2141, 2141, 2141, 2141, 2141, 200, 200,
+ 200, 200, 2142, 2143, 2144, 2145, 2146, 2147,
+ 2148, 2149, 2150, 2151, 2151, 2151, 2151, 2151,
+ 2151, 2151, 2151, 2151, 2151, 2151, 2152, 2153,
+ 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 2162,
+ 2163, 2163, 2164, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2166, 2165, 2166, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+ 2165, 2165, 2165, 2166, 2165, 2165, 2165, 2165,
+ 2164, 2164, 2164, 2163, 2163, 2163, 2163, 2164,
+ 2164, 2167, 2168, 2169, 2169, 2170, 2171, 2171,
+ 2171, 2171, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2172, 200, 200, 200, 200, 200, 200, 200,
+ 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180,
+ 2181, 2182, 200, 200, 200, 200, 200, 200,
+
+ 2183, 2183, 2183, 2184, 2184, 2184, 2184, 2184,
+ 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+ 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+ 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+ 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2185,
+ 2186, 2186, 2186, 2186, 2187, 2186, 2188, 2188,
+ 2186, 2186, 2186, 2189, 2189, 200, 2190, 2191,
+ 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199,
+ 2200, 2201, 2201, 2201, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
+ 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
+ 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
+ 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
+ 2202, 2202, 2202, 2203, 2204, 2205, 2202, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2206, 2206, 2207, 2208, 2208, 2208, 2208, 2208,
+ 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
+ 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
+ 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
+ 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
+ 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
+ 2208, 2208, 2208, 2207, 2207, 2207, 2206, 2206,
+ 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2207,
+ 2209, 2208, 2208, 2208, 2208, 2210, 2210, 2211,
+ 2212, 2213, 2214, 2215, 2215, 2216, 200, 200,
+ 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224,
+ 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2231,
+ 200, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 342, 2232, 2232, 342, 2232, 342, 342, 2232,
- 342, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232,
- 342, 2232, 342, 2232, 342, 342, 342, 342,
- 342, 342, 2232, 342, 342, 342, 342, 2232,
- 342, 2232, 342, 2232, 342, 2232, 2232, 2232,
- 342, 2232, 2232, 342, 2232, 342, 342, 2232,
- 342, 2232, 342, 2232, 342, 2232, 342, 2232,
- 342, 2232, 2232, 342, 2232, 342, 342, 2232,
- 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232,
- 342, 2232, 2232, 2232, 2232, 342, 2232, 342,
- 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 342, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 342, 342, 342, 342,
- 342, 2232, 2232, 2232, 342, 2232, 2232, 2232,
- 2232, 2232, 342, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
- 2233, 2233, 342, 342, 342, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 342,
-
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 199, 199, 199, 199,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
- 1393, 1393, 1393, 1393, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 199,
- 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1394,
- 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 2234, 2234, 2235, 2236, 2237, 2238, 2239, 2240,
- 2241, 2242, 2243, 2244, 2244, 199, 199, 199,
- 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
- 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
- 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
- 2245, 2245, 2245, 2245, 2245, 2245, 2245, 199,
- 2246, 2247, 2246, 2246, 2246, 2246, 2246, 2246,
- 2246, 2246, 2246, 2246, 2246, 2247, 2246, 2247,
- 2246, 2246, 2247, 2246, 2246, 2246, 2247, 2246,
- 2246, 2246, 2245, 2245, 2245, 2245, 2245, 2248,
- 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2250,
- 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2250,
- 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
- 2249, 2249, 2251, 2251, 199, 199, 199, 199,
- 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
- 2249, 2250, 2249, 2250, 2250, 2249, 2249, 2250,
- 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
- 2249, 2249, 772, 772, 772, 772, 2252, 2252,
- 2245, 2252, 2252, 2252, 2252, 2252, 2252, 2252,
- 2252, 2252, 2252, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 2253, 2253,
- 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253,
- 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253,
- 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253,
-
- 2254, 2255, 2255, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 1543, 2255, 2255, 2255, 2255, 2255, 2255,
- 2255, 2255, 2255, 199, 199, 199, 199, 199,
- 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543,
- 1543, 199, 199, 199, 199, 199, 199, 199,
- 2255, 2255, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 199, 199, 199,
- 1361, 1361, 1361, 1361, 1361, 1361, 1394, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1394, 199, 199,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1362, 1362, 1394, 1394,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1360, 1360, 1361,
- 1361, 1361, 1361, 1361, 1360, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1394, 1361, 1361,
- 1361, 1361, 1361, 1394, 1394, 1394, 1394, 199,
- 199, 199, 199, 199, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1394,
- 1361, 1394, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1360, 1361, 1360, 1361, 1360, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1360,
- 1361, 1360, 1360, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1394, 1361, 1361, 1361, 1361, 1394, 1394, 199,
-
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1362, 1362,
- 2256, 2256, 2256, 2256, 1362, 1362, 1362, 1362,
- 1362, 1362, 1394, 199, 199, 199, 199, 199,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 199, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 199, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1362, 1362, 1362, 1362,
- 1362, 1362, 1394, 1361, 1361, 1361, 1361, 1361,
-
- 2257, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 2257, 1361, 1361, 1361, 2257, 1361, 2257,
- 1361, 2257, 1361, 2257, 1361, 1361, 1361, 2257,
- 1361, 1361, 1361, 1361, 1361, 1361, 2257, 2257,
- 1361, 1361, 1361, 1361, 2257, 1361, 2257, 2257,
- 1361, 1361, 1361, 1361, 2257, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1394, 1394, 199, 199, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 2258, 2258,
- 2258, 2259, 2259, 2259, 1362, 1362, 1362, 1362,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
- 1361, 1361, 1361, 1361, 1361, 1361, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
- 1394, 1394, 1394, 1394, 1394, 199, 199, 199,
- 1394, 1394, 1394, 1394, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
- 1360, 1360, 1360, 1360, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 199, 199, 199, 199,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 199, 199, 199, 199, 199, 199,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
- 1362, 1362, 1362, 1362, 1362, 1362, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
-
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 2260, 2260,
-
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
-
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
- 2261, 2261, 2261, 2261, 2261, 2261, 2261, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
+ 2232, 2232, 2232, 2232, 2232, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
+ 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
+ 2233, 2233, 200, 2233, 2233, 2233, 2233, 2233,
+ 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
+ 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
+ 2233, 2233, 2233, 2233, 2234, 2234, 2234, 2235,
+ 2235, 2235, 2234, 2234, 2235, 2236, 2237, 2235,
+ 2238, 2238, 2239, 2238, 2238, 2239, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2240, 2240, 2240, 2240, 2240, 2240, 2240, 200,
+ 2240, 200, 2240, 2240, 2240, 2240, 200, 2240,
+ 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240,
+ 2240, 2240, 2240, 2240, 2240, 2240, 200, 2240,
+ 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240,
+ 2240, 2241, 200, 200, 200, 200, 200, 200,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+ 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2243,
+ 2244, 2244, 2244, 2243, 2243, 2243, 2243, 2243,
+ 2243, 2245, 2246, 200, 200, 200, 200, 200,
+ 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254,
+ 2255, 2256, 200, 200, 200, 200, 200, 200,
+
+ 2257, 2258, 2259, 2259, 200, 2260, 2260, 2260,
+ 2260, 2260, 2260, 2260, 2260, 200, 200, 2260,
+ 2260, 200, 200, 2260, 2260, 2260, 2260, 2260,
+ 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260,
+ 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260,
+ 2260, 200, 2260, 2260, 2260, 2260, 2260, 2260,
+ 2260, 200, 2260, 2260, 200, 2260, 2260, 2260,
+ 2260, 2260, 200, 200, 2261, 2260, 2262, 2259,
+ 2258, 2259, 2259, 2259, 2259, 200, 200, 2259,
+ 2259, 200, 200, 2263, 2263, 2264, 200, 200,
+ 2265, 200, 200, 200, 200, 200, 200, 2262,
+ 200, 200, 200, 200, 200, 2260, 2260, 2260,
+ 2260, 2260, 2259, 2259, 200, 200, 2266, 2266,
+ 2266, 2266, 2266, 2266, 2266, 200, 200, 200,
+ 2266, 2266, 2266, 2266, 2266, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
+ 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
+ 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
+ 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
+ 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
+ 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
+ 2268, 2269, 2269, 2270, 2270, 2270, 2270, 2270,
+ 2270, 2269, 2271, 2272, 2272, 2268, 2272, 2270,
+ 2270, 2269, 2273, 2274, 2267, 2267, 2275, 2267,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283,
+ 2284, 2285, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+ 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+ 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+ 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+ 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+ 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2287,
+ 2288, 2288, 2289, 2289, 2289, 2289, 200, 200,
+ 2288, 2288, 2290, 2290, 2289, 2289, 2288, 2291,
+ 2292, 2293, 2294, 2294, 2295, 2295, 2296, 2296,
+ 2296, 2294, 2297, 2297, 2297, 2297, 2297, 2297,
+ 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
+ 2298, 2298, 2298, 2298, 2299, 2299, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+ 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+ 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+ 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+ 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+ 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+ 2301, 2301, 2301, 2302, 2302, 2302, 2302, 2302,
+ 2302, 2302, 2302, 2301, 2301, 2302, 2301, 2303,
+ 2302, 2304, 2304, 2305, 2300, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313,
+ 2314, 2315, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
+ 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
+ 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
+ 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
+ 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
+ 2316, 2316, 2316, 2317, 2318, 2317, 2318, 2318,
+ 2317, 2317, 2317, 2317, 2317, 2317, 2319, 2320,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328,
+ 2329, 2330, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+ 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+ 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+ 2331, 2331, 200, 200, 200, 2332, 2332, 2332,
+ 2333, 2333, 2332, 2332, 2332, 2332, 2333, 2332,
+ 2332, 2332, 2332, 2334, 200, 200, 200, 200,
+ 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342,
+ 2343, 2344, 2345, 2345, 2346, 2346, 2346, 2347,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+ 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+ 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+ 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
+ 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357,
+ 2358, 2359, 2360, 2360, 2360, 2360, 2360, 2360,
+ 2360, 2360, 2360, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 2361,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+ 2362, 200, 200, 200, 200, 200, 200, 200,
+
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+ 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2364,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
+ 2364, 2365, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2366, 2366, 2366, 2367, 2367, 2367, 2367, 2367,
+ 2367, 2367, 2367, 2367, 2367, 2367, 2367, 200,
+ 2368, 2368, 2368, 2368, 2369, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+ 2365, 2365, 2365, 2365, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2371, 2371, 2371, 2372, 2372, 2372, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2372, 2370, 2370, 2370, 2371, 2372,
+ 2371, 2372, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2371, 2372, 2372, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
+ 2370, 2370, 2370, 2370, 2370, 2370, 2370, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2374, 2375,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+ 2373, 2373, 2373, 2373, 2373, 2373, 2373, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
+ 2376, 200, 200, 200, 200, 200, 200, 200,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
+ 2377, 2377, 2377, 2377, 2377, 2377, 2377, 200,
+ 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385,
+ 2386, 2387, 200, 200, 200, 200, 2388, 2388,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+ 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
+ 2389, 2389, 2389, 2389, 2389, 2389, 200, 200,
+ 2390, 2390, 2390, 2390, 2390, 2391, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2394,
+ 2394, 2395, 2396, 2396, 2397, 2397, 2397, 2397,
+ 2398, 2398, 2398, 2398, 2394, 2397, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406,
+ 2407, 2408, 200, 2409, 2409, 2409, 2409, 2409,
+ 2409, 2409, 200, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 200, 200, 200, 200, 200, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
+ 2410, 2410, 2410, 2410, 2410, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2410, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
+ 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
+ 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
+ 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
+ 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
+ 2411, 2411, 2411, 2411, 2411, 2411, 2411, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 2412,
+ 2412, 2412, 2412, 2413, 2413, 2413, 2413, 2413,
+ 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2414, 2415, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 200, 200, 200, 200, 200,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 2416, 2416, 2416, 200, 200, 200,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 200, 200, 200, 200, 200, 200, 200,
+ 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+ 2416, 2416, 200, 200, 2417, 2418, 2419, 2420,
+ 2421, 2421, 2421, 2421, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 200,
+ 200, 1412, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2423, 2423,
+ 2423, 2423, 2423, 2423, 2423, 2424, 2425, 2426,
+ 2426, 2426, 2422, 2422, 2422, 2427, 2424, 2424,
+ 2424, 2424, 2424, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2429, 2429, 2429, 2429, 2429,
+ 2429, 2429, 2429, 2422, 2422, 2430, 2430, 2430,
+ 2430, 2430, 2429, 2429, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2430, 2430, 2430, 2430, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2423, 2423, 2423, 2423, 2423,
+ 2423, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+ 2422, 2422, 2422, 2422, 2422, 2422, 2431, 2431,
+ 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+ 2431, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
+ 2022, 2022, 2432, 2432, 2432, 2022, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
+ 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
+ 2433, 2433, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 200, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2434, 200, 2434, 2434,
+ 200, 200, 2434, 200, 200, 2434, 2434, 200,
+ 200, 2434, 2434, 2434, 2434, 200, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
+ 2435, 2435, 200, 2435, 200, 2435, 2435, 2435,
+ 2435, 2436, 2435, 2435, 200, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+
+ 2435, 2435, 2435, 2435, 2434, 2434, 200, 2434,
+ 2434, 2434, 2434, 200, 200, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 200, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 200, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 200, 2434, 2434, 2434, 2434, 200,
+ 2434, 2434, 2434, 2434, 2434, 200, 2434, 200,
+ 200, 200, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 200, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 1404, 1404, 200, 200,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2437, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2438, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2437, 2435, 2435, 2435, 2435,
+
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2438, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2437, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2438,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2437,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2438, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
+ 2434, 2437, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2435, 2438, 2435, 2435, 2435, 2435,
+ 2435, 2435, 2439, 2440, 200, 200, 2441, 2442,
+ 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450,
+ 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448,
+ 2449, 2450, 2441, 2442, 2443, 2444, 2445, 2446,
+ 2447, 2448, 2449, 2450, 2441, 2442, 2443, 2444,
+ 2445, 2446, 2447, 2448, 2449, 2450, 2441, 2442,
+ 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450,
+
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2451,
+ 2451, 2451, 2451, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2452, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+ 2451, 2451, 2451, 2451, 2452, 2451, 2451, 2453,
+ 2454, 2453, 2453, 2455, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 2452, 2452, 2452, 2452, 2452,
+ 200, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
+ 2456, 2456, 2456, 2456, 2456, 297, 297, 2457,
+ 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457,
+ 2458, 2458, 2458, 2458, 2458, 2458, 2458, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297,
+
+ 2459, 2459, 2459, 2459, 343, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 343, 2459, 2459, 343, 2459, 343, 343, 2459,
+ 343, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 343, 2459, 2459, 2459, 2459,
+ 343, 2459, 343, 2459, 343, 343, 343, 343,
+ 343, 343, 2459, 343, 343, 343, 343, 2459,
+ 343, 2459, 343, 2459, 343, 2459, 2459, 2459,
+ 343, 2459, 2459, 343, 2459, 343, 343, 2459,
+ 343, 2459, 343, 2459, 343, 2459, 343, 2459,
+ 343, 2459, 2459, 343, 2459, 343, 343, 2459,
+ 2459, 2459, 2459, 343, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 343, 2459, 2459, 2459, 2459,
+ 343, 2459, 2459, 2459, 2459, 343, 2459, 343,
+ 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 343, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 343, 343, 343, 343,
+ 343, 2459, 2459, 2459, 343, 2459, 2459, 2459,
+ 2459, 2459, 343, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+ 2459, 2459, 2459, 2459, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+ 2460, 2460, 343, 343, 343, 343, 343, 343,
+ 343, 343, 343, 343, 343, 343, 343, 343,
+
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 200, 200, 200, 200,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 200,
+ 200, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1483,
+ 200, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 200, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 2461, 2461, 2462, 2463, 2464, 2465, 2466, 2467,
+ 2468, 2469, 2470, 2471, 2471, 200, 200, 200,
+ 2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+ 2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+ 2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+ 2472, 2472, 2472, 2472, 2472, 2472, 2472, 200,
+ 2473, 2474, 2473, 2473, 2473, 2473, 2473, 2473,
+ 2473, 2473, 2473, 2473, 2473, 2474, 2473, 2474,
+ 2473, 2473, 2474, 2473, 2473, 2473, 2474, 2473,
+ 2473, 2473, 2472, 2472, 2472, 2472, 2472, 2475,
+ 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2477,
+ 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2477,
+ 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
+ 2476, 2476, 2478, 2478, 200, 200, 200, 200,
+ 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
+ 2476, 2477, 2476, 2477, 2477, 2476, 2476, 2477,
+ 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
+ 2476, 2476, 778, 778, 778, 778, 2479, 2479,
+ 2472, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
+ 2479, 2479, 2479, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 2480, 2480,
+ 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480,
+ 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480,
+ 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480,
+
+ 2481, 2482, 2482, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
+ 1632, 1632, 2482, 2482, 2482, 2482, 2482, 2482,
+ 2482, 2482, 2482, 200, 200, 200, 200, 200,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
+ 1632, 200, 200, 200, 200, 200, 200, 200,
+ 2482, 2482, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 2483, 2483, 2483,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1483, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1483, 2483, 2483,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1451, 1451, 1483, 1483,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1449, 1449, 1450,
+ 1450, 1450, 1450, 1450, 1449, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1483, 1450, 1450,
+ 1450, 1450, 1450, 1483, 1483, 1483, 1483, 2483,
+ 2483, 2483, 2483, 2483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 2483, 2483, 2483, 2484, 2484, 2484, 2484, 2484,
+
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1483,
+ 1450, 1483, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1449, 1450, 1449, 1450, 1449, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1449,
+ 1450, 1449, 1449, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1483, 1450, 1450, 1450, 1450, 1483, 1483, 2483,
+
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1451, 1451,
+ 2485, 2485, 2485, 2485, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1483, 2483, 2483, 2483, 2483, 2483,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 200, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 200, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1483, 1450, 1450, 1450, 1450, 1450,
+
+ 2486, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 2486, 1450, 1450, 1450, 2486, 1450, 2486,
+ 1450, 2486, 1450, 2486, 1450, 1450, 1450, 2486,
+ 1450, 1450, 1450, 1450, 1450, 1450, 2486, 2486,
+ 1450, 1450, 1450, 1450, 2486, 1450, 2486, 2486,
+ 1450, 1450, 1450, 1450, 2486, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1483, 1483, 2483, 2483, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 2487, 2487,
+ 2487, 2488, 2488, 2488, 1451, 1451, 1451, 1451,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
+ 1450, 1450, 1450, 1450, 1450, 1450, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 2483, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 200, 200, 200,
+ 1483, 1483, 1483, 1483, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+ 1449, 1449, 1449, 1449, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 200, 200, 200, 200,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 200, 200, 200, 200, 200, 200,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
+ 1451, 1451, 1451, 1451, 1451, 1451, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
+ 2483, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2483, 2483, 2483, 2483, 2483, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 2483, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 2489, 2489,
+
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2490, 2490, 2490, 2490, 2490, 2490, 2490, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
-
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
- 2262, 2262, 2262, 2262, 2262, 2262, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
-
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
- 2263, 2263, 2263, 2263, 2263, 2263, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
-
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550,
- 1550, 1550, 1550, 1550, 1550, 1550, 2260, 2260,
-
- 1265, 2207, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
-
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
-
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
- 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
-
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
-
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
- 2265, 2265, 2265, 2265, 2265, 2265, 2260, 2260,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
+ 1643, 1643, 1643, 1643, 1643, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 1639, 1639,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
+ 1645, 1645, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+ 2492, 2492, 2492, 2492, 2492, 2492, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1639, 1639, 1639, 1639, 1639, 1639, 2489, 2489,
+
+ 1351, 2428, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2489, 2489
};
#define GET_PROP_INDEX(ucs4) \
@@ -5432,19 +5817,19 @@ static const Properties uc_properties[] = {
{ 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 80, 1, 77, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 404, 1, 401, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 121, 0, 121, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 83, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 407, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -232, 0, -232, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 162, 1, 162, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 486, 1, 486, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, -121, 0, 0, 0, 0, 0, -121, 1, 17, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -300, 0, -300, 0, -268, 1, 80, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 195, 0, 195, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
@@ -5471,7 +5856,7 @@ static const Properties uc_properties[] = {
{ 16, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -2, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -79, 0, -79, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 173, 1, 173, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 497, 1, 497, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, -97, 0, 0, 0, 0, 0, -97, 4, 0, 0, 8, 7, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, -56, 0, 0, 0, 0, 0, -56, 4, 0, 0, 8, 7, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 3 },
@@ -5521,6 +5906,7 @@ static const Properties uc_properties[] = {
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -71, 0, -71, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -219, 0, -219, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 1, 33, 1, 33, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 35, 1, 35, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
{ 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 },
@@ -5576,12 +5962,12 @@ static const Properties uc_properties[] = {
{ 14, 0, 0, 0, -1, 0, 0, 37, 0, 0, 0, 0, 0, 37, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, 63, 0, 0, 0, 0, 0, 63, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 165, 1, 165, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 489, 1, 489, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -38, 0, -38, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -37, 0, -37, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 169, 1, 169, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 493, 1, 493, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -31, 0, -31, 0, 1, 1, 0, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
@@ -5656,7 +6042,7 @@ static const Properties uc_properties[] = {
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 6 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 12, 6 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 1, 0, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 129, 1, 126, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 453, 1, 450, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 12, 8, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 6 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 6 },
@@ -5732,16 +6118,16 @@ static const Properties uc_properties[] = {
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 8 },
- { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
+ { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 8 },
{ 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
{ 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 9, 11, 8 },
@@ -5820,6 +6206,8 @@ static const Properties uc_properties[] = {
{ 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 },
{ 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 },
{ 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 8 },
+ { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 },
@@ -5922,6 +6310,7 @@ static const Properties uc_properties[] = {
{ 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 14 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 14 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 14 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 15 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 15 },
@@ -5977,6 +6366,7 @@ static const Properties uc_properties[] = {
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 },
{ 0, 17, 84, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 },
{ 0, 17, 91, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 17 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 17 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 17 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
{ 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
@@ -6022,6 +6412,7 @@ static const Properties uc_properties[] = {
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 19 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 19 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 19 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
{ 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
{ 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
@@ -6213,7 +6604,89 @@ static const Properties uc_properties[] = {
{ 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 37, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 39, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 43, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 45, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 47, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 49, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 51, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 53, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 55, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 57, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 59, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 61, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 63, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 65, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 67, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 69, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 71, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 73, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 75, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 77, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 79, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 81, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 83, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 85, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 87, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 89, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 91, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 93, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 95, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 97, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 99, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 101, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 103, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 105, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 107, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 109, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 111, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 113, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 115, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 117, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 119, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 121, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 123, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 125, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 127, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 129, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 131, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 133, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 135, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 137, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 139, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 141, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 143, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 145, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 147, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 149, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 151, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 153, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 155, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 157, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 159, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 161, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 163, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 165, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 167, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 169, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 171, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 173, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 175, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 177, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 179, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 181, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 183, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 185, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 187, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 189, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 191, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 193, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 195, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 7, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, -8, 17, 0, 0, 8, 6, 12, 28 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 29 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 29 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 29 },
@@ -6308,8 +6781,6 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 30, 48 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 30, 56 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 56 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 4, 30, 56 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 30, 56 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
{ 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
{ 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
@@ -6444,7 +6915,7 @@ static const Properties uc_properties[] = {
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 4 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 35, 1, 35, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 197, 1, 197, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 3814, 0, 3814, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 3 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 4 },
@@ -6456,11 +6927,11 @@ static const Properties uc_properties[] = {
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 1 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 176, 1, 176, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 179, 1, 179, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 182, 1, 182, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 185, 1, 185, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 188, 1, 188, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 500, 1, 500, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 503, 1, 503, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 506, 1, 506, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 509, 1, 509, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 512, 1, 512, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -59, 0, -59, 0, -58, 2, 81, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, -7615, 0, 0, 0, 0, 0, -7615, 10, 0, 0, 8, 7, 12, 3 },
@@ -6468,10 +6939,10 @@ static const Properties uc_properties[] = {
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 8, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -8, 0, 0, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 191, 1, 191, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 194, 1, 194, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 198, 1, 198, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 202, 1, 202, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 515, 1, 515, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 518, 1, 518, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 522, 1, 522, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 526, 1, 526, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
@@ -6484,98 +6955,98 @@ static const Properties uc_properties[] = {
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 240, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 243, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 246, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 249, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 252, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 255, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 258, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 261, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 240, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 243, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 246, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 249, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 252, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 255, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 258, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 261, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 264, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 267, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 270, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 273, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 276, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 279, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 282, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 285, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 264, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 267, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 270, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 273, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 276, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 279, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 282, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 285, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 288, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 291, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 294, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 297, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 300, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 303, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 306, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 309, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 288, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 291, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 294, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 297, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 300, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 303, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 306, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 309, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 324, 1, 321, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 312, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 330, 1, 327, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 206, 1, 206, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 361, 1, 357, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 564, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 567, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 570, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 573, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 576, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 579, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 582, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 585, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 564, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 567, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 570, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 573, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 576, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 579, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 582, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 585, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 588, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 591, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 594, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 597, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 600, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 603, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 606, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 609, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 588, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 591, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 594, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 597, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 600, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 603, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 606, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 609, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 612, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 615, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 618, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 621, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 624, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 627, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 630, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 633, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 612, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 615, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 618, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 621, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 624, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 627, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 630, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 633, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 648, 1, 645, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 636, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 654, 1, 651, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 530, 1, 530, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 685, 1, 681, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 85, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -9, 1, 312, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -9, 1, 636, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -7205, 0, -7205, 0, -7173, 1, 85, 0, 8, 6, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 336, 1, 333, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 315, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 342, 1, 339, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 209, 1, 209, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 369, 1, 365, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 660, 1, 657, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 639, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 666, 1, 663, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 533, 1, 533, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 693, 1, 689, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 85, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -9, 1, 315, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 212, 1, 212, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 165, 1, 165, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 216, 1, 216, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 219, 1, 219, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -9, 1, 639, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 536, 1, 536, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 489, 1, 489, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 540, 1, 540, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 543, 1, 543, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 85, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 223, 1, 223, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 169, 1, 169, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 227, 1, 227, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 547, 1, 547, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 493, 1, 493, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 551, 1, 551, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 230, 1, 230, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 233, 1, 233, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 554, 1, 554, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 557, 1, 557, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 85, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 1, 17, 0, 8, 7, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 348, 1, 345, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 318, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 354, 1, 351, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 237, 1, 237, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 377, 1, 373, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 672, 1, 669, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 642, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 678, 1, 675, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 561, 1, 561, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 701, 1, 697, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 85, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 17, 0, 8, 7, 12, 4 },
{ 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 85, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -9, 1, 318, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -9, 1, 642, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 18, 4 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 5, 17, 2 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 17, 2 },
@@ -6661,6 +7132,7 @@ static const Properties uc_properties[] = {
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 9, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 10, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 9, 2 },
+ { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 10, 2 },
{ 13, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 },
@@ -6674,8 +7146,8 @@ static const Properties uc_properties[] = {
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 },
{ 14, 0, 0, 0, -1, 0, 0, -7517, 0, 0, 0, 0, 0, -7517, 1, 85, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 37, 0, 0, 0, 0, 1, 37, 1, 85, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 39, 0, 0, 0, 0, 1, 39, 1, 85, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 199, 0, 0, 0, 0, 1, 199, 1, 85, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 201, 0, 0, 0, 0, 1, 201, 1, 85, 0, 8, 7, 12, 3 },
{ 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 14, 0, 0, 0, -1, 0, 0, 28, 0, 0, 0, 0, 0, 28, 1, 0, 0, 8, 7, 12, 3 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 2 },
@@ -6696,6 +7168,7 @@ static const Properties uc_properties[] = {
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, -16, 0, -16, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
@@ -6713,6 +7186,7 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
+ { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 15, 2 },
{ 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
@@ -6803,19 +7277,19 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 8, 0, 0, 8, 7, 12, 57 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 8, 0, 0, 8, 6, 12, 57 },
- { 14, 0, 0, 0, -1, 0, 1, 41, 0, 0, 0, 0, 1, 41, 9, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 203, 0, 0, 0, 0, 1, 203, 9, 0, 0, 8, 7, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, -3814, 0, 0, 0, 0, 0, -3814, 9, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 43, 0, 0, 0, 0, 1, 43, 9, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 45, 1, 45, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 47, 1, 47, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 49, 0, 0, 0, 0, 1, 49, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 51, 0, 0, 0, 0, 1, 51, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 53, 0, 0, 0, 0, 1, 53, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 55, 0, 0, 0, 0, 1, 55, 11, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 205, 0, 0, 0, 0, 1, 205, 9, 0, 0, 8, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 207, 1, 207, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 209, 1, 209, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 211, 0, 0, 0, 0, 1, 211, 10, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 213, 0, 0, 0, 0, 1, 213, 10, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 215, 0, 0, 0, 0, 1, 215, 10, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 217, 0, 0, 0, 0, 1, 217, 11, 0, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 57, 0, 0, 0, 0, 1, 57, 11, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 59, 0, 0, 0, 0, 1, 59, 11, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 219, 0, 0, 0, 0, 1, 219, 11, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 221, 0, 0, 0, 0, 1, 221, 11, 0, 0, 8, 7, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 46 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 46 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 },
@@ -6921,6 +7395,7 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 14, 37 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 38 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 5, 38 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 38 },
@@ -6950,6 +7425,7 @@ static const Properties uc_properties[] = {
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 5 },
{ 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 5 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 5 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 84 },
@@ -6959,10 +7435,11 @@ static const Properties uc_properties[] = {
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 },
{ 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 61, 0, 0, 0, 0, 1, 61, 10, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 223, 0, 0, 0, 0, 1, 223, 10, 0, 0, 8, 7, 12, 3 },
{ 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 63, 0, 0, 0, 0, 1, 63, 12, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 225, 0, 0, 0, 0, 1, 225, 12, 0, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 3 },
@@ -6970,12 +7447,16 @@ static const Properties uc_properties[] = {
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 3 },
{ 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 65, 0, 0, 0, 0, 1, 65, 13, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 67, 0, 0, 0, 0, 1, 67, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 69, 0, 0, 0, 0, 1, 69, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 71, 0, 0, 0, 0, 1, 71, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 73, 0, 0, 0, 0, 1, 73, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 75, 0, 0, 0, 0, 1, 75, 16, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 227, 0, 0, 0, 0, 1, 227, 13, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 229, 0, 0, 0, 0, 1, 229, 16, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 231, 0, 0, 0, 0, 1, 231, 16, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 233, 0, 0, 0, 0, 1, 233, 16, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 235, 0, 0, 0, 0, 1, 235, 16, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 237, 0, 0, 0, 0, 1, 237, 16, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 239, 0, 0, 0, 0, 1, 239, 17, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 928, 0, 0, 0, 0, 0, 928, 17, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 17, 0, 0, 8, 6, 12, 3 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 3 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 6, 12, 3 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 },
@@ -7006,6 +7487,8 @@ static const Properties uc_properties[] = {
{ 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 11 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 11 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
{ 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
{ 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
@@ -7089,9 +7572,91 @@ static const Properties uc_properties[] = {
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 27 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -928, 0, -928, 0, 0, 16, 0, 0, 8, 6, 12, 3 },
{ 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 6, 12, 3 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 241, 1, 241, 1, 241, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 243, 1, 243, 1, 243, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 245, 1, 245, 1, 245, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 247, 1, 247, 1, 247, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 249, 1, 249, 1, 249, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 251, 1, 251, 1, 251, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 253, 1, 253, 1, 253, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 255, 1, 255, 1, 255, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 257, 1, 257, 1, 257, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 259, 1, 259, 1, 259, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 261, 1, 261, 1, 261, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 263, 1, 263, 1, 263, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 265, 1, 265, 1, 265, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 267, 1, 267, 1, 267, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 269, 1, 269, 1, 269, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 271, 1, 271, 1, 271, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 273, 1, 273, 1, 273, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 275, 1, 275, 1, 275, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 277, 1, 277, 1, 277, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 279, 1, 279, 1, 279, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 281, 1, 281, 1, 281, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 283, 1, 283, 1, 283, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 285, 1, 285, 1, 285, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 287, 1, 287, 1, 287, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 289, 1, 289, 1, 289, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 291, 1, 291, 1, 291, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 293, 1, 293, 1, 293, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 295, 1, 295, 1, 295, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 297, 1, 297, 1, 297, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 299, 1, 299, 1, 299, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 301, 1, 301, 1, 301, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 303, 1, 303, 1, 303, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 305, 1, 305, 1, 305, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 307, 1, 307, 1, 307, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 309, 1, 309, 1, 309, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 311, 1, 311, 1, 311, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 313, 1, 313, 1, 313, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 315, 1, 315, 1, 315, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 317, 1, 317, 1, 317, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 319, 1, 319, 1, 319, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 321, 1, 321, 1, 321, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 323, 1, 323, 1, 323, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 325, 1, 325, 1, 325, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 327, 1, 327, 1, 327, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 329, 1, 329, 1, 329, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 331, 1, 331, 1, 331, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 333, 1, 333, 1, 333, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 335, 1, 335, 1, 335, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 337, 1, 337, 1, 337, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 339, 1, 339, 1, 339, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 341, 1, 341, 1, 341, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 343, 1, 343, 1, 343, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 345, 1, 345, 1, 345, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 347, 1, 347, 1, 347, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 349, 1, 349, 1, 349, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 351, 1, 351, 1, 351, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 353, 1, 353, 1, 353, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 355, 1, 355, 1, 355, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 357, 1, 357, 1, 357, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 359, 1, 359, 1, 359, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 361, 1, 361, 1, 361, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 363, 1, 363, 1, 363, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 365, 1, 365, 1, 365, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 367, 1, 367, 1, 367, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 369, 1, 369, 1, 369, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 371, 1, 371, 1, 371, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 373, 1, 373, 1, 373, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 375, 1, 375, 1, 375, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 377, 1, 377, 1, 377, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 379, 1, 379, 1, 379, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 381, 1, 381, 1, 381, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 383, 1, 383, 1, 383, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 385, 1, 385, 1, 385, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 387, 1, 387, 1, 387, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 389, 1, 389, 1, 389, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 391, 1, 391, 1, 391, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 393, 1, 393, 1, 393, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 395, 1, 395, 1, 395, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 397, 1, 397, 1, 397, 17, 0, 0, 8, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 399, 1, 399, 1, 399, 17, 0, 0, 8, 6, 12, 28 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 86 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 86 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 },
@@ -7116,17 +7681,17 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 85, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 85, 0, 0, 8, 14, 37 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 89, 1, 86, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 95, 1, 92, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 101, 1, 98, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 108, 1, 104, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 116, 1, 112, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 123, 1, 120, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 135, 1, 132, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 141, 1, 138, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 147, 1, 144, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 153, 1, 150, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 159, 1, 156, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 413, 1, 410, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 419, 1, 416, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 425, 1, 422, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 432, 1, 428, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 440, 1, 436, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 447, 1, 444, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 459, 1, 456, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 465, 1, 462, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 471, 1, 468, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 477, 1, 474, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 483, 1, 480, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 7, 8, 13, 7 },
{ 0, 17, 26, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 7, 8, 13, 7 },
@@ -7254,6 +7819,8 @@ static const Properties uc_properties[] = {
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 117 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 117 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 128 },
+ { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 128 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 64 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 64 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 64 },
@@ -7262,6 +7829,7 @@ static const Properties uc_properties[] = {
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 76 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 98 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 97 },
+ { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 97 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 61 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 },
@@ -7305,6 +7873,9 @@ static const Properties uc_properties[] = {
{ 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 91 },
+ { 14, 1, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 17, 0, 0, 8, 7, 12, 130 },
+ { 15, 1, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 17, 0, 0, 8, 6, 12, 130 },
+ { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 130 },
{ 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
{ 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
{ 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
@@ -7392,6 +7963,9 @@ static const Properties uc_properties[] = {
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 100 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 100 },
+ { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 100 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 12, 100 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
{ 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
@@ -7404,6 +7978,10 @@ static const Properties uc_properties[] = {
{ 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
{ 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 100 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 100 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 100 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 100 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 100 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 20 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 109 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 },
@@ -7412,6 +7990,8 @@ static const Properties uc_properties[] = {
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 109 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 109 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 129 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 129 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 123 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 123 },
@@ -7427,6 +8007,7 @@ static const Properties uc_properties[] = {
{ 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
{ 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
{ 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 107 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 107 },
@@ -7434,6 +8015,7 @@ static const Properties uc_properties[] = {
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 107 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 107 },
{ 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 107 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 124 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 },
@@ -7465,6 +8047,9 @@ static const Properties uc_properties[] = {
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 122 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 6, 122 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 122 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 122 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 122 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 122 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 114 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 114 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 },
@@ -7496,6 +8081,23 @@ static const Properties uc_properties[] = {
{ 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
{ 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
{ 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 8, 30, 126 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 30, 126 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 7, 4, 4, 30, 126 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 30, 126 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
+ { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 30, 126 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 126 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 30, 126 },
{ 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 16, 0, 0, 8, 7, 12, 125 },
{ 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 16, 0, 0, 8, 6, 12, 125 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
@@ -7513,6 +8115,7 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 119 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 63 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 63 },
@@ -7520,6 +8123,9 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 81 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 0, 81 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 127 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 0, 127 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 1, 127 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 84 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 115 },
{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
@@ -7575,6 +8181,7 @@ static const Properties uc_properties[] = {
{ 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 4, 4, 21, 2 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 2 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 4 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 },
{ 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 2 },
@@ -7594,6 +8201,11 @@ static const Properties uc_properties[] = {
{ 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
{ 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
{ 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 131 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 131 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 131 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 131 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 131 },
{ 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 113 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 113 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 113 },
@@ -7621,6 +8233,8 @@ static const Properties uc_properties[] = {
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 5, 5, 0, 28, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 34 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 14, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 3, 2 },
@@ -7635,14 +8249,12 @@ static const Properties uc_properties[] = {
Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) Q_DECL_NOTHROW
{
- const int index = GET_PROP_INDEX(ucs4);
- return uc_properties + index;
+ return uc_properties + GET_PROP_INDEX(ucs4);
}
Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) Q_DECL_NOTHROW
{
- const int index = GET_PROP_INDEX_UCS2(ucs2);
- return uc_properties + index;
+ return uc_properties + GET_PROP_INDEX_UCS2(ucs2);
}
Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW
@@ -7657,26 +8269,26 @@ Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(us
Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) Q_DECL_NOTHROW
{
- return (GraphemeBreakClass)qGetProp(ucs4)->graphemeBreakClass;
+ return static_cast<GraphemeBreakClass>(qGetProp(ucs4)->graphemeBreakClass);
}
Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) Q_DECL_NOTHROW
{
- return (WordBreakClass)qGetProp(ucs4)->wordBreakClass;
+ return static_cast<WordBreakClass>(qGetProp(ucs4)->wordBreakClass);
}
Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) Q_DECL_NOTHROW
{
- return (SentenceBreakClass)qGetProp(ucs4)->sentenceBreakClass;
+ return static_cast<SentenceBreakClass>(qGetProp(ucs4)->sentenceBreakClass);
}
Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) Q_DECL_NOTHROW
{
- return (LineBreakClass)qGetProp(ucs4)->lineBreakClass;
+ return static_cast<LineBreakClass>(qGetProp(ucs4)->lineBreakClass);
}
-static const ushort specialCaseMap[] = {
+static const unsigned short specialCaseMap[] = {
0x0, // placeholder
0x1, 0x2c65,
0x1, 0x2c66,
@@ -7694,7 +8306,88 @@ static const ushort specialCaseMap[] = {
0x1, 0x2c6e,
0x1, 0x2c64,
0x1, 0xa7b1,
+ 0x1, 0xa7b2,
0x1, 0xa7b0,
+ 0x1, 0xab70,
+ 0x1, 0xab71,
+ 0x1, 0xab72,
+ 0x1, 0xab73,
+ 0x1, 0xab74,
+ 0x1, 0xab75,
+ 0x1, 0xab76,
+ 0x1, 0xab77,
+ 0x1, 0xab78,
+ 0x1, 0xab79,
+ 0x1, 0xab7a,
+ 0x1, 0xab7b,
+ 0x1, 0xab7c,
+ 0x1, 0xab7d,
+ 0x1, 0xab7e,
+ 0x1, 0xab7f,
+ 0x1, 0xab80,
+ 0x1, 0xab81,
+ 0x1, 0xab82,
+ 0x1, 0xab83,
+ 0x1, 0xab84,
+ 0x1, 0xab85,
+ 0x1, 0xab86,
+ 0x1, 0xab87,
+ 0x1, 0xab88,
+ 0x1, 0xab89,
+ 0x1, 0xab8a,
+ 0x1, 0xab8b,
+ 0x1, 0xab8c,
+ 0x1, 0xab8d,
+ 0x1, 0xab8e,
+ 0x1, 0xab8f,
+ 0x1, 0xab90,
+ 0x1, 0xab91,
+ 0x1, 0xab92,
+ 0x1, 0xab93,
+ 0x1, 0xab94,
+ 0x1, 0xab95,
+ 0x1, 0xab96,
+ 0x1, 0xab97,
+ 0x1, 0xab98,
+ 0x1, 0xab99,
+ 0x1, 0xab9a,
+ 0x1, 0xab9b,
+ 0x1, 0xab9c,
+ 0x1, 0xab9d,
+ 0x1, 0xab9e,
+ 0x1, 0xab9f,
+ 0x1, 0xaba0,
+ 0x1, 0xaba1,
+ 0x1, 0xaba2,
+ 0x1, 0xaba3,
+ 0x1, 0xaba4,
+ 0x1, 0xaba5,
+ 0x1, 0xaba6,
+ 0x1, 0xaba7,
+ 0x1, 0xaba8,
+ 0x1, 0xaba9,
+ 0x1, 0xabaa,
+ 0x1, 0xabab,
+ 0x1, 0xabac,
+ 0x1, 0xabad,
+ 0x1, 0xabae,
+ 0x1, 0xabaf,
+ 0x1, 0xabb0,
+ 0x1, 0xabb1,
+ 0x1, 0xabb2,
+ 0x1, 0xabb3,
+ 0x1, 0xabb4,
+ 0x1, 0xabb5,
+ 0x1, 0xabb6,
+ 0x1, 0xabb7,
+ 0x1, 0xabb8,
+ 0x1, 0xabb9,
+ 0x1, 0xabba,
+ 0x1, 0xabbb,
+ 0x1, 0xabbc,
+ 0x1, 0xabbd,
+ 0x1, 0xabbe,
+ 0x1, 0xabbf,
0x1, 0xa77d,
0x1, 0x6b,
0x1, 0xe5,
@@ -7716,6 +8409,87 @@ static const ushort specialCaseMap[] = {
0x1, 0x26c,
0x1, 0x29e,
0x1, 0x287,
+ 0x1, 0x29d,
+ 0x1, 0x13a0,
+ 0x1, 0x13a1,
+ 0x1, 0x13a2,
+ 0x1, 0x13a3,
+ 0x1, 0x13a4,
+ 0x1, 0x13a5,
+ 0x1, 0x13a6,
+ 0x1, 0x13a7,
+ 0x1, 0x13a8,
+ 0x1, 0x13a9,
+ 0x1, 0x13aa,
+ 0x1, 0x13ab,
+ 0x1, 0x13ac,
+ 0x1, 0x13ad,
+ 0x1, 0x13ae,
+ 0x1, 0x13af,
+ 0x1, 0x13b0,
+ 0x1, 0x13b1,
+ 0x1, 0x13b2,
+ 0x1, 0x13b3,
+ 0x1, 0x13b4,
+ 0x1, 0x13b5,
+ 0x1, 0x13b6,
+ 0x1, 0x13b7,
+ 0x1, 0x13b8,
+ 0x1, 0x13b9,
+ 0x1, 0x13ba,
+ 0x1, 0x13bb,
+ 0x1, 0x13bc,
+ 0x1, 0x13bd,
+ 0x1, 0x13be,
+ 0x1, 0x13bf,
+ 0x1, 0x13c0,
+ 0x1, 0x13c1,
+ 0x1, 0x13c2,
+ 0x1, 0x13c3,
+ 0x1, 0x13c4,
+ 0x1, 0x13c5,
+ 0x1, 0x13c6,
+ 0x1, 0x13c7,
+ 0x1, 0x13c8,
+ 0x1, 0x13c9,
+ 0x1, 0x13ca,
+ 0x1, 0x13cb,
+ 0x1, 0x13cc,
+ 0x1, 0x13cd,
+ 0x1, 0x13ce,
+ 0x1, 0x13cf,
+ 0x1, 0x13d0,
+ 0x1, 0x13d1,
+ 0x1, 0x13d2,
+ 0x1, 0x13d3,
+ 0x1, 0x13d4,
+ 0x1, 0x13d5,
+ 0x1, 0x13d6,
+ 0x1, 0x13d7,
+ 0x1, 0x13d8,
+ 0x1, 0x13d9,
+ 0x1, 0x13da,
+ 0x1, 0x13db,
+ 0x1, 0x13dc,
+ 0x1, 0x13dd,
+ 0x1, 0x13de,
+ 0x1, 0x13df,
+ 0x1, 0x13e0,
+ 0x1, 0x13e1,
+ 0x1, 0x13e2,
+ 0x1, 0x13e3,
+ 0x1, 0x13e4,
+ 0x1, 0x13e5,
+ 0x1, 0x13e6,
+ 0x1, 0x13e7,
+ 0x1, 0x13e8,
+ 0x1, 0x13e9,
+ 0x1, 0x13ea,
+ 0x1, 0x13eb,
+ 0x1, 0x13ec,
+ 0x1, 0x13ed,
+ 0x1, 0x13ee,
+ 0x1, 0x13ef,
0x2, 0x53, 0x73,
0x2, 0x53, 0x53,
0x2, 0x69, 0x307,
@@ -9631,8 +10405,8 @@ static const unsigned short uc_decomposition_trie[] = {
#define GET_DECOMPOSITION_INDEX(ucs4) \
(ucs4 < 0x3400 \
? (uc_decomposition_trie[uc_decomposition_trie[ucs4>>4] + (ucs4 & 0xf)]) \
- : (ucs4 < 0x30000\
- ? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400)>>8) + 0x340] + (ucs4 & 0xff)]\
+ : (ucs4 < 0x30000 \
+ ? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400)>>8) + 0x340] + (ucs4 & 0xff)] \
: 0xffff))
static const unsigned short uc_decomposition_map[] = {
@@ -11832,8 +12606,8 @@ static const unsigned short uc_ligature_trie[] = {
#define GET_LIGATURE_INDEX(ucs4) \
(ucs4 < 0x3100 \
? (uc_ligature_trie[uc_ligature_trie[ucs4>>5] + (ucs4 & 0x1f)]) \
- : (ucs4 < 0x12000\
- ? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100)>>8) + 0x188] + (ucs4 & 0xff)]\
+ : (ucs4 < 0x12000 \
+ ? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100)>>8) + 0x188] + (ucs4 & 0xff)] \
: 0xffff))
static const unsigned short uc_ligature_map[] = {
@@ -12098,7 +12872,7 @@ static const NormalizationCorrection uc_normalization_corrections[] = {
{ 0x2f874, 0x5f33, 7 },
{ 0x2f91f, 0x43ab, 7 },
{ 0x2f95f, 0x7aae, 7 },
- { 0x2f9bf, 0x4d57, 7 },
+ { 0x2f9bf, 0x4d57, 7 }
};
enum { NumNormalizationCorrections = 6 };
diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h
index 43c1f4e197..6a2797be0e 100644
--- a/src/corelib/tools/qunicodetables_p.h
+++ b/src/corelib/tools/qunicodetables_p.h
@@ -31,7 +31,7 @@
**
****************************************************************************/
-/* This file is autogenerated from the Unicode 7.0 database. Do not edit */
+/* This file is autogenerated from the Unicode 8.0 database. Do not edit */
//
// W A R N I N G
@@ -51,7 +51,7 @@
QT_BEGIN_NAMESPACE
-#define UNICODE_DATA_VERSION QChar::Unicode_7_0
+#define UNICODE_DATA_VERSION QChar::Unicode_8_0
namespace QUnicodeTables {
@@ -82,6 +82,38 @@ struct Properties {
Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW;
Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) Q_DECL_NOTHROW;
+struct LowercaseTraits
+{
+ static inline signed short caseDiff(const Properties *prop)
+ { return prop->lowerCaseDiff; }
+ static inline bool caseSpecial(const Properties *prop)
+ { return prop->lowerCaseSpecial; }
+};
+
+struct UppercaseTraits
+{
+ static inline signed short caseDiff(const Properties *prop)
+ { return prop->upperCaseDiff; }
+ static inline bool caseSpecial(const Properties *prop)
+ { return prop->upperCaseSpecial; }
+};
+
+struct TitlecaseTraits
+{
+ static inline signed short caseDiff(const Properties *prop)
+ { return prop->titleCaseDiff; }
+ static inline bool caseSpecial(const Properties *prop)
+ { return prop->titleCaseSpecial; }
+};
+
+struct CasefoldTraits
+{
+ static inline signed short caseDiff(const Properties *prop)
+ { return prop->caseFoldDiff; }
+ static inline bool caseSpecial(const Properties *prop)
+ { return prop->caseFoldSpecial; }
+};
+
enum GraphemeBreakClass {
GraphemeBreak_Other,
GraphemeBreak_CR,
diff --git a/src/corelib/tools/qunicodetools.cpp b/src/corelib/tools/qunicodetools.cpp
index 56576c69f1..0df6b01b13 100644
--- a/src/corelib/tools/qunicodetools.cpp
+++ b/src/corelib/tools/qunicodetools.cpp
@@ -49,7 +49,7 @@ namespace QUnicodeTools {
// -----------------------------------------------------------------------------------------------------
//
// The text boundaries determination algorithm.
-// See http://www.unicode.org/reports/tr29/tr29-25.html
+// See http://www.unicode.org/reports/tr29/tr29-27.html
//
// -----------------------------------------------------------------------------------------------------
@@ -244,8 +244,9 @@ namespace SB {
enum State {
Initial,
+ Lower,
Upper,
- UpATerm,
+ LUATerm,
ATerm,
ATermC,
ACS,
@@ -260,10 +261,11 @@ enum State {
static const uchar breakTable[BAfter + 1][QUnicodeTables::SentenceBreak_Close + 1] = {
// Other CR LF Sep Extend Sp Lower Upper OLetter Numeric ATerm SContinue STerm Close
- { Initial, BAfterC, BAfter , BAfter , Initial, Initial, Initial, Upper , Initial, Initial, ATerm , Initial, STerm , Initial }, // Initial
- { Initial, BAfterC, BAfter , BAfter , Upper , Initial, Initial, Upper , Initial, Initial, UpATerm, STerm , STerm , Initial }, // Upper
+ { Initial, BAfterC, BAfter , BAfter , Initial, Initial, Lower , Upper , Initial, Initial, ATerm , Initial, STerm , Initial }, // Initial
+ { Initial, BAfterC, BAfter , BAfter , Lower , Initial, Initial, Initial, Initial, Initial, LUATerm, Initial, STerm , Initial }, // Lower
+ { Initial, BAfterC, BAfter , BAfter , Upper , Initial, Initial, Upper , Initial, Initial, LUATerm, STerm , STerm , Initial }, // Upper
- { Lookup , BAfterC, BAfter , BAfter , UpATerm, ACS , Initial, Upper , Break , Initial, ATerm , STerm , STerm , ATermC }, // UpATerm
+ { Lookup , BAfterC, BAfter , BAfter , LUATerm, ACS , Initial, Upper , Break , Initial, ATerm , STerm , STerm , ATermC }, // LUATerm
{ Lookup , BAfterC, BAfter , BAfter , ATerm , ACS , Initial, Break , Break , Initial, ATerm , STerm , STerm , ATermC }, // ATerm
{ Lookup , BAfterC, BAfter , BAfter , ATermC , ACS , Initial, Break , Break , Lookup , ATerm , STerm , STerm , ATermC }, // ATermC
{ Lookup , BAfterC, BAfter , BAfter , ACS , ACS , Initial, Break , Break , Lookup , ATerm , STerm , STerm , Lookup }, // ACS
@@ -341,7 +343,7 @@ static void getSentenceBreaks(const ushort *string, quint32 len, QCharAttributes
// -----------------------------------------------------------------------------------------------------
//
// The line breaking algorithm.
-// See http://www.unicode.org/reports/tr14/tr14-33.html
+// See http://www.unicode.org/reports/tr14/tr14-35.html
//
// -----------------------------------------------------------------------------------------------------
@@ -408,26 +410,29 @@ inline Class toClass(QUnicodeTables::LineBreakClass lbc, QChar::Category categor
/* In order to support the tailored implementation of LB25 properly
the following changes were made in the pair table to allow breaks
where the numeric expression doesn't match the template (i.e. [^NU](IS|SY)NU):
- CL->PO from IB to DB
- CP->PO from IB to DB
- CL->PR from IB to DB
- CP->PR from IB to DB
- PO->OP from IB to DB
- PR->OP from IB to DB
- IS->NU from IB to DB
- SY->NU from IB to DB
+ (CL)(PO) from IB to DB
+ (CP)(PO) from IB to DB
+ (CL)(PR) from IB to DB
+ (CP)(PR) from IB to DB
+ (PO)(OP) from IB to DB
+ (PR)(OP) from IB to DB
+ (IS)(NU) from IB to DB
+ (SY)(NU) from IB to DB
*/
-// The following line break classes are not treated by the pair table
-// and must be resolved outside:
-// AI, BK, CB, CJ, CR, LF, NL, SA, SG, SP, XX
+/* In order to implementat LB21a properly a special rule HH has been introduced and
+ the following changes were made in the pair table to disallow breaks after Hebrew + Hyphen:
+ (HL)(HY|BA) from IB to CI
+ (HY|BA)(!CB) from DB to HH
+*/
enum Action {
ProhibitedBreak, PB = ProhibitedBreak,
DirectBreak, DB = DirectBreak,
IndirectBreak, IB = IndirectBreak,
CombiningIndirectBreak, CI = CombiningIndirectBreak,
- CombiningProhibitedBreak, CP = CombiningProhibitedBreak
+ CombiningProhibitedBreak, CP = CombiningProhibitedBreak,
+ ProhibitedBreakAfterHebrewPlusHyphen, HH = ProhibitedBreakAfterHebrewPlusHyphen
};
static const uchar breakTable[QUnicodeTables::LineBreak_CB + 1][QUnicodeTables::LineBreak_CB + 1] = {
@@ -438,18 +443,18 @@ static const uchar breakTable[QUnicodeTables::LineBreak_CB + 1][QUnicodeTables::
/* QU */ { PB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB },
/* GL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB },
/* NS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* EX */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* SY */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
+/* EX */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
+/* SY */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* IS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* PR */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, IB, DB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, IB, DB, DB },
/* PO */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* NU */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* AL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* HL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
+/* HL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, CI, CI, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* ID */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* IN */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* HY */ { DB, PB, PB, IB, DB, IB, PB, PB, PB, DB, DB, IB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* BA */ { DB, PB, PB, IB, DB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
+/* HY */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, IB, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB },
+/* BA */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, HH, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB },
/* BB */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, DB },
/* B2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, PB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
/* ZW */ { DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
@@ -464,6 +469,10 @@ static const uchar breakTable[QUnicodeTables::LineBreak_CB + 1][QUnicodeTables::
/* CB */ { DB, PB, PB, IB, IB, DB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB }
};
+// The following line break classes are not treated by the pair table
+// and must be resolved outside:
+// AI, BK, CB, CJ, CR, LF, NL, SA, SG, SP, XX
+
} // namespace LB
static void getLineBreaks(const ushort *string, quint32 len, QCharAttributes *attributes)
@@ -555,6 +564,10 @@ static void getLineBreaks(const ushort *string, quint32 len, QCharAttributes *at
if (lcls != QUnicodeTables::LineBreak_SP)
goto next_no_cls_update;
break;
+ case LB::ProhibitedBreakAfterHebrewPlusHyphen:
+ if (lcls != QUnicodeTables::LineBreak_HL)
+ attributes[pos].lineBreak = true;
+ break;
case LB::ProhibitedBreak:
// nothing to do
default:
@@ -659,7 +672,7 @@ Q_CORE_EXPORT void initCharAttributes(const ushort *string, int length,
// ----------------------------------------------------------------------------
//
-// The Unicode script property. See http://www.unicode.org/reports/tr24/tr24-22.html
+// The Unicode script property. See http://www.unicode.org/reports/tr24/tr24-24.html
//
// ----------------------------------------------------------------------------
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index 90b54b7297..bb15d66439 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -45,6 +45,7 @@
#ifdef Q_COMPILER_INITIALIZER_LISTS
#include <initializer_list>
#endif
+#include <iterator>
QT_BEGIN_NAMESPACE
@@ -174,6 +175,8 @@ public:
typedef T* iterator;
typedef const T* const_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
inline iterator begin() { return ptr; }
inline const_iterator begin() const { return ptr; }
@@ -183,6 +186,12 @@ public:
inline const_iterator end() const { return ptr + s; }
inline const_iterator cend() const { return ptr + s; }
inline const_iterator constEnd() const { return ptr + s; }
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(begin()); }
iterator insert(const_iterator before, int n, const T &x);
inline iterator insert(const_iterator before, const T &x) { return insert(before, 1, x); }
iterator erase(const_iterator begin, const_iterator end);
@@ -489,6 +498,36 @@ bool operator!=(const QVarLengthArray<T, Prealloc1> &l, const QVarLengthArray<T,
return !(l == r);
}
+template <typename T, int Prealloc1, int Prealloc2>
+bool operator<(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(std::lexicographical_compare(lhs.begin(), lhs.end(),
+ rhs.begin(), rhs.end())))
+{
+ return std::lexicographical_compare(lhs.begin(), lhs.end(),
+ rhs.begin(), rhs.end());
+}
+
+template <typename T, int Prealloc1, int Prealloc2>
+inline bool operator>(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return rhs < lhs;
+}
+
+template <typename T, int Prealloc1, int Prealloc2>
+inline bool operator<=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return !(lhs > rhs);
+}
+
+template <typename T, int Prealloc1, int Prealloc2>
+inline bool operator>=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return !(lhs < rhs);
+}
+
QT_END_NAMESPACE
#endif // QVARLENGTHARRAY_H
diff --git a/src/corelib/tools/qvarlengtharray.qdoc b/src/corelib/tools/qvarlengtharray.qdoc
index a2d4c55f7a..2b7f9c5241 100644
--- a/src/corelib/tools/qvarlengtharray.qdoc
+++ b/src/corelib/tools/qvarlengtharray.qdoc
@@ -468,6 +468,20 @@
Typedef for T *. Provided for STL compatibility.
*/
+/*!
+ \typedef QVarLengthArray::const_reverse_iterator
+ \since 5.6
+
+ Typedef for \c{std::reverse_iterator<const T*>}. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QVarLengthArray::reverse_iterator
+ \since 5.6
+
+ Typedef for \c{std::reverse_iterator<T*>}. Provided for STL compatibility.
+*/
+
/*! \fn void QVarLengthArray::prepend(const T &value)
\since 4.8
@@ -582,6 +596,52 @@
\sa constBegin(), end()
*/
+/*! \fn QVarLengthArray::reverse_iterator QVarLengthArray::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the variable length array, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the variable length array, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QVarLengthArray::reverse_iterator QVarLengthArray::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last item in the variable length array, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last item in the variable length array, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*! \fn QVarLengthArray::iterator QVarLengthArray::erase(const_iterator pos)
\since 4.8
@@ -676,6 +736,54 @@
\sa operator==()
*/
+/*! \fn bool operator<(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+ \since 5.6
+ \relates QVarLengthArray
+
+ Returns \c true if variable length array \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically less than} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator<=(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+ \since 5.6
+ \relates QVarLengthArray
+
+ Returns \c true if variable length array \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically less than or equal to} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator>(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+ \since 5.6
+ \relates QVarLengthArray
+
+ Returns \c true if variable length array \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically greater than} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator>=(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+ \since 5.6
+ \relates QVarLengthArray
+
+ Returns \c true if variable length array \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically greater than or equal to} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
/*! \fn QVarLengthArray &QVarLengthArray::operator<<(const T &value)
\since 4.8
diff --git a/src/corelib/tools/qvector.cpp b/src/corelib/tools/qvector.cpp
index d10f82fbb4..f1cf23cc6a 100644
--- a/src/corelib/tools/qvector.cpp
+++ b/src/corelib/tools/qvector.cpp
@@ -45,34 +45,42 @@
stores its items in adjacent memory locations and provides fast
index-based access.
- QList\<T\>, QLinkedList\<T\>, and QVarLengthArray\<T\> provide
- similar functionality. Here's an overview:
+ QList\<T\>, QLinkedList\<T\>, QVector\<T\>, and QVarLengthArray\<T\>
+ provide similar APIs and functionality. They are often interchangeable,
+ but there are performance consequences. Here is an overview of use cases:
\list
- \li For most purposes, QList is the right class to use. Operations
- like prepend() and insert() are usually faster than with
- QVector because of the way QList stores its items in memory
- (see \l{Algorithmic Complexity} for details),
- and its index-based API is more convenient than QLinkedList's
- iterator-based API. It also expands to less code in your
- executable.
- \li If you need a real linked list, with guarantees of \l{constant
- time} insertions in the middle of the list and iterators to
- items rather than indexes, use QLinkedList.
- \li If you want the items to occupy adjacent memory positions, or
- if your items are larger than a pointer and you want to avoid
- the overhead of allocating them on the heap individually at
- insertion time, then use QVector.
- \li If you want a low-level variable-size array, QVarLengthArray
- may be sufficient.
+ \li QVector should be your default first choice.
+ QVector\<T\> will usually give better performance than QList\<T\>,
+ because QVector\<T\> always stores its items sequentially in memory,
+ where QList\<T\> will allocate its items on the heap unless
+ \c {sizeof(T) <= sizeof(void*)} and T has been declared to be
+ either a \c{Q_MOVABLE_TYPE} or a \c{Q_PRIMITIVE_TYPE} using
+ \l {Q_DECLARE_TYPEINFO}. See the \l {Pros and Cons of Using QList}
+ for an explanation.
+ \li However, QList is used throughout the Qt APIs for passing
+ parameters and for returning values. Use QList to interface with
+ those APIs.
+ \li If you need a real linked list, which guarantees
+ \l{Algorithmic Complexity}{constant time} insertions mid-list and
+ uses iterators to items rather than indexes, use QLinkedList.
\endlist
+ \note QVector and QVarLengthArray both guarantee C-compatible
+ array layout. QList does not. This might be important if your
+ application must interface with a C API.
+
+ \note Iterators into a QLinkedList and references into
+ heap-allocating QLists remain valid long as the referenced items
+ remain in the container. This is not true for iterators and
+ references into a QVector and non-heap-allocating QLists.
+
Here's an example of a QVector that stores integers and a QVector
that stores QString values:
\snippet code/src_corelib_tools_qvector.cpp 0
- QVector stores a vector (or array) of items. Typically, vectors
+ QVector stores its items in a vector (array). Typically, vectors
are created with an initial size. For example, the following code
constructs a QVector with 200 elements:
@@ -166,6 +174,11 @@
with references to its own values. Doing so will cause your application to
abort with an error message.
+ \section2 More Information on Using Qt Containers
+
+ For a detailed discussion comparing Qt containers with each other and
+ with STL containers, see \l {Understand the Qt Containers}.
+
\sa QVectorIterator, QMutableVectorIterator, QList, QLinkedList
*/
@@ -218,10 +231,11 @@
Constructs a copy of \a other.
- This operation takes \l{constant time}, because QVector is
- \l{implicitly shared}. This makes returning a QVector from a
- function very fast. If a shared instance is modified, it will be
- copied (copy-on-write), and that takes \l{linear time}.
+ This operation takes \l{Algorithmic Complexity}{constant time},
+ because QVector is \l{implicitly shared}. This makes returning
+ a QVector from a function very fast. If a shared instance is
+ modified, it will be copied (copy-on-write), and that takes
+ \l{Algorithmic Complexity}{linear time}.
\sa operator=()
*/
@@ -290,6 +304,65 @@
\sa operator==()
*/
+/*! \fn bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
+ \since 5.6
+ \relates QVector
+
+ Returns \c true if vector \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically less than} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
+ \since 5.6
+ \relates QVector
+
+ Returns \c true if vector \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically less than or equal to} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
+ \since 5.6
+ \relates QVector
+
+ Returns \c true if vector \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically greater than} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*! \fn bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
+ \since 5.6
+ \relates QVector
+
+ Returns \c true if vector \a lhs is
+ \l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
+ {lexicographically greater than or equal to} \a rhs; otherwise returns \c false.
+
+ This function requires the value type to have an implementation
+ of \c operator<().
+*/
+
+/*!
+ \fn uint qHash(const QVector<T> &key, uint seed = 0)
+ \since 5.6
+ \relates QVector
+
+ Returns the hash value for \a key,
+ using \a seed to seed the calculation.
+
+ This function requires qHash() to be overloaded for the value type \c T.
+*/
+
/*! \fn int QVector::size() const
Returns the number of items in the vector.
@@ -311,6 +384,9 @@
initialized with a \l{default-constructed value}. If \a size is less
than the current size, elements are removed from the end.
+ Since Qt 5.6, resize() doesn't shrink the capacity anymore.
+ To shed excess capacity, use squeeze().
+
\sa size()
*/
@@ -330,15 +406,24 @@
/*! \fn void QVector::reserve(int size)
Attempts to allocate memory for at least \a size elements. If you
- know in advance how large the vector will be, you can call this
- function, and if you call resize() often you are likely to get
- better performance. If \a size is an underestimate, the worst
- that will happen is that the QVector will be a bit slower.
+ know in advance how large the vector will be, you should call this
+ function to prevent reallocations and memory fragmentation.
- The sole purpose of this function is to provide a means of fine
- tuning QVector's memory usage. In general, you will rarely ever
- need to call this function. If you want to change the size of the
- vector, call resize().
+ If \a size is an underestimate, the worst that will happen is that
+ the QVector will be a bit slower. If \a size is an overestimate, you
+ may have used more memory than the normal QVector growth strategy
+ would have allocated—or you may have used less.
+
+ An alternative to reserve() is calling resize(). Whether or not that is
+ faster than reserve() depends on the element type, because resize()
+ default-constructs all elements, and requires assignment to existing
+ entries rather than calling append(), which copy- or move-constructs.
+ For simple types, like \c int or \c double, resize() is typically faster,
+ but for anything more complex, you should prefer reserve().
+
+ \warning If the size passed to resize() was underestimated, you run out
+ of allocated space and into undefined behavior. This problem does not
+ exist with reserve(), because it treats the size as just a hint.
\sa squeeze(), capacity()
*/
@@ -463,6 +548,16 @@
\sa operator<<(), prepend(), insert()
*/
+/*!
+ \fn void QVector::append(T &&value)
+ \since 5.6
+
+ \overload
+
+ Example:
+ \snippet code/src_corelib_tools_qvector.cpp move-append
+*/
+
/*! \fn void QVector::append(const QVector<T> &value)
\overload
@@ -629,6 +724,16 @@
\sa takeFirst(), takeLast(), QList::takeAt()
*/
+/*! \fn void QVector::move(int from, int to)
+ \since 5.6
+
+ Moves the item at index position \a from to index position \a to.
+
+ Provided for compatibility with QList.
+
+ \sa QList::move()
+*/
+
/*! \fn void QVector::removeFirst()
\since 5.1
Removes the first item in the vector. Calling this function is
@@ -823,6 +928,52 @@
\sa constBegin(), end()
*/
+/*! \fn QVector::reverse_iterator QVector::rbegin()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the vector, in reverse order.
+
+ \sa begin(), crbegin(), rend()
+*/
+
+/*! \fn QVector::const_reverse_iterator QVector::rbegin() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QVector::const_reverse_iterator QVector::crbegin() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
+ item in the vector, in reverse order.
+
+ \sa begin(), rbegin(), rend()
+*/
+
+/*! \fn QVector::reverse_iterator QVector::rend()
+ \since 5.6
+
+ Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
+ the last item in the vector, in reverse order.
+
+ \sa end(), crend(), rbegin()
+*/
+
+/*! \fn QVector::const_reverse_iterator QVector::rend() const
+ \since 5.6
+ \overload
+*/
+
+/*! \fn QVector::const_reverse_iterator QVector::crend() const
+ \since 5.6
+
+ Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
+ past the last item in the vector, in reverse order.
+
+ \sa end(), rend(), rbegin()
+*/
+
/*! \fn QVector::iterator QVector::erase(iterator pos)
Removes the item pointed to by the iterator \a pos from the
@@ -846,7 +997,7 @@
Returns a reference to the first item in the vector. This
function assumes that the vector isn't empty.
- \sa last(), isEmpty()
+ \sa last(), isEmpty(), constFirst()
*/
/*! \fn const T& QVector::first() const
@@ -854,12 +1005,21 @@
\overload
*/
+/*! \fn const T& QVector::constFirst() const
+ \since 5.6
+
+ Returns a const reference to the first item in the vector. This
+ function assumes that the vector isn't empty.
+
+ \sa constLast(), isEmpty(), first()
+*/
+
/*! \fn T& QVector::last()
Returns a reference to the last item in the vector. This function
assumes that the vector isn't empty.
- \sa first(), isEmpty()
+ \sa first(), isEmpty(), constLast()
*/
/*! \fn const T& QVector::last() const
@@ -867,6 +1027,15 @@
\overload
*/
+/*! \fn const T& QVector::constLast() const
+ \since 5.6
+
+ Returns a const reference to the last item in the vector. This function
+ assumes that the vector isn't empty.
+
+ \sa constFirst(), isEmpty(), last()
+*/
+
/*! \fn T QVector::value(int i) const
Returns the value at index position \a i in the vector.
@@ -893,6 +1062,11 @@
to append(\a value).
*/
+/*! \fn void QVector::push_back(T &&value)
+ \since 5.6
+ \overload
+*/
+
/*! \fn void QVector::push_front(const T &value)
This function is provided for STL compatibility. It is equivalent
@@ -1013,6 +1187,38 @@
\sa QVector::constBegin(), QVector::constEnd(), QVector::iterator, QVectorIterator
*/
+/*! \typedef QVector::reverse_iterator
+ \since 5.6
+
+ The QVector::reverse_iterator typedef provides an STL-style non-const
+ reverse iterator for QVector.
+
+ It is simply a typedef for \c{std::reverse_iterator<T*>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QVector::rbegin(), QVector::rend(), QVector::const_reverse_iterator, QVector::iterator
+*/
+
+/*! \typedef QVector::const_reverse_iterator
+ \since 5.6
+
+ The QVector::const_reverse_iterator typedef provides an STL-style const
+ reverse iterator for QVector.
+
+ It is simply a typedef for \c{std::reverse_iterator<const T*>}.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+
+ \sa QVector::rbegin(), QVector::rend(), QVector::reverse_iterator, QVector::const_iterator
+*/
+
/*! \typedef QVector::Iterator
Qt-style synonym for QVector::iterator.
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index eed5d17cad..3ce33fb477 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -39,6 +39,7 @@
#include <QtCore/qlist.h>
#include <QtCore/qrefcount.h>
#include <QtCore/qarraydata.h>
+#include <QtCore/qhashfunctions.h>
#include <iterator>
#include <vector>
@@ -68,11 +69,11 @@ public:
inline ~QVector() { if (!d->ref.deref()) freeData(d); }
QVector<T> &operator=(const QVector<T> &v);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QVector(QVector<T> &&other) : d(other.d) { other.d = Data::sharedNull(); }
- inline QVector<T> operator=(QVector<T> &&other)
- { qSwap(d, other.d); return *this; }
+ QVector(QVector<T> &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Data::sharedNull(); }
+ QVector<T> &operator=(QVector<T> &&other) Q_DECL_NOTHROW
+ { QVector moved(std::move(other)); swap(moved); return *this; }
#endif
- inline void swap(QVector<T> &other) { qSwap(d, other.d); }
+ void swap(QVector<T> &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QVector(std::initializer_list<T> args);
#endif
@@ -128,6 +129,9 @@ public:
T &operator[](int i);
const T &operator[](int i) const;
void append(const T &t);
+#ifdef Q_COMPILER_RVALUE_REFS
+ void append(T &&t);
+#endif
inline void append(const QVector<T> &l) { *this += l; }
void prepend(const T &t);
void insert(int i, const T &t);
@@ -171,29 +175,50 @@ public:
}
int length() const { return size(); }
T takeAt(int i) { T t = at(i); remove(i); return t; }
+ void move(int from, int to)
+ {
+ Q_ASSERT_X(from >= 0 && from < size(), "QVector::move(int,int)", "'from' is out-of-range");
+ Q_ASSERT_X(to >= 0 && to < size(), "QVector::move(int,int)", "'to' is out-of-range");
+ if (from == to) // don't detach when no-op
+ return;
+ detach();
+ T * const b = d->begin();
+ if (from < to)
+ std::rotate(b + from, b + from + 1, b + to + 1);
+ else
+ std::rotate(b + to, b + from, b + from + 1);
+ }
// STL-style
typedef typename Data::iterator iterator;
typedef typename Data::const_iterator const_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
#if !defined(QT_STRICT_ITERATORS) || defined(Q_QDOC)
inline iterator begin() { detach(); return d->begin(); }
- inline const_iterator begin() const { return d->constBegin(); }
- inline const_iterator cbegin() const { return d->constBegin(); }
- inline const_iterator constBegin() const { return d->constBegin(); }
+ inline const_iterator begin() const Q_DECL_NOTHROW { return d->constBegin(); }
+ inline const_iterator cbegin() const Q_DECL_NOTHROW { return d->constBegin(); }
+ inline const_iterator constBegin() const Q_DECL_NOTHROW { return d->constBegin(); }
inline iterator end() { detach(); return d->end(); }
- inline const_iterator end() const { return d->constEnd(); }
- inline const_iterator cend() const { return d->constEnd(); }
- inline const_iterator constEnd() const { return d->constEnd(); }
+ inline const_iterator end() const Q_DECL_NOTHROW { return d->constEnd(); }
+ inline const_iterator cend() const Q_DECL_NOTHROW { return d->constEnd(); }
+ inline const_iterator constEnd() const Q_DECL_NOTHROW { return d->constEnd(); }
#else
inline iterator begin(iterator = iterator()) { detach(); return d->begin(); }
- inline const_iterator begin(const_iterator = const_iterator()) const { return d->constBegin(); }
- inline const_iterator cbegin(const_iterator = const_iterator()) const { return d->constBegin(); }
- inline const_iterator constBegin(const_iterator = const_iterator()) const { return d->constBegin(); }
+ inline const_iterator begin(const_iterator = const_iterator()) const Q_DECL_NOTHROW { return d->constBegin(); }
+ inline const_iterator cbegin(const_iterator = const_iterator()) const Q_DECL_NOTHROW { return d->constBegin(); }
+ inline const_iterator constBegin(const_iterator = const_iterator()) const Q_DECL_NOTHROW { return d->constBegin(); }
inline iterator end(iterator = iterator()) { detach(); return d->end(); }
- inline const_iterator end(const_iterator = const_iterator()) const { return d->constEnd(); }
- inline const_iterator cend(const_iterator = const_iterator()) const { return d->constEnd(); }
- inline const_iterator constEnd(const_iterator = const_iterator()) const { return d->constEnd(); }
+ inline const_iterator end(const_iterator = const_iterator()) const Q_DECL_NOTHROW { return d->constEnd(); }
+ inline const_iterator cend(const_iterator = const_iterator()) const Q_DECL_NOTHROW { return d->constEnd(); }
+ inline const_iterator constEnd(const_iterator = const_iterator()) const Q_DECL_NOTHROW { return d->constEnd(); }
#endif
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator rend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
+ const_reverse_iterator crbegin() const Q_DECL_NOTHROW { return const_reverse_iterator(end()); }
+ const_reverse_iterator crend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
iterator insert(iterator before, int n, const T &x);
inline iterator insert(iterator before, const T &x) { return insert(before, 1, x); }
iterator erase(iterator begin, iterator end);
@@ -203,8 +228,10 @@ public:
inline int count() const { return d->size; }
inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); }
inline const T &first() const { Q_ASSERT(!isEmpty()); return *begin(); }
+ inline const T &constFirst() const { Q_ASSERT(!isEmpty()); return *begin(); }
inline T& last() { Q_ASSERT(!isEmpty()); return *(end()-1); }
inline const T &last() const { Q_ASSERT(!isEmpty()); return *(end()-1); }
+ inline const T &constLast() const { Q_ASSERT(!isEmpty()); return *(end()-1); }
inline bool startsWith(const T &t) const { return !isEmpty() && first() == t; }
inline bool endsWith(const T &t) const { return !isEmpty() && last() == t; }
QVector<T> mid(int pos, int len = -1) const;
@@ -223,6 +250,9 @@ public:
typedef const_iterator ConstIterator;
typedef int size_type;
inline void push_back(const T &t) { append(t); }
+#ifdef Q_COMPILER_RVALUE_REFS
+ void push_back(T &&t) { append(std::move(t)); }
+#endif
inline void push_front(const T &t) { prepend(t); }
void pop_back() { removeLast(); }
void pop_front() { removeFirst(); }
@@ -265,7 +295,6 @@ private:
{
return (i <= d->end()) && (d->begin() <= i);
}
- iterator c2m(const_iterator it) { return begin() + (it - cbegin()); }
class AlignmentDummy { Data header; T array[1]; };
};
@@ -377,9 +406,6 @@ void QVector<T>::resize(int asize)
if (asize > oldAlloc) { // there is not enough space
newAlloc = asize;
opt = QArrayData::Grow;
- } else if (!d->capacityReserved && asize < d->size && asize < (oldAlloc >> 1)) { // we want to shrink
- newAlloc = asize;
- opt = QArrayData::Grow;
} else {
newAlloc = oldAlloc;
}
@@ -602,14 +628,14 @@ void QVector<T>::append(const T &t)
{
const bool isTooSmall = uint(d->size + 1) > d->alloc;
if (!isDetached() || isTooSmall) {
- const T copy(t);
+ T copy(t);
QArrayData::AllocationOptions opt(isTooSmall ? QArrayData::Grow : QArrayData::Default);
reallocData(d->size, isTooSmall ? d->size + 1 : d->alloc, opt);
if (QTypeInfo<T>::isComplex)
- new (d->end()) T(copy);
+ new (d->end()) T(qMove(copy));
else
- *d->end() = copy;
+ *d->end() = qMove(copy);
} else {
if (QTypeInfo<T>::isComplex)
@@ -620,6 +646,22 @@ void QVector<T>::append(const T &t)
++d->size;
}
+#ifdef Q_COMPILER_RVALUE_REFS
+template <typename T>
+void QVector<T>::append(T &&t)
+{
+ const bool isTooSmall = uint(d->size + 1) > d->alloc;
+ if (!isDetached() || isTooSmall) {
+ QArrayData::AllocationOptions opt(isTooSmall ? QArrayData::Grow : QArrayData::Default);
+ reallocData(d->size, isTooSmall ? d->size + 1 : d->alloc, opt);
+ }
+
+ new (d->end()) T(std::move(t));
+
+ ++d->size;
+}
+#endif
+
template <typename T>
void QVector<T>::removeLast()
{
@@ -873,6 +915,43 @@ QList<T> QList<T>::fromVector(const QVector<T> &vector)
Q_DECLARE_SEQUENTIAL_ITERATOR(Vector)
Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(Vector)
+template <typename T>
+uint qHash(const QVector<T> &key, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHashRange(key.cbegin(), key.cend(), seed)))
+{
+ return qHashRange(key.cbegin(), key.cend(), seed);
+}
+
+template <typename T>
+bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(std::lexicographical_compare(lhs.begin(), lhs.end(),
+ rhs.begin(), rhs.end())))
+{
+ return std::lexicographical_compare(lhs.begin(), lhs.end(),
+ rhs.begin(), rhs.end());
+}
+
+template <typename T>
+inline bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return rhs < lhs;
+}
+
+template <typename T>
+inline bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return !(lhs > rhs);
+}
+
+template <typename T>
+inline bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
+{
+ return !(lhs < rhs);
+}
+
/*
### Qt 5:
### This needs to be removed for next releases of Qt. It is a workaround for vc++ because
diff --git a/src/corelib/tools/qversionnumber.cpp b/src/corelib/tools/qversionnumber.cpp
index 660f40b107..f432820252 100644
--- a/src/corelib/tools/qversionnumber.cpp
+++ b/src/corelib/tools/qversionnumber.cpp
@@ -32,7 +32,7 @@
**
****************************************************************************/
-#include <QtCore/private/qversionnumber_p.h>
+#include <QtCore/qversionnumber.h>
#include <QtCore/qhash.h>
#include <QtCore/private/qlocale_tools_p.h>
#include <QtCore/qcollator.h>
@@ -53,8 +53,7 @@ QT_BEGIN_NAMESPACE
/*!
\class QVersionNumber
\inmodule QtCore
- \internal
- \since 5.4
+ \since 5.6
\brief The QVersionNumber class contains a version number with an arbitrary
number of segments.
@@ -168,6 +167,17 @@ QT_BEGIN_NAMESPACE
\sa majorVersion(), minorVersion(), microVersion()
*/
+QVector<int> QVersionNumber::segments() const
+{
+ if (m_segments.isUsingPointer())
+ return *m_segments.pointer_segments;
+
+ QVector<int> result;
+ result.resize(segmentCount());
+ for (int i = 0; i < segmentCount(); ++i)
+ result[i] = segmentAt(i);
+ return result;
+}
/*!
\fn int QVersionNumber::segmentAt(int index) const
@@ -192,10 +202,21 @@ QT_BEGIN_NAMESPACE
Returns an equivalent version number but with all trailing zeros removed.
To check if two numbers are equivalent, use normalized() on both version
- numbers before perforing the compare.
+ numbers before performing the compare.
\snippet qversionnumber/main.cpp 4
*/
+QVersionNumber QVersionNumber::normalized() const
+{
+ int i;
+ for (i = m_segments.size(); i; --i)
+ if (m_segments.at(i - 1) != 0)
+ break;
+
+ QVersionNumber result(*this);
+ result.m_segments.resize(i);
+ return result;
+}
/*!
\fn bool QVersionNumber::isPrefixOf(const QVersionNumber &other) const
@@ -209,8 +230,13 @@ QT_BEGIN_NAMESPACE
*/
bool QVersionNumber::isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW
{
- return m_segments.size() <= other.m_segments.size() &&
- std::equal(m_segments.begin(), m_segments.end(), other.m_segments.begin());
+ if (segmentCount() > other.segmentCount())
+ return false;
+ for (int i = 0; i < segmentCount(); ++i) {
+ if (segmentAt(i) != other.segmentAt(i))
+ return false;
+ }
+ return true;
}
/*!
@@ -228,30 +254,37 @@ bool QVersionNumber::isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHRO
*/
int QVersionNumber::compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW
{
- QVector<int>::const_iterator i1 = v1.m_segments.constBegin();
- const QVector<int>::const_iterator e1 = v1.m_segments.constEnd();
- QVector<int>::const_iterator i2 = v2.m_segments.constBegin();
- const QVector<int>::const_iterator e2 = v2.m_segments.constEnd();
-
- while (i1 != e1 && i2 != e2) {
- if (*i1 != *i2)
- return (*i1 - *i2);
- ++i1;
- ++i2;
+ int commonlen;
+
+ if (Q_LIKELY(!v1.m_segments.isUsingPointer() && !v2.m_segments.isUsingPointer())) {
+ // we can't use memcmp because it interprets the data as unsigned bytes
+ const qint8 *ptr1 = v1.m_segments.inline_segments + InlineSegmentStartIdx;
+ const qint8 *ptr2 = v2.m_segments.inline_segments + InlineSegmentStartIdx;
+ commonlen = qMin(v1.m_segments.size(),
+ v2.m_segments.size());
+ for (int i = 0; i < commonlen; ++i)
+ if (int x = ptr1[i] - ptr2[i])
+ return x;
+ } else {
+ commonlen = qMin(v1.segmentCount(), v2.segmentCount());
+ for (int i = 0; i < commonlen; ++i) {
+ if (v1.segmentAt(i) != v2.segmentAt(i))
+ return v1.segmentAt(i) - v2.segmentAt(i);
+ }
}
// ran out of segments in v1 and/or v2 and need to check the first trailing
// segment to finish the compare
- if (i1 != e1) {
+ if (v1.segmentCount() > commonlen) {
// v1 is longer
- if (*i1 != 0)
- return *i1;
+ if (v1.segmentAt(commonlen) != 0)
+ return v1.segmentAt(commonlen);
else
return 1;
- } else if (i2 != e2) {
+ } else if (v2.segmentCount() > commonlen) {
// v2 is longer
- if (*i2 != 0)
- return -*i2;
+ if (v2.segmentAt(commonlen) != 0)
+ return -v2.segmentAt(commonlen);
else
return -1;
}
@@ -271,13 +304,20 @@ int QVersionNumber::compare(const QVersionNumber &v1, const QVersionNumber &v2)
QVersionNumber QVersionNumber::commonPrefix(const QVersionNumber &v1,
const QVersionNumber &v2)
{
- int min = qMin(v1.m_segments.size(), v2.m_segments.size());
- QVector<int>::const_iterator i1 = v1.m_segments.begin();
- QVector<int>::const_iterator e1;
- e1 = std::mismatch(i1,
- v1.m_segments.begin() + min,
- v2.m_segments.begin()).first;
- return QVersionNumber(v1.m_segments.mid(0, e1 - i1));
+ int commonlen = qMin(v1.segmentCount(), v2.segmentCount());
+ int i;
+ for (i = 0; i < commonlen; ++i) {
+ if (v1.segmentAt(i) != v2.segmentAt(i))
+ break;
+ }
+
+ if (i == 0)
+ return QVersionNumber();
+
+ // try to use the one with inline segments, if there's one
+ QVersionNumber result(!v1.m_segments.isUsingPointer() ? v1 : v2);
+ result.m_segments.resize(i);
+ return result;
}
/*!
@@ -348,12 +388,12 @@ QVersionNumber QVersionNumber::commonPrefix(const QVersionNumber &v1,
QString QVersionNumber::toString() const
{
QString version;
- version.reserve(qMax(m_segments.size() * 2 - 1, 0));
+ version.reserve(qMax(segmentCount() * 2 - 1, 0));
bool first = true;
- for (QVector<int>::const_iterator it = m_segments.begin(), end = m_segments.end(); it != end; ++it) {
+ for (int i = 0; i < segmentCount(); ++i) {
if (!first)
version += QLatin1Char('.');
- version += QString::number(*it);
+ version += QString::number(segmentAt(i));
first = false;
}
return version;
@@ -401,19 +441,17 @@ QVersionNumber QVersionNumber::fromString(const QString &string, int *suffixInde
return QVersionNumber(qMove(seg));
}
-/*!
- \fn QVersionNumber QVersionNumber::normalizedImpl(QVector<int> &segs)
-
- Implementation of the normalized() function. Takes the movable list \a segs
- and normalizes them.
-
- \internal
- */
-QVersionNumber QVersionNumber::normalizedImpl(QVector<int> &segs)
+void QVersionNumber::SegmentStorage::setVector(int len, int maj, int min, int mic)
{
- while (segs.size() && segs.last() == 0)
- segs.pop_back();
- return QVersionNumber(qMove(segs));
+ pointer_segments = new QVector<int>;
+ pointer_segments->resize(len);
+ pointer_segments->data()[0] = maj;
+ if (len > 1) {
+ pointer_segments->data()[1] = min;
+ if (len > 2) {
+ pointer_segments->data()[2] = mic;
+ }
+ }
}
#ifndef QT_NO_DATASTREAM
@@ -442,7 +480,9 @@ QDataStream& operator<<(QDataStream &out, const QVersionNumber &version)
*/
QDataStream& operator>>(QDataStream &in, QVersionNumber &version)
{
- in >> version.m_segments;
+ if (!version.m_segments.isUsingPointer())
+ version.m_segments.pointer_segments = new QVector<int>;
+ in >> *version.m_segments.pointer_segments;
return in;
}
#endif
@@ -459,14 +499,18 @@ QDebug operator<<(QDebug debug, const QVersionNumber &version)
/*!
\fn uint qHash(const QVersionNumber &key, uint seed)
\relates QHash
- \since 5.4
+ \since 5.6
Returns the hash value for the \a key, using \a seed to seed the
calculation.
*/
uint qHash(const QVersionNumber &key, uint seed)
{
- return qHashRange(key.m_segments.begin(), key.m_segments.end(), seed);
+ QtPrivate::QHashCombine hash;
+ for (int i = 0; i < key.segmentCount(); ++i)
+ seed = hash(seed, key.segmentAt(i));
+ return seed;
}
QT_END_NAMESPACE
+
diff --git a/src/corelib/tools/qversionnumber.h b/src/corelib/tools/qversionnumber.h
new file mode 100644
index 0000000000..ebf1844f38
--- /dev/null
+++ b/src/corelib/tools/qversionnumber.h
@@ -0,0 +1,313 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVERSIONNUMBER_H
+#define QVERSIONNUMBER_H
+
+#include <QtCore/qnamespace.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qvector.h>
+#include <QtCore/qmetatype.h>
+#include <QtCore/qtypeinfo.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVersionNumber;
+Q_CORE_EXPORT uint qHash(const QVersionNumber &key, uint seed = 0);
+
+#ifndef QT_NO_DATASTREAM
+Q_CORE_EXPORT QDataStream& operator<<(QDataStream &out, const QVersionNumber &version);
+Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QVersionNumber &version);
+#endif
+
+class QVersionNumber
+{
+ /*
+ * QVersionNumber stores small values inline, without memory allocation.
+ * We do that by setting the LSB in the pointer that would otherwise hold
+ * the longer form of the segments.
+ * The constants below help us deal with the permutations for 32- and 64-bit,
+ * little- and big-endian architectures.
+ */
+ enum {
+ // in little-endian, inline_segments[0] is shared with the pointer's LSB, while
+ // in big-endian, it's inline_segments[7]
+ InlineSegmentMarker = Q_BYTE_ORDER == Q_LITTLE_ENDIAN ? 0 : sizeof(void*) - 1,
+ InlineSegmentStartIdx = !InlineSegmentMarker, // 0 for BE, 1 for LE
+ InlineSegmentCount = sizeof(void*) - 1
+ };
+ Q_STATIC_ASSERT(InlineSegmentCount >= 3); // at least major, minor, micro
+
+ struct SegmentStorage {
+ // Note: we alias the use of dummy and inline_segments in the use of the
+ // union below. This is undefined behavior in C++98, but most compilers implement
+ // the C++11 behavior. The one known exception is older versions of Sun Studio.
+ union {
+ quintptr dummy;
+ qint8 inline_segments[sizeof(void*)];
+ QVector<int> *pointer_segments;
+ };
+
+ // set the InlineSegmentMarker and set length to zero
+ SegmentStorage() Q_DECL_NOTHROW : dummy(1) {}
+
+ SegmentStorage(const QVector<int> &seg)
+ {
+ if (dataFitsInline(seg.begin(), seg.size()))
+ setInlineData(seg.begin(), seg.size());
+ else
+ pointer_segments = new QVector<int>(seg);
+ }
+
+ SegmentStorage(const SegmentStorage &other)
+ {
+ if (other.isUsingPointer())
+ pointer_segments = new QVector<int>(*other.pointer_segments);
+ else
+ dummy = other.dummy;
+ }
+
+ SegmentStorage &operator=(const SegmentStorage &other)
+ {
+ if (isUsingPointer() && other.isUsingPointer()) {
+ *pointer_segments = *other.pointer_segments;
+ } else if (other.isUsingPointer()) {
+ pointer_segments = new QVector<int>(*other.pointer_segments);
+ } else {
+ if (isUsingPointer())
+ delete pointer_segments;
+ dummy = other.dummy;
+ }
+ return *this;
+ }
+
+#ifdef Q_COMPILER_RVALUE_REFS
+ SegmentStorage(SegmentStorage &&other) Q_DECL_NOTHROW
+ : dummy(other.dummy)
+ {
+ other.dummy = 1;
+ }
+
+ SegmentStorage &operator=(SegmentStorage &&other) Q_DECL_NOTHROW
+ {
+ qSwap(dummy, other.dummy);
+ return *this;
+ }
+
+ explicit SegmentStorage(QVector<int> &&seg)
+ {
+ if (dataFitsInline(seg.begin(), seg.size()))
+ setInlineData(seg.begin(), seg.size());
+ else
+ pointer_segments = new QVector<int>(std::move(seg));
+ }
+#endif
+#ifdef Q_COMPILER_INITIALIZER_LISTS
+ SegmentStorage(std::initializer_list<int> args)
+ {
+ if (dataFitsInline(args.begin(), int(args.size()))) {
+ setInlineData(args.begin(), int(args.size()));
+ } else {
+ pointer_segments = new QVector<int>(args);
+ }
+ }
+#endif
+
+ ~SegmentStorage() { if (isUsingPointer()) delete pointer_segments; }
+
+ bool isUsingPointer() const Q_DECL_NOTHROW
+ { return (inline_segments[InlineSegmentMarker] & 1) == 0; }
+
+ int size() const Q_DECL_NOTHROW
+ { return isUsingPointer() ? pointer_segments->size() : (inline_segments[InlineSegmentMarker] >> 1); }
+
+ void setInlineSize(int len)
+ { inline_segments[InlineSegmentMarker] = 1 + 2 * len; }
+
+ void resize(int len)
+ {
+ if (isUsingPointer())
+ pointer_segments->resize(len);
+ else
+ setInlineSize(len);
+ }
+
+ int at(int index) const
+ {
+ return isUsingPointer() ?
+ pointer_segments->at(index) :
+ inline_segments[InlineSegmentStartIdx + index];
+ }
+
+ void setSegments(int len, int maj, int min = 0, int mic = 0)
+ {
+ if (maj == qint8(maj) && min == qint8(min) && mic == qint8(mic)) {
+ int data[] = { maj, min, mic };
+ setInlineData(data, len);
+ } else {
+ setVector(len, maj, min, mic);
+ }
+ }
+
+ private:
+ static bool dataFitsInline(const int *data, int len)
+ {
+ if (len > InlineSegmentCount)
+ return false;
+ for (int i = 0; i < len; ++i)
+ if (data[i] != qint8(data[i]))
+ return false;
+ return true;
+ }
+ void setInlineData(const int *data, int len)
+ {
+ dummy = 1 + len * 2;
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ for (int i = 0; i < len; ++i)
+ dummy |= quintptr(data[i] & 0xFF) << (8 * (i + 1));
+#elif Q_BYTE_ORDER == Q_BIG_ENDIAN
+ for (int i = 0; i < len; ++i)
+ dummy |= quintptr(data[i] & 0xFF) << (8 * (sizeof(void *) - i - 1));
+#else
+ // the code above is equivalent to:
+ setInlineSize(len);
+ for (int i = 0; i < len; ++i)
+ inline_segments[InlineSegmentStartIdx + i] = data[i] & 0xFF;
+#endif
+ }
+
+ Q_CORE_EXPORT void setVector(int len, int maj, int min, int mic);
+ } m_segments;
+
+public:
+ inline QVersionNumber() Q_DECL_NOTHROW
+ : m_segments()
+ {}
+ inline explicit QVersionNumber(const QVector<int> &seg)
+ : m_segments(seg)
+ {}
+
+ // compiler-generated copy/move ctor/assignment operators and the destructor are ok
+
+#ifdef Q_COMPILER_RVALUE_REFS
+ explicit QVersionNumber(QVector<int> &&seg)
+ : m_segments(std::move(seg))
+ {}
+#endif
+
+#ifdef Q_COMPILER_INITIALIZER_LISTS
+ inline QVersionNumber(std::initializer_list<int> args)
+ : m_segments(args)
+ {}
+#endif
+
+ inline explicit QVersionNumber(int maj)
+ { m_segments.setSegments(1, maj); }
+
+ inline explicit QVersionNumber(int maj, int min)
+ { m_segments.setSegments(2, maj, min); }
+
+ inline explicit QVersionNumber(int maj, int min, int mic)
+ { m_segments.setSegments(3, maj, min, mic); }
+
+ inline bool isNull() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return segmentCount() == 0; }
+
+ inline bool isNormalized() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return isNull() || segmentAt(segmentCount() - 1) != 0; }
+
+ inline int majorVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return segmentAt(0); }
+
+ inline int minorVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return segmentAt(1); }
+
+ inline int microVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return segmentAt(2); }
+
+ Q_CORE_EXPORT QVersionNumber normalized() const Q_REQUIRED_RESULT;
+
+ Q_CORE_EXPORT QVector<int> segments() const Q_REQUIRED_RESULT;
+
+ inline int segmentAt(int index) const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return (m_segments.size() > index) ? m_segments.at(index) : 0; }
+
+ inline int segmentCount() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
+ { return m_segments.size(); }
+
+ Q_CORE_EXPORT bool isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_CORE_EXPORT static int compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2) Q_REQUIRED_RESULT;
+
+ Q_CORE_EXPORT QString toString() const Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = 0) Q_REQUIRED_RESULT;
+
+private:
+#ifndef QT_NO_DATASTREAM
+ friend Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QVersionNumber &version);
+#endif
+ friend Q_CORE_EXPORT uint qHash(const QVersionNumber &key, uint seed);
+};
+
+Q_DECLARE_TYPEINFO(QVersionNumber, Q_MOVABLE_TYPE);
+
+#ifndef QT_NO_DEBUG_STREAM
+Q_CORE_EXPORT QDebug operator<<(QDebug, const QVersionNumber &version);
+#endif
+
+Q_REQUIRED_RESULT inline bool operator> (const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
+{ return QVersionNumber::compare(lhs, rhs) > 0; }
+
+Q_REQUIRED_RESULT inline bool operator>=(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
+{ return QVersionNumber::compare(lhs, rhs) >= 0; }
+
+Q_REQUIRED_RESULT inline bool operator< (const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
+{ return QVersionNumber::compare(lhs, rhs) < 0; }
+
+Q_REQUIRED_RESULT inline bool operator<=(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
+{ return QVersionNumber::compare(lhs, rhs) <= 0; }
+
+Q_REQUIRED_RESULT inline bool operator==(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
+{ return QVersionNumber::compare(lhs, rhs) == 0; }
+
+Q_REQUIRED_RESULT inline bool operator!=(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
+{ return QVersionNumber::compare(lhs, rhs) != 0; }
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QVersionNumber)
+
+#endif //QVERSIONNUMBER_H
diff --git a/src/corelib/tools/qversionnumber_p.h b/src/corelib/tools/qversionnumber_p.h
deleted file mode 100644
index 2da3103be3..0000000000
--- a/src/corelib/tools/qversionnumber_p.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL21$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** As a special exception, The Qt Company gives you certain additional
-** rights. These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVERSIONNUMBER_H
-#define QVERSIONNUMBER_H
-
-#include <QtCore/qnamespace.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qvector.h>
-#include <QtCore/qmetatype.h>
-#include <QtCore/qtypeinfo.h>
-
-QT_BEGIN_NAMESPACE
-
-class QVersionNumber;
-Q_CORE_EXPORT uint qHash(const QVersionNumber &key, uint seed = 0);
-
-#ifndef QT_NO_DATASTREAM
-Q_CORE_EXPORT QDataStream& operator<<(QDataStream &out, const QVersionNumber &version);
-Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QVersionNumber &version);
-#endif
-
-class QVersionNumber
-{
-public:
- inline QVersionNumber() Q_DECL_NOTHROW
- : m_segments()
- {}
- // compiler-generated copy/move ctor/assignment operators are ok
-
- inline explicit QVersionNumber(const QVector<int> &seg) Q_DECL_NOTHROW
- : m_segments(seg)
- {}
-#ifdef Q_COMPILER_RVALUE_REFS
- inline explicit QVersionNumber(QVector<int> &&seg) Q_DECL_NOTHROW
- : m_segments(qMove(seg))
- {}
-#endif
-#ifdef Q_COMPILER_INITIALIZER_LISTS
- inline QVersionNumber(std::initializer_list<int> args)
- : m_segments(args)
- {}
-#endif
-
- inline explicit QVersionNumber(int maj)
- { m_segments.reserve(1); m_segments << maj; }
-
- inline explicit QVersionNumber(int maj, int min)
- { m_segments.reserve(2); m_segments << maj << min; }
-
- inline explicit QVersionNumber(int maj, int min, int mic)
- { m_segments.reserve(3); m_segments << maj << min << mic; }
-
- inline bool isNull() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return m_segments.isEmpty(); }
-
- inline bool isNormalized() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return isNull() || m_segments.last() != 0; }
-
- inline int majorVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return segmentAt(0); }
-
- inline int minorVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return segmentAt(1); }
-
- inline int microVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return segmentAt(2); }
-
-#if defined(Q_COMPILER_REF_QUALIFIERS)
-# if defined(Q_CC_GNU)
- // required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941
-# pragma push_macro("Q_REQUIRED_RESULT")
-# undef Q_REQUIRED_RESULT
-# define Q_REQUIRED_RESULT
-# define Q_REQUIRED_RESULT_pushed
-# endif
- inline QVersionNumber normalized() const & Q_REQUIRED_RESULT
- {
- QVector<int> segs(m_segments);
- return normalizedImpl(segs);
- }
-
- inline QVersionNumber normalized() && Q_REQUIRED_RESULT
- {
- return normalizedImpl(m_segments);
- }
-
- inline QVector<int> segments() const & Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return m_segments; }
-
- inline QVector<int> segments() && Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return qMove(m_segments); }
-
-# ifdef Q_REQUIRED_RESULT_pushed
-# pragma pop_macro("Q_REQUIRED_RESULT")
-# endif
-#else
- inline QVersionNumber normalized() const Q_REQUIRED_RESULT
- {
- QVector<int> segs(m_segments);
- return normalizedImpl(segs);
- }
-
- inline QVector<int> segments() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return m_segments; }
-#endif
-
- inline int segmentAt(int index) const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return (m_segments.size() > index) ? m_segments.at(index) : 0; }
-
- inline int segmentCount() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
- { return m_segments.size(); }
-
- Q_CORE_EXPORT bool isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
-
- Q_CORE_EXPORT static int compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW Q_REQUIRED_RESULT;
-
- Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2) Q_REQUIRED_RESULT;
-
- Q_CORE_EXPORT QString toString() const Q_REQUIRED_RESULT;
- Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = 0) Q_REQUIRED_RESULT;
-
-private:
- Q_CORE_EXPORT static QVersionNumber normalizedImpl(QVector<int> &segs) Q_REQUIRED_RESULT;
-
-#ifndef QT_NO_DATASTREAM
- friend Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QVersionNumber &version);
-#endif
- friend Q_CORE_EXPORT uint qHash(const QVersionNumber &key, uint seed);
-
- QVector<int> m_segments;
-};
-
-Q_DECLARE_TYPEINFO(QVersionNumber, Q_MOVABLE_TYPE);
-
-#ifndef QT_NO_DEBUG_STREAM
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QVersionNumber &version);
-#endif
-
-Q_REQUIRED_RESULT inline bool operator> (const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
-{ return QVersionNumber::compare(lhs, rhs) > 0; }
-
-Q_REQUIRED_RESULT inline bool operator>=(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
-{ return QVersionNumber::compare(lhs, rhs) >= 0; }
-
-Q_REQUIRED_RESULT inline bool operator< (const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
-{ return QVersionNumber::compare(lhs, rhs) < 0; }
-
-Q_REQUIRED_RESULT inline bool operator<=(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
-{ return QVersionNumber::compare(lhs, rhs) <= 0; }
-
-Q_REQUIRED_RESULT inline bool operator==(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
-{ return QVersionNumber::compare(lhs, rhs) == 0; }
-
-Q_REQUIRED_RESULT inline bool operator!=(const QVersionNumber &lhs, const QVersionNumber &rhs) Q_DECL_NOTHROW
-{ return QVersionNumber::compare(lhs, rhs) != 0; }
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QVersionNumber)
-
-#endif //QVERSIONNUMBER_H
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index 5de0c09a4d..ed07f70e87 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -9,6 +9,7 @@ HEADERS += \
tools/qarraydatapointer.h \
tools/qbitarray.h \
tools/qbytearray.h \
+ tools/qbytearray_p.h \
tools/qbytearraylist.h \
tools/qbytearraymatcher.h \
tools/qbytedata_p.h \
@@ -26,6 +27,7 @@ HEADERS += \
tools/qeasingcurve.h \
tools/qfreelist_p.h \
tools/qhash.h \
+ tools/qhashfunctions.h \
tools/qiterator.h \
tools/qline.h \
tools/qlinkedlist.h \
@@ -73,7 +75,7 @@ HEADERS += \
tools/qunicodetools_p.h \
tools/qvarlengtharray.h \
tools/qvector.h \
- tools/qversionnumber_p.h
+ tools/qversionnumber.h
SOURCES += \
@@ -105,6 +107,7 @@ SOURCES += \
tools/qrect.cpp \
tools/qregexp.cpp \
tools/qrefcount.cpp \
+ tools/qringbuffer.cpp \
tools/qshareddata.cpp \
tools/qsharedpointer.cpp \
tools/qsimd.cpp \
@@ -152,10 +155,6 @@ else:SOURCES += tools/qelapsedtimer_generic.cpp
contains(QT_CONFIG, zlib) {
include($$PWD/../../3rdparty/zlib.pri)
- corelib_zlib_headers.files = $$PWD/../../3rdparty/zlib/zconf.h\
- $$PWD/../../3rdparty/zlib/zlib.h
- corelib_zlib_headers.path = $$[QT_INSTALL_HEADERS]/QtZlib
- INSTALLS += corelib_zlib_headers
} else {
include($$PWD/../../3rdparty/zlib_dependency.pri)
}
diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp
index 13c84db9ae..64a130e45a 100644
--- a/src/corelib/xml/qxmlstream.cpp
+++ b/src/corelib/xml/qxmlstream.cpp
@@ -2622,6 +2622,13 @@ QXmlStreamEntityDeclaration::~QXmlStreamEntityDeclaration()
{
}
+/*! \fn QXmlStreamStringRef::swap(QXmlStreamStringRef &other)
+ \since 5.6
+
+ Swaps this string reference's contents with \a other.
+ This function is very fast and never fails.
+*/
+
/*! \fn QStringRef QXmlStreamEntityDeclaration::name() const
Returns the entity name.
@@ -3013,7 +3020,8 @@ void QXmlStreamWriterPrivate::checkIfASCIICompatibleCodec()
#ifndef QT_NO_TEXTCODEC
Q_ASSERT(encoder);
// assumes ASCII-compatibility for all 8-bit encodings
- const QByteArray bytes = encoder->fromUnicode(QStringLiteral(" "));
+ QChar space = QLatin1Char(' ');
+ const QByteArray bytes = encoder->fromUnicode(&space, 1);
isCodecASCIICompatible = (bytes.count() == 1);
#else
isCodecASCIICompatible = true;
diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h
index 21188bc5e0..34f26cb953 100644
--- a/src/corelib/xml/qxmlstream.h
+++ b/src/corelib/xml/qxmlstream.h
@@ -53,13 +53,37 @@ public:
inline QXmlStreamStringRef(const QStringRef &aString)
:m_string(aString.string()?*aString.string():QString()), m_position(aString.position()), m_size(aString.size()){}
inline QXmlStreamStringRef(const QString &aString):m_string(aString), m_position(0), m_size(aString.size()){}
- inline ~QXmlStreamStringRef(){}
+
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ QXmlStreamStringRef(const QXmlStreamStringRef &other) // = default
+ : m_string(other.m_string), m_position(other.m_position), m_size(other.m_size) {}
+#ifdef Q_COMPILER_RVALUE_REFS
+ QXmlStreamStringRef(QXmlStreamStringRef &&other) Q_DECL_NOTHROW // = default
+ : m_string(std::move(other.m_string)), m_position(other.m_position), m_size(other.m_size) {}
+ QXmlStreamStringRef &operator=(QXmlStreamStringRef &&other) Q_DECL_NOTHROW // = default
+ { swap(other); return *this; }
+#endif
+ QXmlStreamStringRef &operator=(const QXmlStreamStringRef &other) // = default
+ { m_string = other.m_string; m_position = other.m_position; m_size = other.m_size; return *this; }
+ inline ~QXmlStreamStringRef() {} // ### this prevents (or deprecates) all the move/copy special member functions,
+ // ### that's why we need to provide them by hand above. We can't remove it in
+ // ### Qt 5, since that would change the way its passed to functions. In Qt 6, remove all.
+#endif // Qt < 6.0
+
+ void swap(QXmlStreamStringRef &other) Q_DECL_NOTHROW
+ {
+ qSwap(m_string, other.m_string);
+ qSwap(m_position, other.m_position);
+ qSwap(m_size, other.m_size);
+ }
+
inline void clear() { m_string.clear(); m_position = m_size = 0; }
inline operator QStringRef() const { return QStringRef(&m_string, m_position, m_size); }
inline const QString *string() const { return &m_string; }
inline int position() const { return m_position; }
inline int size() const { return m_size; }
};
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QXmlStreamStringRef)
class QXmlStreamReaderPrivate;
@@ -75,6 +99,28 @@ public:
QXmlStreamAttribute(const QString &qualifiedName, const QString &value);
QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value);
QXmlStreamAttribute(const QXmlStreamAttribute &);
+#ifdef Q_COMPILER_RVALUE_REFS
+ QXmlStreamAttribute(QXmlStreamAttribute &&other) Q_DECL_NOTHROW // = default;
+ : m_name(std::move(other.m_name)),
+ m_namespaceUri(std::move(other.m_namespaceUri)),
+ m_qualifiedName(std::move(other.m_qualifiedName)),
+ m_value(std::move(other.m_value)),
+ reserved(other.reserved),
+ m_isDefault(other.m_isDefault)
+ {
+ other.reserved = Q_NULLPTR;
+ }
+ QXmlStreamAttribute &operator=(QXmlStreamAttribute &&other) Q_DECL_NOTHROW // = default;
+ {
+ m_name = std::move(other.m_name);
+ m_namespaceUri = std::move(other.m_namespaceUri);
+ m_qualifiedName = std::move(other.m_qualifiedName);
+ m_value = std::move(other.m_value);
+ qSwap(reserved, other.reserved);
+ m_isDefault = other.m_isDefault;
+ return *this;
+ }
+#endif
QXmlStreamAttribute& operator=(const QXmlStreamAttribute &);
~QXmlStreamAttribute();
inline QStringRef namespaceUri() const { return m_namespaceUri; }