summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtFeature.cmake3
-rw-r--r--cmake/QtFlagHandlingHelpers.cmake4
-rw-r--r--cmake/QtInternalTargets.cmake12
-rw-r--r--cmake/QtModuleHelpers.cmake5
-rw-r--r--cmake/QtPublicWasmToolchainHelpers.cmake2
-rw-r--r--coin/instructions/cmake_run_ctest.yaml2
-rw-r--r--configure.cmake25
-rw-r--r--mkspecs/common/clang.conf2
-rw-r--r--mkspecs/common/g++-base.conf2
-rw-r--r--mkspecs/common/msvc-version.conf1
-rw-r--r--mkspecs/features/default_post.prf9
-rw-r--r--mkspecs/features/wasm/emcc_ver.prf2
-rw-r--r--qt_cmdline.cmake7
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java9
-rw-r--r--src/corelib/io/qdirentryinfo_p.h2
-rw-r--r--src/corelib/io/qstorageinfo.cpp33
-rw-r--r--src/corelib/io/qstorageinfo.h2
-rw-r--r--src/corelib/itemmodels/qrangemodel_impl.h37
-rw-r--r--src/corelib/kernel/qmetaobject.cpp2
-rw-r--r--src/corelib/kernel/qmetatype.h3
-rw-r--r--src/corelib/kernel/qobject_p_p.h2
-rw-r--r--src/corelib/kernel/qproperty.h38
-rw-r--r--src/corelib/kernel/qvariant.cpp5
-rw-r--r--src/corelib/serialization/qxmlstream.cpp12
-rw-r--r--src/corelib/serialization/qxmlstream_p.h2
-rw-r--r--src/corelib/text/qbytearray.cpp2
-rw-r--r--src/corelib/text/qstringalgorithms_p.h7
-rw-r--r--src/corelib/text/qutf8stringview.qdoc2
-rw-r--r--src/corelib/time/qtimezonelocale_data_p.h2870
-rw-r--r--src/corelib/tools/qarraydata.cpp17
-rw-r--r--src/corelib/tools/qarraydata.h10
-rw-r--r--src/corelib/tools/qarraydataops.h4
-rw-r--r--src/corelib/tools/qfreelist_p.h2
-rw-r--r--src/gui/accessible/linux/atspiadaptor.cpp9
-rw-r--r--src/gui/itemmodels/qfileinfogatherer.cpp2
-rw-r--r--src/gui/kernel/qaction.cpp2
-rw-r--r--src/gui/kernel/qshortcut.cpp2
-rw-r--r--src/gui/math3d/qquaternion.cpp27
-rw-r--r--src/gui/math3d/qquaternion.h10
-rw-r--r--src/gui/painting/qdatabuffer_p.h10
-rw-r--r--src/gui/painting/qpaintengine_raster_p.h4
-rw-r--r--src/gui/text/qfontdatabase.cpp43
-rw-r--r--src/gui/text/qtextformat.cpp11
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_p.h1
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp3
-rw-r--r--src/platformsupport/kmsconvenience/qkmsdevice.cpp501
-rw-r--r--src/platformsupport/kmsconvenience/qkmsdevice_p.h25
-rw-r--r--src/plugins/platforms/android/CMakeLists.txt5
-rw-r--r--src/plugins/platforms/android/androidjniaccessibility.cpp130
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfscontext.cpp6
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsintegration.cpp4
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsintegration_p.h1
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor_p.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp45
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice_p.h1
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp42
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration_p.h5
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp58
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen_p.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp8
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp35
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice_p.h7
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp5
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp21
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h6
-rw-r--r--src/plugins/styles/modernwindows/qwindows11style.cpp10
-rw-r--r--src/testlib/qtestcase.cpp2
-rw-r--r--src/testlib/qtestlog.cpp14
-rw-r--r--src/widgets/accessible/simplewidgets.cpp28
-rw-r--r--src/widgets/accessible/simplewidgets_p.h4
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp8
-rw-r--r--src/widgets/widgets/qscrollbar.cpp2
-rw-r--r--tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp40
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp13
-rw-r--r--tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp38
-rw-r--r--tests/auto/corelib/text/qlocale/tst_qlocale.cpp10
-rw-r--r--tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp12
-rw-r--r--tests/auto/testlib/selftests/CMakeLists.txt9
-rwxr-xr-xutil/locale_database/cldr2qlocalexml.py2
-rw-r--r--util/locale_database/localetools.py4
81 files changed, 2662 insertions, 1706 deletions
diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake
index 9cffa58229e..86b1201792d 100644
--- a/cmake/QtFeature.cmake
+++ b/cmake/QtFeature.cmake
@@ -1570,7 +1570,8 @@ function(qt_run_config_compile_test name)
endif()
if(arg_CXX_STANDARD)
- if(${arg_CXX_STANDARD} LESS 23 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20")
+ if((${arg_CXX_STANDARD} LESS 23 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20") AND
+ (${arg_CXX_STANDARD} LESS 26 OR ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25"))
set(CMAKE_CXX_STANDARD "${arg_CXX_STANDARD}")
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
endif()
diff --git a/cmake/QtFlagHandlingHelpers.cmake b/cmake/QtFlagHandlingHelpers.cmake
index 1747e7c7197..67d6f37e36d 100644
--- a/cmake/QtFlagHandlingHelpers.cmake
+++ b/cmake/QtFlagHandlingHelpers.cmake
@@ -359,7 +359,9 @@ endfunction()
function(qt_set_language_standards)
## Use the latest standard the compiler supports (same as qt_common.prf)
- if (QT_FEATURE_cxx2b)
+ if (QT_FEATURE_cxx2c)
+ set(CMAKE_CXX_STANDARD 26 PARENT_SCOPE)
+ elseif (QT_FEATURE_cxx2b)
set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
elseif (QT_FEATURE_cxx20)
set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE)
diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake
index a1f4cb7281c..1b0adccd5b5 100644
--- a/cmake/QtInternalTargets.cmake
+++ b/cmake/QtInternalTargets.cmake
@@ -94,6 +94,18 @@ function(qt_internal_set_warnings_are_errors_flags target target_scope)
${language_args}
)
endif()
+ if(APPLE)
+ qt_internal_add_compiler_dependent_flags("${target}" ${target_scope}
+ COMPILERS CLANG AppleClang
+ CONDITIONS $<BOOL:$<TARGET_PROPERTY:UNITY_BUILD>>
+ OPTIONS
+ -Wno-error=nullability-completeness
+ COMMON_CONDITIONS
+ ${common_conditions}
+ LANGUAGES
+ OBJCXX
+ )
+ endif()
# Other options are gated at compile time that are not likely to change between different build
# environments of other modules.
if(ANDROID)
diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake
index ecfdb740d71..f7ab67455ce 100644
--- a/cmake/QtModuleHelpers.cmake
+++ b/cmake/QtModuleHelpers.cmake
@@ -1554,8 +1554,9 @@ function(qt_describe_module target)
endif()
if(ANDROID)
string(APPEND targets_information
- "${indent5}\"api_version\": \"${QT_ANDROID_API_USED_FOR_JAVA}\",
-${indent5}\"ndk_version\": \"${ANDROID_NDK_REVISION}\",\n")
+ "${indent5}\"api_version\": \"${QT_ANDROID_API_USED_FOR_JAVA}\",\n"
+ "${indent5}\"ndk_version\": \"${ANDROID_NDK_REVISION}\",\n"
+ "${indent5}\"android_platform\": \"${ANDROID_PLATFORM}\",\n")
endif()
string(APPEND targets_information "${indent5}\"architecture\": \"${architecture}\",\n")
string(APPEND targets_information "${indent5}\"abi\": \"${TEST_arch_${architecture}_abi}\"\n")
diff --git a/cmake/QtPublicWasmToolchainHelpers.cmake b/cmake/QtPublicWasmToolchainHelpers.cmake
index ecdca052113..32309ed05ba 100644
--- a/cmake/QtPublicWasmToolchainHelpers.cmake
+++ b/cmake/QtPublicWasmToolchainHelpers.cmake
@@ -53,7 +53,7 @@ endfunction()
function(__qt_internal_get_emcc_recommended_version out_var)
# This version of Qt needs this version of emscripten.
- set(QT_EMCC_RECOMMENDED_VERSION "3.1.70")
+ set(QT_EMCC_RECOMMENDED_VERSION "4.0.7")
set(${out_var} "${QT_EMCC_RECOMMENDED_VERSION}" PARENT_SCOPE)
endfunction()
diff --git a/coin/instructions/cmake_run_ctest.yaml b/coin/instructions/cmake_run_ctest.yaml
index 0c58a83b209..43963fc172b 100644
--- a/coin/instructions/cmake_run_ctest.yaml
+++ b/coin/instructions/cmake_run_ctest.yaml
@@ -151,6 +151,8 @@ instructions:
userMessageOnFailure: >
Failed to copy LastTest.log to testresults directory.
executeOn: always
+ maxTimeInSeconds: 20
+ maxTimeBetweenOutput: 20
- type: Group
enable_if:
condition: runtime
diff --git a/configure.cmake b/configure.cmake
index 4ca5f7f07d2..92fe4dba448 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -292,6 +292,25 @@ int main(void)
CXX_STANDARD 23
)
+qt_config_compile_test(cxx2c
+ LABEL "C++2c support"
+ CODE
+"#if __cplusplus > 202302L
+// Compiler claims to support C++2c, trust it
+#else
+# error __cplusplus must be > 202302L (the value for C++23)
+#endif
+
+int main(void)
+{
+ /* BEGIN TEST: */
+ /* END TEST: */
+ return 0;
+}
+"
+ CXX_STANDARD 26
+)
+
qt_config_compiler_supports_flag_test(optimize_debug
LABEL "-Og support"
FLAG "-Og"
@@ -730,6 +749,12 @@ qt_feature("c++2b" PUBLIC
CONDITION QT_FEATURE_cxx20 AND (CMAKE_VERSION VERSION_GREATER_EQUAL "3.20") AND TEST_cxx2b
)
qt_feature_config("c++2b" QMAKE_PUBLIC_QT_CONFIG)
+qt_feature("c++2c" PUBLIC
+ LABEL "C++2c"
+ AUTODETECT OFF
+ CONDITION QT_FEATURE_cxx2b AND (CMAKE_VERSION VERSION_GREATER_EQUAL "3.25") AND TEST_cxx2c
+)
+qt_feature_config("c++2c" QMAKE_PUBLIC_QT_CONFIG)
set(__qt_ltcg_detected FALSE)
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
set(__qt_ltcg_detected TRUE)
diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf
index 6eb08a9d2fa..82c6173a037 100644
--- a/mkspecs/common/clang.conf
+++ b/mkspecs/common/clang.conf
@@ -36,11 +36,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
+QMAKE_CXXFLAGS_CXX2C = -std=c++2c
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
+QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c
QMAKE_LFLAGS_CXX11 =
QMAKE_LFLAGS_CXX14 =
diff --git a/mkspecs/common/g++-base.conf b/mkspecs/common/g++-base.conf
index d392879f66d..e12e41506ae 100644
--- a/mkspecs/common/g++-base.conf
+++ b/mkspecs/common/g++-base.conf
@@ -34,11 +34,13 @@ QMAKE_CXXFLAGS_CXX14 = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
QMAKE_CXXFLAGS_CXX2A = -std=c++2a
QMAKE_CXXFLAGS_CXX2B = -std=c++2b
+QMAKE_CXXFLAGS_CXX2C = -std=c++2c
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b
+QMAKE_CXXFLAGS_GNUCXX2C = -std=gnu++2c
QMAKE_LFLAGS_CXX11 =
QMAKE_LFLAGS_CXX14 =
QMAKE_LFLAGS_CXX1Z =
diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf
index 303b341e9d7..0130542ddb9 100644
--- a/mkspecs/common/msvc-version.conf
+++ b/mkspecs/common/msvc-version.conf
@@ -121,6 +121,7 @@ greaterThan(QMAKE_MSC_VER, 1919) {
MSVC_TOOLSET_VER = 142
QMAKE_CXXFLAGS_CXX2A = -std:c++latest
QMAKE_CXXFLAGS_CXX2B = -std:c++latest
+ QMAKE_CXXFLAGS_CXX2C = -std:c++latest
QMAKE_CXXFLAGS += -Zc:externConstexpr
}
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index a44d03c91bb..cf48bfda07f 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -124,17 +124,18 @@ breakpad {
c++17: CONFIG += c++1z
c++20: CONFIG += c++2a
c++23: CONFIG += c++2b
-c++latest: CONFIG *= c++2b c++2a c++1z c++14 c++11
+c++latest: CONFIG *= c++2c c++2b c++2a c++1z c++14 c++11
-!c++1z:!c++2a:!c++2b {
+!c++1z:!c++2a:!c++2b:!c++2c {
# Qt requires C++17
QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "")
!greaterThan(QT_COMPILER_STDCXX_no_L, 201402): CONFIG += c++1z
}
-c++1z|c++2a|c++2b {
+c++1z|c++2a|c++2b|c++2c {
# Disable special compiler flags for host builds
!host_build|!cross_compile {
- c++2b: cxxstd = CXX2B
+ c++2c: cxxstd = CXX2C
+ else:c++2b: cxxstd = CXX2B
else:c++2a: cxxstd = CXX2A
else: cxxstd = CXX1Z
} else {
diff --git a/mkspecs/features/wasm/emcc_ver.prf b/mkspecs/features/wasm/emcc_ver.prf
index 2f801228797..bb59844c4d5 100644
--- a/mkspecs/features/wasm/emcc_ver.prf
+++ b/mkspecs/features/wasm/emcc_ver.prf
@@ -1,5 +1,5 @@
defineReplace(qtEmccRecommendedVersion) {
- return (3.1.70)
+ return (4.0.7)
}
defineReplace(qtSystemEmccVersion) {
diff --git a/qt_cmdline.cmake b/qt_cmdline.cmake
index 3abd265e9c7..8f68a40f3ff 100644
--- a/qt_cmdline.cmake
+++ b/qt_cmdline.cmake
@@ -174,12 +174,19 @@ function(qt_commandline_cxxstd arg val nextok)
if(val MATCHES "(c\\+\\+)?(17|1z)")
qtConfCommandlineDisableFeature(c++20)
qtConfCommandlineDisableFeature(c++2b)
+ qtConfCommandlineDisableFeature(c++2c)
elseif(val MATCHES "(c\\+\\+)?(20|2a)")
qtConfCommandlineEnableFeature(c++20)
qtConfCommandlineDisableFeature(c++2b)
+ qtConfCommandlineDisableFeature(c++2c)
elseif(val MATCHES "(c\\+\\+)?(23|2b)")
qtConfCommandlineEnableFeature(c++20)
qtConfCommandlineEnableFeature(c++2b)
+ qtConfCommandlineDisableFeature(c++2c)
+ elseif(val MATCHES "(c\\+\\+)?(2c)")
+ qtConfCommandlineEnableFeature(c++20)
+ qtConfCommandlineEnableFeature(c++2b)
+ qtConfCommandlineEnableFeature(c++2c)
else()
qtConfAddError("Invalid argument '${val}' to command line parameter '${arg}'")
endif()
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java
index 542d05627c9..61f8f4b8d53 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtAccessibilityDelegate.java
@@ -28,10 +28,6 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate
// all low positive ints should be fine.
static final int INVALID_ID = 333; // half evil
- // The platform might ask for the class implementing the "view".
- // Pretend to be an inner class of the QtSurface.
- private static final String DEFAULT_CLASS_NAME = "$VirtualChild";
-
private View m_view = null;
private AccessibilityManager m_manager;
private QtLayout m_layout;
@@ -247,7 +243,7 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate
AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT);
event.setEnabled(true);
- event.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME);
+ event.setClassName(getNodeForVirtualViewId(viewId).getClassName());
event.setContentDescription(value);
@@ -323,7 +319,7 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate
final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
event.setEnabled(true);
- event.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME);
+ event.setClassName(getNodeForVirtualViewId(virtualViewId).getClassName());
event.setContentDescription(QtNativeAccessibility.descriptionForAccessibleObject(virtualViewId));
if (event.getText().isEmpty() && TextUtils.isEmpty(event.getContentDescription()))
@@ -419,7 +415,6 @@ class QtAccessibilityDelegate extends View.AccessibilityDelegate
final AccessibilityNodeInfo node = AccessibilityNodeInfo.obtain();
- node.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME);
node.setPackageName(m_view.getContext().getPackageName());
if (m_layout.getChildCount() == 0 || !QtNativeAccessibility.populateNode(virtualViewId, node)) {
diff --git a/src/corelib/io/qdirentryinfo_p.h b/src/corelib/io/qdirentryinfo_p.h
index 7ed5391ff04..8864255c425 100644
--- a/src/corelib/io/qdirentryinfo_p.h
+++ b/src/corelib/io/qdirentryinfo_p.h
@@ -148,7 +148,7 @@ private:
QFileSystemEntry entry;
QFileSystemMetaData metaData;
- std::optional<QFileInfo> fileInfoOpt;
+ std::optional<QFileInfo> fileInfoOpt = std::nullopt;
};
QT_END_NAMESPACE
diff --git a/src/corelib/io/qstorageinfo.cpp b/src/corelib/io/qstorageinfo.cpp
index 950af69ab82..f3e4dc52b9b 100644
--- a/src/corelib/io/qstorageinfo.cpp
+++ b/src/corelib/io/qstorageinfo.cpp
@@ -12,6 +12,7 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcStorageInfo, "qt.core.qstorageinfo", QtWarningMsg)
QT_IMPL_METATYPE_EXTERN(QStorageInfo)
+QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QStorageInfoPrivate)
/*!
\class QStorageInfo
@@ -75,7 +76,7 @@ QStorageInfo::QStorageInfo()
\sa setPath()
*/
QStorageInfo::QStorageInfo(const QString &path)
- : d(new QStorageInfoPrivate)
+ : QStorageInfo()
{
setPath(path);
}
@@ -85,39 +86,45 @@ QStorageInfo::QStorageInfo(const QString &path)
containing the \a dir folder.
*/
QStorageInfo::QStorageInfo(const QDir &dir)
- : d(new QStorageInfoPrivate)
+ : QStorageInfo(dir.absolutePath())
{
- setPath(dir.absolutePath());
}
/*!
Constructs a new QStorageInfo object that is a copy of the \a other QStorageInfo object.
*/
QStorageInfo::QStorageInfo(const QStorageInfo &other)
- : d(other.d)
-{
-}
+ = default;
+
+/*!
+ \since 6.10
+ \fn QStorageInfo::QStorageInfo(QStorageInfo &&other)
+
+ Move-constructs a new QStorageInfo from \a other.
+
+ The moved-from object \a other is placed in a partially-formed state, in
+ which the only valid operations are destruction and assignment of a new
+ value.
+*/
/*!
Destroys the QStorageInfo object and frees its resources.
*/
QStorageInfo::~QStorageInfo()
-{
-}
+ = default;
/*!
Makes a copy of the QStorageInfo object \a other and assigns it to this QStorageInfo object.
*/
QStorageInfo &QStorageInfo::operator=(const QStorageInfo &other)
-{
- d = other.d;
- return *this;
-}
+ = default;
/*!
\fn QStorageInfo &QStorageInfo::operator=(QStorageInfo &&other)
- Assigns \a other to this QStorageInfo instance.
+ Move-assigns \a other to this QStorageInfo instance.
+
+ The moved-from object \a other is placed in a valid, but unspecified state.
*/
/*!
diff --git a/src/corelib/io/qstorageinfo.h b/src/corelib/io/qstorageinfo.h
index 2d7c60ec915..48aed19e576 100644
--- a/src/corelib/io/qstorageinfo.h
+++ b/src/corelib/io/qstorageinfo.h
@@ -17,6 +17,7 @@ QT_BEGIN_NAMESPACE
class QDebug;
class QStorageInfoPrivate;
+QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QStorageInfoPrivate)
class Q_CORE_EXPORT QStorageInfo
{
public:
@@ -24,6 +25,7 @@ public:
explicit QStorageInfo(const QString &path);
explicit QStorageInfo(const QDir &dir);
QStorageInfo(const QStorageInfo &other);
+ QStorageInfo(QStorageInfo &&) noexcept = default;
~QStorageInfo();
QStorageInfo &operator=(const QStorageInfo &other);
diff --git a/src/corelib/itemmodels/qrangemodel_impl.h b/src/corelib/itemmodels/qrangemodel_impl.h
index 849d6084b80..38378fdcc64 100644
--- a/src/corelib/itemmodels/qrangemodel_impl.h
+++ b/src/corelib/itemmodels/qrangemodel_impl.h
@@ -952,7 +952,7 @@ public:
if constexpr (multi_role::int_key)
return std::as_const(value).find(Qt::ItemDataRole(role));
else
- return std::as_const(value).find(roleNames().value(role));
+ return std::as_const(value).find(itemModel().roleNames().value(role));
}();
if (it != value.cend()) {
result = QRangeModelDetails::value(it);
@@ -981,13 +981,20 @@ public:
if constexpr (std::is_convertible_v<value_type, decltype(result)>) {
result = value;
} else {
+ const auto roleNames = [this]() -> QHash<int, QByteArray> {
+ Q_UNUSED(this);
+ if constexpr (!multi_role::int_key)
+ return itemModel().roleNames();
+ else
+ return {};
+ }();
for (auto it = std::cbegin(value); it != std::cend(value); ++it) {
- int role = [this, key = QRangeModelDetails::key(it)]() {
- Q_UNUSED(this);
+ const int role = [&roleNames, key = QRangeModelDetails::key(it)]() {
+ Q_UNUSED(roleNames);
if constexpr (multi_role::int_key)
return int(key);
else
- return roleNames().key(key.toUtf8(), -1);
+ return roleNames.key(key.toUtf8(), -1);
}();
if (role != -1)
@@ -999,7 +1006,7 @@ public:
tried = true;
using meta_type = QRangeModelDetails::wrapped_t<value_type>;
const QMetaObject &mo = meta_type::staticMetaObject;
- for (auto &&[role, roleName] : roleNames().asKeyValueRange()) {
+ for (auto &&[role, roleName] : itemModel().roleNames().asKeyValueRange()) {
QVariant data;
if constexpr (std::is_base_of_v<QObject, meta_type>) {
if (value)
@@ -1064,19 +1071,26 @@ public:
Qt::ItemDataRole roleToSet = Qt::ItemDataRole(role);
// If there is an entry for EditRole, overwrite that; otherwise,
// set the entry for DisplayRole.
+ const auto roleNames = [this]() -> QHash<int, QByteArray> {
+ Q_UNUSED(this);
+ if constexpr (!multi_role::int_key)
+ return itemModel().roleNames();
+ else
+ return {};
+ }();
if (role == Qt::EditRole) {
if constexpr (multi_role::int_key) {
if (target.find(roleToSet) == target.end())
roleToSet = Qt::DisplayRole;
} else {
- if (target.find(roleNames().value(roleToSet)) == target.end())
+ if (target.find(roleNames.value(roleToSet)) == target.end())
roleToSet = Qt::DisplayRole;
}
}
if constexpr (multi_role::int_key)
return write(target[roleToSet], data);
else
- return write(target[roleNames().value(roleToSet)], data);
+ return write(target[roleNames.value(roleToSet)], data);
} else if (role == Qt::DisplayRole || role == Qt::EditRole) {
return write(target, data);
}
@@ -1108,7 +1122,9 @@ public:
if constexpr (multi_role()) {
using key_type = typename value_type::key_type;
tried = true;
- const auto roleName = [map = roleNames()](int role) { return map.value(role); };
+ const auto roleName = [map = itemModel().roleNames()](int role) {
+ return map.value(role);
+ };
// transactional: only update target if all values from data
// can be stored. Storing never fails with int-keys.
@@ -1148,8 +1164,9 @@ public:
else // can't copy - targetCopy is now a pointer
return &origin;
}(target);
+ const auto roleNames = itemModel().roleNames();
for (auto &&[role, value] : data.asKeyValueRange()) {
- const QByteArray roleName = roleNames().value(role);
+ const QByteArray roleName = roleNames.value(role);
bool written = false;
if constexpr (std::is_base_of_v<QObject, meta_type>) {
if (targetCopy)
@@ -1547,7 +1564,7 @@ protected:
QMetaProperty roleProperty(int role) const
{
const QMetaObject *mo = &ItemType::staticMetaObject;
- const QByteArray roleName = roleNames().value(role);
+ const QByteArray roleName = itemModel().roleNames().value(role);
if (const int index = mo->indexOfProperty(roleName.data()); index >= 0)
return mo->property(index);
return {};
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index b48922daeab..2356611a5cf 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -2362,7 +2362,7 @@ QList<QByteArray> QMetaMethod::parameterNames() const
\note In Qt 7, this function will return a null pointer for constructors.
- \sa returnType(), QMetaType::type()
+ \sa returnType(), QMetaType::name()
*/
const char *QMetaMethod::typeName() const
{
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 0ec95c3bb99..d31566b4e95 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -2103,6 +2103,9 @@ public:
while (begin != end && is_space(*(end - 1)))
end--;
+ if (begin == end)
+ return len;
+
// Convert 'char const *' into 'const char *'. Start at index 1,
// not 0, because 'const char *' is already OK.
const char *cst = begin + 1;
diff --git a/src/corelib/kernel/qobject_p_p.h b/src/corelib/kernel/qobject_p_p.h
index 1b05f20b827..fdc0f1e8392 100644
--- a/src/corelib/kernel/qobject_p_p.h
+++ b/src/corelib/kernel/qobject_p_p.h
@@ -143,7 +143,7 @@ struct QObjectPrivate::ConnectionData
QAtomicPointer<SignalVector> signalVector;
Connection *senders = nullptr;
Sender *currentSender = nullptr; // object currently activating the object
- std::atomic<TaggedSignalVector> orphaned = {};
+ std::atomic<TaggedSignalVector> orphaned = {nullptr};
~ConnectionData()
{
diff --git a/src/corelib/kernel/qproperty.h b/src/corelib/kernel/qproperty.h
index f4e7942e947..a3c4e109adf 100644
--- a/src/corelib/kernel/qproperty.h
+++ b/src/corelib/kernel/qproperty.h
@@ -299,7 +299,7 @@ public:
auto This = static_cast<QPropertyChangeHandler<Functor>*>(self);
This->m_handler();
})
- , m_handler(handler)
+ , m_handler(std::move(handler))
{
}
@@ -310,7 +310,7 @@ public:
auto This = static_cast<QPropertyChangeHandler<Functor>*>(self);
This->m_handler();
})
- , m_handler(handler)
+ , m_handler(std::move(handler))
{
setSource(property);
}
@@ -329,7 +329,7 @@ public:
auto This = static_cast<QPropertyNotifier *>(self);
This->m_handler();
})
- , m_handler(handler)
+ , m_handler(std::move(handler))
{
}
@@ -341,7 +341,7 @@ public:
auto This = static_cast<QPropertyNotifier *>(self);
This->m_handler();
})
- , m_handler(handler)
+ , m_handler(std::move(handler))
{
setSource(property);
}
@@ -516,7 +516,7 @@ public:
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
- return QPropertyChangeHandler<Functor>(*this, f);
+ return QPropertyChangeHandler<Functor>(*this, std::move(f));
}
template<typename Functor>
@@ -524,14 +524,14 @@ public:
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
f();
- return onValueChanged(f);
+ return onValueChanged(std::move(f));
}
template<typename Functor>
QPropertyNotifier addNotifier(Functor f)
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
- return QPropertyNotifier(*this, f);
+ return QPropertyNotifier(*this, std::move(f));
}
const QtPrivate::QPropertyBindingData &bindingData() const { return d; }
@@ -785,7 +785,7 @@ public:
template<typename Functor>
QPropertyChangeHandler<Functor> onValueChanged(Functor f) const
{
- QPropertyChangeHandler<Functor> handler(f);
+ QPropertyChangeHandler<Functor> handler(std::move(f));
observe(&handler);
return handler;
}
@@ -794,13 +794,13 @@ public:
QPropertyChangeHandler<Functor> subscribe(Functor f) const
{
f();
- return onValueChanged(f);
+ return onValueChanged(std::move(f));
}
template<typename Functor>
QPropertyNotifier addNotifier(Functor f)
{
- QPropertyNotifier handler(f);
+ QPropertyNotifier handler(std::move(f));
observe(&handler);
return handler;
}
@@ -1046,19 +1046,19 @@ public:
template<typename Functor>
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
{
- return QBindable<T>(aliasedProperty(), iface).onValueChanged(f);
+ return QBindable<T>(aliasedProperty(), iface).onValueChanged(std::move(f));
}
template<typename Functor>
QPropertyChangeHandler<Functor> subscribe(Functor f)
{
- return QBindable<T>(aliasedProperty(), iface).subscribe(f);
+ return QBindable<T>(aliasedProperty(), iface).subscribe(std::move(f));
}
template<typename Functor>
QPropertyNotifier addNotifier(Functor f)
{
- return QBindable<T>(aliasedProperty(), iface).addNotifier(f);
+ return QBindable<T>(aliasedProperty(), iface).addNotifier(std::move(f));
}
bool isValid() const
@@ -1238,7 +1238,7 @@ public:
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
- return QPropertyChangeHandler<Functor>(*this, f);
+ return QPropertyChangeHandler<Functor>(*this, std::move(f));
}
template<typename Functor>
@@ -1246,14 +1246,14 @@ public:
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
f();
- return onValueChanged(f);
+ return onValueChanged(std::move(f));
}
template<typename Functor>
QPropertyNotifier addNotifier(Functor f)
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
- return QPropertyNotifier(*this, f);
+ return QPropertyNotifier(*this, std::move(f));
}
const QtPrivate::QPropertyBindingData &bindingData() const
@@ -1386,7 +1386,7 @@ public:
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
- return QPropertyChangeHandler<Functor>(*this, f);
+ return QPropertyChangeHandler<Functor>(*this, std::move(f));
}
template<typename Functor>
@@ -1394,14 +1394,14 @@ public:
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
f();
- return onValueChanged(f);
+ return onValueChanged(std::move(f));
}
template<typename Functor>
QPropertyNotifier addNotifier(Functor f)
{
static_assert(std::is_invocable_v<Functor>, "Functor callback must be callable without any parameters");
- return QPropertyNotifier(*this, f);
+ return QPropertyNotifier(*this, std::move(f));
}
QtPrivate::QPropertyBindingData &bindingData() const
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index 3a2dcb4a12d..e91797a3ffe 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -321,11 +321,6 @@ static QVariant::Private clonePrivate(const QVariant::Private &other)
\compares equality
- Because C++ forbids unions from including types that have
- non-default constructors or destructors, most interesting Qt
- classes cannot be used in unions. Without QVariant, this would be
- a problem for QObject::property() and for database work, etc.
-
A QVariant object holds a single value of a single typeId() at a
time. (Some types are multi-valued, for example a string list.)
You can find out what type, T, the variant holds, convert it to a
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
index ad9e1089bfe..b4751d1324f 100644
--- a/src/corelib/serialization/qxmlstream.cpp
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -1081,10 +1081,12 @@ void QXmlStreamReaderPrivate::parseEntity(const QString &value)
inline void QXmlStreamReaderPrivate::reallocateStack()
{
stack_size <<= 1;
- sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value)));
- Q_CHECK_PTR(sym_stack);
- state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int)));
- Q_CHECK_PTR(state_stack);
+ void *p = realloc(sym_stack, stack_size * sizeof(Value));
+ Q_CHECK_PTR(p);
+ sym_stack = static_cast<Value*>(p);
+ p = realloc(state_stack, stack_size * sizeof(int));
+ Q_CHECK_PTR(p);
+ state_stack = static_cast<int*>(p);
}
@@ -2036,7 +2038,7 @@ void QXmlStreamReaderPrivate::startDocument()
// unspecified (i.e. System) encoding.
QString buf = decoder(QByteArrayView(rawReadBuffer).first(nbytesread));
if (!decoder.hasError())
- readBuffer = buf;
+ readBuffer = std::move(buf);
}
}
}
diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
index 4bba6bcc765..bd8770200db 100644
--- a/src/corelib/serialization/qxmlstream_p.h
+++ b/src/corelib/serialization/qxmlstream_p.h
@@ -140,8 +140,8 @@ public:
if (tos + extraCapacity + 1 > cap) {
cap = qMax(tos + extraCapacity + 1, cap << 1 );
void *ptr = realloc(static_cast<void *>(data), cap * sizeof(T));
+ Q_CHECK_PTR(ptr);
data = reinterpret_cast<T *>(ptr);
- Q_CHECK_PTR(data);
}
}
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index 3e27f0260d3..91550056101 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -4933,7 +4933,7 @@ QByteArray QByteArray::fromEcmaUint8Array(emscripten::val uint8array)
\since 6.5
\ingroup platform-type-conversions
- \sa toEcmaUint8Array()
+ \sa fromEcmaUint8Array()
*/
emscripten::val QByteArray::toEcmaUint8Array()
{
diff --git a/src/corelib/text/qstringalgorithms_p.h b/src/corelib/text/qstringalgorithms_p.h
index a017ec58d49..c873858c59b 100644
--- a/src/corelib/text/qstringalgorithms_p.h
+++ b/src/corelib/text/qstringalgorithms_p.h
@@ -149,7 +149,10 @@ template <typename StringType> struct QStringAlgorithms
return src.size() + adjust;
}
- static inline void replace_detaching(StringType &src, qsizetype bsize,
+ // Instead of detaching, i.e. copying the whole data array then performing the
+ // replacement, create a new buffer, copy `src` and `after` to it and swap it
+ // with `src`.
+ static inline void replace_into_copy(StringType &src, qsizetype bsize,
ViewType after, QSpan<const qsizetype> indices,
qsizetype newlen)
{
@@ -237,7 +240,7 @@ template <typename StringType> struct QStringAlgorithms
// Instead of detaching (which would copy the whole data array) then
// performing the replacement, allocate a new string and copy the data
// over from `src` and `after` as needed.
- replace_detaching(src, bsize, after, indices, newlen);
+ replace_into_copy(src, bsize, after, indices, newlen);
return;
}
diff --git a/src/corelib/text/qutf8stringview.qdoc b/src/corelib/text/qutf8stringview.qdoc
index 6261927f682..fea4ae97761 100644
--- a/src/corelib/text/qutf8stringview.qdoc
+++ b/src/corelib/text/qutf8stringview.qdoc
@@ -108,7 +108,7 @@
QBasicUtf8StringView. Please do not use the template class's name in your
source code.
- \sa QAnyStringView, QUtf8StringView, QString
+ \sa QAnyStringView, QStringView, QLatin1StringView, QString
*/
/*!
diff --git a/src/corelib/time/qtimezonelocale_data_p.h b/src/corelib/time/qtimezonelocale_data_p.h
index 9afb12406c0..9e179369254 100644
--- a/src/corelib/time/qtimezonelocale_data_p.h
+++ b/src/corelib/time/qtimezonelocale_data_p.h
@@ -58,7 +58,7 @@ namespace QtTimeZoneLocale {
// GENERATED PART STARTS HERE
/*
- This part of the file was generated on 2025-06-17 from the
+ This part of the file was generated on 2025-07-01 from the
Common Locale Data Repository v47
http://www.unicode.org/cldr/
@@ -49804,7 +49804,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 5130, 88357, 11, }, // Africa/Dar_es_Salaam
{ 687, 5043, 88368, 6, }, // Africa/Djibouti
{ 687, 5243, 88374, 5, }, // Africa/Douala
- { 687, 5166, 221031, 9, }, // Africa/El_Aaiun
+ { 687, 5166, 88379, 8, }, // Africa/El_Aaiun
{ 687, 6853, 88387, 9, }, // Africa/Freetown
{ 687, 4906, 88396, 7, }, // Africa/Gaborone
{ 687, 5015, 88403, 5, }, // Africa/Harare
@@ -49925,7 +49925,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 5897, 89278, 7, }, // America/Marigot
{ 687, 5805, 89285, 9, }, // America/Martinique
{ 687, 8184, 89294, 9, }, // America/Matamoros
- { 687, 2917, 221040, 8, }, // America/Mazatlan
+ { 687, 2917, 221031, 8, }, // America/Mazatlan
{ 687, 8202, 89312, 8, }, // America/Menominee
{ 687, 8220, 31158, 6, }, // America/Merida
{ 687, 8235, 89320, 12, }, // America/Metlakatla
@@ -50012,7 +50012,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 4540, 89984, 7, }, // Asia/Damascus
{ 687, 1093, 89991, 4, }, // Asia/Dhaka
{ 687, 6192, 89995, 4, }, // Asia/Dili
- { 687, 3596, 221048, 3, }, // Asia/Dubai
+ { 687, 3596, 221039, 3, }, // Asia/Dubai
{ 687, 6159, 90003, 7, }, // Asia/Dushanbe
{ 687, 8636, 90010, 11, }, // Asia/Famagusta
{ 687, 8651, 90021, 5, }, // Asia/Gaza
@@ -50024,7 +50024,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 7006, 90073, 7, }, // Asia/Jakarta
{ 687, 6992, 31943, 7, }, // Asia/Jayapura
{ 687, 1290, 90080, 6, }, // Asia/Jerusalem
- { 687, 3560, 221051, 4, }, // Asia/Kabul
+ { 687, 3560, 221042, 4, }, // Asia/Kabul
{ 687, 4316, 90091, 7, }, // Asia/Kamchatka
{ 687, 4239, 31972, 5, }, // Asia/Karachi
{ 687, 1185, 90098, 8, }, // Asia/Kathmandu
@@ -50080,7 +50080,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 1395, 90429, 5, }, // Atlantic/Faroe
{ 687, 8736, 90434, 5, }, // Atlantic/Madeira
{ 687, 2748, 90439, 9, }, // Atlantic/Reykjavik
- { 687, 7272, 221055, 13, }, // Atlantic/South_Georgia
+ { 687, 7272, 221046, 13, }, // Atlantic/South_Georgia
{ 687, 6821, 90463, 11, }, // Atlantic/St_Helena
{ 687, 6644, 90474, 7, }, // Atlantic/Stanley
{ 687, 1670, 90481, 6, }, // Australia/Adelaide
@@ -50094,7 +50094,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 1727, 90537, 8, }, // Australia/Melbourne
{ 687, 1762, 90545, 4, }, // Australia/Perth
{ 687, 1463, 32494, 5, }, // Australia/Sydney
- { 687, 6441, 221068, 9, }, // Europe/Amsterdam
+ { 687, 6441, 221059, 9, }, // Europe/Amsterdam
{ 687, 6216, 90559, 6, }, // Europe/Andorra
{ 687, 3620, 90565, 10, }, // Europe/Astrakhan
{ 687, 2300, 90575, 5, }, // Europe/Athens
@@ -50128,7 +50128,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 6410, 90773, 6, }, // Europe/Monaco
{ 687, 3537, 90779, 6, }, // Europe/Moscow
{ 687, 6458, 90785, 5, }, // Europe/Oslo
- { 687, 4284, 221077, 4, }, // Europe/Paris
+ { 687, 4284, 221068, 4, }, // Europe/Paris
{ 687, 6424, 90790, 10, }, // Europe/Podgorica
{ 687, 6275, 90800, 5, }, // Europe/Prague
{ 687, 8837, 90805, 4, }, // Europe/Riga
@@ -50154,7 +50154,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 6540, 90946, 9, }, // Europe/Zurich
{ 687, 5078, 90955, 11, }, // Indian/Antananarivo
{ 687, 6947, 90966, 5, }, // Indian/Chagos
- { 687, 6046, 221081, 8, }, // Indian/Christmas
+ { 687, 6046, 221072, 8, }, // Indian/Christmas
{ 687, 6063, 90978, 5, }, // Indian/Cocos
{ 687, 5029, 90983, 6, }, // Indian/Comoro
{ 687, 6661, 90989, 7, }, // Indian/Kerguelen
@@ -50177,7 +50177,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 6696, 91094, 7, }, // Pacific/Gambier
{ 687, 3822, 91101, 10, }, // Pacific/Guadalcanal
{ 687, 6018, 31112, 4, }, // Pacific/Guam
- { 687, 3049, 221089, 5, }, // Pacific/Kanton
+ { 687, 3049, 221080, 5, }, // Pacific/Kanton
{ 687, 3998, 33132, 10, }, // Pacific/Kiritimati
{ 687, 7019, 91126, 6, }, // Pacific/Kosrae
{ 687, 2842, 91132, 10, }, // Pacific/Kwajalein
@@ -50188,7 +50188,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 687, 7132, 91165, 4, }, // Pacific/Niue
{ 687, 4168, 91169, 7, }, // Pacific/Norfolk
{ 687, 7098, 91176, 6, }, // Pacific/Noumea
- { 687, 3126, 221094, 9, }, // Pacific/Pago_Pago
+ { 687, 3126, 221085, 9, }, // Pacific/Pago_Pago
{ 687, 7155, 91191, 4, }, // Pacific/Palau
{ 687, 7194, 33210, 8, }, // Pacific/Pitcairn
{ 687, 3096, 91195, 6, }, // Pacific/Pohnpei
@@ -50203,650 +50203,650 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 688, 6788, 195501, 6, }, // Africa/Abidjan Venetian/Latin/Italy
{ 688, 6760, 74129, 4, }, // Africa/Accra
{ 688, 5059, 35821, 10, }, // Africa/Addis_Ababa
- { 688, 7420, 221103, 6, }, // Africa/Algiers
- { 688, 14, 221109, 6, }, // Africa/Asmara
- { 688, 5257, 221115, 6, }, // Africa/Bangui
- { 688, 7435, 221121, 5, }, // Africa/Bissau
- { 688, 4922, 221126, 9, }, // Africa/Bujumbura
+ { 688, 7420, 221094, 6, }, // Africa/Algiers
+ { 688, 14, 221100, 6, }, // Africa/Asmara
+ { 688, 5257, 221106, 6, }, // Africa/Bangui
+ { 688, 7435, 221112, 5, }, // Africa/Bissau
+ { 688, 4922, 221117, 9, }, // Africa/Bujumbura
{ 688, 2320, 161877, 8, }, // Africa/Cairo
- { 688, 4117, 221135, 10, }, // Africa/Casablanca
+ { 688, 4117, 221126, 10, }, // Africa/Casablanca
{ 688, 7449, 166781, 5, }, // Africa/Ceuta
{ 688, 6773, 157976, 7, }, // Africa/Conakry
{ 688, 5130, 21354, 12, }, // Africa/Dar_es_Salaam
{ 688, 5043, 158501, 6, }, // Africa/Djibouti
{ 688, 5243, 21372, 5, }, // Africa/Douala
{ 688, 5166, 6393, 7, }, // Africa/El_Aaiun
- { 688, 5151, 221145, 7, }, // Africa/Kampala
+ { 688, 5151, 221136, 7, }, // Africa/Kampala
{ 688, 4524, 157994, 6, }, // Africa/Khartoum
{ 688, 6869, 20418, 4, }, // Africa/Lome
- { 688, 4939, 221152, 10, }, // Africa/Lubumbashi
- { 688, 5197, 221162, 6, }, // Africa/Maseru
- { 688, 5182, 221168, 7, }, // Africa/Mbabane
- { 688, 5113, 221175, 8, }, // Africa/Mogadishu
+ { 688, 4939, 221143, 10, }, // Africa/Lubumbashi
+ { 688, 5197, 221153, 6, }, // Africa/Maseru
+ { 688, 5182, 221159, 7, }, // Africa/Mbabane
+ { 688, 5113, 221166, 8, }, // Africa/Mogadishu
{ 688, 5271, 195575, 6, }, // Africa/Ndjamena
{ 688, 6803, 147724, 8, }, // Africa/Nouakchott
- { 688, 6727, 221183, 8, }, // Africa/Ouagadougou
+ { 688, 6727, 221174, 8, }, // Africa/Ouagadougou
{ 688, 5225, 26542, 10, }, // Africa/Porto-Novo
- { 688, 4435, 221191, 15, }, // Africa/Sao_Tome
+ { 688, 4435, 221182, 15, }, // Africa/Sao_Tome
{ 688, 2866, 164486, 7, }, // Africa/Tripoli
- { 688, 6554, 221206, 6, }, // Africa/Tunis
+ { 688, 6554, 221197, 6, }, // Africa/Tunis
{ 688, 5607, 4775, 7, }, // America/Anguilla
- { 688, 270, 221212, 7, }, // America/Argentina/Cordoba
- { 688, 7489, 221219, 11, }, // America/Argentina/Rio_Gallegos
+ { 688, 270, 221203, 7, }, // America/Argentina/Cordoba
+ { 688, 7489, 221210, 11, }, // America/Argentina/Rio_Gallegos
{ 688, 4252, 6592, 8, }, // America/Asuncion
{ 688, 237, 22, 8, }, // America/Atikokan
- { 688, 7623, 221230, 16, }, // America/Bahia_Banderas
+ { 688, 7623, 221221, 16, }, // America/Bahia_Banderas
{ 688, 4361, 44161, 6, }, // America/Bogota
- { 688, 7735, 221246, 12, }, // America/Campo_Grande
+ { 688, 7735, 221237, 12, }, // America/Campo_Grande
{ 688, 3868, 33314, 6, }, // America/Cancun
{ 688, 4345, 147758, 6, }, // America/Cayenne
{ 688, 5496, 44173, 6, }, // America/Cayman
{ 688, 7774, 60, 6, }, // America/Ciudad_Juarez
- { 688, 3791, 221258, 6, }, // America/Cuiaba
+ { 688, 3791, 221249, 6, }, // America/Cuiaba
{ 688, 5723, 66, 7, }, // America/Curacao
- { 688, 805, 221264, 6, }, // America/Denver
- { 688, 5739, 221270, 8, }, // America/Dominica
+ { 688, 805, 221255, 6, }, // America/Denver
+ { 688, 5739, 221261, 8, }, // America/Dominica
{ 688, 7869, 26580, 8, }, // America/Eirunepe
{ 688, 5770, 20519, 7, }, // America/Grenada
{ 688, 5786, 95109, 9, }, // America/Guadeloupe
{ 688, 2281, 95118, 7, }, // America/Havana
- { 688, 348, 221278, 12, }, // America/Indiana/Indianapolis
- { 688, 481, 221290, 14, }, // America/Indiana/Knox
- { 688, 7961, 221304, 17, }, // America/Indiana/Marengo
- { 688, 7985, 221321, 20, }, // America/Indiana/Petersburg
- { 688, 8012, 221341, 19, }, // America/Indiana/Tell_City
- { 688, 8038, 221360, 15, }, // America/Indiana/Vevay
- { 688, 8060, 221375, 19, }, // America/Indiana/Vincennes
- { 688, 8086, 221394, 17, }, // America/Indiana/Winamac
- { 688, 2799, 221411, 7, }, // America/Jamaica
- { 688, 8125, 221418, 21, }, // America/Kentucky/Monticello
- { 688, 3239, 221439, 11, }, // America/Los_Angeles
+ { 688, 348, 221269, 12, }, // America/Indiana/Indianapolis
+ { 688, 481, 221281, 14, }, // America/Indiana/Knox
+ { 688, 7961, 221295, 17, }, // America/Indiana/Marengo
+ { 688, 7985, 221312, 20, }, // America/Indiana/Petersburg
+ { 688, 8012, 221332, 19, }, // America/Indiana/Tell_City
+ { 688, 8038, 221351, 15, }, // America/Indiana/Vevay
+ { 688, 8060, 221366, 19, }, // America/Indiana/Vincennes
+ { 688, 8086, 221385, 17, }, // America/Indiana/Winamac
+ { 688, 2799, 221402, 7, }, // America/Jamaica
+ { 688, 8125, 221409, 21, }, // America/Kentucky/Monticello
+ { 688, 3239, 221430, 11, }, // America/Los_Angeles
{ 688, 5932, 207, 22, }, // America/Lower_Princes
{ 688, 8153, 26588, 6, }, // America/Maceio
- { 688, 5805, 221450, 9, }, // America/Martinique
+ { 688, 5805, 221441, 9, }, // America/Martinique
{ 688, 8220, 229, 6, }, // America/Merida
- { 688, 2949, 221459, 16, }, // America/Mexico_City
- { 688, 4391, 221475, 8, }, // America/Miquelon
+ { 688, 2949, 221450, 16, }, // America/Mexico_City
+ { 688, 4391, 221466, 8, }, // America/Miquelon
{ 688, 8270, 21944, 8, }, // America/Monterrey
{ 688, 5824, 7172, 9, }, // America/Montserrat
{ 688, 1850, 235, 19, }, // America/Noronha
- { 688, 8301, 221483, 20, }, // America/North_Dakota/Beulah
- { 688, 8329, 221503, 20, }, // America/North_Dakota/Center
- { 688, 8357, 221523, 23, }, // America/North_Dakota/New_Salem
+ { 688, 8301, 221474, 20, }, // America/North_Dakota/Beulah
+ { 688, 8329, 221494, 20, }, // America/North_Dakota/Center
+ { 688, 8357, 221514, 23, }, // America/North_Dakota/New_Salem
{ 688, 393, 317, 4, }, // America/Nuuk
{ 688, 2356, 164613, 6, }, // America/Panama
- { 688, 3945, 221546, 14, }, // America/Port-au-Prince
- { 688, 5954, 221560, 15, }, // America/Port_of_Spain
+ { 688, 3945, 221537, 14, }, // America/Port-au-Prince
+ { 688, 5954, 221551, 15, }, // America/Port_of_Spain
{ 688, 5843, 95222, 9, }, // America/Puerto_Rico
- { 688, 1878, 221575, 8, }, // America/Sao_Paulo
+ { 688, 1878, 221566, 8, }, // America/Sao_Paulo
{ 688, 6899, 321, 16, }, // America/Scoresbysund
- { 688, 8508, 221583, 13, }, // America/St_Barthelemy
- { 688, 2061, 221596, 8, }, // America/St_Johns
- { 688, 5863, 221604, 12, }, // America/St_Kitts
- { 688, 5880, 221616, 8, }, // America/St_Lucia
- { 688, 855, 221197, 9, }, // America/St_Thomas
- { 688, 5913, 221624, 11, }, // America/St_Vincent
+ { 688, 8508, 221574, 13, }, // America/St_Barthelemy
+ { 688, 2061, 221587, 8, }, // America/St_Johns
+ { 688, 5863, 221595, 12, }, // America/St_Kitts
+ { 688, 5880, 221607, 8, }, // America/St_Lucia
+ { 688, 855, 221188, 9, }, // America/St_Thomas
+ { 688, 5913, 221615, 11, }, // America/St_Vincent
{ 688, 5688, 148000, 7, }, // America/Tortola
{ 688, 6133, 400, 16, }, // Antarctica/DumontDUrville
- { 688, 8568, 221635, 15, }, // Antarctica/Macquarie
+ { 688, 8568, 221626, 15, }, // Antarctica/Macquarie
{ 688, 5395, 7594, 6, }, // Asia/Almaty
{ 688, 3968, 5605, 4, }, // Asia/Amman
- { 688, 5511, 221650, 6, }, // Asia/Anadyr
- { 688, 5523, 221656, 5, }, // Asia/Aqtau
+ { 688, 5511, 221641, 6, }, // Asia/Anadyr
+ { 688, 5523, 221647, 5, }, // Asia/Aqtau
{ 688, 5368, 7606, 6, }, // Asia/Aqtobe
- { 688, 964, 221661, 7, }, // Asia/Ashgabat
- { 688, 8624, 221668, 6, }, // Asia/Atyrau
+ { 688, 964, 221652, 7, }, // Asia/Ashgabat
+ { 688, 8624, 221659, 6, }, // Asia/Atyrau
{ 688, 3607, 4162, 6, }, // Asia/Baghdad
{ 688, 5534, 63955, 6, }, // Asia/Bahrain
{ 688, 3778, 91536, 6, }, // Asia/Bishkek
{ 688, 5989, 20751, 6, }, // Asia/Brunei
{ 688, 4601, 93254, 4, }, // Asia/Chita
- { 688, 4511, 221674, 7, }, // Asia/Colombo
+ { 688, 4511, 221665, 7, }, // Asia/Colombo
{ 688, 4540, 74438, 7, }, // Asia/Damascus
{ 688, 1093, 158496, 4, }, // Asia/Dhaka
- { 688, 3596, 221681, 5, }, // Asia/Dubai
- { 688, 6159, 221686, 7, }, // Asia/Dushanbe
+ { 688, 3596, 221672, 5, }, // Asia/Dubai
+ { 688, 6159, 221677, 7, }, // Asia/Dushanbe
{ 688, 8636, 95258, 9, }, // Asia/Famagusta
{ 688, 1259, 432, 11, }, // Asia/Ho_Chi_Minh
{ 688, 1290, 123559, 10, }, // Asia/Jerusalem
{ 688, 4316, 162180, 9, }, // Asia/Kamchatka
- { 688, 1185, 221693, 8, }, // Asia/Kathmandu
- { 688, 8661, 221701, 7, }, // Asia/Khandyga
+ { 688, 1185, 221684, 8, }, // Asia/Kathmandu
+ { 688, 8661, 221692, 7, }, // Asia/Khandyga
{ 688, 992, 20838, 7, }, // Asia/Kolkata
- { 688, 4197, 221708, 11, }, // Asia/Krasnoyarsk
- { 688, 4859, 221719, 12, }, // Asia/Kuala_Lumpur
- { 688, 1211, 221731, 5, }, // Asia/Macau
+ { 688, 4197, 221699, 11, }, // Asia/Krasnoyarsk
+ { 688, 4859, 221710, 12, }, // Asia/Kuala_Lumpur
+ { 688, 1211, 221722, 5, }, // Asia/Macau
{ 688, 1349, 7736, 7, }, // Asia/Makassar
{ 688, 6920, 20857, 7, }, // Asia/Muscat
- { 688, 8675, 221736, 13, }, // Asia/Novokuznetsk
+ { 688, 8675, 221727, 13, }, // Asia/Novokuznetsk
{ 688, 7145, 65240, 5, }, // Asia/Oral
{ 688, 6961, 22518, 8, }, // Asia/Phnom_Penh
{ 688, 5559, 73150, 5, }, // Asia/Qatar
- { 688, 8708, 221749, 8, }, // Asia/Qostanay
+ { 688, 8708, 221740, 8, }, // Asia/Qostanay
{ 688, 4269, 7778, 9, }, // Asia/Qyzylorda
{ 688, 3584, 7787, 4, }, // Asia/Riyadh
{ 688, 4408, 158282, 7, }, // Asia/Sakhalin
{ 688, 7245, 20886, 10, }, // Asia/Samarkand
{ 688, 3279, 7798, 4, }, // Asia/Seoul
- { 688, 1053, 221757, 8, }, // Asia/Shanghai
- { 688, 4297, 221765, 13, }, // Asia/Srednekolymsk
+ { 688, 1053, 221748, 8, }, // Asia/Shanghai
+ { 688, 4297, 221756, 13, }, // Asia/Srednekolymsk
{ 688, 3263, 177683, 6, }, // Asia/Taipei
{ 688, 4781, 91755, 7, }, // Asia/Tashkent
{ 688, 3915, 220114, 7, }, // Asia/Tbilisi
{ 688, 2772, 7842, 7, }, // Asia/Tehran
- { 688, 1317, 221778, 5, }, // Asia/Thimphu
- { 688, 1021, 221783, 10, }, // Asia/Ulaanbaatar
+ { 688, 1317, 221769, 5, }, // Asia/Thimphu
+ { 688, 1021, 221774, 10, }, // Asia/Ulaanbaatar
{ 688, 1159, 202026, 7, }, // Asia/Urumqi
- { 688, 8722, 221793, 9, }, // Asia/Ust-Nera
+ { 688, 8722, 221784, 9, }, // Asia/Ust-Nera
{ 688, 6977, 26939, 8, }, // Asia/Vientiane
{ 688, 1235, 477, 6, }, // Asia/Yangon
- { 688, 3883, 221802, 14, }, // Asia/Yekaterinburg
- { 688, 3747, 221816, 7, }, // Asia/Yerevan
- { 688, 3663, 221823, 11, }, // Atlantic/Azores
- { 688, 6628, 221834, 13, }, // Atlantic/Canary
- { 688, 3727, 221847, 9, }, // Atlantic/Cape_Verde
- { 688, 1395, 221856, 11, }, // Atlantic/Faroe
- { 688, 8736, 221867, 13, }, // Atlantic/Madeira
- { 688, 2748, 221880, 8, }, // Atlantic/Reykjavik
- { 688, 7272, 221888, 16, }, // Atlantic/South_Georgia
- { 688, 6821, 221904, 14, }, // Atlantic/St_Helena
- { 688, 1670, 221918, 8, }, // Australia/Adelaide
- { 688, 1635, 221926, 8, }, // Australia/Brisbane
- { 688, 1547, 221934, 15, }, // Australia/Lord_Howe
- { 688, 6441, 221949, 9, }, // Europe/Amsterdam
+ { 688, 3883, 221793, 14, }, // Asia/Yekaterinburg
+ { 688, 3747, 221807, 7, }, // Asia/Yerevan
+ { 688, 3663, 221814, 11, }, // Atlantic/Azores
+ { 688, 6628, 221825, 13, }, // Atlantic/Canary
+ { 688, 3727, 221838, 9, }, // Atlantic/Cape_Verde
+ { 688, 1395, 221847, 11, }, // Atlantic/Faroe
+ { 688, 8736, 221858, 13, }, // Atlantic/Madeira
+ { 688, 2748, 221871, 8, }, // Atlantic/Reykjavik
+ { 688, 7272, 221879, 16, }, // Atlantic/South_Georgia
+ { 688, 6821, 221895, 14, }, // Atlantic/St_Helena
+ { 688, 1670, 221909, 8, }, // Australia/Adelaide
+ { 688, 1635, 221917, 8, }, // Australia/Brisbane
+ { 688, 1547, 221925, 15, }, // Australia/Lord_Howe
+ { 688, 6441, 221940, 9, }, // Europe/Amsterdam
{ 688, 6216, 33638, 6, }, // Europe/Andorra
{ 688, 3620, 33644, 8, }, // Europe/Astrakhan
{ 688, 2300, 5911, 5, }, // Europe/Athens
{ 688, 6336, 58906, 8, }, // Europe/Belgrade
- { 688, 6488, 221958, 10, }, // Europe/Bratislava
+ { 688, 6488, 221949, 10, }, // Europe/Bratislava
{ 688, 2167, 27022, 6, }, // Europe/Brussels
{ 688, 3928, 21073, 8, }, // Europe/Bucharest
{ 688, 8772, 27037, 8, }, // Europe/Busingen
{ 688, 6289, 95331, 10, }, // Europe/Copenhagen
- { 688, 6307, 221968, 9, }, // Europe/Gibraltar
- { 688, 8804, 221977, 12, }, // Europe/Isle_of_Man
+ { 688, 6307, 221959, 9, }, // Europe/Gibraltar
+ { 688, 8804, 221968, 12, }, // Europe/Isle_of_Man
{ 688, 1130, 164893, 8, }, // Europe/Istanbul
{ 688, 3979, 63006, 12, }, // Europe/Kaliningrad
{ 688, 2527, 8148, 4, }, // Europe/Kyiv
{ 688, 3213, 157721, 7, }, // Europe/Lisbon
- { 688, 6506, 221989, 8, }, // Europe/Ljubljana
+ { 688, 6506, 221980, 8, }, // Europe/Ljubljana
{ 688, 2501, 95370, 6, }, // Europe/London
- { 688, 6365, 221997, 10, }, // Europe/Luxembourg
+ { 688, 6365, 221988, 10, }, // Europe/Luxembourg
{ 688, 6410, 44570, 6, }, // Europe/Monaco
{ 688, 3537, 95387, 5, }, // Europe/Moscow
- { 688, 6458, 222007, 4, }, // Europe/Oslo
- { 688, 4284, 222011, 6, }, // Europe/Paris
+ { 688, 6458, 221998, 4, }, // Europe/Oslo
+ { 688, 4284, 222002, 6, }, // Europe/Paris
{ 688, 6424, 196828, 9, }, // Europe/Podgorica
{ 688, 6275, 21185, 5, }, // Europe/Prague
{ 688, 6324, 6064, 4, }, // Europe/Rome
{ 688, 6470, 65868, 9, }, // Europe/San_Marino
- { 688, 8849, 222017, 11, }, // Europe/Simferopol
- { 688, 6523, 222028, 8, }, // Europe/Stockholm
+ { 688, 8849, 222008, 11, }, // Europe/Simferopol
+ { 688, 6523, 222019, 8, }, // Europe/Stockholm
{ 688, 8867, 8250, 5, }, // Europe/Tallinn
{ 688, 6202, 21213, 6, }, // Europe/Tirane
- { 688, 8882, 222036, 8, }, // Europe/Ulyanovsk
- { 688, 6567, 222044, 7, }, // Europe/Vatican
+ { 688, 8882, 222027, 8, }, // Europe/Ulyanovsk
+ { 688, 6567, 222035, 7, }, // Europe/Vatican
{ 688, 6231, 21230, 5, }, // Europe/Vienna
{ 688, 4727, 63187, 10, }, // Europe/Volgograd
{ 688, 3190, 95436, 8, }, // Europe/Warsaw
{ 688, 6540, 95452, 6, }, // Europe/Zurich
- { 688, 6947, 222051, 6, }, // Indian/Chagos
- { 688, 6046, 222057, 15, }, // Indian/Christmas
- { 688, 6063, 222072, 11, }, // Indian/Cocos
- { 688, 5029, 222083, 12, }, // Indian/Comoro
+ { 688, 6947, 222042, 6, }, // Indian/Chagos
+ { 688, 6046, 222048, 15, }, // Indian/Christmas
+ { 688, 6063, 222063, 11, }, // Indian/Cocos
+ { 688, 5029, 222074, 12, }, // Indian/Comoro
{ 688, 7260, 27115, 4, }, // Indian/Mahe
- { 688, 7050, 222095, 13, }, // Indian/Maldives
- { 688, 4069, 222108, 14, }, // Indian/Mauritius
- { 688, 5098, 222122, 12, }, // Indian/Mayotte
- { 688, 7211, 222134, 13, }, // Indian/Reunion
- { 688, 3706, 222147, 18, }, // Pacific/Bougainville
- { 688, 3015, 222165, 12, }, // Pacific/Chatham
- { 688, 3157, 222177, 11, }, // Pacific/Chuuk
- { 688, 2237, 222188, 15, }, // Pacific/Easter
- { 688, 7360, 222203, 11, }, // Pacific/Efate
- { 688, 7327, 222214, 13, }, // Pacific/Fakaofo
- { 688, 7343, 222227, 14, }, // Pacific/Funafuti
+ { 688, 7050, 222086, 13, }, // Indian/Maldives
+ { 688, 4069, 222099, 14, }, // Indian/Mauritius
+ { 688, 5098, 222113, 12, }, // Indian/Mayotte
+ { 688, 7211, 222125, 13, }, // Indian/Reunion
+ { 688, 3706, 222138, 18, }, // Pacific/Bougainville
+ { 688, 3015, 222156, 12, }, // Pacific/Chatham
+ { 688, 3157, 222168, 11, }, // Pacific/Chuuk
+ { 688, 2237, 222179, 15, }, // Pacific/Easter
+ { 688, 7360, 222194, 11, }, // Pacific/Efate
+ { 688, 7327, 222205, 13, }, // Pacific/Fakaofo
+ { 688, 7343, 222218, 14, }, // Pacific/Funafuti
{ 688, 6678, 167332, 9, }, // Pacific/Galapagos
- { 688, 6696, 222241, 13, }, // Pacific/Gambier
- { 688, 3822, 222254, 17, }, // Pacific/Guadalcanal
- { 688, 3049, 222271, 12, }, // Pacific/Kanton
- { 688, 3998, 222283, 16, }, // Pacific/Kiritimati
- { 688, 7019, 222299, 12, }, // Pacific/Kosrae
- { 688, 2842, 222311, 15, }, // Pacific/Kwajalein
- { 688, 4051, 222326, 14, }, // Pacific/Marquesas
- { 688, 8914, 222340, 12, }, // Pacific/Midway
- { 688, 7084, 222352, 11, }, // Pacific/Nauru
- { 688, 7132, 222363, 10, }, // Pacific/Niue
- { 688, 4168, 222373, 13, }, // Pacific/Norfolk
+ { 688, 6696, 222232, 13, }, // Pacific/Gambier
+ { 688, 3822, 222245, 17, }, // Pacific/Guadalcanal
+ { 688, 3049, 222262, 12, }, // Pacific/Kanton
+ { 688, 3998, 222274, 16, }, // Pacific/Kiritimati
+ { 688, 7019, 222290, 12, }, // Pacific/Kosrae
+ { 688, 2842, 222302, 15, }, // Pacific/Kwajalein
+ { 688, 4051, 222317, 14, }, // Pacific/Marquesas
+ { 688, 8914, 222331, 12, }, // Pacific/Midway
+ { 688, 7084, 222343, 11, }, // Pacific/Nauru
+ { 688, 7132, 222354, 10, }, // Pacific/Niue
+ { 688, 4168, 222364, 13, }, // Pacific/Norfolk
{ 688, 7098, 4628, 6, }, // Pacific/Noumea
{ 688, 3126, 135456, 11, }, // Pacific/Pago_Pago
- { 688, 7155, 222386, 5, }, // Pacific/Palau
- { 688, 7194, 222391, 14, }, // Pacific/Pitcairn
- { 688, 3096, 222405, 12, }, // Pacific/Pohnpei
- { 688, 4807, 222417, 13, }, // Pacific/Port_Moresby
- { 688, 6076, 222430, 15, }, // Pacific/Rarotonga
- { 688, 6031, 222445, 12, }, // Pacific/Saipan
- { 688, 7312, 222457, 11, }, // Pacific/Tahiti
- { 688, 6712, 222468, 13, }, // Pacific/Tarawa
- { 688, 4583, 222481, 15, }, // Pacific/Tongatapu
- { 688, 7392, 222496, 10, }, // Pacific/Wake
- { 688, 7405, 222506, 12, }, // Pacific/Wallis
- { 689, 6788, 222518, 7, }, // Africa/Abidjan Kuvi/Latin/India
- { 689, 6760, 222525, 4, }, // Africa/Accra
- { 689, 5059, 222529, 10, }, // Africa/Addis_Ababa
- { 689, 7420, 222539, 7, }, // Africa/Algiers
- { 689, 14, 222546, 6, }, // Africa/Asmara
- { 689, 44, 222552, 6, }, // Africa/Bamako
- { 689, 5257, 222558, 6, }, // Africa/Bangui
- { 689, 6746, 222564, 6, }, // Africa/Banjul
- { 689, 7435, 222570, 6, }, // Africa/Bissau
- { 689, 4957, 222576, 8, }, // Africa/Blantyre
- { 689, 5287, 222584, 9, }, // Africa/Brazzaville
- { 689, 4922, 222593, 9, }, // Africa/Bujumbura
- { 689, 2320, 222602, 5, }, // Africa/Cairo
- { 689, 4117, 222607, 10, }, // Africa/Casablanca
- { 689, 7449, 222617, 5, }, // Africa/Ceuta
- { 689, 6773, 222622, 7, }, // Africa/Conakry
- { 689, 6840, 222629, 4, }, // Africa/Dakar
- { 689, 5130, 222633, 13, }, // Africa/Dar_es_Salaam
+ { 688, 7155, 222377, 5, }, // Pacific/Palau
+ { 688, 7194, 222382, 14, }, // Pacific/Pitcairn
+ { 688, 3096, 222396, 12, }, // Pacific/Pohnpei
+ { 688, 4807, 222408, 13, }, // Pacific/Port_Moresby
+ { 688, 6076, 222421, 15, }, // Pacific/Rarotonga
+ { 688, 6031, 222436, 12, }, // Pacific/Saipan
+ { 688, 7312, 222448, 11, }, // Pacific/Tahiti
+ { 688, 6712, 222459, 13, }, // Pacific/Tarawa
+ { 688, 4583, 222472, 15, }, // Pacific/Tongatapu
+ { 688, 7392, 222487, 10, }, // Pacific/Wake
+ { 688, 7405, 222497, 12, }, // Pacific/Wallis
+ { 689, 6788, 222509, 7, }, // Africa/Abidjan Kuvi/Latin/India
+ { 689, 6760, 222516, 4, }, // Africa/Accra
+ { 689, 5059, 222520, 10, }, // Africa/Addis_Ababa
+ { 689, 7420, 222530, 7, }, // Africa/Algiers
+ { 689, 14, 222537, 6, }, // Africa/Asmara
+ { 689, 44, 222543, 6, }, // Africa/Bamako
+ { 689, 5257, 222549, 6, }, // Africa/Bangui
+ { 689, 6746, 222555, 6, }, // Africa/Banjul
+ { 689, 7435, 222561, 6, }, // Africa/Bissau
+ { 689, 4957, 222567, 8, }, // Africa/Blantyre
+ { 689, 5287, 222575, 9, }, // Africa/Brazzaville
+ { 689, 4922, 222584, 9, }, // Africa/Bujumbura
+ { 689, 2320, 222593, 5, }, // Africa/Cairo
+ { 689, 4117, 222598, 10, }, // Africa/Casablanca
+ { 689, 7449, 222608, 5, }, // Africa/Ceuta
+ { 689, 6773, 222613, 7, }, // Africa/Conakry
+ { 689, 6840, 222620, 4, }, // Africa/Dakar
+ { 689, 5130, 222624, 13, }, // Africa/Dar_es_Salaam
{ 689, 5043, 26493, 6, }, // Africa/Djibouti
- { 689, 5243, 222646, 5, }, // Africa/Douala
- { 689, 5166, 222651, 9, }, // Africa/El_Aaiun
- { 689, 6853, 222660, 7, }, // Africa/Freetown
- { 689, 4906, 222667, 7, }, // Africa/Gaborone
- { 689, 5015, 222674, 5, }, // Africa/Harare
- { 689, 4479, 222679, 12, }, // Africa/Johannesburg
- { 689, 4499, 222691, 4, }, // Africa/Juba
- { 689, 5151, 222695, 6, }, // Africa/Kampala
- { 689, 4524, 222701, 7, }, // Africa/Khartoum
- { 689, 4973, 222708, 6, }, // Africa/Kigali
- { 689, 5306, 222714, 7, }, // Africa/Kinshasa
- { 689, 4744, 222721, 5, }, // Africa/Lagos
- { 689, 5336, 222726, 9, }, // Africa/Libreville
+ { 689, 5243, 222637, 5, }, // Africa/Douala
+ { 689, 5166, 222642, 9, }, // Africa/El_Aaiun
+ { 689, 6853, 222651, 7, }, // Africa/Freetown
+ { 689, 4906, 222658, 7, }, // Africa/Gaborone
+ { 689, 5015, 222665, 5, }, // Africa/Harare
+ { 689, 4479, 222670, 12, }, // Africa/Johannesburg
+ { 689, 4499, 222682, 4, }, // Africa/Juba
+ { 689, 5151, 222686, 6, }, // Africa/Kampala
+ { 689, 4524, 222692, 7, }, // Africa/Khartoum
+ { 689, 4973, 222699, 6, }, // Africa/Kigali
+ { 689, 5306, 222705, 7, }, // Africa/Kinshasa
+ { 689, 4744, 222712, 5, }, // Africa/Lagos
+ { 689, 5336, 222717, 9, }, // Africa/Libreville
{ 689, 6869, 4087, 3, }, // Africa/Lome
- { 689, 5211, 222735, 6, }, // Africa/Luanda
- { 689, 4939, 222741, 9, }, // Africa/Lubumbashi
- { 689, 5001, 222750, 6, }, // Africa/Lusaka
- { 689, 5322, 222756, 6, }, // Africa/Malabo
- { 689, 4987, 222762, 6, }, // Africa/Maputo
- { 689, 5197, 222768, 6, }, // Africa/Maseru
- { 689, 5182, 222774, 7, }, // Africa/Mbabane
- { 689, 5113, 222781, 8, }, // Africa/Mogadishu
- { 689, 7034, 222789, 8, }, // Africa/Monrovia
- { 689, 3853, 222797, 7, }, // Africa/Nairobi
- { 689, 5271, 222804, 7, }, // Africa/Ndjamena
- { 689, 5354, 222811, 6, }, // Africa/Niamey
- { 689, 6803, 222817, 6, }, // Africa/Nouakchott
- { 689, 6727, 222823, 7, }, // Africa/Ouagadougou
- { 689, 5225, 222830, 10, }, // Africa/Porto-Novo
- { 689, 4435, 222840, 7, }, // Africa/Sao_Tome
- { 689, 2866, 222847, 7, }, // Africa/Tripoli
- { 689, 6554, 222854, 5, }, // Africa/Tunis
- { 689, 4152, 222859, 7, }, // Africa/Windhoek
- { 689, 132, 222866, 4, }, // America/Adak
- { 689, 3346, 222870, 7, }, // America/Anchorage
- { 689, 5607, 222877, 8, }, // America/Anguilla
- { 689, 5624, 222885, 7, }, // America/Antigua
- { 689, 4554, 222892, 9, }, // America/Araguaina
- { 689, 166, 222901, 13, }, // America/Argentina/Buenos_Aires
- { 689, 91, 222914, 9, }, // America/Argentina/Catamarca
- { 689, 270, 222923, 7, }, // America/Argentina/Cordoba
- { 689, 441, 222930, 5, }, // America/Argentina/Jujuy
- { 689, 7462, 222935, 8, }, // America/Argentina/La_Rioja
- { 689, 565, 222943, 7, }, // America/Argentina/Mendoza
- { 689, 7489, 222950, 13, }, // America/Argentina/Rio_Gallegos
- { 689, 7520, 222963, 5, }, // America/Argentina/Salta
- { 689, 7544, 222968, 8, }, // America/Argentina/San_Juan
- { 689, 5580, 222976, 8, }, // America/Argentina/San_Luis
- { 689, 7571, 222984, 6, }, // America/Argentina/Tucuman
- { 689, 7597, 222990, 7, }, // America/Argentina/Ushuaia
- { 689, 5640, 222997, 5, }, // America/Aruba
- { 689, 4252, 223002, 8, }, // America/Asuncion
- { 689, 237, 223010, 8, }, // America/Atikokan
- { 689, 3679, 223018, 5, }, // America/Bahia
- { 689, 7623, 223023, 13, }, // America/Bahia_Banderas
- { 689, 5654, 223036, 8, }, // America/Barbados
- { 689, 7646, 223044, 5, }, // America/Belem
- { 689, 5407, 223049, 5, }, // America/Belize
- { 689, 7660, 223054, 12, }, // America/Blanc-Sablon
- { 689, 7681, 223066, 9, }, // America/Boa_Vista
- { 689, 4361, 223075, 6, }, // America/Bogota
- { 689, 7699, 223081, 5, }, // America/Boise
- { 689, 7713, 223086, 10, }, // America/Cambridge_Bay
- { 689, 7735, 223096, 12, }, // America/Campo_Grande
- { 689, 3868, 223108, 6, }, // America/Cancun
- { 689, 4694, 223114, 7, }, // America/Caracas
- { 689, 4345, 223121, 5, }, // America/Cayenne
- { 689, 5496, 223126, 6, }, // America/Cayman
- { 689, 2260, 223132, 6, }, // America/Chicago
- { 689, 7756, 223138, 9, }, // America/Chihuahua
+ { 689, 5211, 222726, 6, }, // Africa/Luanda
+ { 689, 4939, 222732, 9, }, // Africa/Lubumbashi
+ { 689, 5001, 222741, 6, }, // Africa/Lusaka
+ { 689, 5322, 222747, 6, }, // Africa/Malabo
+ { 689, 4987, 222753, 6, }, // Africa/Maputo
+ { 689, 5197, 222759, 6, }, // Africa/Maseru
+ { 689, 5182, 222765, 7, }, // Africa/Mbabane
+ { 689, 5113, 222772, 8, }, // Africa/Mogadishu
+ { 689, 7034, 222780, 8, }, // Africa/Monrovia
+ { 689, 3853, 222788, 7, }, // Africa/Nairobi
+ { 689, 5271, 222795, 7, }, // Africa/Ndjamena
+ { 689, 5354, 222802, 6, }, // Africa/Niamey
+ { 689, 6803, 222808, 6, }, // Africa/Nouakchott
+ { 689, 6727, 222814, 7, }, // Africa/Ouagadougou
+ { 689, 5225, 222821, 10, }, // Africa/Porto-Novo
+ { 689, 4435, 222831, 7, }, // Africa/Sao_Tome
+ { 689, 2866, 222838, 7, }, // Africa/Tripoli
+ { 689, 6554, 222845, 5, }, // Africa/Tunis
+ { 689, 4152, 222850, 7, }, // Africa/Windhoek
+ { 689, 132, 222857, 4, }, // America/Adak
+ { 689, 3346, 222861, 7, }, // America/Anchorage
+ { 689, 5607, 222868, 8, }, // America/Anguilla
+ { 689, 5624, 222876, 7, }, // America/Antigua
+ { 689, 4554, 222883, 9, }, // America/Araguaina
+ { 689, 166, 222892, 13, }, // America/Argentina/Buenos_Aires
+ { 689, 91, 222905, 9, }, // America/Argentina/Catamarca
+ { 689, 270, 222914, 7, }, // America/Argentina/Cordoba
+ { 689, 441, 222921, 5, }, // America/Argentina/Jujuy
+ { 689, 7462, 222926, 8, }, // America/Argentina/La_Rioja
+ { 689, 565, 222934, 7, }, // America/Argentina/Mendoza
+ { 689, 7489, 222941, 13, }, // America/Argentina/Rio_Gallegos
+ { 689, 7520, 222954, 5, }, // America/Argentina/Salta
+ { 689, 7544, 222959, 8, }, // America/Argentina/San_Juan
+ { 689, 5580, 222967, 8, }, // America/Argentina/San_Luis
+ { 689, 7571, 222975, 6, }, // America/Argentina/Tucuman
+ { 689, 7597, 222981, 7, }, // America/Argentina/Ushuaia
+ { 689, 5640, 222988, 5, }, // America/Aruba
+ { 689, 4252, 222993, 8, }, // America/Asuncion
+ { 689, 237, 223001, 8, }, // America/Atikokan
+ { 689, 3679, 223009, 5, }, // America/Bahia
+ { 689, 7623, 223014, 13, }, // America/Bahia_Banderas
+ { 689, 5654, 223027, 8, }, // America/Barbados
+ { 689, 7646, 223035, 5, }, // America/Belem
+ { 689, 5407, 223040, 5, }, // America/Belize
+ { 689, 7660, 223045, 12, }, // America/Blanc-Sablon
+ { 689, 7681, 223057, 9, }, // America/Boa_Vista
+ { 689, 4361, 223066, 6, }, // America/Bogota
+ { 689, 7699, 223072, 5, }, // America/Boise
+ { 689, 7713, 223077, 10, }, // America/Cambridge_Bay
+ { 689, 7735, 223087, 12, }, // America/Campo_Grande
+ { 689, 3868, 223099, 6, }, // America/Cancun
+ { 689, 4694, 223105, 7, }, // America/Caracas
+ { 689, 4345, 223112, 5, }, // America/Cayenne
+ { 689, 5496, 223117, 6, }, // America/Cayman
+ { 689, 2260, 223123, 6, }, // America/Chicago
+ { 689, 7756, 223129, 9, }, // America/Chihuahua
{ 689, 7774, 53, 13, }, // America/Ciudad_Juarez
- { 689, 5422, 223147, 10, }, // America/Costa_Rica
- { 689, 7796, 223157, 7, }, // America/Creston
- { 689, 3791, 223164, 6, }, // America/Cuiaba
- { 689, 5723, 223170, 7, }, // America/Curacao
- { 689, 7812, 223177, 11, }, // America/Danmarkshavn
- { 689, 7833, 223188, 5, }, // America/Dawson
- { 689, 7848, 223193, 11, }, // America/Dawson_Creek
- { 689, 805, 223204, 6, }, // America/Denver
- { 689, 3465, 223210, 7, }, // America/Detroit
- { 689, 5739, 223217, 8, }, // America/Dominica
- { 689, 893, 223225, 8, }, // America/Edmonton
- { 689, 7869, 223233, 8, }, // America/Eirunepe
- { 689, 5441, 223241, 11, }, // America/El_Salvador
- { 689, 7886, 223252, 11, }, // America/Fort_Nelson
- { 689, 7906, 223263, 9, }, // America/Fortaleza
- { 689, 7924, 223272, 8, }, // America/Glace_Bay
- { 689, 6881, 223280, 7, }, // America/Goose_Bay
- { 689, 4612, 223287, 10, }, // America/Grand_Turk
- { 689, 5770, 223297, 7, }, // America/Grenada
- { 689, 5786, 223304, 10, }, // America/Guadeloupe
- { 689, 3760, 223314, 9, }, // America/Guatemala
- { 689, 4841, 223323, 8, }, // America/Guayaquil
- { 689, 6932, 223331, 6, }, // America/Guyana
- { 689, 1939, 223337, 8, }, // America/Halifax
- { 689, 2281, 223345, 6, }, // America/Havana
+ { 689, 5422, 223138, 10, }, // America/Costa_Rica
+ { 689, 7796, 223148, 7, }, // America/Creston
+ { 689, 3791, 223155, 6, }, // America/Cuiaba
+ { 689, 5723, 223161, 7, }, // America/Curacao
+ { 689, 7812, 223168, 11, }, // America/Danmarkshavn
+ { 689, 7833, 223179, 5, }, // America/Dawson
+ { 689, 7848, 223184, 11, }, // America/Dawson_Creek
+ { 689, 805, 223195, 6, }, // America/Denver
+ { 689, 3465, 223201, 7, }, // America/Detroit
+ { 689, 5739, 223208, 8, }, // America/Dominica
+ { 689, 893, 223216, 8, }, // America/Edmonton
+ { 689, 7869, 223224, 8, }, // America/Eirunepe
+ { 689, 5441, 223232, 11, }, // America/El_Salvador
+ { 689, 7886, 223243, 11, }, // America/Fort_Nelson
+ { 689, 7906, 223254, 9, }, // America/Fortaleza
+ { 689, 7924, 223263, 8, }, // America/Glace_Bay
+ { 689, 6881, 223271, 7, }, // America/Goose_Bay
+ { 689, 4612, 223278, 10, }, // America/Grand_Turk
+ { 689, 5770, 223288, 7, }, // America/Grenada
+ { 689, 5786, 223295, 10, }, // America/Guadeloupe
+ { 689, 3760, 223305, 9, }, // America/Guatemala
+ { 689, 4841, 223314, 8, }, // America/Guayaquil
+ { 689, 6932, 223322, 6, }, // America/Guyana
+ { 689, 1939, 223328, 8, }, // America/Halifax
+ { 689, 2281, 223336, 6, }, // America/Havana
{ 689, 7942, 6920, 8, }, // America/Hermosillo
- { 689, 348, 223351, 12, }, // America/Indiana/Indianapolis
- { 689, 481, 223363, 14, }, // America/Indiana/Knox
- { 689, 7961, 223377, 17, }, // America/Indiana/Marengo
- { 689, 7985, 223394, 20, }, // America/Indiana/Petersburg
- { 689, 8012, 223414, 19, }, // America/Indiana/Tell_City
- { 689, 8038, 223433, 14, }, // America/Indiana/Vevay
- { 689, 8060, 223447, 17, }, // America/Indiana/Vincennes
- { 689, 8086, 223464, 17, }, // America/Indiana/Winamac
- { 689, 8110, 223481, 6, }, // America/Inuvik
- { 689, 660, 223487, 7, }, // America/Iqaluit
- { 689, 2799, 223494, 7, }, // America/Jamaica
- { 689, 5380, 223501, 5, }, // America/Juneau
- { 689, 521, 223506, 9, }, // America/Kentucky/Louisville
- { 689, 8125, 223515, 19, }, // America/Kentucky/Monticello
- { 689, 5704, 223534, 10, }, // America/Kralendijk
- { 689, 4376, 223544, 6, }, // America/La_Paz
+ { 689, 348, 223342, 12, }, // America/Indiana/Indianapolis
+ { 689, 481, 223354, 14, }, // America/Indiana/Knox
+ { 689, 7961, 223368, 17, }, // America/Indiana/Marengo
+ { 689, 7985, 223385, 20, }, // America/Indiana/Petersburg
+ { 689, 8012, 223405, 19, }, // America/Indiana/Tell_City
+ { 689, 8038, 223424, 14, }, // America/Indiana/Vevay
+ { 689, 8060, 223438, 17, }, // America/Indiana/Vincennes
+ { 689, 8086, 223455, 17, }, // America/Indiana/Winamac
+ { 689, 8110, 223472, 6, }, // America/Inuvik
+ { 689, 660, 223478, 7, }, // America/Iqaluit
+ { 689, 2799, 223485, 7, }, // America/Jamaica
+ { 689, 5380, 223492, 5, }, // America/Juneau
+ { 689, 521, 223497, 9, }, // America/Kentucky/Louisville
+ { 689, 8125, 223506, 19, }, // America/Kentucky/Monticello
+ { 689, 5704, 223525, 10, }, // America/Kralendijk
+ { 689, 4376, 223535, 6, }, // America/La_Paz
{ 689, 7169, 157373, 4, }, // America/Lima
- { 689, 3239, 223550, 11, }, // America/Los_Angeles
- { 689, 5932, 223561, 21, }, // America/Lower_Princes
- { 689, 8153, 223582, 5, }, // America/Maceio
- { 689, 8168, 223587, 7, }, // America/Managua
- { 689, 1908, 223594, 6, }, // America/Manaus
- { 689, 5897, 223600, 7, }, // America/Marigot
- { 689, 5805, 223607, 8, }, // America/Martinique
- { 689, 8184, 223615, 9, }, // America/Matamoros
- { 689, 2917, 223624, 8, }, // America/Mazatlan
- { 689, 8202, 223632, 8, }, // America/Menominee
- { 689, 8220, 223640, 6, }, // America/Merida
- { 689, 8235, 223646, 10, }, // America/Metlakatla
- { 689, 2949, 223656, 12, }, // America/Mexico_City
- { 689, 4391, 223668, 7, }, // America/Miquelon
- { 689, 8254, 223675, 7, }, // America/Moncton
- { 689, 8270, 223682, 8, }, // America/Monterrey
- { 689, 4098, 223690, 10, }, // America/Montevideo
- { 689, 5824, 223700, 10, }, // America/Montserrat
- { 689, 5481, 223710, 5, }, // America/Nassau
- { 689, 2379, 223715, 9, }, // America/New_York
+ { 689, 3239, 223541, 11, }, // America/Los_Angeles
+ { 689, 5932, 223552, 21, }, // America/Lower_Princes
+ { 689, 8153, 223573, 5, }, // America/Maceio
+ { 689, 8168, 223578, 7, }, // America/Managua
+ { 689, 1908, 223585, 6, }, // America/Manaus
+ { 689, 5897, 223591, 7, }, // America/Marigot
+ { 689, 5805, 223598, 8, }, // America/Martinique
+ { 689, 8184, 223606, 9, }, // America/Matamoros
+ { 689, 2917, 223615, 8, }, // America/Mazatlan
+ { 689, 8202, 223623, 8, }, // America/Menominee
+ { 689, 8220, 223631, 6, }, // America/Merida
+ { 689, 8235, 223637, 10, }, // America/Metlakatla
+ { 689, 2949, 223647, 12, }, // America/Mexico_City
+ { 689, 4391, 223659, 7, }, // America/Miquelon
+ { 689, 8254, 223666, 7, }, // America/Moncton
+ { 689, 8270, 223673, 8, }, // America/Monterrey
+ { 689, 4098, 223681, 10, }, // America/Montevideo
+ { 689, 5824, 223691, 10, }, // America/Montserrat
+ { 689, 5481, 223701, 5, }, // America/Nassau
+ { 689, 2379, 223706, 9, }, // America/New_York
{ 689, 8288, 7120, 3, }, // America/Nome
- { 689, 1850, 223724, 7, }, // America/Noronha
- { 689, 8301, 223731, 20, }, // America/North_Dakota/Beulah
- { 689, 8329, 223751, 19, }, // America/North_Dakota/Center
- { 689, 8357, 223770, 23, }, // America/North_Dakota/New_Salem
- { 689, 393, 223793, 3, }, // America/Nuuk
- { 689, 8388, 223796, 7, }, // America/Ojinaga
- { 689, 2356, 223803, 6, }, // America/Panama
- { 689, 6173, 223809, 10, }, // America/Paramaribo
- { 689, 2973, 223819, 6, }, // America/Phoenix
- { 689, 3945, 223825, 14, }, // America/Port-au-Prince
- { 689, 5954, 223839, 13, }, // America/Port_of_Spain
- { 689, 8404, 223852, 11, }, // America/Porto_Velho
- { 689, 5843, 223863, 11, }, // America/Puerto_Rico
- { 689, 4030, 223874, 12, }, // America/Punta_Arenas
- { 689, 8424, 223886, 13, }, // America/Rankin_Inlet
- { 689, 8445, 223899, 6, }, // America/Recife
- { 689, 1995, 223905, 6, }, // America/Regina
- { 689, 8460, 223911, 8, }, // America/Resolute
- { 689, 695, 223919, 10, }, // America/Rio_Branco
- { 689, 8477, 223929, 6, }, // America/Santarem
- { 689, 2201, 223935, 8, }, // America/Santiago
- { 689, 6111, 223943, 13, }, // America/Santo_Domingo
- { 689, 1878, 223956, 9, }, // America/Sao_Paulo
- { 689, 6899, 223965, 11, }, // America/Scoresbysund
- { 689, 8494, 223976, 5, }, // America/Sitka
- { 689, 8508, 223981, 14, }, // America/St_Barthelemy
- { 689, 2061, 223995, 9, }, // America/St_Johns
- { 689, 5863, 224004, 10, }, // America/St_Kitts
- { 689, 5880, 224014, 10, }, // America/St_Lucia
- { 689, 855, 224024, 10, }, // America/St_Thomas
- { 689, 5913, 224034, 12, }, // America/St_Vincent
- { 689, 8530, 224046, 13, }, // America/Swift_Current
- { 689, 5461, 224059, 4, }, // America/Tegucigalpa
- { 689, 5756, 224063, 4, }, // America/Thule
- { 689, 313, 224067, 7, }, // America/Tijuana
- { 689, 608, 224074, 7, }, // America/Toronto
- { 689, 5688, 224081, 7, }, // America/Tortola
- { 689, 2093, 224088, 8, }, // America/Vancouver
- { 689, 2144, 224096, 9, }, // America/Whitehorse
- { 689, 734, 224105, 8, }, // America/Winnipeg
- { 689, 8552, 224113, 7, }, // America/Yakutat
- { 689, 6001, 224120, 5, }, // Antarctica/Casey
- { 689, 6094, 224125, 5, }, // Antarctica/Davis
- { 689, 6133, 224130, 17, }, // Antarctica/DumontDUrville
- { 689, 8568, 224147, 7, }, // Antarctica/Macquarie
- { 689, 7066, 224154, 6, }, // Antarctica/Mawson
- { 689, 7113, 224160, 9, }, // Antarctica/McMurdo
- { 689, 8589, 224169, 6, }, // Antarctica/Palmer
- { 689, 7226, 224175, 6, }, // Antarctica/Rothera
- { 689, 7295, 224181, 5, }, // Antarctica/Syowa
- { 689, 8607, 224186, 5, }, // Antarctica/Troll
- { 689, 7374, 224191, 6, }, // Antarctica/Vostok
- { 689, 1429, 224197, 10, }, // Arctic/Longyearbyen
- { 689, 5570, 224207, 4, }, // Asia/Aden
- { 689, 5395, 224211, 6, }, // Asia/Almaty
- { 689, 3968, 224217, 5, }, // Asia/Amman
- { 689, 5511, 224222, 6, }, // Asia/Anadyr
- { 689, 5523, 224228, 5, }, // Asia/Aqtau
- { 689, 5368, 224233, 7, }, // Asia/Aqtobe
- { 689, 964, 224240, 7, }, // Asia/Ashgabat
- { 689, 8624, 224247, 6, }, // Asia/Atyrau
- { 689, 3607, 224253, 6, }, // Asia/Baghdad
- { 689, 5534, 224259, 7, }, // Asia/Bahrain
- { 689, 3653, 224266, 4, }, // Asia/Baku
- { 689, 4466, 224270, 7, }, // Asia/Bangkok
- { 689, 3571, 224277, 7, }, // Asia/Barnaul
- { 689, 4086, 224284, 6, }, // Asia/Beirut
- { 689, 3778, 224290, 6, }, // Asia/Bishkek
- { 689, 5989, 224296, 6, }, // Asia/Brunei
- { 689, 4601, 224302, 4, }, // Asia/Chita
- { 689, 4511, 224306, 7, }, // Asia/Colombo
- { 689, 4540, 224313, 8, }, // Asia/Damascus
- { 689, 1093, 222867, 4, }, // Asia/Dhaka
- { 689, 6192, 224321, 4, }, // Asia/Dili
- { 689, 3596, 224325, 5, }, // Asia/Dubai
- { 689, 6159, 224330, 7, }, // Asia/Dushanbe
- { 689, 8636, 224337, 9, }, // Asia/Famagusta
- { 689, 8651, 224346, 4, }, // Asia/Gaza
- { 689, 4795, 224350, 6, }, // Asia/Hebron
- { 689, 1259, 224356, 15, }, // Asia/Ho_Chi_Minh
- { 689, 2704, 224371, 9, }, // Asia/Hong_Kong
+ { 689, 1850, 223715, 7, }, // America/Noronha
+ { 689, 8301, 223722, 20, }, // America/North_Dakota/Beulah
+ { 689, 8329, 223742, 19, }, // America/North_Dakota/Center
+ { 689, 8357, 223761, 23, }, // America/North_Dakota/New_Salem
+ { 689, 393, 223784, 3, }, // America/Nuuk
+ { 689, 8388, 223787, 7, }, // America/Ojinaga
+ { 689, 2356, 223794, 6, }, // America/Panama
+ { 689, 6173, 223800, 10, }, // America/Paramaribo
+ { 689, 2973, 223810, 6, }, // America/Phoenix
+ { 689, 3945, 223816, 14, }, // America/Port-au-Prince
+ { 689, 5954, 223830, 13, }, // America/Port_of_Spain
+ { 689, 8404, 223843, 11, }, // America/Porto_Velho
+ { 689, 5843, 223854, 11, }, // America/Puerto_Rico
+ { 689, 4030, 223865, 12, }, // America/Punta_Arenas
+ { 689, 8424, 223877, 13, }, // America/Rankin_Inlet
+ { 689, 8445, 223890, 6, }, // America/Recife
+ { 689, 1995, 223896, 6, }, // America/Regina
+ { 689, 8460, 223902, 8, }, // America/Resolute
+ { 689, 695, 223910, 10, }, // America/Rio_Branco
+ { 689, 8477, 223920, 6, }, // America/Santarem
+ { 689, 2201, 223926, 8, }, // America/Santiago
+ { 689, 6111, 223934, 13, }, // America/Santo_Domingo
+ { 689, 1878, 223947, 9, }, // America/Sao_Paulo
+ { 689, 6899, 223956, 11, }, // America/Scoresbysund
+ { 689, 8494, 223967, 5, }, // America/Sitka
+ { 689, 8508, 223972, 14, }, // America/St_Barthelemy
+ { 689, 2061, 223986, 9, }, // America/St_Johns
+ { 689, 5863, 223995, 10, }, // America/St_Kitts
+ { 689, 5880, 224005, 10, }, // America/St_Lucia
+ { 689, 855, 224015, 10, }, // America/St_Thomas
+ { 689, 5913, 224025, 12, }, // America/St_Vincent
+ { 689, 8530, 224037, 13, }, // America/Swift_Current
+ { 689, 5461, 224050, 4, }, // America/Tegucigalpa
+ { 689, 5756, 224054, 4, }, // America/Thule
+ { 689, 313, 224058, 7, }, // America/Tijuana
+ { 689, 608, 224065, 7, }, // America/Toronto
+ { 689, 5688, 224072, 7, }, // America/Tortola
+ { 689, 2093, 224079, 8, }, // America/Vancouver
+ { 689, 2144, 224087, 9, }, // America/Whitehorse
+ { 689, 734, 224096, 8, }, // America/Winnipeg
+ { 689, 8552, 224104, 7, }, // America/Yakutat
+ { 689, 6001, 224111, 5, }, // Antarctica/Casey
+ { 689, 6094, 224116, 5, }, // Antarctica/Davis
+ { 689, 6133, 224121, 17, }, // Antarctica/DumontDUrville
+ { 689, 8568, 224138, 7, }, // Antarctica/Macquarie
+ { 689, 7066, 224145, 6, }, // Antarctica/Mawson
+ { 689, 7113, 224151, 9, }, // Antarctica/McMurdo
+ { 689, 8589, 224160, 6, }, // Antarctica/Palmer
+ { 689, 7226, 224166, 6, }, // Antarctica/Rothera
+ { 689, 7295, 224172, 5, }, // Antarctica/Syowa
+ { 689, 8607, 224177, 5, }, // Antarctica/Troll
+ { 689, 7374, 224182, 6, }, // Antarctica/Vostok
+ { 689, 1429, 224188, 10, }, // Arctic/Longyearbyen
+ { 689, 5570, 224198, 4, }, // Asia/Aden
+ { 689, 5395, 224202, 6, }, // Asia/Almaty
+ { 689, 3968, 224208, 5, }, // Asia/Amman
+ { 689, 5511, 224213, 6, }, // Asia/Anadyr
+ { 689, 5523, 224219, 5, }, // Asia/Aqtau
+ { 689, 5368, 224224, 7, }, // Asia/Aqtobe
+ { 689, 964, 224231, 7, }, // Asia/Ashgabat
+ { 689, 8624, 224238, 6, }, // Asia/Atyrau
+ { 689, 3607, 224244, 6, }, // Asia/Baghdad
+ { 689, 5534, 224250, 7, }, // Asia/Bahrain
+ { 689, 3653, 224257, 4, }, // Asia/Baku
+ { 689, 4466, 224261, 7, }, // Asia/Bangkok
+ { 689, 3571, 224268, 7, }, // Asia/Barnaul
+ { 689, 4086, 224275, 6, }, // Asia/Beirut
+ { 689, 3778, 224281, 6, }, // Asia/Bishkek
+ { 689, 5989, 224287, 6, }, // Asia/Brunei
+ { 689, 4601, 224293, 4, }, // Asia/Chita
+ { 689, 4511, 224297, 7, }, // Asia/Colombo
+ { 689, 4540, 224304, 8, }, // Asia/Damascus
+ { 689, 1093, 222858, 4, }, // Asia/Dhaka
+ { 689, 6192, 224312, 4, }, // Asia/Dili
+ { 689, 3596, 224316, 5, }, // Asia/Dubai
+ { 689, 6159, 224321, 7, }, // Asia/Dushanbe
+ { 689, 8636, 224328, 9, }, // Asia/Famagusta
+ { 689, 8651, 224337, 4, }, // Asia/Gaza
+ { 689, 4795, 224341, 6, }, // Asia/Hebron
+ { 689, 1259, 224347, 15, }, // Asia/Ho_Chi_Minh
+ { 689, 2704, 224362, 9, }, // Asia/Hong_Kong
{ 689, 4771, 26836, 4, }, // Asia/Hovd
- { 689, 4184, 224380, 7, }, // Asia/Irkutsk
+ { 689, 4184, 224371, 7, }, // Asia/Irkutsk
{ 689, 7006, 4248, 7, }, // Asia/Jakarta
- { 689, 6992, 224387, 8, }, // Asia/Jayapura
- { 689, 1290, 224395, 9, }, // Asia/Jerusalem
- { 689, 3560, 224404, 5, }, // Asia/Kabul
- { 689, 4316, 224409, 8, }, // Asia/Kamchatka
- { 689, 4239, 224417, 6, }, // Asia/Karachi
- { 689, 1185, 224423, 8, }, // Asia/Kathmandu
- { 689, 8661, 224431, 7, }, // Asia/Khandyga
- { 689, 992, 224438, 7, }, // Asia/Kolkata
- { 689, 4197, 224445, 11, }, // Asia/Krasnoyarsk
- { 689, 4859, 224456, 12, }, // Asia/Kuala_Lumpur
- { 689, 5976, 224468, 6, }, // Asia/Kuching
- { 689, 5547, 224474, 6, }, // Asia/Kuwait
- { 689, 1211, 224480, 4, }, // Asia/Macau
- { 689, 4017, 224484, 7, }, // Asia/Magadan
- { 689, 1349, 224491, 7, }, // Asia/Makassar
- { 689, 7182, 224498, 6, }, // Asia/Manila
- { 689, 6920, 224504, 6, }, // Asia/Muscat
- { 689, 2554, 224510, 8, }, // Asia/Nicosia
- { 689, 8675, 224518, 12, }, // Asia/Novokuznetsk
- { 689, 4135, 224530, 11, }, // Asia/Novosibirsk
+ { 689, 6992, 224378, 8, }, // Asia/Jayapura
+ { 689, 1290, 224386, 9, }, // Asia/Jerusalem
+ { 689, 3560, 224395, 5, }, // Asia/Kabul
+ { 689, 4316, 224400, 8, }, // Asia/Kamchatka
+ { 689, 4239, 224408, 6, }, // Asia/Karachi
+ { 689, 1185, 224414, 8, }, // Asia/Kathmandu
+ { 689, 8661, 224422, 7, }, // Asia/Khandyga
+ { 689, 992, 224429, 7, }, // Asia/Kolkata
+ { 689, 4197, 224436, 11, }, // Asia/Krasnoyarsk
+ { 689, 4859, 224447, 12, }, // Asia/Kuala_Lumpur
+ { 689, 5976, 224459, 6, }, // Asia/Kuching
+ { 689, 5547, 224465, 6, }, // Asia/Kuwait
+ { 689, 1211, 224471, 4, }, // Asia/Macau
+ { 689, 4017, 224475, 7, }, // Asia/Magadan
+ { 689, 1349, 224482, 7, }, // Asia/Makassar
+ { 689, 7182, 224489, 6, }, // Asia/Manila
+ { 689, 6920, 224495, 6, }, // Asia/Muscat
+ { 689, 2554, 224501, 8, }, // Asia/Nicosia
+ { 689, 8675, 224509, 12, }, // Asia/Novokuznetsk
+ { 689, 4135, 224521, 11, }, // Asia/Novosibirsk
{ 689, 4229, 123801, 4, }, // Asia/Omsk
{ 689, 7145, 91266, 4, }, // Asia/Oral
- { 689, 6961, 224541, 9, }, // Asia/Phnom_Penh
- { 689, 8693, 224550, 9, }, // Asia/Pontianak
- { 689, 4214, 224559, 9, }, // Asia/Pyongyang
+ { 689, 6961, 224532, 9, }, // Asia/Phnom_Penh
+ { 689, 8693, 224541, 9, }, // Asia/Pontianak
+ { 689, 4214, 224550, 9, }, // Asia/Pyongyang
{ 689, 5559, 210375, 5, }, // Asia/Qatar
- { 689, 8708, 224568, 7, }, // Asia/Qostanay
- { 689, 4269, 224575, 8, }, // Asia/Qyzylorda
- { 689, 3584, 224583, 5, }, // Asia/Riyadh
- { 689, 4408, 224588, 7, }, // Asia/Sakhalin
- { 689, 7245, 224595, 9, }, // Asia/Samarkand
- { 689, 3279, 224604, 4, }, // Asia/Seoul
- { 689, 1053, 224608, 6, }, // Asia/Shanghai
- { 689, 3300, 224614, 8, }, // Asia/Singapore
- { 689, 4297, 224622, 13, }, // Asia/Srednekolymsk
- { 689, 3263, 224635, 6, }, // Asia/Taipei
- { 689, 4781, 224641, 7, }, // Asia/Tashkent
- { 689, 3915, 224648, 7, }, // Asia/Tbilisi
- { 689, 2772, 224655, 6, }, // Asia/Tehran
- { 689, 1317, 224661, 6, }, // Asia/Thimphu
- { 689, 2821, 224667, 5, }, // Asia/Tokyo
- { 689, 4572, 224672, 5, }, // Asia/Tomsk
- { 689, 1021, 224677, 9, }, // Asia/Ulaanbaatar
- { 689, 1159, 224686, 6, }, // Asia/Urumqi
- { 689, 8722, 224692, 9, }, // Asia/Ust-Nera
- { 689, 6977, 224701, 9, }, // Asia/Vientiane
- { 689, 4710, 224710, 11, }, // Asia/Vladivostok
- { 689, 4828, 224721, 7, }, // Asia/Yakutsk
- { 689, 1235, 224728, 6, }, // Asia/Yangon
- { 689, 3883, 224734, 13, }, // Asia/Yekaterinburg
- { 689, 3747, 224747, 7, }, // Asia/Yerevan
- { 689, 3663, 224754, 6, }, // Atlantic/Azores
- { 689, 5671, 224760, 7, }, // Atlantic/Bermuda
- { 689, 6628, 224767, 6, }, // Atlantic/Canary
- { 689, 3727, 224773, 9, }, // Atlantic/Cape_Verde
- { 689, 1395, 224782, 4, }, // Atlantic/Faroe
- { 689, 8736, 224786, 7, }, // Atlantic/Madeira
- { 689, 2748, 224793, 9, }, // Atlantic/Reykjavik
- { 689, 7272, 224802, 11, }, // Atlantic/South_Georgia
- { 689, 6821, 224813, 11, }, // Atlantic/St_Helena
- { 689, 6644, 224824, 6, }, // Atlantic/Stanley
- { 689, 1670, 224830, 8, }, // Australia/Adelaide
- { 689, 1635, 224838, 8, }, // Australia/Brisbane
- { 689, 1799, 224846, 11, }, // Australia/Broken_Hill
- { 689, 1583, 224857, 6, }, // Australia/Darwin
- { 689, 3637, 224863, 5, }, // Australia/Eucla
- { 689, 1516, 224868, 6, }, // Australia/Hobart
- { 689, 8753, 224874, 9, }, // Australia/Lindeman
- { 689, 1547, 224883, 9, }, // Australia/Lord_Howe
- { 689, 1727, 224892, 8, }, // Australia/Melbourne
- { 689, 1762, 224900, 4, }, // Australia/Perth
- { 689, 1463, 224904, 5, }, // Australia/Sydney
- { 689, 6441, 224909, 9, }, // Europe/Amsterdam
- { 689, 6216, 224918, 7, }, // Europe/Andorra
- { 689, 3620, 224925, 9, }, // Europe/Astrakhan
- { 689, 2300, 224934, 5, }, // Europe/Athens
- { 689, 6336, 224939, 8, }, // Europe/Belgrade
- { 689, 4757, 224947, 6, }, // Europe/Berlin
- { 689, 6488, 224953, 10, }, // Europe/Bratislava
- { 689, 2167, 224963, 8, }, // Europe/Brussels
- { 689, 3928, 224971, 8, }, // Europe/Bucharest
- { 689, 3806, 224979, 8, }, // Europe/Budapest
- { 689, 8772, 224987, 8, }, // Europe/Busingen
- { 689, 2583, 224995, 7, }, // Europe/Chisinau
- { 689, 6289, 225002, 10, }, // Europe/Copenhagen
- { 689, 2338, 225012, 5, }, // Europe/Dublin
- { 689, 6307, 225017, 9, }, // Europe/Gibraltar
- { 689, 8788, 225026, 6, }, // Europe/Guernsey
- { 689, 6612, 225032, 8, }, // Europe/Helsinki
- { 689, 8804, 225040, 11, }, // Europe/Isle_of_Man
- { 689, 1130, 225051, 8, }, // Europe/Istanbul
- { 689, 8823, 225059, 5, }, // Europe/Jersey
- { 689, 3979, 225064, 11, }, // Europe/Kaliningrad
- { 689, 8929, 225075, 5, }, // Europe/Kirov
- { 689, 2527, 225080, 4, }, // Europe/Kyiv
- { 689, 3213, 225084, 6, }, // Europe/Lisbon
- { 689, 6506, 225090, 9, }, // Europe/Ljubljana
- { 689, 2501, 225099, 4, }, // Europe/London
- { 689, 6365, 225103, 8, }, // Europe/Luxembourg
- { 689, 4892, 225111, 6, }, // Europe/Madrid
- { 689, 6397, 225117, 5, }, // Europe/Malta
- { 689, 6582, 225122, 8, }, // Europe/Mariehamn
- { 689, 3693, 225130, 5, }, // Europe/Minsk
- { 689, 6410, 225135, 6, }, // Europe/Monaco
- { 689, 3537, 225141, 5, }, // Europe/Moscow
- { 689, 6458, 225146, 4, }, // Europe/Oslo
- { 689, 4284, 225150, 5, }, // Europe/Paris
- { 689, 6424, 225155, 9, }, // Europe/Podgorica
- { 689, 6275, 225164, 4, }, // Europe/Prague
- { 689, 8837, 225168, 4, }, // Europe/Riga
+ { 689, 8708, 224559, 7, }, // Asia/Qostanay
+ { 689, 4269, 224566, 8, }, // Asia/Qyzylorda
+ { 689, 3584, 224574, 5, }, // Asia/Riyadh
+ { 689, 4408, 224579, 7, }, // Asia/Sakhalin
+ { 689, 7245, 224586, 9, }, // Asia/Samarkand
+ { 689, 3279, 224595, 4, }, // Asia/Seoul
+ { 689, 1053, 224599, 6, }, // Asia/Shanghai
+ { 689, 3300, 224605, 8, }, // Asia/Singapore
+ { 689, 4297, 224613, 13, }, // Asia/Srednekolymsk
+ { 689, 3263, 224626, 6, }, // Asia/Taipei
+ { 689, 4781, 224632, 7, }, // Asia/Tashkent
+ { 689, 3915, 224639, 7, }, // Asia/Tbilisi
+ { 689, 2772, 224646, 6, }, // Asia/Tehran
+ { 689, 1317, 224652, 6, }, // Asia/Thimphu
+ { 689, 2821, 224658, 5, }, // Asia/Tokyo
+ { 689, 4572, 224663, 5, }, // Asia/Tomsk
+ { 689, 1021, 224668, 9, }, // Asia/Ulaanbaatar
+ { 689, 1159, 224677, 6, }, // Asia/Urumqi
+ { 689, 8722, 224683, 9, }, // Asia/Ust-Nera
+ { 689, 6977, 224692, 9, }, // Asia/Vientiane
+ { 689, 4710, 224701, 11, }, // Asia/Vladivostok
+ { 689, 4828, 224712, 7, }, // Asia/Yakutsk
+ { 689, 1235, 224719, 6, }, // Asia/Yangon
+ { 689, 3883, 224725, 13, }, // Asia/Yekaterinburg
+ { 689, 3747, 224738, 7, }, // Asia/Yerevan
+ { 689, 3663, 224745, 6, }, // Atlantic/Azores
+ { 689, 5671, 224751, 7, }, // Atlantic/Bermuda
+ { 689, 6628, 224758, 6, }, // Atlantic/Canary
+ { 689, 3727, 224764, 9, }, // Atlantic/Cape_Verde
+ { 689, 1395, 224773, 4, }, // Atlantic/Faroe
+ { 689, 8736, 224777, 7, }, // Atlantic/Madeira
+ { 689, 2748, 224784, 9, }, // Atlantic/Reykjavik
+ { 689, 7272, 224793, 11, }, // Atlantic/South_Georgia
+ { 689, 6821, 224804, 11, }, // Atlantic/St_Helena
+ { 689, 6644, 224815, 6, }, // Atlantic/Stanley
+ { 689, 1670, 224821, 8, }, // Australia/Adelaide
+ { 689, 1635, 224829, 8, }, // Australia/Brisbane
+ { 689, 1799, 224837, 11, }, // Australia/Broken_Hill
+ { 689, 1583, 224848, 6, }, // Australia/Darwin
+ { 689, 3637, 224854, 5, }, // Australia/Eucla
+ { 689, 1516, 224859, 6, }, // Australia/Hobart
+ { 689, 8753, 224865, 9, }, // Australia/Lindeman
+ { 689, 1547, 224874, 9, }, // Australia/Lord_Howe
+ { 689, 1727, 224883, 8, }, // Australia/Melbourne
+ { 689, 1762, 224891, 4, }, // Australia/Perth
+ { 689, 1463, 224895, 5, }, // Australia/Sydney
+ { 689, 6441, 224900, 9, }, // Europe/Amsterdam
+ { 689, 6216, 224909, 7, }, // Europe/Andorra
+ { 689, 3620, 224916, 9, }, // Europe/Astrakhan
+ { 689, 2300, 224925, 5, }, // Europe/Athens
+ { 689, 6336, 224930, 8, }, // Europe/Belgrade
+ { 689, 4757, 224938, 6, }, // Europe/Berlin
+ { 689, 6488, 224944, 10, }, // Europe/Bratislava
+ { 689, 2167, 224954, 8, }, // Europe/Brussels
+ { 689, 3928, 224962, 8, }, // Europe/Bucharest
+ { 689, 3806, 224970, 8, }, // Europe/Budapest
+ { 689, 8772, 224978, 8, }, // Europe/Busingen
+ { 689, 2583, 224986, 7, }, // Europe/Chisinau
+ { 689, 6289, 224993, 10, }, // Europe/Copenhagen
+ { 689, 2338, 225003, 5, }, // Europe/Dublin
+ { 689, 6307, 225008, 9, }, // Europe/Gibraltar
+ { 689, 8788, 225017, 6, }, // Europe/Guernsey
+ { 689, 6612, 225023, 8, }, // Europe/Helsinki
+ { 689, 8804, 225031, 11, }, // Europe/Isle_of_Man
+ { 689, 1130, 225042, 8, }, // Europe/Istanbul
+ { 689, 8823, 225050, 5, }, // Europe/Jersey
+ { 689, 3979, 225055, 11, }, // Europe/Kaliningrad
+ { 689, 8929, 225066, 5, }, // Europe/Kirov
+ { 689, 2527, 225071, 4, }, // Europe/Kyiv
+ { 689, 3213, 225075, 6, }, // Europe/Lisbon
+ { 689, 6506, 225081, 9, }, // Europe/Ljubljana
+ { 689, 2501, 225090, 4, }, // Europe/London
+ { 689, 6365, 225094, 8, }, // Europe/Luxembourg
+ { 689, 4892, 225102, 6, }, // Europe/Madrid
+ { 689, 6397, 225108, 5, }, // Europe/Malta
+ { 689, 6582, 225113, 8, }, // Europe/Mariehamn
+ { 689, 3693, 225121, 5, }, // Europe/Minsk
+ { 689, 6410, 225126, 6, }, // Europe/Monaco
+ { 689, 3537, 225132, 5, }, // Europe/Moscow
+ { 689, 6458, 225137, 4, }, // Europe/Oslo
+ { 689, 4284, 225141, 5, }, // Europe/Paris
+ { 689, 6424, 225146, 9, }, // Europe/Podgorica
+ { 689, 6275, 225155, 4, }, // Europe/Prague
+ { 689, 8837, 225159, 4, }, // Europe/Riga
{ 689, 6324, 27088, 3, }, // Europe/Rome
- { 689, 4331, 225172, 6, }, // Europe/Samara
- { 689, 6470, 225178, 10, }, // Europe/San_Marino
- { 689, 6245, 225188, 8, }, // Europe/Sarajevo
- { 689, 4451, 225196, 7, }, // Europe/Saratov
- { 689, 8849, 225203, 10, }, // Europe/Simferopol
- { 689, 6383, 225213, 5, }, // Europe/Skopje
- { 689, 6599, 225218, 6, }, // Europe/Sofia
- { 689, 6523, 225224, 7, }, // Europe/Stockholm
- { 689, 8867, 225231, 5, }, // Europe/Tallinn
- { 689, 6202, 225236, 6, }, // Europe/Tirane
- { 689, 8882, 225242, 9, }, // Europe/Ulyanovsk
- { 689, 6352, 225251, 5, }, // Europe/Vaduz
- { 689, 6567, 225256, 7, }, // Europe/Vatican
- { 689, 6231, 225263, 6, }, // Europe/Vienna
- { 689, 8899, 225269, 7, }, // Europe/Vilnius
- { 689, 4727, 225276, 9, }, // Europe/Volgograd
- { 689, 3190, 225285, 5, }, // Europe/Warsaw
- { 689, 6261, 225290, 11, }, // Europe/Zagreb
- { 689, 6540, 225301, 5, }, // Europe/Zurich
- { 689, 5078, 225306, 9, }, // Indian/Antananarivo
- { 689, 6947, 225315, 6, }, // Indian/Chagos
- { 689, 6046, 225321, 8, }, // Indian/Christmas
- { 689, 6063, 225329, 5, }, // Indian/Cocos
- { 689, 5029, 225334, 6, }, // Indian/Comoro
- { 689, 6661, 225340, 9, }, // Indian/Kerguelen
- { 689, 7260, 225349, 4, }, // Indian/Mahe
- { 689, 7050, 225353, 8, }, // Indian/Maldives
- { 689, 4069, 225361, 9, }, // Indian/Mauritius
- { 689, 5098, 225370, 5, }, // Indian/Mayotte
- { 689, 7211, 225375, 7, }, // Indian/Reunion
- { 689, 4422, 225382, 4, }, // Pacific/Apia
- { 689, 932, 225386, 6, }, // Pacific/Auckland
- { 689, 3706, 225392, 10, }, // Pacific/Bougainville
- { 689, 3015, 225402, 5, }, // Pacific/Chatham
- { 689, 3157, 225407, 3, }, // Pacific/Chuuk
- { 689, 2237, 225410, 5, }, // Pacific/Easter
- { 689, 7360, 225415, 5, }, // Pacific/Efate
- { 689, 7327, 225420, 7, }, // Pacific/Fakaofo
- { 689, 3902, 225427, 4, }, // Pacific/Fiji
- { 689, 7343, 225431, 8, }, // Pacific/Funafuti
- { 689, 6678, 225439, 9, }, // Pacific/Galapagos
- { 689, 6696, 225448, 7, }, // Pacific/Gambier
- { 689, 3822, 225455, 11, }, // Pacific/Guadalcanal
- { 689, 6018, 223591, 4, }, // Pacific/Guam
- { 689, 3049, 225466, 6, }, // Pacific/Kanton
- { 689, 3998, 225472, 10, }, // Pacific/Kiritimati
- { 689, 7019, 225482, 6, }, // Pacific/Kosrae
- { 689, 2842, 225488, 9, }, // Pacific/Kwajalein
- { 689, 4877, 225497, 6, }, // Pacific/Majuro
- { 689, 4051, 225503, 8, }, // Pacific/Marquesas
- { 689, 8914, 225511, 6, }, // Pacific/Midway
- { 689, 7084, 225517, 5, }, // Pacific/Nauru
- { 689, 7132, 225522, 4, }, // Pacific/Niue
- { 689, 4168, 225526, 6, }, // Pacific/Norfolk
- { 689, 7098, 225532, 5, }, // Pacific/Noumea
- { 689, 3126, 225537, 11, }, // Pacific/Pago_Pago
- { 689, 7155, 225548, 5, }, // Pacific/Palau
- { 689, 7194, 225553, 7, }, // Pacific/Pitcairn
- { 689, 3096, 225560, 6, }, // Pacific/Pohnpei
- { 689, 4807, 225566, 12, }, // Pacific/Port_Moresby
- { 689, 6076, 225578, 9, }, // Pacific/Rarotonga
- { 689, 6031, 225587, 6, }, // Pacific/Saipan
- { 689, 7312, 225593, 6, }, // Pacific/Tahiti
- { 689, 6712, 225599, 6, }, // Pacific/Tarawa
- { 689, 4583, 225605, 9, }, // Pacific/Tongatapu
- { 689, 7392, 225614, 3, }, // Pacific/Wake
- { 689, 7405, 225617, 6, }, // Pacific/Wallis
+ { 689, 4331, 225163, 6, }, // Europe/Samara
+ { 689, 6470, 225169, 10, }, // Europe/San_Marino
+ { 689, 6245, 225179, 8, }, // Europe/Sarajevo
+ { 689, 4451, 225187, 7, }, // Europe/Saratov
+ { 689, 8849, 225194, 10, }, // Europe/Simferopol
+ { 689, 6383, 225204, 5, }, // Europe/Skopje
+ { 689, 6599, 225209, 6, }, // Europe/Sofia
+ { 689, 6523, 225215, 7, }, // Europe/Stockholm
+ { 689, 8867, 225222, 5, }, // Europe/Tallinn
+ { 689, 6202, 225227, 6, }, // Europe/Tirane
+ { 689, 8882, 225233, 9, }, // Europe/Ulyanovsk
+ { 689, 6352, 225242, 5, }, // Europe/Vaduz
+ { 689, 6567, 225247, 7, }, // Europe/Vatican
+ { 689, 6231, 225254, 6, }, // Europe/Vienna
+ { 689, 8899, 225260, 7, }, // Europe/Vilnius
+ { 689, 4727, 225267, 9, }, // Europe/Volgograd
+ { 689, 3190, 225276, 5, }, // Europe/Warsaw
+ { 689, 6261, 225281, 11, }, // Europe/Zagreb
+ { 689, 6540, 225292, 5, }, // Europe/Zurich
+ { 689, 5078, 225297, 9, }, // Indian/Antananarivo
+ { 689, 6947, 225306, 6, }, // Indian/Chagos
+ { 689, 6046, 225312, 8, }, // Indian/Christmas
+ { 689, 6063, 225320, 5, }, // Indian/Cocos
+ { 689, 5029, 225325, 6, }, // Indian/Comoro
+ { 689, 6661, 225331, 9, }, // Indian/Kerguelen
+ { 689, 7260, 225340, 4, }, // Indian/Mahe
+ { 689, 7050, 225344, 8, }, // Indian/Maldives
+ { 689, 4069, 225352, 9, }, // Indian/Mauritius
+ { 689, 5098, 225361, 5, }, // Indian/Mayotte
+ { 689, 7211, 225366, 7, }, // Indian/Reunion
+ { 689, 4422, 225373, 4, }, // Pacific/Apia
+ { 689, 932, 225377, 6, }, // Pacific/Auckland
+ { 689, 3706, 225383, 10, }, // Pacific/Bougainville
+ { 689, 3015, 225393, 5, }, // Pacific/Chatham
+ { 689, 3157, 225398, 3, }, // Pacific/Chuuk
+ { 689, 2237, 225401, 5, }, // Pacific/Easter
+ { 689, 7360, 225406, 5, }, // Pacific/Efate
+ { 689, 7327, 225411, 7, }, // Pacific/Fakaofo
+ { 689, 3902, 225418, 4, }, // Pacific/Fiji
+ { 689, 7343, 225422, 8, }, // Pacific/Funafuti
+ { 689, 6678, 225430, 9, }, // Pacific/Galapagos
+ { 689, 6696, 225439, 7, }, // Pacific/Gambier
+ { 689, 3822, 225446, 11, }, // Pacific/Guadalcanal
+ { 689, 6018, 223582, 4, }, // Pacific/Guam
+ { 689, 3049, 225457, 6, }, // Pacific/Kanton
+ { 689, 3998, 225463, 10, }, // Pacific/Kiritimati
+ { 689, 7019, 225473, 6, }, // Pacific/Kosrae
+ { 689, 2842, 225479, 9, }, // Pacific/Kwajalein
+ { 689, 4877, 225488, 6, }, // Pacific/Majuro
+ { 689, 4051, 225494, 8, }, // Pacific/Marquesas
+ { 689, 8914, 225502, 6, }, // Pacific/Midway
+ { 689, 7084, 225508, 5, }, // Pacific/Nauru
+ { 689, 7132, 225513, 4, }, // Pacific/Niue
+ { 689, 4168, 225517, 6, }, // Pacific/Norfolk
+ { 689, 7098, 225523, 5, }, // Pacific/Noumea
+ { 689, 3126, 225528, 11, }, // Pacific/Pago_Pago
+ { 689, 7155, 225539, 5, }, // Pacific/Palau
+ { 689, 7194, 225544, 7, }, // Pacific/Pitcairn
+ { 689, 3096, 225551, 6, }, // Pacific/Pohnpei
+ { 689, 4807, 225557, 12, }, // Pacific/Port_Moresby
+ { 689, 6076, 225569, 9, }, // Pacific/Rarotonga
+ { 689, 6031, 225578, 6, }, // Pacific/Saipan
+ { 689, 7312, 225584, 6, }, // Pacific/Tahiti
+ { 689, 6712, 225590, 6, }, // Pacific/Tarawa
+ { 689, 4583, 225596, 9, }, // Pacific/Tongatapu
+ { 689, 7392, 225605, 3, }, // Pacific/Wake
+ { 689, 7405, 225608, 6, }, // Pacific/Wallis
{ 690, 6788, 29964, 7, }, // Africa/Abidjan Kuvi/Devanagari/India
{ 690, 6760, 88252, 5, }, // Africa/Accra
{ 690, 5059, 88257, 10, }, // Africa/Addis_Ababa
@@ -50854,7 +50854,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 14, 88276, 7, }, // Africa/Asmara
{ 690, 44, 88283, 6, }, // Africa/Bamako
{ 690, 5257, 88289, 6, }, // Africa/Bangui
- { 690, 6746, 225623, 9, }, // Africa/Banjul
+ { 690, 6746, 225614, 9, }, // Africa/Banjul
{ 690, 7435, 88301, 5, }, // Africa/Bissau
{ 690, 4957, 88306, 9, }, // Africa/Blantyre
{ 690, 5287, 88315, 11, }, // Africa/Brazzaville
@@ -50868,31 +50868,31 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 5043, 88368, 6, }, // Africa/Djibouti
{ 690, 5243, 88374, 5, }, // Africa/Douala
{ 690, 5166, 88379, 8, }, // Africa/El_Aaiun
- { 690, 6853, 225632, 9, }, // Africa/Freetown
+ { 690, 6853, 225623, 9, }, // Africa/Freetown
{ 690, 4906, 88396, 7, }, // Africa/Gaborone
{ 690, 5015, 88403, 5, }, // Africa/Harare
{ 690, 4479, 88408, 10, }, // Africa/Johannesburg
{ 690, 4499, 30154, 4, }, // Africa/Juba
{ 690, 5151, 88418, 6, }, // Africa/Kampala
- { 690, 4524, 225641, 7, }, // Africa/Khartoum
+ { 690, 4524, 225632, 7, }, // Africa/Khartoum
{ 690, 4973, 88424, 6, }, // Africa/Kigali
- { 690, 5306, 225648, 7, }, // Africa/Kinshasa
+ { 690, 5306, 225639, 7, }, // Africa/Kinshasa
{ 690, 4744, 88437, 5, }, // Africa/Lagos
{ 690, 5336, 88442, 10, }, // Africa/Libreville
{ 690, 6869, 88452, 3, }, // Africa/Lome
{ 690, 5211, 88455, 6, }, // Africa/Luanda
- { 690, 4939, 225655, 9, }, // Africa/Lubumbashi
+ { 690, 4939, 225646, 9, }, // Africa/Lubumbashi
{ 690, 5001, 30221, 6, }, // Africa/Lusaka
{ 690, 5322, 88470, 5, }, // Africa/Malabo
{ 690, 4987, 88475, 6, }, // Africa/Maputo
{ 690, 5197, 30239, 6, }, // Africa/Maseru
- { 690, 5182, 225664, 9, }, // Africa/Mbabane
- { 690, 5113, 225673, 8, }, // Africa/Mogadishu
+ { 690, 5182, 225655, 9, }, // Africa/Mbabane
+ { 690, 5113, 225664, 8, }, // Africa/Mogadishu
{ 690, 7034, 88496, 9, }, // Africa/Monrovia
- { 690, 3853, 225681, 7, }, // Africa/Nairobi
+ { 690, 3853, 225672, 7, }, // Africa/Nairobi
{ 690, 5271, 88513, 8, }, // Africa/Ndjamena
{ 690, 5354, 88521, 6, }, // Africa/Niamey
- { 690, 6803, 225688, 7, }, // Africa/Nouakchott
+ { 690, 6803, 225679, 7, }, // Africa/Nouakchott
{ 690, 6727, 88534, 7, }, // Africa/Ouagadougou
{ 690, 5225, 88541, 11, }, // Africa/Porto-Novo
{ 690, 4435, 88552, 7, }, // Africa/Sao_Tome
@@ -50912,45 +50912,45 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 565, 88633, 8, }, // America/Argentina/Mendoza
{ 690, 7489, 88641, 12, }, // America/Argentina/Rio_Gallegos
{ 690, 7520, 30437, 6, }, // America/Argentina/Salta
- { 690, 7544, 225695, 11, }, // America/Argentina/San_Juan
- { 690, 5580, 225706, 10, }, // America/Argentina/San_Luis
+ { 690, 7544, 225686, 11, }, // America/Argentina/San_Juan
+ { 690, 5580, 225697, 10, }, // America/Argentina/San_Luis
{ 690, 7571, 88669, 6, }, // America/Argentina/Tucuman
- { 690, 7597, 225716, 7, }, // America/Argentina/Ushuaia
+ { 690, 7597, 225707, 7, }, // America/Argentina/Ushuaia
{ 690, 5640, 88682, 5, }, // America/Aruba
- { 690, 4252, 225723, 8, }, // America/Asuncion
+ { 690, 4252, 225714, 8, }, // America/Asuncion
{ 690, 237, 88695, 8, }, // America/Atikokan
{ 690, 3679, 88703, 5, }, // America/Bahia
{ 690, 7623, 88708, 15, }, // America/Bahia_Banderas
{ 690, 5654, 88723, 8, }, // America/Barbados
{ 690, 7646, 30526, 5, }, // America/Belem
{ 690, 5407, 88731, 6, }, // America/Belize
- { 690, 7660, 225731, 12, }, // America/Blanc-Sablon
+ { 690, 7660, 225722, 12, }, // America/Blanc-Sablon
{ 690, 7681, 88750, 10, }, // America/Boa_Vista
{ 690, 4361, 88760, 6, }, // America/Bogota
{ 690, 7699, 88766, 5, }, // America/Boise
- { 690, 7713, 225743, 12, }, // America/Cambridge_Bay
- { 690, 7735, 225755, 16, }, // America/Campo_Grande
- { 690, 3868, 225771, 8, }, // America/Cancun
+ { 690, 7713, 225734, 12, }, // America/Cambridge_Bay
+ { 690, 7735, 225746, 16, }, // America/Campo_Grande
+ { 690, 3868, 225762, 8, }, // America/Cancun
{ 690, 4694, 88805, 6, }, // America/Caracas
{ 690, 4345, 30609, 5, }, // America/Cayenne
{ 690, 5496, 138409, 7, }, // America/Cayman
- { 690, 2260, 225779, 6, }, // America/Chicago
+ { 690, 2260, 225770, 6, }, // America/Chicago
{ 690, 7756, 88817, 8, }, // America/Chihuahua
{ 690, 5422, 88841, 11, }, // America/Costa_Rica
{ 690, 7796, 30642, 8, }, // America/Creston
{ 690, 3791, 88852, 7, }, // America/Cuiaba
{ 690, 5723, 88859, 7, }, // America/Curacao
- { 690, 7812, 225785, 11, }, // America/Danmarkshavn
+ { 690, 7812, 225776, 11, }, // America/Danmarkshavn
{ 690, 7833, 88877, 4, }, // America/Dawson
{ 690, 7848, 88881, 10, }, // America/Dawson_Creek
{ 690, 805, 88891, 5, }, // America/Denver
{ 690, 3465, 88896, 8, }, // America/Detroit
{ 690, 5739, 88904, 8, }, // America/Dominica
{ 690, 893, 88912, 6, }, // America/Edmonton
- { 690, 7869, 225796, 8, }, // America/Eirunepe
+ { 690, 7869, 225787, 8, }, // America/Eirunepe
{ 690, 5441, 88918, 11, }, // America/El_Salvador
- { 690, 7886, 225804, 13, }, // America/Fort_Nelson
- { 690, 7906, 225817, 12, }, // America/Fortaleza
+ { 690, 7886, 225795, 13, }, // America/Fort_Nelson
+ { 690, 7906, 225808, 12, }, // America/Fortaleza
{ 690, 7924, 30760, 8, }, // America/Glace_Bay
{ 690, 6881, 113910, 6, }, // America/Goose_Bay
{ 690, 4612, 88974, 11, }, // America/Grand_Turk
@@ -50959,7 +50959,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 3760, 30806, 10, }, // America/Guatemala
{ 690, 4841, 88994, 9, }, // America/Guayaquil
{ 690, 6932, 89003, 5, }, // America/Guyana
- { 690, 1939, 225829, 9, }, // America/Halifax
+ { 690, 1939, 225820, 9, }, // America/Halifax
{ 690, 2281, 89018, 5, }, // America/Havana
{ 690, 7942, 89023, 11, }, // America/Hermosillo
{ 690, 348, 89034, 13, }, // America/Indiana/Indianapolis
@@ -50971,20 +50971,20 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 8060, 89131, 18, }, // America/Indiana/Vincennes
{ 690, 8086, 89149, 17, }, // America/Indiana/Winamac
{ 690, 8110, 30999, 6, }, // America/Inuvik
- { 690, 660, 225838, 8, }, // America/Iqaluit
+ { 690, 660, 225829, 8, }, // America/Iqaluit
{ 690, 2799, 138734, 6, }, // America/Jamaica
{ 690, 5380, 89178, 7, }, // America/Juneau
{ 690, 521, 89185, 8, }, // America/Kentucky/Louisville
{ 690, 8125, 89193, 17, }, // America/Kentucky/Monticello
- { 690, 5704, 225846, 13, }, // America/Kralendijk
+ { 690, 5704, 225837, 13, }, // America/Kralendijk
{ 690, 4376, 89222, 7, }, // America/La_Paz
{ 690, 7169, 31064, 4, }, // America/Lima
{ 690, 3239, 89229, 11, }, // America/Los_Angeles
{ 690, 5932, 89240, 22, }, // America/Lower_Princes
{ 690, 8153, 89262, 5, }, // America/Maceio
{ 690, 8168, 89267, 7, }, // America/Managua
- { 690, 1908, 225859, 4, }, // America/Manaus
- { 690, 5897, 225863, 7, }, // America/Marigot
+ { 690, 1908, 225850, 4, }, // America/Manaus
+ { 690, 5897, 225854, 7, }, // America/Marigot
{ 690, 5805, 89285, 9, }, // America/Martinique
{ 690, 8184, 89294, 9, }, // America/Matamoros
{ 690, 2917, 89303, 9, }, // America/Mazatlan
@@ -51001,43 +51001,43 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 2379, 89392, 9, }, // America/New_York
{ 690, 8288, 89314, 3, }, // America/Nome
{ 690, 1850, 89401, 8, }, // America/Noronha
- { 690, 8301, 225870, 19, }, // America/North_Dakota/Beulah
- { 690, 8329, 225889, 18, }, // America/North_Dakota/Center
- { 690, 8357, 225907, 23, }, // America/North_Dakota/New_Salem
+ { 690, 8301, 225861, 19, }, // America/North_Dakota/Beulah
+ { 690, 8329, 225880, 18, }, // America/North_Dakota/Center
+ { 690, 8357, 225898, 23, }, // America/North_Dakota/New_Salem
{ 690, 393, 89472, 3, }, // America/Nuuk
- { 690, 8388, 225930, 9, }, // America/Ojinaga
+ { 690, 8388, 225921, 9, }, // America/Ojinaga
{ 690, 2356, 89484, 5, }, // America/Panama
{ 690, 6173, 89489, 10, }, // America/Paramaribo
- { 690, 2973, 225939, 8, }, // America/Phoenix
+ { 690, 2973, 225930, 8, }, // America/Phoenix
{ 690, 3945, 89507, 14, }, // America/Port-au-Prince
- { 690, 5954, 225947, 15, }, // America/Port_of_Spain
+ { 690, 5954, 225938, 15, }, // America/Port_of_Spain
{ 690, 8404, 89536, 13, }, // America/Porto_Velho
{ 690, 5843, 89549, 11, }, // America/Puerto_Rico
{ 690, 4030, 89560, 12, }, // America/Punta_Arenas
{ 690, 8424, 89572, 12, }, // America/Rankin_Inlet
- { 690, 8445, 225962, 7, }, // America/Recife
+ { 690, 8445, 225953, 7, }, // America/Recife
{ 690, 1995, 31431, 6, }, // America/Regina
{ 690, 8460, 89591, 9, }, // America/Resolute
{ 690, 695, 89600, 12, }, // America/Rio_Branco
- { 690, 8477, 225969, 9, }, // America/Santarem
- { 690, 2201, 225978, 8, }, // America/Santiago
+ { 690, 8477, 225960, 9, }, // America/Santarem
+ { 690, 2201, 225969, 8, }, // America/Santiago
{ 690, 6111, 89629, 13, }, // America/Santo_Domingo
{ 690, 1878, 89642, 9, }, // America/Sao_Paulo
{ 690, 6899, 89651, 13, }, // America/Scoresbysund
{ 690, 8494, 89664, 6, }, // America/Sitka
- { 690, 8508, 225986, 15, }, // America/St_Barthelemy
+ { 690, 8508, 225977, 15, }, // America/St_Barthelemy
{ 690, 2061, 114496, 10, }, // America/St_Johns
{ 690, 5863, 89694, 10, }, // America/St_Kitts
{ 690, 5880, 89704, 11, }, // America/St_Lucia
- { 690, 855, 226001, 9, }, // America/St_Thomas
+ { 690, 855, 225992, 9, }, // America/St_Thomas
{ 690, 5913, 89724, 12, }, // America/St_Vincent
- { 690, 8530, 226010, 13, }, // America/Swift_Current
+ { 690, 8530, 226001, 13, }, // America/Swift_Current
{ 690, 5461, 89749, 11, }, // America/Tegucigalpa
{ 690, 5756, 129890, 4, }, // America/Thule
{ 690, 313, 89766, 7, }, // America/Tijuana
{ 690, 608, 89773, 6, }, // America/Toronto
{ 690, 5688, 89779, 8, }, // America/Tortola
- { 690, 2093, 226023, 10, }, // America/Vancouver
+ { 690, 2093, 226014, 10, }, // America/Vancouver
{ 690, 2144, 89794, 11, }, // America/Whitehorse
{ 690, 734, 89805, 7, }, // America/Winnipeg
{ 690, 8552, 89812, 7, }, // America/Yakutat
@@ -51046,37 +51046,37 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 6133, 89824, 19, }, // Antarctica/DumontDUrville
{ 690, 8568, 89843, 7, }, // Antarctica/Macquarie
{ 690, 7066, 89850, 4, }, // Antarctica/Mawson
- { 690, 7113, 226033, 11, }, // Antarctica/McMurdo
+ { 690, 7113, 226024, 11, }, // Antarctica/McMurdo
{ 690, 8589, 89863, 4, }, // Antarctica/Palmer
{ 690, 7226, 89867, 6, }, // Antarctica/Rothera
{ 690, 7295, 89873, 6, }, // Antarctica/Syowa
{ 690, 8607, 89879, 5, }, // Antarctica/Troll
{ 690, 7374, 89884, 7, }, // Antarctica/Vostok
- { 690, 1429, 226044, 12, }, // Arctic/Longyearbyen
+ { 690, 1429, 226035, 12, }, // Arctic/Longyearbyen
{ 690, 5570, 89904, 4, }, // Asia/Aden
{ 690, 5395, 89908, 7, }, // Asia/Almaty
{ 690, 3968, 89915, 6, }, // Asia/Amman
{ 690, 5511, 89921, 6, }, // Asia/Anadyr
{ 690, 5523, 31778, 6, }, // Asia/Aqtau
{ 690, 5368, 114670, 7, }, // Asia/Aqtobe
- { 690, 964, 226056, 8, }, // Asia/Ashgabat
+ { 690, 964, 226047, 8, }, // Asia/Ashgabat
{ 690, 8624, 89933, 5, }, // Asia/Atyrau
{ 690, 3607, 89938, 5, }, // Asia/Baghdad
{ 690, 5534, 89943, 5, }, // Asia/Bahrain
{ 690, 3653, 88857, 4, }, // Asia/Baku
- { 690, 4466, 226064, 9, }, // Asia/Bangkok
+ { 690, 4466, 226055, 9, }, // Asia/Bangkok
{ 690, 3571, 89954, 6, }, // Asia/Barnaul
{ 690, 4086, 89960, 5, }, // Asia/Beirut
- { 690, 3778, 226073, 7, }, // Asia/Bishkek
- { 690, 5989, 226080, 8, }, // Asia/Brunei
- { 690, 4601, 226088, 6, }, // Asia/Chita
+ { 690, 3778, 226064, 7, }, // Asia/Bishkek
+ { 690, 5989, 226071, 8, }, // Asia/Brunei
+ { 690, 4601, 226079, 6, }, // Asia/Chita
{ 690, 4511, 89978, 6, }, // Asia/Colombo
{ 690, 4540, 89984, 7, }, // Asia/Damascus
{ 690, 1093, 89991, 4, }, // Asia/Dhaka
{ 690, 6192, 89995, 4, }, // Asia/Dili
- { 690, 3596, 226094, 5, }, // Asia/Dubai
- { 690, 6159, 226099, 7, }, // Asia/Dushanbe
- { 690, 8636, 226106, 11, }, // Asia/Famagusta
+ { 690, 3596, 226085, 5, }, // Asia/Dubai
+ { 690, 6159, 226090, 7, }, // Asia/Dushanbe
+ { 690, 8636, 226097, 11, }, // Asia/Famagusta
{ 690, 8651, 90021, 5, }, // Asia/Gaza
{ 690, 4795, 90026, 7, }, // Asia/Hebron
{ 690, 1259, 90033, 16, }, // Asia/Ho_Chi_Minh
@@ -51085,12 +51085,12 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 4184, 90063, 10, }, // Asia/Irkutsk
{ 690, 7006, 90073, 7, }, // Asia/Jakarta
{ 690, 6992, 31943, 7, }, // Asia/Jayapura
- { 690, 1290, 226117, 8, }, // Asia/Jerusalem
+ { 690, 1290, 226108, 8, }, // Asia/Jerusalem
{ 690, 3560, 90086, 5, }, // Asia/Kabul
{ 690, 4316, 90091, 7, }, // Asia/Kamchatka
{ 690, 4239, 31972, 5, }, // Asia/Karachi
{ 690, 1185, 90098, 8, }, // Asia/Kathmandu
- { 690, 8661, 226125, 7, }, // Asia/Khandyga
+ { 690, 8661, 226116, 7, }, // Asia/Khandyga
{ 690, 992, 90113, 7, }, // Asia/Kolkata
{ 690, 4197, 90120, 15, }, // Asia/Krasnoyarsk
{ 690, 4859, 90135, 10, }, // Asia/Kuala_Lumpur
@@ -51106,22 +51106,22 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 4135, 90184, 13, }, // Asia/Novosibirsk
{ 690, 4229, 90197, 6, }, // Asia/Omsk
{ 690, 7145, 90203, 3, }, // Asia/Oral
- { 690, 6961, 226132, 10, }, // Asia/Phnom_Penh
+ { 690, 6961, 226123, 10, }, // Asia/Phnom_Penh
{ 690, 8693, 90215, 9, }, // Asia/Pontianak
{ 690, 4214, 90224, 10, }, // Asia/Pyongyang
{ 690, 5559, 90234, 3, }, // Asia/Qatar
{ 690, 8708, 90237, 8, }, // Asia/Qostanay
- { 690, 4269, 226142, 10, }, // Asia/Qyzylorda
+ { 690, 4269, 226133, 10, }, // Asia/Qyzylorda
{ 690, 3584, 90256, 5, }, // Asia/Riyadh
- { 690, 4408, 226152, 7, }, // Asia/Sakhalin
+ { 690, 4408, 226143, 7, }, // Asia/Sakhalin
{ 690, 7245, 90267, 6, }, // Asia/Samarkand
{ 690, 3279, 90273, 4, }, // Asia/Seoul
- { 690, 1053, 226159, 6, }, // Asia/Shanghai
+ { 690, 1053, 226150, 6, }, // Asia/Shanghai
{ 690, 3300, 32190, 8, }, // Asia/Singapore
{ 690, 4297, 90282, 16, }, // Asia/Srednekolymsk
- { 690, 3263, 226165, 8, }, // Asia/Taipei
- { 690, 4781, 226173, 6, }, // Asia/Tashkent
- { 690, 3915, 226179, 9, }, // Asia/Tbilisi
+ { 690, 3263, 226156, 8, }, // Asia/Taipei
+ { 690, 4781, 226164, 6, }, // Asia/Tashkent
+ { 690, 3915, 226170, 9, }, // Asia/Tbilisi
{ 690, 2772, 32236, 6, }, // Asia/Tehran
{ 690, 1317, 90317, 5, }, // Asia/Thimphu
{ 690, 2821, 90322, 6, }, // Asia/Tokyo
@@ -51132,19 +51132,19 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 6977, 90360, 9, }, // Asia/Vientiane
{ 690, 4710, 90369, 13, }, // Asia/Vladivostok
{ 690, 4828, 32305, 9, }, // Asia/Yakutsk
- { 690, 1235, 226188, 6, }, // Asia/Yangon
+ { 690, 1235, 226179, 6, }, // Asia/Yangon
{ 690, 3883, 90382, 13, }, // Asia/Yekaterinburg
{ 690, 3747, 90395, 7, }, // Asia/Yerevan
{ 690, 3663, 90402, 7, }, // Atlantic/Azores
{ 690, 5671, 90409, 6, }, // Atlantic/Bermuda
- { 690, 6628, 226194, 8, }, // Atlantic/Canary
+ { 690, 6628, 226185, 8, }, // Atlantic/Canary
{ 690, 3727, 90421, 8, }, // Atlantic/Cape_Verde
- { 690, 1395, 226202, 6, }, // Atlantic/Faroe
+ { 690, 1395, 226193, 6, }, // Atlantic/Faroe
{ 690, 8736, 90434, 5, }, // Atlantic/Madeira
{ 690, 2748, 90439, 9, }, // Atlantic/Reykjavik
- { 690, 7272, 226208, 18, }, // Atlantic/South_Georgia
+ { 690, 7272, 226199, 18, }, // Atlantic/South_Georgia
{ 690, 6821, 90463, 11, }, // Atlantic/St_Helena
- { 690, 6644, 226226, 9, }, // Atlantic/Stanley
+ { 690, 6644, 226217, 9, }, // Atlantic/Stanley
{ 690, 1670, 90481, 6, }, // Australia/Adelaide
{ 690, 1635, 90487, 8, }, // Australia/Brisbane
{ 690, 1799, 90495, 10, }, // Australia/Broken_Hill
@@ -51158,8 +51158,8 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 1463, 32494, 5, }, // Australia/Sydney
{ 690, 6441, 90549, 10, }, // Europe/Amsterdam
{ 690, 6216, 90559, 6, }, // Europe/Andorra
- { 690, 3620, 226235, 10, }, // Europe/Astrakhan
- { 690, 2300, 226245, 6, }, // Europe/Athens
+ { 690, 3620, 226226, 10, }, // Europe/Astrakhan
+ { 690, 2300, 226236, 6, }, // Europe/Athens
{ 690, 6336, 32532, 8, }, // Europe/Belgrade
{ 690, 4757, 90580, 6, }, // Europe/Berlin
{ 690, 6488, 90586, 12, }, // Europe/Bratislava
@@ -51173,7 +51173,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 6307, 90657, 10, }, // Europe/Gibraltar
{ 690, 8788, 90667, 6, }, // Europe/Guernsey
{ 690, 6612, 90673, 8, }, // Europe/Helsinki
- { 690, 8804, 226251, 13, }, // Europe/Isle_of_Man
+ { 690, 8804, 226242, 13, }, // Europe/Isle_of_Man
{ 690, 1130, 90692, 9, }, // Europe/Istanbul
{ 690, 8823, 90701, 5, }, // Europe/Jersey
{ 690, 3979, 90706, 12, }, // Europe/Kaliningrad
@@ -51199,9 +51199,9 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 6470, 90814, 10, }, // Europe/San_Marino
{ 690, 6245, 90824, 8, }, // Europe/Sarajevo
{ 690, 4451, 90832, 7, }, // Europe/Saratov
- { 690, 8849, 226264, 12, }, // Europe/Simferopol
- { 690, 6383, 226276, 8, }, // Europe/Skopje
- { 690, 6599, 226284, 7, }, // Europe/Sofia
+ { 690, 8849, 226255, 12, }, // Europe/Simferopol
+ { 690, 6383, 226267, 8, }, // Europe/Skopje
+ { 690, 6599, 226275, 7, }, // Europe/Sofia
{ 690, 6523, 90866, 8, }, // Europe/Stockholm
{ 690, 8867, 90874, 5, }, // Europe/Tallinn
{ 690, 6202, 90879, 6, }, // Europe/Tirane
@@ -51213,7 +51213,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 4727, 90922, 11, }, // Europe/Volgograd
{ 690, 3190, 90933, 5, }, // Europe/Warsaw
{ 690, 6261, 90938, 8, }, // Europe/Zagreb
- { 690, 6540, 226291, 9, }, // Europe/Zurich
+ { 690, 6540, 226282, 9, }, // Europe/Zurich
{ 690, 5078, 90955, 11, }, // Indian/Antananarivo
{ 690, 6947, 115401, 5, }, // Indian/Chagos
{ 690, 6046, 90971, 7, }, // Indian/Christmas
@@ -51222,38 +51222,38 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 6661, 90989, 7, }, // Indian/Kerguelen
{ 690, 7260, 32983, 4, }, // Indian/Mahe
{ 690, 7050, 90996, 6, }, // Indian/Maldives
- { 690, 4069, 226300, 6, }, // Indian/Mauritius
+ { 690, 4069, 226291, 6, }, // Indian/Mauritius
{ 690, 5098, 91008, 8, }, // Indian/Mayotte
{ 690, 7211, 91016, 8, }, // Indian/Reunion
{ 690, 4422, 91024, 5, }, // Pacific/Apia
- { 690, 932, 226306, 6, }, // Pacific/Auckland
+ { 690, 932, 226297, 6, }, // Pacific/Auckland
{ 690, 3706, 91035, 8, }, // Pacific/Bougainville
- { 690, 3015, 226312, 6, }, // Pacific/Chatham
+ { 690, 3015, 226303, 6, }, // Pacific/Chatham
{ 690, 3157, 91047, 2, }, // Pacific/Chuuk
- { 690, 2237, 226318, 6, }, // Pacific/Easter
- { 690, 7360, 226324, 5, }, // Pacific/Efate
- { 690, 7327, 226329, 9, }, // Pacific/Fakaofo
- { 690, 3902, 226338, 5, }, // Pacific/Fiji
- { 690, 7343, 226343, 12, }, // Pacific/Funafuti
+ { 690, 2237, 226309, 6, }, // Pacific/Easter
+ { 690, 7360, 226315, 5, }, // Pacific/Efate
+ { 690, 7327, 226320, 9, }, // Pacific/Fakaofo
+ { 690, 3902, 226329, 5, }, // Pacific/Fiji
+ { 690, 7343, 226334, 12, }, // Pacific/Funafuti
{ 690, 6678, 91085, 9, }, // Pacific/Galapagos
- { 690, 6696, 226355, 9, }, // Pacific/Gambier
+ { 690, 6696, 226346, 9, }, // Pacific/Gambier
{ 690, 3822, 91101, 10, }, // Pacific/Guadalcanal
{ 690, 6018, 31112, 4, }, // Pacific/Guam
- { 690, 3049, 226364, 5, }, // Pacific/Kanton
+ { 690, 3049, 226355, 5, }, // Pacific/Kanton
{ 690, 3998, 33132, 10, }, // Pacific/Kiritimati
{ 690, 7019, 91126, 6, }, // Pacific/Kosrae
{ 690, 2842, 91132, 10, }, // Pacific/Kwajalein
{ 690, 4877, 91142, 6, }, // Pacific/Majuro
{ 690, 4051, 91148, 8, }, // Pacific/Marquesas
{ 690, 8914, 91156, 5, }, // Pacific/Midway
- { 690, 7084, 226369, 6, }, // Pacific/Nauru
+ { 690, 7084, 226360, 6, }, // Pacific/Nauru
{ 690, 7132, 91165, 4, }, // Pacific/Niue
- { 690, 4168, 226375, 7, }, // Pacific/Norfolk
- { 690, 7098, 226382, 6, }, // Pacific/Noumea
+ { 690, 4168, 226366, 7, }, // Pacific/Norfolk
+ { 690, 7098, 226373, 6, }, // Pacific/Noumea
{ 690, 3126, 91182, 9, }, // Pacific/Pago_Pago
{ 690, 7155, 91191, 4, }, // Pacific/Palau
{ 690, 7194, 137202, 8, }, // Pacific/Pitcairn
- { 690, 3096, 226388, 7, }, // Pacific/Pohnpei
+ { 690, 3096, 226379, 7, }, // Pacific/Pohnpei
{ 690, 4807, 91201, 14, }, // Pacific/Port_Moresby
{ 690, 6076, 91215, 9, }, // Pacific/Rarotonga
{ 690, 6031, 91224, 6, }, // Pacific/Saipan
@@ -51263,7 +51263,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 690, 7392, 33268, 3, }, // Pacific/Wake
{ 690, 7405, 33271, 5, }, // Pacific/Wallis
{ 691, 6788, 148234, 7, }, // Africa/Abidjan Kuvi/Odia/India
- { 691, 6760, 226395, 5, }, // Africa/Accra
+ { 691, 6760, 226386, 5, }, // Africa/Accra
{ 691, 5059, 148246, 12, }, // Africa/Addis_Ababa
{ 691, 7420, 148258, 8, }, // Africa/Algiers
{ 691, 14, 148266, 5, }, // Africa/Asmara
@@ -51272,217 +51272,217 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 691, 6746, 148284, 7, }, // Africa/Banjul
{ 691, 7435, 148291, 5, }, // Africa/Bissau
{ 691, 4957, 148296, 13, }, // Africa/Blantyre
- { 691, 5287, 226400, 12, }, // Africa/Brazzaville
- { 691, 4922, 226412, 10, }, // Africa/Bujumbura
+ { 691, 5287, 226391, 12, }, // Africa/Brazzaville
+ { 691, 4922, 226403, 10, }, // Africa/Bujumbura
{ 691, 2320, 148331, 4, }, // Africa/Cairo
{ 691, 4117, 148336, 12, }, // Africa/Casablanca
{ 691, 7449, 148348, 5, }, // Africa/Ceuta
- { 691, 6773, 226422, 7, }, // Africa/Conakry
+ { 691, 6773, 226413, 7, }, // Africa/Conakry
{ 691, 6840, 148361, 4, }, // Africa/Dakar
{ 691, 5130, 148365, 15, }, // Africa/Dar_es_Salaam
- { 691, 5043, 226429, 5, }, // Africa/Djibouti
+ { 691, 5043, 226420, 5, }, // Africa/Djibouti
{ 691, 5243, 148386, 4, }, // Africa/Douala
{ 691, 5166, 148390, 9, }, // Africa/El_Aaiun
- { 691, 6853, 226434, 10, }, // Africa/Freetown
- { 691, 4906, 226444, 8, }, // Africa/Gaborone
+ { 691, 6853, 226425, 10, }, // Africa/Freetown
+ { 691, 4906, 226435, 8, }, // Africa/Gaborone
{ 691, 5015, 148418, 5, }, // Africa/Harare
- { 691, 4479, 226452, 10, }, // Africa/Johannesburg
+ { 691, 4479, 226443, 10, }, // Africa/Johannesburg
{ 691, 4499, 148434, 4, }, // Africa/Juba
{ 691, 5151, 148438, 8, }, // Africa/Kampala
- { 691, 4524, 226462, 7, }, // Africa/Khartoum
+ { 691, 4524, 226453, 7, }, // Africa/Khartoum
{ 691, 4973, 148453, 6, }, // Africa/Kigali
{ 691, 5306, 148459, 8, }, // Africa/Kinshasa
- { 691, 4744, 226469, 6, }, // Africa/Lagos
- { 691, 5336, 226475, 12, }, // Africa/Libreville
- { 691, 6869, 226487, 4, }, // Africa/Lome
+ { 691, 4744, 226460, 6, }, // Africa/Lagos
+ { 691, 5336, 226466, 12, }, // Africa/Libreville
+ { 691, 6869, 226478, 4, }, // Africa/Lome
{ 691, 5211, 148491, 7, }, // Africa/Luanda
{ 691, 4939, 148498, 10, }, // Africa/Lubumbashi
{ 691, 5001, 148508, 6, }, // Africa/Lusaka
{ 691, 5322, 148514, 5, }, // Africa/Malabo
{ 691, 4987, 148520, 6, }, // Africa/Maputo
{ 691, 5197, 148526, 6, }, // Africa/Maseru
- { 691, 5182, 226491, 9, }, // Africa/Mbabane
- { 691, 5113, 226500, 8, }, // Africa/Mogadishu
- { 691, 7034, 226508, 7, }, // Africa/Monrovia
- { 691, 3853, 226515, 6, }, // Africa/Nairobi
+ { 691, 5182, 226482, 9, }, // Africa/Mbabane
+ { 691, 5113, 226491, 8, }, // Africa/Mogadishu
+ { 691, 7034, 226499, 7, }, // Africa/Monrovia
+ { 691, 3853, 226506, 6, }, // Africa/Nairobi
{ 691, 5271, 148561, 6, }, // Africa/Ndjamena
{ 691, 5354, 148567, 5, }, // Africa/Niamey
- { 691, 6803, 226521, 6, }, // Africa/Nouakchott
- { 691, 6727, 226527, 6, }, // Africa/Ouagadougou
- { 691, 5225, 226533, 7, }, // Africa/Porto-Novo
- { 691, 4435, 226540, 7, }, // Africa/Sao_Tome
- { 691, 2866, 226547, 7, }, // Africa/Tripoli
+ { 691, 6803, 226512, 6, }, // Africa/Nouakchott
+ { 691, 6727, 226518, 6, }, // Africa/Ouagadougou
+ { 691, 5225, 226524, 7, }, // Africa/Porto-Novo
+ { 691, 4435, 226531, 7, }, // Africa/Sao_Tome
+ { 691, 2866, 226538, 7, }, // Africa/Tripoli
{ 691, 6554, 148614, 7, }, // Africa/Tunis
- { 691, 4152, 226554, 8, }, // Africa/Windhoek
+ { 691, 4152, 226545, 8, }, // Africa/Windhoek
{ 691, 132, 148631, 5, }, // America/Adak
{ 691, 3346, 148636, 8, }, // America/Anchorage
{ 691, 5607, 148644, 8, }, // America/Anguilla
{ 691, 5624, 148652, 8, }, // America/Antigua
{ 691, 4554, 148660, 8, }, // America/Araguaina
- { 691, 166, 226562, 13, }, // America/Argentina/Buenos_Aires
- { 691, 91, 226575, 10, }, // America/Argentina/Catamarca
- { 691, 270, 226585, 6, }, // America/Argentina/Cordoba
- { 691, 441, 226591, 5, }, // America/Argentina/Jujuy
- { 691, 7462, 226596, 9, }, // America/Argentina/La_Rioja
- { 691, 565, 226605, 7, }, // America/Argentina/Mendoza
- { 691, 7489, 226612, 12, }, // America/Argentina/Rio_Gallegos
- { 691, 7520, 226624, 6, }, // America/Argentina/Salta
- { 691, 7544, 226630, 11, }, // America/Argentina/San_Juan
- { 691, 5580, 226641, 9, }, // America/Argentina/San_Luis
- { 691, 7571, 226650, 6, }, // America/Argentina/Tucuman
- { 691, 7597, 226656, 7, }, // America/Argentina/Ushuaia
- { 691, 5640, 226663, 5, }, // America/Aruba
+ { 691, 166, 226553, 13, }, // America/Argentina/Buenos_Aires
+ { 691, 91, 226566, 10, }, // America/Argentina/Catamarca
+ { 691, 270, 226576, 6, }, // America/Argentina/Cordoba
+ { 691, 441, 226582, 5, }, // America/Argentina/Jujuy
+ { 691, 7462, 226587, 9, }, // America/Argentina/La_Rioja
+ { 691, 565, 226596, 7, }, // America/Argentina/Mendoza
+ { 691, 7489, 226603, 12, }, // America/Argentina/Rio_Gallegos
+ { 691, 7520, 226615, 6, }, // America/Argentina/Salta
+ { 691, 7544, 226621, 11, }, // America/Argentina/San_Juan
+ { 691, 5580, 226632, 9, }, // America/Argentina/San_Luis
+ { 691, 7571, 226641, 6, }, // America/Argentina/Tucuman
+ { 691, 7597, 226647, 7, }, // America/Argentina/Ushuaia
+ { 691, 5640, 226654, 5, }, // America/Aruba
{ 691, 4252, 148781, 9, }, // America/Asuncion
{ 691, 237, 148790, 9, }, // America/Atikokan
{ 691, 3679, 148799, 5, }, // America/Bahia
{ 691, 7623, 148804, 18, }, // America/Bahia_Banderas
- { 691, 5654, 226668, 7, }, // America/Barbados
+ { 691, 5654, 226659, 7, }, // America/Barbados
{ 691, 7646, 148832, 5, }, // America/Belem
{ 691, 5407, 148837, 6, }, // America/Belize
- { 691, 7660, 226675, 14, }, // America/Blanc-Sablon
- { 691, 7681, 226689, 10, }, // America/Boa_Vista
- { 691, 4361, 226699, 4, }, // America/Bogota
- { 691, 7699, 226703, 4, }, // America/Boise
+ { 691, 7660, 226666, 14, }, // America/Blanc-Sablon
+ { 691, 7681, 226680, 10, }, // America/Boa_Vista
+ { 691, 4361, 226690, 4, }, // America/Bogota
+ { 691, 7699, 226694, 4, }, // America/Boise
{ 691, 7713, 148879, 13, }, // America/Cambridge_Bay
- { 691, 7735, 226707, 14, }, // America/Campo_Grande
+ { 691, 7735, 226698, 14, }, // America/Campo_Grande
{ 691, 3868, 148907, 7, }, // America/Cancun
{ 691, 4694, 148914, 8, }, // America/Caracas
{ 691, 4345, 148922, 8, }, // America/Cayenne
{ 691, 5496, 148930, 9, }, // America/Cayman
- { 691, 2260, 226721, 5, }, // America/Chicago
+ { 691, 2260, 226712, 5, }, // America/Chicago
{ 691, 7756, 148945, 8, }, // America/Chihuahua
- { 691, 5422, 226726, 10, }, // America/Costa_Rica
- { 691, 7796, 226736, 9, }, // America/Creston
+ { 691, 5422, 226717, 10, }, // America/Costa_Rica
+ { 691, 7796, 226727, 9, }, // America/Creston
{ 691, 3791, 148989, 5, }, // America/Cuiaba
{ 691, 5723, 148994, 5, }, // America/Curacao
{ 691, 7812, 149000, 13, }, // America/Danmarkshavn
{ 691, 7833, 149013, 5, }, // America/Dawson
{ 691, 7848, 149018, 12, }, // America/Dawson_Creek
- { 691, 805, 226745, 7, }, // America/Denver
- { 691, 3465, 226752, 8, }, // America/Detroit
- { 691, 5739, 226760, 7, }, // America/Dominica
- { 691, 893, 226767, 9, }, // America/Edmonton
+ { 691, 805, 226736, 7, }, // America/Denver
+ { 691, 3465, 226743, 8, }, // America/Detroit
+ { 691, 5739, 226751, 7, }, // America/Dominica
+ { 691, 893, 226758, 9, }, // America/Edmonton
{ 691, 7869, 149063, 7, }, // America/Eirunepe
- { 691, 5441, 226776, 13, }, // America/El_Salvador
- { 691, 7886, 226789, 11, }, // America/Fort_Nelson
- { 691, 7906, 226800, 8, }, // America/Fortaleza
+ { 691, 5441, 226767, 13, }, // America/El_Salvador
+ { 691, 7886, 226780, 11, }, // America/Fort_Nelson
+ { 691, 7906, 226791, 8, }, // America/Fortaleza
{ 691, 7924, 149106, 9, }, // America/Glace_Bay
{ 691, 6881, 149115, 7, }, // America/Goose_Bay
{ 691, 4612, 149122, 14, }, // America/Grand_Turk
{ 691, 5770, 149136, 8, }, // America/Grenada
- { 691, 5786, 226808, 9, }, // America/Guadeloupe
- { 691, 3760, 226817, 9, }, // America/Guatemala
+ { 691, 5786, 226799, 9, }, // America/Guadeloupe
+ { 691, 3760, 226808, 9, }, // America/Guatemala
{ 691, 4841, 149163, 9, }, // America/Guayaquil
{ 691, 6932, 149172, 5, }, // America/Guyana
{ 691, 1939, 149177, 12, }, // America/Halifax
- { 691, 2281, 226826, 5, }, // America/Havana
- { 691, 7942, 226831, 8, }, // America/Hermosillo
- { 691, 348, 226839, 13, }, // America/Indiana/Indianapolis
+ { 691, 2281, 226817, 5, }, // America/Havana
+ { 691, 7942, 226822, 8, }, // America/Hermosillo
+ { 691, 348, 226830, 13, }, // America/Indiana/Indianapolis
{ 691, 481, 149218, 17, }, // America/Indiana/Knox
- { 691, 7961, 226852, 16, }, // America/Indiana/Marengo
+ { 691, 7961, 226843, 16, }, // America/Indiana/Marengo
{ 691, 7985, 149252, 22, }, // America/Indiana/Petersburg
{ 691, 8012, 149274, 19, }, // America/Indiana/Tell_City
- { 691, 8038, 226868, 15, }, // America/Indiana/Vevay
+ { 691, 8038, 226859, 15, }, // America/Indiana/Vevay
{ 691, 8060, 149308, 21, }, // America/Indiana/Vincennes
{ 691, 8086, 149329, 18, }, // America/Indiana/Winamac
- { 691, 8110, 226883, 7, }, // America/Inuvik
+ { 691, 8110, 226874, 7, }, // America/Inuvik
{ 691, 660, 149354, 10, }, // America/Iqaluit
{ 691, 2799, 149364, 7, }, // America/Jamaica
{ 691, 5380, 149371, 6, }, // America/Juneau
- { 691, 521, 226890, 10, }, // America/Kentucky/Louisville
- { 691, 8125, 226900, 20, }, // America/Kentucky/Monticello
- { 691, 5704, 226920, 13, }, // America/Kralendijk
+ { 691, 521, 226881, 10, }, // America/Kentucky/Louisville
+ { 691, 8125, 226891, 20, }, // America/Kentucky/Monticello
+ { 691, 5704, 226911, 13, }, // America/Kralendijk
{ 691, 4376, 149420, 6, }, // America/La_Paz
{ 691, 7169, 149428, 4, }, // America/Lima
{ 691, 3239, 149432, 13, }, // America/Los_Angeles
{ 691, 5932, 149445, 23, }, // America/Lower_Princes
- { 691, 8153, 226933, 5, }, // America/Maceio
+ { 691, 8153, 226924, 5, }, // America/Maceio
{ 691, 8168, 149473, 7, }, // America/Managua
{ 691, 1908, 149480, 8, }, // America/Manaus
- { 691, 5897, 226938, 7, }, // America/Marigot
+ { 691, 5897, 226929, 7, }, // America/Marigot
{ 691, 5805, 149496, 12, }, // America/Martinique
- { 691, 8184, 226945, 8, }, // America/Matamoros
- { 691, 2917, 226953, 9, }, // America/Mazatlan
+ { 691, 8184, 226936, 8, }, // America/Matamoros
+ { 691, 2917, 226944, 9, }, // America/Mazatlan
{ 691, 8202, 149527, 8, }, // America/Menominee
{ 691, 8220, 149535, 6, }, // America/Merida
{ 691, 8235, 149541, 10, }, // America/Metlakatla
{ 691, 2949, 149551, 13, }, // America/Mexico_City
- { 691, 4391, 226962, 9, }, // America/Miquelon
- { 691, 8254, 226971, 7, }, // America/Moncton
- { 691, 8270, 226978, 7, }, // America/Monterrey
- { 691, 4098, 226985, 10, }, // America/Montevideo
- { 691, 5824, 226995, 10, }, // America/Montserrat
+ { 691, 4391, 226953, 9, }, // America/Miquelon
+ { 691, 8254, 226962, 7, }, // America/Moncton
+ { 691, 8270, 226969, 7, }, // America/Monterrey
+ { 691, 4098, 226976, 10, }, // America/Montevideo
+ { 691, 5824, 226986, 10, }, // America/Montserrat
{ 691, 5481, 149611, 5, }, // America/Nassau
- { 691, 2379, 227005, 10, }, // America/New_York
+ { 691, 2379, 226996, 10, }, // America/New_York
{ 691, 8288, 149627, 4, }, // America/Nome
- { 691, 1850, 227015, 5, }, // America/Noronha
- { 691, 8301, 227020, 19, }, // America/North_Dakota/Beulah
- { 691, 8329, 227039, 20, }, // America/North_Dakota/Center
- { 691, 8357, 227059, 24, }, // America/North_Dakota/New_Salem
+ { 691, 1850, 227006, 5, }, // America/Noronha
+ { 691, 8301, 227011, 19, }, // America/North_Dakota/Beulah
+ { 691, 8329, 227030, 20, }, // America/North_Dakota/Center
+ { 691, 8357, 227050, 24, }, // America/North_Dakota/New_Salem
{ 691, 393, 149705, 5, }, // America/Nuuk
- { 691, 8388, 227083, 7, }, // America/Ojinaga
+ { 691, 8388, 227074, 7, }, // America/Ojinaga
{ 691, 2356, 149717, 6, }, // America/Panama
{ 691, 6173, 149723, 9, }, // America/Paramaribo
- { 691, 2973, 227090, 7, }, // America/Phoenix
- { 691, 3945, 227097, 17, }, // America/Port-au-Prince
- { 691, 5954, 227114, 16, }, // America/Port_of_Spain
+ { 691, 2973, 227081, 7, }, // America/Phoenix
+ { 691, 3945, 227088, 17, }, // America/Port-au-Prince
+ { 691, 5954, 227105, 16, }, // America/Port_of_Spain
{ 691, 8404, 149776, 11, }, // America/Porto_Velho
- { 691, 5843, 227130, 10, }, // America/Puerto_Rico
+ { 691, 5843, 227121, 10, }, // America/Puerto_Rico
{ 691, 4030, 149799, 15, }, // America/Punta_Arenas
{ 691, 8424, 149814, 14, }, // America/Rankin_Inlet
- { 691, 8445, 227140, 6, }, // America/Recife
+ { 691, 8445, 227131, 6, }, // America/Recife
{ 691, 1995, 149834, 6, }, // America/Regina
{ 691, 8460, 149840, 8, }, // America/Resolute
- { 691, 695, 227146, 11, }, // America/Rio_Branco
- { 691, 8477, 227157, 9, }, // America/Santarem
+ { 691, 695, 227137, 11, }, // America/Rio_Branco
+ { 691, 8477, 227148, 9, }, // America/Santarem
{ 691, 2201, 149871, 8, }, // America/Santiago
- { 691, 6111, 227166, 12, }, // America/Santo_Domingo
+ { 691, 6111, 227157, 12, }, // America/Santo_Domingo
{ 691, 1878, 149895, 9, }, // America/Sao_Paulo
- { 691, 6899, 227178, 14, }, // America/Scoresbysund
+ { 691, 6899, 227169, 14, }, // America/Scoresbysund
{ 691, 8494, 149921, 5, }, // America/Sitka
- { 691, 8508, 227192, 16, }, // America/St_Barthelemy
+ { 691, 8508, 227183, 16, }, // America/St_Barthelemy
{ 691, 2061, 149944, 12, }, // America/St_Johns
- { 691, 5863, 227208, 13, }, // America/St_Kitts
+ { 691, 5863, 227199, 13, }, // America/St_Kitts
{ 691, 5880, 149969, 13, }, // America/St_Lucia
- { 691, 855, 227221, 13, }, // America/St_Thomas
- { 691, 5913, 227234, 17, }, // America/St_Vincent
+ { 691, 855, 227212, 13, }, // America/St_Thomas
+ { 691, 5913, 227225, 17, }, // America/St_Vincent
{ 691, 8530, 150013, 15, }, // America/Swift_Current
{ 691, 5461, 150028, 11, }, // America/Tegucigalpa
- { 691, 5756, 227251, 4, }, // America/Thule
+ { 691, 5756, 227242, 4, }, // America/Thule
{ 691, 313, 150043, 7, }, // America/Tijuana
- { 691, 608, 227255, 5, }, // America/Toronto
- { 691, 5688, 227260, 5, }, // America/Tortola
- { 691, 2093, 227265, 9, }, // America/Vancouver
+ { 691, 608, 227246, 5, }, // America/Toronto
+ { 691, 5688, 227251, 5, }, // America/Tortola
+ { 691, 2093, 227256, 9, }, // America/Vancouver
{ 691, 2144, 150074, 11, }, // America/Whitehorse
{ 691, 734, 150085, 8, }, // America/Winnipeg
{ 691, 8552, 150093, 8, }, // America/Yakutat
- { 691, 6001, 227274, 4, }, // Antarctica/Casey
- { 691, 6094, 227278, 6, }, // Antarctica/Davis
- { 691, 6133, 227284, 19, }, // Antarctica/DumontDUrville
- { 691, 8568, 227303, 7, }, // Antarctica/Macquarie
- { 691, 7066, 227310, 5, }, // Antarctica/Mawson
- { 691, 7113, 227315, 10, }, // Antarctica/McMurdo
- { 691, 8589, 227325, 5, }, // Antarctica/Palmer
- { 691, 7226, 227330, 6, }, // Antarctica/Rothera
+ { 691, 6001, 227265, 4, }, // Antarctica/Casey
+ { 691, 6094, 227269, 6, }, // Antarctica/Davis
+ { 691, 6133, 227275, 19, }, // Antarctica/DumontDUrville
+ { 691, 8568, 227294, 7, }, // Antarctica/Macquarie
+ { 691, 7066, 227301, 5, }, // Antarctica/Mawson
+ { 691, 7113, 227306, 10, }, // Antarctica/McMurdo
+ { 691, 8589, 227316, 5, }, // Antarctica/Palmer
+ { 691, 7226, 227321, 6, }, // Antarctica/Rothera
{ 691, 7295, 150167, 4, }, // Antarctica/Syowa
- { 691, 8607, 227336, 4, }, // Antarctica/Troll
- { 691, 7374, 227340, 7, }, // Antarctica/Vostok
- { 691, 1429, 227347, 10, }, // Arctic/Longyearbyen
+ { 691, 8607, 227327, 4, }, // Antarctica/Troll
+ { 691, 7374, 227331, 7, }, // Antarctica/Vostok
+ { 691, 1429, 227338, 10, }, // Arctic/Longyearbyen
{ 691, 5570, 150199, 6, }, // Asia/Aden
{ 691, 5395, 150205, 6, }, // Asia/Almaty
{ 691, 3968, 150211, 6, }, // Asia/Amman
{ 691, 5511, 150217, 8, }, // Asia/Anadyr
{ 691, 5523, 150225, 5, }, // Asia/Aqtau
- { 691, 5368, 227357, 6, }, // Asia/Aqtobe
- { 691, 964, 227363, 9, }, // Asia/Ashgabat
+ { 691, 5368, 227348, 6, }, // Asia/Aqtobe
+ { 691, 964, 227354, 9, }, // Asia/Ashgabat
{ 691, 8624, 150248, 6, }, // Asia/Atyrau
{ 691, 3607, 150254, 8, }, // Asia/Baghdad
- { 691, 5534, 227372, 6, }, // Asia/Bahrain
+ { 691, 5534, 227363, 6, }, // Asia/Bahrain
{ 691, 3653, 148992, 4, }, // Asia/Baku
{ 691, 4466, 150270, 11, }, // Asia/Bangkok
{ 691, 3571, 150281, 8, }, // Asia/Barnaul
{ 691, 4086, 150289, 7, }, // Asia/Beirut
- { 691, 3778, 227378, 8, }, // Asia/Bishkek
+ { 691, 3778, 227369, 8, }, // Asia/Bishkek
{ 691, 5989, 150304, 7, }, // Asia/Brunei
{ 691, 4601, 150311, 4, }, // Asia/Chita
{ 691, 4511, 150315, 6, }, // Asia/Colombo
@@ -51490,24 +51490,24 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 691, 1093, 150849, 4, }, // Asia/Dhaka
{ 691, 6192, 150334, 6, }, // Asia/Dili
{ 691, 3596, 150340, 5, }, // Asia/Dubai
- { 691, 6159, 227386, 7, }, // Asia/Dushanbe
- { 691, 8636, 227393, 10, }, // Asia/Famagusta
+ { 691, 6159, 227377, 7, }, // Asia/Dushanbe
+ { 691, 8636, 227384, 10, }, // Asia/Famagusta
{ 691, 8651, 150362, 4, }, // Asia/Gaza
{ 691, 4795, 150366, 8, }, // Asia/Hebron
- { 691, 1259, 227403, 15, }, // Asia/Ho_Chi_Minh
+ { 691, 1259, 227394, 15, }, // Asia/Ho_Chi_Minh
{ 691, 2704, 150390, 5, }, // Asia/Hong_Kong
- { 691, 4771, 227418, 6, }, // Asia/Hovd
+ { 691, 4771, 227409, 6, }, // Asia/Hovd
{ 691, 4184, 150401, 8, }, // Asia/Irkutsk
- { 691, 7006, 227424, 7, }, // Asia/Jakarta
+ { 691, 7006, 227415, 7, }, // Asia/Jakarta
{ 691, 6992, 150418, 6, }, // Asia/Jayapura
{ 691, 1290, 150424, 8, }, // Asia/Jerusalem
- { 691, 3560, 227431, 5, }, // Asia/Kabul
+ { 691, 3560, 227422, 5, }, // Asia/Kabul
{ 691, 4316, 150437, 8, }, // Asia/Kamchatka
{ 691, 4239, 150445, 5, }, // Asia/Karachi
- { 691, 1185, 227436, 9, }, // Asia/Kathmandu
- { 691, 8661, 227445, 9, }, // Asia/Khandyga
+ { 691, 1185, 227427, 9, }, // Asia/Kathmandu
+ { 691, 8661, 227436, 9, }, // Asia/Khandyga
{ 691, 992, 150468, 7, }, // Asia/Kolkata
- { 691, 4197, 227454, 12, }, // Asia/Krasnoyarsk
+ { 691, 4197, 227445, 12, }, // Asia/Krasnoyarsk
{ 691, 4859, 150488, 12, }, // Asia/Kuala_Lumpur
{ 691, 5976, 150500, 5, }, // Asia/Kuching
{ 691, 5547, 150505, 4, }, // Asia/Kuwait
@@ -51516,83 +51516,83 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 691, 1349, 150522, 9, }, // Asia/Makassar
{ 691, 7182, 150531, 6, }, // Asia/Manila
{ 691, 6920, 150537, 8, }, // Asia/Muscat
- { 691, 2554, 227466, 6, }, // Asia/Nicosia
- { 691, 8675, 227472, 11, }, // Asia/Novokuznetsk
- { 691, 4135, 227483, 10, }, // Asia/Novosibirsk
+ { 691, 2554, 227457, 6, }, // Asia/Nicosia
+ { 691, 8675, 227463, 11, }, // Asia/Novokuznetsk
+ { 691, 4135, 227474, 10, }, // Asia/Novosibirsk
{ 691, 4229, 150577, 5, }, // Asia/Omsk
- { 691, 7145, 227493, 6, }, // Asia/Oral
- { 691, 6961, 227499, 10, }, // Asia/Phnom_Penh
- { 691, 8693, 227509, 11, }, // Asia/Pontianak
+ { 691, 7145, 227484, 6, }, // Asia/Oral
+ { 691, 6961, 227490, 10, }, // Asia/Phnom_Penh
+ { 691, 8693, 227500, 11, }, // Asia/Pontianak
{ 691, 4214, 150611, 11, }, // Asia/Pyongyang
{ 691, 5559, 150622, 5, }, // Asia/Qatar
- { 691, 8708, 227520, 6, }, // Asia/Qostanay
- { 691, 4269, 227526, 9, }, // Asia/Qyzylorda
+ { 691, 8708, 227511, 6, }, // Asia/Qostanay
+ { 691, 4269, 227517, 9, }, // Asia/Qyzylorda
{ 691, 3584, 150644, 4, }, // Asia/Riyadh
- { 691, 4408, 227535, 7, }, // Asia/Sakhalin
+ { 691, 4408, 227526, 7, }, // Asia/Sakhalin
{ 691, 7245, 150655, 7, }, // Asia/Samarkand
- { 691, 3279, 227542, 4, }, // Asia/Seoul
- { 691, 1053, 227546, 5, }, // Asia/Shanghai
+ { 691, 3279, 227533, 4, }, // Asia/Seoul
+ { 691, 1053, 227537, 5, }, // Asia/Shanghai
{ 691, 3300, 150672, 11, }, // Asia/Singapore
- { 691, 4297, 227551, 14, }, // Asia/Srednekolymsk
+ { 691, 4297, 227542, 14, }, // Asia/Srednekolymsk
{ 691, 3263, 150698, 6, }, // Asia/Taipei
- { 691, 4781, 227565, 8, }, // Asia/Tashkent
+ { 691, 4781, 227556, 8, }, // Asia/Tashkent
{ 691, 3915, 150712, 8, }, // Asia/Tbilisi
{ 691, 2772, 150720, 8, }, // Asia/Tehran
- { 691, 1317, 227573, 6, }, // Asia/Thimphu
- { 691, 2821, 227579, 4, }, // Asia/Tokyo
- { 691, 4572, 227583, 5, }, // Asia/Tomsk
+ { 691, 1317, 227564, 6, }, // Asia/Thimphu
+ { 691, 2821, 227570, 4, }, // Asia/Tokyo
+ { 691, 4572, 227574, 5, }, // Asia/Tomsk
{ 691, 1021, 150745, 12, }, // Asia/Ulaanbaatar
{ 691, 1159, 150757, 6, }, // Asia/Urumqi
- { 691, 8722, 227588, 11, }, // Asia/Ust-Nera
- { 691, 6977, 227599, 11, }, // Asia/Vientiane
- { 691, 4710, 227610, 13, }, // Asia/Vladivostok
+ { 691, 8722, 227579, 11, }, // Asia/Ust-Nera
+ { 691, 6977, 227590, 11, }, // Asia/Vientiane
+ { 691, 4710, 227601, 13, }, // Asia/Vladivostok
{ 691, 4828, 150798, 8, }, // Asia/Yakutsk
{ 691, 1235, 150806, 9, }, // Asia/Yangon
{ 691, 3883, 150815, 14, }, // Asia/Yekaterinburg
- { 691, 3747, 227623, 8, }, // Asia/Yerevan
- { 691, 3663, 227631, 6, }, // Atlantic/Azores
- { 691, 5671, 227637, 6, }, // Atlantic/Bermuda
+ { 691, 3747, 227614, 8, }, // Asia/Yerevan
+ { 691, 3663, 227622, 6, }, // Atlantic/Azores
+ { 691, 5671, 227628, 6, }, // Atlantic/Bermuda
{ 691, 6628, 150851, 6, }, // Atlantic/Canary
- { 691, 3727, 227643, 11, }, // Atlantic/Cape_Verde
- { 691, 1395, 227654, 3, }, // Atlantic/Faroe
+ { 691, 3727, 227634, 11, }, // Atlantic/Cape_Verde
+ { 691, 1395, 227645, 3, }, // Atlantic/Faroe
{ 691, 8736, 150873, 7, }, // Atlantic/Madeira
- { 691, 2748, 227657, 9, }, // Atlantic/Reykjavik
+ { 691, 2748, 227648, 9, }, // Atlantic/Reykjavik
{ 691, 7272, 150890, 13, }, // Atlantic/South_Georgia
{ 691, 6821, 150903, 14, }, // Atlantic/St_Helena
- { 691, 6644, 227666, 8, }, // Atlantic/Stanley
- { 691, 1670, 227674, 7, }, // Australia/Adelaide
- { 691, 1635, 227681, 8, }, // Australia/Brisbane
- { 691, 1799, 227689, 10, }, // Australia/Broken_Hill
- { 691, 1583, 227699, 8, }, // Australia/Darwin
+ { 691, 6644, 227657, 8, }, // Atlantic/Stanley
+ { 691, 1670, 227665, 7, }, // Australia/Adelaide
+ { 691, 1635, 227672, 8, }, // Australia/Brisbane
+ { 691, 1799, 227680, 10, }, // Australia/Broken_Hill
+ { 691, 1583, 227690, 8, }, // Australia/Darwin
{ 691, 3637, 150965, 5, }, // Australia/Eucla
{ 691, 1516, 150970, 7, }, // Australia/Hobart
- { 691, 8753, 227707, 9, }, // Australia/Lindeman
- { 691, 1547, 227716, 10, }, // Australia/Lord_Howe
- { 691, 1727, 227726, 7, }, // Australia/Melbourne
- { 691, 1762, 227733, 4, }, // Australia/Perth
+ { 691, 8753, 227698, 9, }, // Australia/Lindeman
+ { 691, 1547, 227707, 10, }, // Australia/Lord_Howe
+ { 691, 1727, 227717, 7, }, // Australia/Melbourne
+ { 691, 1762, 227724, 4, }, // Australia/Perth
{ 691, 1463, 151017, 5, }, // Australia/Sydney
- { 691, 6441, 227737, 12, }, // Europe/Amsterdam
- { 691, 6216, 227749, 6, }, // Europe/Andorra
- { 691, 3620, 227755, 10, }, // Europe/Astrakhan
- { 691, 2300, 227765, 6, }, // Europe/Athens
- { 691, 6336, 227771, 9, }, // Europe/Belgrade
+ { 691, 6441, 227728, 12, }, // Europe/Amsterdam
+ { 691, 6216, 227740, 6, }, // Europe/Andorra
+ { 691, 3620, 227746, 10, }, // Europe/Astrakhan
+ { 691, 2300, 227756, 6, }, // Europe/Athens
+ { 691, 6336, 227762, 9, }, // Europe/Belgrade
{ 691, 4757, 151065, 7, }, // Europe/Berlin
- { 691, 6488, 227780, 11, }, // Europe/Bratislava
- { 691, 2167, 227791, 10, }, // Europe/Brussels
- { 691, 3928, 227801, 9, }, // Europe/Bucharest
- { 691, 3806, 227810, 9, }, // Europe/Budapest
+ { 691, 6488, 227771, 11, }, // Europe/Bratislava
+ { 691, 2167, 227782, 10, }, // Europe/Brussels
+ { 691, 3928, 227792, 9, }, // Europe/Bucharest
+ { 691, 3806, 227801, 9, }, // Europe/Budapest
{ 691, 8772, 151111, 9, }, // Europe/Busingen
- { 691, 2583, 227819, 7, }, // Europe/Chisinau
- { 691, 6289, 227826, 10, }, // Europe/Copenhagen
+ { 691, 2583, 227810, 7, }, // Europe/Chisinau
+ { 691, 6289, 227817, 10, }, // Europe/Copenhagen
{ 691, 2338, 151137, 6, }, // Europe/Dublin
{ 691, 6307, 151143, 11, }, // Europe/Gibraltar
{ 691, 8788, 151154, 7, }, // Europe/Guernsey
{ 691, 6612, 151161, 8, }, // Europe/Helsinki
- { 691, 8804, 227836, 15, }, // Europe/Isle_of_Man
+ { 691, 8804, 227827, 15, }, // Europe/Isle_of_Man
{ 691, 1130, 151182, 9, }, // Europe/Istanbul
{ 691, 8823, 151191, 5, }, // Europe/Jersey
{ 691, 3979, 151196, 13, }, // Europe/Kaliningrad
- { 691, 8929, 227851, 4, }, // Europe/Kirov
+ { 691, 8929, 227842, 4, }, // Europe/Kirov
{ 691, 2527, 151214, 5, }, // Europe/Kyiv
{ 691, 3213, 151219, 7, }, // Europe/Lisbon
{ 691, 6506, 151226, 10, }, // Europe/Ljubljana
@@ -51600,61 +51600,61 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 691, 6365, 151242, 9, }, // Europe/Luxembourg
{ 691, 4892, 151251, 8, }, // Europe/Madrid
{ 691, 6397, 151259, 5, }, // Europe/Malta
- { 691, 6582, 227855, 9, }, // Europe/Mariehamn
+ { 691, 6582, 227846, 9, }, // Europe/Mariehamn
{ 691, 3693, 151274, 6, }, // Europe/Minsk
- { 691, 6410, 227864, 4, }, // Europe/Monaco
+ { 691, 6410, 227855, 4, }, // Europe/Monaco
{ 691, 3537, 150537, 4, }, // Europe/Moscow
- { 691, 6458, 227868, 4, }, // Europe/Oslo
+ { 691, 6458, 227859, 4, }, // Europe/Oslo
{ 691, 4284, 151295, 6, }, // Europe/Paris
- { 691, 6424, 227872, 7, }, // Europe/Podgorica
+ { 691, 6424, 227863, 7, }, // Europe/Podgorica
{ 691, 6275, 151310, 6, }, // Europe/Prague
{ 691, 8837, 151316, 4, }, // Europe/Riga
- { 691, 6324, 227879, 3, }, // Europe/Rome
+ { 691, 6324, 227870, 3, }, // Europe/Rome
{ 691, 4331, 151324, 6, }, // Europe/Samara
{ 691, 6470, 151330, 11, }, // Europe/San_Marino
- { 691, 6245, 227882, 7, }, // Europe/Sarajevo
- { 691, 4451, 227889, 7, }, // Europe/Saratov
- { 691, 8849, 227896, 9, }, // Europe/Simferopol
- { 691, 6383, 227905, 6, }, // Europe/Skopje
- { 691, 6599, 227911, 5, }, // Europe/Sofia
- { 691, 6523, 227916, 10, }, // Europe/Stockholm
+ { 691, 6245, 227873, 7, }, // Europe/Sarajevo
+ { 691, 4451, 227880, 7, }, // Europe/Saratov
+ { 691, 8849, 227887, 9, }, // Europe/Simferopol
+ { 691, 6383, 227896, 6, }, // Europe/Skopje
+ { 691, 6599, 227902, 5, }, // Europe/Sofia
+ { 691, 6523, 227907, 10, }, // Europe/Stockholm
{ 691, 8867, 151389, 7, }, // Europe/Tallinn
- { 691, 6202, 227926, 7, }, // Europe/Tirane
- { 691, 8882, 227933, 10, }, // Europe/Ulyanovsk
- { 691, 6352, 227943, 5, }, // Europe/Vaduz
- { 691, 6567, 227948, 8, }, // Europe/Vatican
- { 691, 6231, 227956, 5, }, // Europe/Vienna
- { 691, 8899, 227961, 8, }, // Europe/Vilnius
- { 691, 4727, 227969, 9, }, // Europe/Volgograd
+ { 691, 6202, 227917, 7, }, // Europe/Tirane
+ { 691, 8882, 227924, 10, }, // Europe/Ulyanovsk
+ { 691, 6352, 227934, 5, }, // Europe/Vaduz
+ { 691, 6567, 227939, 8, }, // Europe/Vatican
+ { 691, 6231, 227947, 5, }, // Europe/Vienna
+ { 691, 8899, 227952, 8, }, // Europe/Vilnius
+ { 691, 4727, 227960, 9, }, // Europe/Volgograd
{ 691, 3190, 151450, 6, }, // Europe/Warsaw
{ 691, 6261, 151456, 8, }, // Europe/Zagreb
{ 691, 6540, 151464, 6, }, // Europe/Zurich
{ 691, 5078, 151470, 12, }, // Indian/Antananarivo
{ 691, 6947, 151483, 7, }, // Indian/Chagos
- { 691, 6046, 227978, 12, }, // Indian/Christmas
- { 691, 6063, 227990, 5, }, // Indian/Cocos
- { 691, 5029, 227995, 3, }, // Indian/Comoro
- { 691, 6661, 227998, 8, }, // Indian/Kerguelen
+ { 691, 6046, 227969, 12, }, // Indian/Christmas
+ { 691, 6063, 227981, 5, }, // Indian/Cocos
+ { 691, 5029, 227986, 3, }, // Indian/Comoro
+ { 691, 6661, 227989, 8, }, // Indian/Kerguelen
{ 691, 7260, 151522, 4, }, // Indian/Mahe
{ 691, 7050, 151526, 8, }, // Indian/Maldives
- { 691, 4069, 228006, 6, }, // Indian/Mauritius
- { 691, 5098, 228012, 5, }, // Indian/Mayotte
+ { 691, 4069, 227997, 6, }, // Indian/Mauritius
+ { 691, 5098, 228003, 5, }, // Indian/Mayotte
{ 691, 7211, 151547, 10, }, // Indian/Reunion
{ 691, 4422, 151557, 4, }, // Pacific/Apia
{ 691, 932, 151561, 7, }, // Pacific/Auckland
- { 691, 3706, 228017, 12, }, // Pacific/Bougainville
- { 691, 3015, 228029, 7, }, // Pacific/Chatham
+ { 691, 3706, 228008, 12, }, // Pacific/Bougainville
+ { 691, 3015, 228020, 7, }, // Pacific/Chatham
{ 691, 3157, 151588, 5, }, // Pacific/Chuuk
{ 691, 2237, 151593, 7, }, // Pacific/Easter
{ 691, 7360, 151600, 6, }, // Pacific/Efate
- { 691, 7327, 228036, 5, }, // Pacific/Fakaofo
- { 691, 3902, 228041, 4, }, // Pacific/Fiji
+ { 691, 7327, 228027, 5, }, // Pacific/Fakaofo
+ { 691, 3902, 228032, 4, }, // Pacific/Fiji
{ 691, 7343, 151617, 8, }, // Pacific/Funafuti
- { 691, 6678, 228045, 8, }, // Pacific/Galapagos
+ { 691, 6678, 228036, 8, }, // Pacific/Galapagos
{ 691, 6696, 151634, 10, }, // Pacific/Gambier
{ 691, 3822, 151644, 11, }, // Pacific/Guadalcanal
{ 691, 6018, 149477, 4, }, // Pacific/Guam
- { 691, 3049, 228053, 6, }, // Pacific/Kanton
+ { 691, 3049, 228044, 6, }, // Pacific/Kanton
{ 691, 3998, 151673, 10, }, // Pacific/Kiritimati
{ 691, 7019, 151683, 6, }, // Pacific/Kosrae
{ 691, 2842, 151689, 11, }, // Pacific/Kwajalein
@@ -51663,18 +51663,18 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 691, 8914, 151719, 7, }, // Pacific/Midway
{ 691, 7084, 151726, 5, }, // Pacific/Nauru
{ 691, 7132, 151731, 4, }, // Pacific/Niue
- { 691, 4168, 228059, 6, }, // Pacific/Norfolk
- { 691, 7098, 228065, 5, }, // Pacific/Noumea
+ { 691, 4168, 228050, 6, }, // Pacific/Norfolk
+ { 691, 7098, 228056, 5, }, // Pacific/Noumea
{ 691, 3126, 151747, 9, }, // Pacific/Pago_Pago
{ 691, 7155, 151756, 5, }, // Pacific/Palau
{ 691, 7194, 151761, 10, }, // Pacific/Pitcairn
- { 691, 3096, 228070, 6, }, // Pacific/Pohnpei
- { 691, 4807, 228076, 13, }, // Pacific/Port_Moresby
- { 691, 6076, 228089, 8, }, // Pacific/Rarotonga
+ { 691, 3096, 228061, 6, }, // Pacific/Pohnpei
+ { 691, 4807, 228067, 13, }, // Pacific/Port_Moresby
+ { 691, 6076, 228080, 8, }, // Pacific/Rarotonga
{ 691, 6031, 151803, 7, }, // Pacific/Saipan
{ 691, 7312, 151810, 6, }, // Pacific/Tahiti
{ 691, 6712, 151816, 5, }, // Pacific/Tarawa
- { 691, 4583, 228097, 9, }, // Pacific/Tongatapu
+ { 691, 4583, 228088, 9, }, // Pacific/Tongatapu
{ 691, 7392, 151831, 4, }, // Pacific/Wake
{ 691, 7405, 151835, 7, }, // Pacific/Wallis
{ 692, 6788, 186476, 9, }, // Africa/Abidjan Kuvi/Telugu/India
@@ -51731,7 +51731,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 692, 4152, 186868, 9, }, // Africa/Windhoek
{ 692, 132, 186877, 5, }, // America/Adak
{ 692, 3346, 186882, 8, }, // America/Anchorage
- { 692, 5607, 228106, 10, }, // America/Anguilla
+ { 692, 5607, 228097, 10, }, // America/Anguilla
{ 692, 5624, 186900, 8, }, // America/Antigua
{ 692, 4554, 186908, 11, }, // America/Araguaina
{ 692, 166, 186919, 16, }, // America/Argentina/Buenos_Aires
@@ -51975,7 +51975,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 692, 7272, 189115, 15, }, // Atlantic/South_Georgia
{ 692, 6821, 189130, 14, }, // Atlantic/St_Helena
{ 692, 6644, 189144, 8, }, // Atlantic/Stanley
- { 692, 1670, 228116, 36, }, // Australia/Adelaide
+ { 692, 1670, 228107, 36, }, // Australia/Adelaide
{ 692, 1635, 189159, 13, }, // Australia/Brisbane
{ 692, 1799, 189172, 13, }, // Australia/Broken_Hill
{ 692, 1583, 189185, 8, }, // Australia/Darwin
@@ -52069,7 +52069,7 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 692, 6696, 189891, 9, }, // Pacific/Gambier
{ 692, 3822, 189900, 13, }, // Pacific/Guadalcanal
{ 692, 6018, 189913, 6, }, // Pacific/Guam
- { 692, 3049, 228152, 6, }, // Pacific/Kanton
+ { 692, 3049, 228143, 6, }, // Pacific/Kanton
{ 692, 3998, 189936, 10, }, // Pacific/Kiritimati
{ 692, 7019, 189946, 6, }, // Pacific/Kosrae
{ 692, 2842, 189952, 10, }, // Pacific/Kwajalein
@@ -52137,12 +52137,12 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 695, 14, 0, 6, }, // Africa/Asmara Swampy Cree/Canadian Aboriginal/Canada
{ 695, 4435, 6, 8, }, // Africa/Sao_Tome
{ 695, 4252, 14, 8, }, // America/Asuncion
- { 695, 237, 228158, 6, }, // America/Atikokan
+ { 695, 237, 228149, 6, }, // America/Atikokan
{ 695, 7623, 30, 17, }, // America/Bahia_Banderas
{ 695, 3868, 47, 6, }, // America/Cancun
{ 695, 7774, 53, 13, }, // America/Ciudad_Juarez
{ 695, 5723, 66, 7, }, // America/Curacao
- { 695, 893, 228164, 6, }, // America/Edmonton
+ { 695, 893, 228155, 6, }, // America/Edmonton
{ 695, 481, 73, 13, }, // America/Indiana/Knox
{ 695, 7961, 86, 16, }, // America/Indiana/Marengo
{ 695, 7985, 102, 19, }, // America/Indiana/Petersburg
@@ -52150,8 +52150,8 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 695, 8038, 139, 14, }, // America/Indiana/Vevay
{ 695, 8060, 153, 18, }, // America/Indiana/Vincennes
{ 695, 8086, 171, 16, }, // America/Indiana/Winamac
- { 695, 8110, 228170, 4, }, // America/Inuvik
- { 695, 660, 228174, 6, }, // America/Iqaluit
+ { 695, 8110, 228161, 4, }, // America/Inuvik
+ { 695, 660, 228165, 6, }, // America/Iqaluit
{ 695, 8125, 187, 20, }, // America/Kentucky/Monticello
{ 695, 5932, 207, 22, }, // America/Lower_Princes
{ 695, 8220, 229, 6, }, // America/Merida
@@ -52167,8 +52167,8 @@ static inline constexpr LocaleZoneExemplar localeZoneExemplarTable[] = {
{ 695, 5880, 370, 9, }, // America/St_Lucia
{ 695, 855, 379, 10, }, // America/St_Thomas
{ 695, 5913, 389, 11, }, // America/St_Vincent
- { 695, 8530, 228180, 7, }, // America/Swift_Current
- { 695, 734, 228187, 4, }, // America/Winnipeg
+ { 695, 8530, 228171, 7, }, // America/Swift_Current
+ { 695, 734, 228178, 4, }, // America/Winnipeg
{ 695, 6133, 400, 16, }, // Antarctica/DumontDUrville
{ 695, 1259, 432, 11, }, // Asia/Ho_Chi_Minh
{ 695, 1185, 448, 9, }, // Asia/Kathmandu
@@ -102034,603 +102034,603 @@ static inline constexpr char16_t exemplarCityTable[] = {
0x62, 0x69, 0x69, 0x52, 0x61, 0x72, 0x6f, 0x74, 0x254, 0x14b, 0x67, 0x61,
0x53, 0x61, 0x269, 0x70, 0x61, 0x6e, 0x54, 0x61, 0x72, 0x61, 0x77, 0x61,
0x61, 0x54, 0x254, 0x14b, 0x67, 0x61, 0x74, 0x61, 0x70, 0x75, 0x75, 0x57,
-0x65, 0x65, 0x6b, 0x905, 0x932, 0x20, 0x906, 0x907, 0x92f, 0x942, 0x928, 0x3c,
-0x92e, 0x91c, 0x93c, 0x93e, 0x91f, 0x932, 0x93e, 0x928, 0x921, 0x92c, 0x908, 0x915,
-0x93e, 0x92c, 0x932, 0x926, 0x916, 0x923, 0x940, 0x20, 0x91c, 0x949, 0x930, 0x94d,
-0x91c, 0x93f, 0x92f, 0x93e, 0x90f, 0x92e, 0x94d, 0x938, 0x94d, 0x91f, 0x930, 0x921,
-0x92e, 0x92a, 0x948, 0x930, 0x938, 0x915, 0x94d, 0x930, 0x93f, 0x938, 0x92e, 0x93f,
-0x938, 0x915, 0x948, 0x902, 0x91f, 0x928, 0x92a, 0x93e, 0x917, 0x94b, 0x20, 0x917,
-0x902, 0x917, 0x94b, 0x41, 0x6c, 0x6a, 0x65, 0x72, 0x69, 0x41, 0x7a, 0x6d,
-0x61, 0x72, 0x61, 0x42, 0x61, 0x6e, 0x67, 0x68, 0xec, 0x42, 0x69, 0x73,
-0xe0, 0x6f, 0x42, 0x75, 0x6a, 0x75, 0x6e, 0x62, 0x75, 0x72, 0x61, 0x43,
-0x61, 0x7a, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x61, 0x4b, 0x61, 0x6e,
-0x70, 0x61, 0x6c, 0x61, 0x4c, 0x75, 0x62, 0x75, 0x6e, 0x62, 0x61, 0x73,
-0x68, 0x69, 0x4d, 0x61, 0x7a, 0x65, 0x72, 0x75, 0x4e, 0x62, 0x61, 0x62,
-0x61, 0x6e, 0x65, 0x4d, 0x6f, 0x67, 0x61, 0x64, 0x69, 0x73, 0x6f, 0x55,
-0x61, 0x67, 0x61, 0x64, 0x75, 0x67, 0xf9, 0xcc, 0x7a, 0x6f, 0x6c, 0x61,
-0x20, 0x53, 0x2e, 0x20, 0x54, 0x6f, 0x6d, 0x61, 0x7a, 0x6f, 0x54, 0xf9,
-0x6e, 0x65, 0x7a, 0x69, 0x43, 0xf2, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x52,
-0x69, 0x6f, 0x20, 0x47, 0xe0, 0x6c, 0x65, 0x67, 0x6f, 0x73, 0x42, 0x61,
-0x69, 0x61, 0x20, 0x64, 0x65, 0x20, 0x42, 0x61, 0x6e, 0x64, 0x65, 0x72,
-0x61, 0x73, 0x43, 0x61, 0x6e, 0x70, 0x6f, 0x20, 0x47, 0x72, 0x61, 0x6e,
-0x64, 0x65, 0x43, 0x75, 0x69, 0x61, 0x62, 0xe0, 0x44, 0xe8, 0x6e, 0x76,
-0x65, 0x72, 0x44, 0x6f, 0x6d, 0xe9, 0x6e, 0x65, 0x67, 0x61, 0x49, 0x6e,
-0x64, 0x69, 0x61, 0x6e, 0xe0, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x4b, 0x6e,
-0x6f, 0x78, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29,
-0x4d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x28, 0x49, 0x6e, 0x64,
-0x69, 0x61, 0x6e, 0x61, 0x29, 0x50, 0x65, 0x74, 0x65, 0x72, 0x73, 0x62,
-0x75, 0x72, 0x67, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61,
-0x29, 0x54, 0x65, 0x6c, 0x6c, 0x20, 0x43, 0x69, 0x74, 0x79, 0x20, 0x28,
-0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x56, 0x65, 0x76, 0x61,
+0x65, 0x65, 0x6b, 0x92e, 0x91c, 0x93c, 0x93e, 0x91f, 0x932, 0x93e, 0x928, 0x921,
+0x92c, 0x908, 0x915, 0x93e, 0x92c, 0x932, 0x926, 0x916, 0x923, 0x940, 0x20, 0x91c,
+0x949, 0x930, 0x94d, 0x91c, 0x93f, 0x92f, 0x93e, 0x90f, 0x92e, 0x94d, 0x938, 0x94d,
+0x91f, 0x930, 0x921, 0x92e, 0x92a, 0x948, 0x930, 0x938, 0x915, 0x94d, 0x930, 0x93f,
+0x938, 0x92e, 0x93f, 0x938, 0x915, 0x948, 0x902, 0x91f, 0x928, 0x92a, 0x93e, 0x917,
+0x94b, 0x20, 0x917, 0x902, 0x917, 0x94b, 0x41, 0x6c, 0x6a, 0x65, 0x72, 0x69,
+0x41, 0x7a, 0x6d, 0x61, 0x72, 0x61, 0x42, 0x61, 0x6e, 0x67, 0x68, 0xec,
+0x42, 0x69, 0x73, 0xe0, 0x6f, 0x42, 0x75, 0x6a, 0x75, 0x6e, 0x62, 0x75,
+0x72, 0x61, 0x43, 0x61, 0x7a, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x61,
+0x4b, 0x61, 0x6e, 0x70, 0x61, 0x6c, 0x61, 0x4c, 0x75, 0x62, 0x75, 0x6e,
+0x62, 0x61, 0x73, 0x68, 0x69, 0x4d, 0x61, 0x7a, 0x65, 0x72, 0x75, 0x4e,
+0x62, 0x61, 0x62, 0x61, 0x6e, 0x65, 0x4d, 0x6f, 0x67, 0x61, 0x64, 0x69,
+0x73, 0x6f, 0x55, 0x61, 0x67, 0x61, 0x64, 0x75, 0x67, 0xf9, 0xcc, 0x7a,
+0x6f, 0x6c, 0x61, 0x20, 0x53, 0x2e, 0x20, 0x54, 0x6f, 0x6d, 0x61, 0x7a,
+0x6f, 0x54, 0xf9, 0x6e, 0x65, 0x7a, 0x69, 0x43, 0xf2, 0x72, 0x64, 0x6f,
+0x62, 0x61, 0x52, 0x69, 0x6f, 0x20, 0x47, 0xe0, 0x6c, 0x65, 0x67, 0x6f,
+0x73, 0x42, 0x61, 0x69, 0x61, 0x20, 0x64, 0x65, 0x20, 0x42, 0x61, 0x6e,
+0x64, 0x65, 0x72, 0x61, 0x73, 0x43, 0x61, 0x6e, 0x70, 0x6f, 0x20, 0x47,
+0x72, 0x61, 0x6e, 0x64, 0x65, 0x43, 0x75, 0x69, 0x61, 0x62, 0xe0, 0x44,
+0xe8, 0x6e, 0x76, 0x65, 0x72, 0x44, 0x6f, 0x6d, 0xe9, 0x6e, 0x65, 0x67,
+0x61, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0xe0, 0x70, 0x6f, 0x6c, 0x69,
+0x73, 0x4b, 0x6e, 0x6f, 0x78, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61,
+0x6e, 0x61, 0x29, 0x4d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x28,
+0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x50, 0x65, 0x74, 0x65,
+0x72, 0x73, 0x62, 0x75, 0x72, 0x67, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69,
+0x61, 0x6e, 0x61, 0x29, 0x54, 0x65, 0x6c, 0x6c, 0x20, 0x43, 0x69, 0x74,
0x79, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x56,
-0x69, 0x6e, 0x63, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x20, 0x28, 0x49, 0x6e,
-0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x57, 0x69, 0x6e, 0x61, 0x6d, 0x61,
-0x63, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x4a,
-0x61, 0x6d, 0xe0, 0x65, 0x67, 0x61, 0x4d, 0x6f, 0x6e, 0x74, 0x69, 0x63,
-0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x28, 0x4b, 0x65, 0x6e, 0x74, 0x75, 0x63,
-0x6b, 0x79, 0x29, 0x4c, 0x6f, 0x73, 0x20, 0xc0, 0x6e, 0x67, 0x65, 0x6c,
-0x65, 0x73, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69, 0x67, 0x61, 0x53,
-0x69, 0x74, 0xe0, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20, 0x4d, 0xe8, 0x73,
-0x65, 0x67, 0x6f, 0x4d, 0x69, 0x63, 0x68, 0x65, 0x6c, 0x6f, 0x6e, 0x42,
-0x65, 0x75, 0x6c, 0x61, 0x68, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20,
-0x44, 0x61, 0x6b, 0x6f, 0x74, 0x61, 0x29, 0x43, 0x65, 0x6e, 0x74, 0x65,
-0x72, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, 0x61, 0x6b, 0x6f,
-0x74, 0x61, 0x29, 0x4e, 0x65, 0x77, 0x20, 0x53, 0x61, 0x6c, 0x65, 0x6d,
-0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, 0x61, 0x6b, 0x6f, 0x74,
-0x61, 0x29, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x50, 0x72, 0xec, 0x6e,
-0x73, 0x69, 0x70, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x64, 0x65,
-0x20, 0x53, 0x70, 0x61, 0x67, 0x6e, 0x61, 0x53, 0x61, 0x6e, 0x20, 0x50,
-0x6f, 0x6c, 0x6f, 0x53, 0x2e, 0x20, 0x42, 0x61, 0x72, 0x74, 0x6f, 0x6c,
-0x6f, 0x6d, 0xe8, 0x6f, 0x53, 0x2e, 0x20, 0x4a, 0x6f, 0x61, 0x6e, 0x69,
-0x53, 0x2e, 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x66, 0x65, 0x72,
-0x53, 0x2e, 0x20, 0x4c, 0x75, 0x73, 0xec, 0x61, 0x53, 0x2e, 0x20, 0x56,
-0x69, 0x6e, 0x63, 0x65, 0x6e, 0x73, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x61,
-0x20, 0x4d, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69, 0x65, 0x41, 0x6e,
-0xe0, 0x64, 0x79, 0x72, 0x41, 0x6b, 0x74, 0xe0, 0x75, 0x41, 0x7a, 0x67,
-0x61, 0x62, 0x61, 0x64, 0x41, 0x74, 0x79, 0x72, 0xe0, 0x75, 0x43, 0x6f,
-0x6c, 0x6f, 0x6e, 0x62, 0x6f, 0x44, 0x75, 0x62, 0xe0, 0x69, 0x44, 0x75,
-0x73, 0x61, 0x6e, 0x62, 0xe9, 0x4b, 0x61, 0x74, 0x6d, 0x61, 0x6e, 0x64,
-0xf9, 0x48, 0xe0, 0x6e, 0x64, 0x69, 0x67, 0x61, 0x4b, 0x72, 0x61, 0x7a,
-0x6e, 0x61, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x4b, 0x75, 0x61, 0x6c, 0x61,
-0x20, 0x4c, 0x75, 0x6e, 0x70, 0x75, 0x72, 0x4d, 0x61, 0x63, 0xe0, 0x6f,
-0x4e, 0x6f, 0x76, 0x6f, 0x6b, 0x75, 0x7a, 0x6e, 0x69, 0x65, 0x74, 0x73,
-0x6b, 0x4b, 0x6f, 0x73, 0x74, 0x61, 0x6e, 0xe0, 0x69, 0x53, 0x68, 0x61,
-0x6e, 0x67, 0x68, 0xe0, 0x69, 0x5a, 0x72, 0xe9, 0x64, 0x6e, 0x65, 0x6b,
-0x6f, 0x6c, 0x69, 0x6d, 0x73, 0x6b, 0x54, 0x69, 0x6e, 0x70, 0x75, 0x55,
-0x6c, 0x61, 0x6e, 0x20, 0x42, 0xe0, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x74,
-0x2d, 0x47, 0x6e, 0x65, 0x72, 0x61, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x65,
-0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4a, 0xe8, 0x72, 0x65,
-0x76, 0x61, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x41, 0x7a, 0x6f,
-0x72, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x61, 0x6e, 0x61,
-0x72, 0x69, 0x65, 0x43, 0x61, 0x6f, 0x20, 0x56, 0x65, 0x72, 0x64, 0x6f,
-0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x46, 0xe0, 0x72, 0x6f, 0x65, 0xcc,
-0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4d, 0x61, 0x64, 0xe8, 0x69, 0x72, 0x61,
-0x52, 0x65, 0x6b, 0x69, 0x61, 0x76, 0x69, 0x6b, 0x47, 0x65, 0x6f, 0x72,
-0x67, 0x69, 0x61, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20, 0x73, 0x75, 0x64,
-0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x2e, 0x20, 0x45, 0x6c, 0x65,
-0x6e, 0x61, 0x41, 0x64, 0x65, 0x6c, 0xe0, 0x69, 0x64, 0x65, 0x42, 0x72,
-0x69, 0x7a, 0x62, 0x61, 0x6e, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20,
-0x4c, 0x6f, 0x72, 0x64, 0x20, 0x48, 0x6f, 0x77, 0x65, 0xc0, 0x6d, 0x73,
-0x74, 0x65, 0x72, 0x64, 0x61, 0x6d, 0x42, 0x72, 0x61, 0x74, 0x69, 0x7a,
-0x6c, 0x61, 0x76, 0x61, 0x4a, 0x69, 0x62, 0x69, 0x6c, 0x74, 0x65, 0x72,
-0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x4d, 0x61,
-0x6e, 0x4c, 0x75, 0x62, 0x6c, 0x69, 0x61, 0x6e, 0x61, 0x4c, 0x75, 0x73,
-0x65, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4f, 0x7a, 0x6c, 0x6f, 0x50,
-0x61, 0x72, 0x69, 0x6a, 0x69, 0x53, 0x69, 0x6e, 0x66, 0x65, 0x72, 0xf2,
-0x70, 0x6f, 0x6c, 0x69, 0x53, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x6d, 0x61,
-0x55, 0x6c, 0x69, 0xe0, 0x6e, 0x6f, 0x73, 0x6b, 0x56, 0x61, 0x74, 0x65,
-0x67, 0x61, 0x6e, 0x43, 0x69, 0x61, 0x67, 0x6f, 0x73, 0xcc, 0x7a, 0x6f,
-0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x4e, 0x61, 0x64, 0x61, 0x6c, 0x65,
-0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x63, 0x6f, 0x73, 0xcc,
-0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x6f, 0x72, 0x65, 0xcc,
-0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x65,
-0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x75, 0x72, 0x69, 0x73,
-0x69, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x69, 0x6f,
-0x74, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x52, 0x65, 0x75, 0x6e,
-0x69, 0x6f, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x42, 0x6f, 0x75,
-0x67, 0x61, 0x69, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0xcc, 0x7a, 0x6f,
-0x6c, 0x65, 0x20, 0x43, 0x69, 0x61, 0x74, 0x65, 0x6d, 0xcc, 0x7a, 0x6f,
-0x6c, 0x65, 0x20, 0x43, 0x68, 0x75, 0x75, 0x6b, 0xcc, 0x7a, 0x6f, 0x6c,
-0x61, 0x20, 0x64, 0x65, 0x20, 0x50, 0x61, 0x73, 0x63, 0x75, 0x61, 0xcc,
-0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x45, 0x66, 0x61, 0x74, 0x65, 0x41, 0x74,
-0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x61, 0x6b, 0x61, 0x6f, 0x66, 0x6f, 0x41,
-0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x75, 0x6e, 0x61, 0x66, 0x75, 0x74,
-0x69, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x47, 0x61, 0x6d, 0x62, 0x69,
-0x65, 0x72, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x47, 0x75, 0x61, 0x64,
-0x61, 0x6c, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x41, 0x74, 0x6f, 0x6c, 0x6f,
-0x20, 0x43, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x41, 0x74, 0x6f, 0x6c, 0x6f,
-0x20, 0x4b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x69, 0xcc,
-0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4b, 0x6f, 0x73, 0x72, 0x61, 0x65, 0x41,
-0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x4b, 0x77, 0x61, 0x6a, 0x61, 0x6c, 0x65,
-0x69, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x72, 0x63,
-0x68, 0x65, 0x7a, 0x69, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x4d, 0x69,
-0x64, 0x77, 0x61, 0x79, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x61,
-0x75, 0x72, 0x75, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x69, 0x75,
-0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x6f, 0x72, 0x66, 0x6f,
-0x6c, 0x6b, 0x50, 0x61, 0x6c, 0xe0, 0x75, 0xcc, 0x7a, 0x6f, 0x6c, 0x61,
-0x20, 0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e, 0xcc, 0x7a, 0x6f,
-0x6c, 0x61, 0x20, 0x50, 0x6f, 0x6e, 0x70, 0xe8, 0x69, 0x50, 0x6f, 0x72,
-0x74, 0x6f, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x73, 0x62, 0x79, 0xcc, 0x7a,
-0x6f, 0x6c, 0x61, 0x20, 0x52, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x67,
-0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x61, 0x69, 0x70, 0xe0,
-0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x61, 0x69, 0x74, 0x69,
-0x41, 0x74, 0x6f, 0x6c, 0x6c, 0x6f, 0x20, 0x54, 0x61, 0x72, 0x61, 0x77,
-0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x6f, 0x6e, 0x67, 0x61,
-0x74, 0x61, 0x70, 0x75, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x57, 0x61,
-0x6b, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x57, 0x61, 0x6c, 0x6c,
-0x69, 0x73, 0x61, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e, 0x65, 0x63, 0x72,
-0x61, 0x61, 0x1e0d, 0x69, 0x73, 0x20, 0x61, 0x62, 0x61, 0x62, 0x61, 0x61,
-0x6c, 0x6a, 0x12b, 0x79, 0x72, 0x73, 0x61, 0x73, 0x6d, 0x61, 0x72, 0x61,
-0x62, 0x61, 0x6d, 0x61, 0x6b, 0x6f, 0x62, 0x61, 0x6e, 0x67, 0x75, 0x69,
-0x62, 0x61, 0x6e, 0x6a, 0x75, 0x6c, 0x62, 0x69, 0x73, 0x73, 0x61, 0x75,
-0x62, 0x6c, 0x61, 0x6e, 0x1e6d, 0x61, 0x65, 0x72, 0x62, 0x72, 0x61, 0x6a,
-0x61, 0x76, 0x69, 0x6c, 0x6c, 0x62, 0x75, 0x6a, 0x75, 0x6d, 0x62, 0x75,
-0x72, 0x61, 0x6b, 0x61, 0x69, 0x72, 0x6f, 0x6b, 0x61, 0x73, 0x61, 0x62,
-0x6c, 0x61, 0x6e, 0x6b, 0x61, 0x73, 0x65, 0x75, 0x1e6d, 0x61, 0x6b, 0x6f,
-0x6e, 0x61, 0x6b, 0x72, 0x12b, 0x1e0d, 0x6b, 0x61, 0x72, 0x64, 0x61, 0x72,
-0x20, 0x65, 0x73, 0x20, 0x73, 0x61, 0x6c, 0x61, 0x61, 0x6d, 0x64, 0x75,
-0x61, 0x6c, 0x61, 0x65, 0x6c, 0x20, 0x61, 0x61, 0x69, 0x79, 0x75, 0x6e,
-0x70, 0x72, 0x12b, 0x1e6d, 0x61, 0x75, 0x6e, 0x67, 0x61, 0x62, 0x6f, 0x72,
-0x6f, 0x6e, 0x68, 0x72, 0x61, 0x72, 0x65, 0x6a, 0x6f, 0x68, 0x61, 0x6e,
-0x6e, 0x65, 0x73, 0x62, 0x75, 0x72, 0x67, 0x6a, 0x75, 0x62, 0x61, 0x6b,
-0x6d, 0x70, 0x61, 0x6c, 0x61, 0x6b, 0x61, 0x72, 0x1e6d, 0x6f, 0x75, 0x6d,
-0x6b, 0x69, 0x67, 0x61, 0x6c, 0x69, 0x6b, 0x69, 0x6e, 0x73, 0x61, 0x73,
-0x61, 0x6c, 0x61, 0x67, 0x6f, 0x73, 0x6c, 0x69, 0x62, 0x72, 0x65, 0x76,
-0x69, 0x6c, 0x6c, 0x6c, 0x75, 0x61, 0x6e, 0x1e0d, 0x61, 0x6c, 0x75, 0x62,
-0x75, 0x6d, 0x62, 0x61, 0x73, 0x69, 0x6c, 0x75, 0x73, 0x61, 0x6b, 0x61,
-0x6d, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x6d, 0x61, 0x70, 0x75, 0x1e6d, 0x75,
-0x6d, 0x61, 0x73, 0x65, 0x72, 0x75, 0x6d, 0x62, 0x61, 0x62, 0x61, 0x6e,
-0x65, 0x6d, 0x6f, 0x67, 0x61, 0x1e0d, 0x69, 0x73, 0x75, 0x6d, 0x6f, 0x6e,
-0x72, 0x6f, 0x76, 0x69, 0x61, 0x6e, 0x61, 0x69, 0x72, 0x6f, 0x62, 0x69,
-0x6e, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x61, 0x6e, 0x69, 0x79, 0x61, 0x6d,
-0x65, 0x6e, 0x75, 0x65, 0x6b, 0x73, 0x61, 0x76, 0x61, 0x67, 0x64, 0x75,
-0x67, 0x75, 0x70, 0x6f, 0x72, 0x1e6d, 0x6f, 0x2d, 0x1e47, 0x6f, 0x76, 0x6f,
-0x73, 0x61, 0x6f, 0x20, 0x1e6d, 0x6f, 0x6d, 0x74, 0x72, 0x69, 0x70, 0x6f,
-0x6c, 0x69, 0x1e6d, 0x75, 0x6e, 0x69, 0x73, 0x76, 0x69, 0x6e, 0x64, 0x68,
-0x75, 0x6b, 0x61, 0x1e0d, 0x61, 0x6b, 0x61, 0x6e, 0x6b, 0x6f, 0x72, 0x61,
-0x6a, 0x65, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61, 0x65, 0x6e, 0x1e6d,
-0x69, 0x67, 0x75, 0x61, 0x61, 0x72, 0x61, 0x67, 0x76, 0x61, 0x69, 0x6e,
-0x61, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20, 0x61, 0x69, 0x72,
-0x65, 0x73, 0x6b, 0x61, 0x74, 0x61, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x6b,
-0x6f, 0x72, 0x1e0d, 0x61, 0x62, 0x61, 0x68, 0x75, 0x68, 0x75, 0x65, 0x6c,
-0x61, 0x20, 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x1e0d, 0x6f,
-0x6a, 0x61, 0x72, 0x69, 0x79, 0x6f, 0x20, 0x67, 0x61, 0x6c, 0x6c, 0x65,
-0x67, 0x6f, 0x73, 0x73, 0x61, 0x6c, 0x1e6d, 0x61, 0x73, 0x61, 0x6e, 0x20,
-0x68, 0x75, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x20, 0x6c, 0x75, 0x69, 0x73,
-0x1e6d, 0x75, 0x6b, 0x16b, 0x6d, 0x6e, 0x75, 0x73, 0x76, 0x61, 0x69, 0x79,
-0x61, 0x61, 0x72, 0x75, 0x62, 0x61, 0x65, 0x73, 0x75, 0x6e, 0x73, 0x69,
-0x6f, 0x6e, 0x65, 0x1e6d, 0x69, 0x6b, 0x6f, 0x6b, 0x65, 0x6e, 0x62, 0x61,
-0x68, 0x69, 0x61, 0x62, 0x61, 0x69, 0x61, 0x20, 0x62, 0x61, 0x6e, 0x1e0d,
-0x65, 0x72, 0x61, 0x73, 0x62, 0x61, 0x72, 0x62, 0x61, 0x1e0d, 0x6f, 0x73,
-0x62, 0x65, 0x6c, 0x65, 0x6d, 0x62, 0x65, 0x6c, 0x69, 0x6a, 0x62, 0x6c,
-0x61, 0x6e, 0x6b, 0x2d, 0x73, 0x61, 0x62, 0x6c, 0x6f, 0x6e, 0x62, 0x6f,
-0x61, 0x20, 0x76, 0x69, 0x73, 0x74, 0x61, 0x62, 0x6f, 0x67, 0x6f, 0x1e6d,
-0x61, 0x62, 0x6f, 0x69, 0x73, 0x12b, 0x6b, 0x65, 0x6d, 0x62, 0x72, 0x69,
-0x6a, 0x20, 0x62, 0x65, 0x6b, 0x61, 0x6d, 0x70, 0x6f, 0x20, 0x67, 0x72,
-0x61, 0x6e, 0x1e0d, 0x65, 0x6b, 0x61, 0x6e, 0x6b, 0x75, 0x6e, 0x6b, 0x61,
-0x72, 0x61, 0x6b, 0x61, 0x73, 0x6b, 0x65, 0x79, 0x65, 0x6e, 0x6b, 0x65,
-0x69, 0x6d, 0x61, 0x6e, 0x63, 0x69, 0x6b, 0x61, 0x67, 0x6f, 0x63, 0x68,
-0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 0x6b, 0x6f, 0x73, 0x1e6d, 0x61,
-0x20, 0x72, 0x69, 0x6b, 0x61, 0x6b, 0x72, 0x65, 0x73, 0x1e6d, 0x6f, 0x6e,
-0x6b, 0x75, 0x61, 0x61, 0x62, 0x61, 0x6b, 0x79, 0x75, 0x72, 0x61, 0x73,
-0x6f, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x61, 0x76, 0x6e,
-0x1e0d, 0x61, 0x6f, 0x73, 0x6e, 0x1e0d, 0x61, 0x6f, 0x73, 0x6f, 0x6e, 0x20,
-0x6b, 0x72, 0x12b, 0x6b, 0x1e0d, 0x65, 0x6e, 0x76, 0x65, 0x72, 0x1e0d, 0x65,
-0x1e6d, 0x72, 0x6f, 0x69, 0x1e6d, 0x1e0d, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x6b,
-0x61, 0x65, 0x1e0d, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x6e, 0x65, 0x69, 0x72,
-0x75, 0x6e, 0x65, 0x70, 0x65, 0x65, 0x6c, 0x20, 0x73, 0x61, 0x6c, 0x76,
-0x61, 0x1e0d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x65,
-0x6c, 0x73, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x6a, 0x61,
-0x67, 0x6c, 0x61, 0x73, 0x20, 0x62, 0x61, 0x79, 0x67, 0x6f, 0x6f, 0x73,
-0x20, 0x62, 0x65, 0x67, 0x72, 0x61, 0x6e, 0x1e0d, 0x20, 0x1e6d, 0x75, 0x72,
-0x6b, 0x67, 0x72, 0x65, 0x6e, 0x61, 0x1e0d, 0x61, 0x67, 0x75, 0x61, 0x1e0d,
-0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65, 0x67, 0x75, 0x61, 0x74, 0x65, 0x6d,
-0x61, 0x6c, 0x61, 0x67, 0x75, 0x61, 0x6a, 0x61, 0x6b, 0x69, 0x6c, 0x67,
-0x75, 0x79, 0x61, 0x6e, 0x61, 0x68, 0x65, 0x6c, 0x69, 0x70, 0x61, 0x6b,
-0x73, 0x68, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x69, 0x6e, 0x1e0d, 0x69, 0x61,
-0x6e, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x6e, 0x6f, 0x6b, 0x73, 0x2c,
-0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x72,
-0x65, 0x6e, 0x67, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61,
-0x6e, 0x61, 0x70, 0x69, 0x1e6d, 0x74, 0x72, 0x73, 0x62, 0x65, 0x72, 0x67,
-0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x1e6d, 0x65,
-0x6c, 0x6c, 0x20, 0x73, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d,
-0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, 0x76, 0x69, 0x2c, 0x20, 0x69,
-0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, 0x6e, 0x63, 0x65,
-0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61,
-0x76, 0x69, 0x6e, 0x61, 0x6d, 0x61, 0x6b, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d,
-0x69, 0x79, 0x61, 0x6e, 0x61, 0x69, 0x6e, 0x16b, 0x76, 0x69, 0x6b, 0x69,
-0x6b, 0x61, 0x6c, 0x75, 0x69, 0x1e6d, 0x6a, 0x61, 0x6d, 0x61, 0x69, 0x6b,
-0x61, 0x6a, 0x75, 0x6e, 0x6f, 0x76, 0x6c, 0x6f, 0x75, 0x69, 0x76, 0x69,
-0x6c, 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x69, 0x73, 0x65, 0x6c, 0x6c,
-0x6f, 0x2c, 0x20, 0x6b, 0x65, 0x6e, 0x1e6d, 0x75, 0x6b, 0x12b, 0x6b, 0x72,
-0x65, 0x6c, 0x65, 0x6e, 0x1e0d, 0x65, 0x69, 0x6b, 0x6c, 0x61, 0x20, 0x70,
-0x61, 0x6a, 0x6c, 0x6f, 0x73, 0x20, 0x61, 0x6e, 0x6a, 0x65, 0x6c, 0x65,
-0x73, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63,
-0x2019, 0x73, 0x20, 0x6b, 0x75, 0x76, 0x61, 0x1e6d, 0x61, 0x72, 0x6d, 0x61,
-0x73, 0x12b, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x75, 0x61, 0x6d, 0x61,
-0x6e, 0x61, 0x75, 0x73, 0x6d, 0x61, 0x72, 0x69, 0x67, 0x6f, 0x1e6d, 0x6d,
-0x61, 0x72, 0x1e6d, 0x69, 0x6e, 0x69, 0x6b, 0x6d, 0x61, 0x1e6d, 0x61, 0x6d,
-0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x61, 0x73, 0x61, 0x1e6d, 0x6c, 0x61, 0x6e,
-0x6d, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x12b, 0x6d, 0x65, 0x72, 0x69,
-0x1e0d, 0x61, 0x6d, 0x65, 0x1e6d, 0x6c, 0x61, 0x6b, 0x61, 0x1e6d, 0x6c, 0x61,
-0x6d, 0x65, 0x6b, 0x73, 0x69, 0x63, 0x6f, 0x20, 0x73, 0x69, 0x1e6d, 0x79,
-0x6d, 0x69, 0x6b, 0x76, 0x69, 0x6c, 0xf5, 0x6d, 0x6f, 0x6e, 0x6b, 0x1e6d,
-0x6f, 0x6e, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x65, 0x72, 0x72, 0x65, 0x6d, 0x6f,
-0x6e, 0x1e6d, 0x65, 0x76, 0x69, 0x64, 0x69, 0x6f, 0x6d, 0x6f, 0x6e, 0x1e6d,
-0x73, 0x65, 0x72, 0x72, 0x65, 0x1e6d, 0x6e, 0x61, 0x73, 0x61, 0x75, 0x6e,
-0x69, 0x79, 0x75, 0x20, 0x79, 0x6f, 0x72, 0x6b, 0x6e, 0x6f, 0x72, 0x6f,
-0x6e, 0x68, 0x61, 0x62, 0x69, 0x79, 0x75, 0x6c, 0x61, 0x2c, 0x20, 0x75,
-0x74, 0x74, 0x61, 0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6d,
-0x61, 0x1e0d, 0x69, 0x6e, 0x12b, 0x20, 0x75, 0x74, 0x74, 0x61, 0x72, 0x20,
-0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x65, 0x75, 0x20, 0x73, 0x61,
-0x6c, 0x65, 0x6d, 0x2c, 0x20, 0x75, 0x74, 0x74, 0x61, 0x72, 0x20, 0x1e0d,
-0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x16b, 0x6b, 0x6f, 0x6a, 0x69, 0x6e,
-0x61, 0x67, 0x61, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x61, 0x70, 0x61, 0x72,
-0x61, 0x6d, 0x61, 0x72, 0x69, 0x62, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x6b,
-0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x61, 0x75, 0x2d, 0x70, 0x72, 0x69,
-0x6e, 0x73, 0x65, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x61, 0x70, 0x20, 0x73,
-0x70, 0x61, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x1e6d, 0x70, 0x20, 0x76, 0x65,
-0x6c, 0x68, 0x6f, 0x70, 0x75, 0x65, 0x72, 0x74, 0x6f, 0x20, 0x72, 0x69,
-0x6b, 0x6f, 0x70, 0x75, 0x1e47, 0x1e6d, 0x61, 0x20, 0x65, 0x72, 0x65, 0x6e,
-0x61, 0x73, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x6c,
-0x65, 0x64, 0x1e6d, 0x72, 0x65, 0x73, 0x69, 0x70, 0x69, 0x72, 0x65, 0x6a,
-0x69, 0x6e, 0x61, 0x72, 0x65, 0x6a, 0x61, 0x6c, 0x79, 0x75, 0x1e6d, 0x72,
-0x69, 0x6f, 0x20, 0x62, 0x72, 0x61, 0x6e, 0x6b, 0x6f, 0x73, 0x61, 0x74,
-0x61, 0x72, 0x69, 0x73, 0x61, 0x6e, 0x1e6d, 0x69, 0x61, 0x67, 0x6f, 0x73,
-0x65, 0x6e, 0x74, 0x6f, 0x20, 0x1e0d, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f,
-0x73, 0x61, 0x6f, 0x20, 0x70, 0x61, 0x75, 0x6c, 0x6f, 0x69, 0x1e6d, 0x6f,
-0x6b, 0x6f, 0x1e6d, 0x6f, 0x72, 0x6d, 0x69, 0x1e6d, 0x73, 0x69, 0x74, 0x6b,
-0x61, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x62, 0x61, 0x72, 0x74, 0x65, 0x6c,
-0x65, 0x6d, 0x69, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x6a, 0x6f, 0x6e, 0x73,
-0x73, 0x65, 0x6e, 0x74, 0x20, 0x6b, 0x69, 0x1e6d, 0x1e6d, 0x73, 0x73, 0x65,
-0x6e, 0x74, 0x20, 0x6c, 0x75, 0x73, 0x69, 0x61, 0x73, 0x65, 0x6e, 0x1e6d,
-0x20, 0x74, 0x6f, 0x6d, 0x61, 0x73, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x76,
-0x69, 0x6e, 0x73, 0x65, 0x6e, 0x1e6d, 0x73, 0x76, 0x69, 0x70, 0x1e6d, 0x20,
-0x6b, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x1e6d, 0x74, 0x65, 0x67, 0x75, 0x74,
-0x75, 0x6c, 0x65, 0x74, 0x69, 0x68, 0x76, 0x61, 0x6e, 0x61, 0x1e6d, 0x6f,
-0x72, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x1e6d, 0x6f, 0x72, 0x1e6d, 0x6f, 0x6c, 0x61,
-0x76, 0x61, 0x6e, 0x6b, 0x16b, 0x76, 0x65, 0x72, 0x76, 0x68, 0x61, 0x69,
-0x1e6d, 0x68, 0x6f, 0x72, 0x73, 0x76, 0x69, 0x6e, 0x6e, 0x69, 0x70, 0x65,
-0x67, 0x79, 0x61, 0x6b, 0x75, 0x1e6d, 0x61, 0x1e6d, 0x6b, 0x65, 0x73, 0x65,
-0x65, 0x1e0d, 0x65, 0x76, 0x69, 0x73, 0x1e0d, 0x79, 0x75, 0x6d, 0x6f, 0x6e,
-0x74, 0x20, 0x64, 0x65, 0x20, 0x75, 0x72, 0x76, 0x69, 0x6c, 0x6c, 0x6d,
-0x65, 0x6b, 0x76, 0x61, 0x72, 0x69, 0x6d, 0x61, 0x76, 0x73, 0x6f, 0x6e,
-0x6d, 0x65, 0x6b, 0x20, 0x6d, 0x75, 0x72, 0x1e0d, 0x6f, 0x70, 0x61, 0x6c,
-0x6d, 0x65, 0x72, 0x72, 0x6f, 0x74, 0x65, 0x72, 0x61, 0x73, 0x79, 0x6f,
-0x76, 0x61, 0x1e6d, 0x72, 0x6f, 0x6c, 0x6c, 0x76, 0x6f, 0x73, 0x1e6d, 0x6f,
-0x6b, 0x6c, 0x6e, 0x67, 0x79, 0x61, 0x72, 0x62, 0x79, 0x65, 0x6e, 0x65,
-0x1e0d, 0x65, 0x6e, 0x61, 0x6c, 0x6d, 0x61, 0x1e6d, 0x79, 0x61, 0x6d, 0x6d,
-0x61, 0x6e, 0x61, 0x6e, 0x61, 0x1e0d, 0x69, 0x72, 0x61, 0x6b, 0x74, 0x61,
-0x75, 0x61, 0x61, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x61, 0x73, 0x67, 0x61,
-0x62, 0x61, 0x1e6d, 0x61, 0x74, 0x61, 0x72, 0x61, 0x75, 0x62, 0x61, 0x67,
-0x64, 0x61, 0x64, 0x62, 0x61, 0x68, 0x72, 0x61, 0x69, 0x6e, 0x62, 0x61,
-0x6b, 0x75, 0x62, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, 0x62, 0x61, 0x72,
-0x6e, 0x61, 0x75, 0x6c, 0x62, 0x65, 0x69, 0x72, 0x75, 0x74, 0x62, 0x69,
-0x73, 0x6b, 0x65, 0x6b, 0x62, 0x72, 0x75, 0x6e, 0x65, 0x69, 0x63, 0x69,
-0x74, 0x61, 0x6b, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x6f, 0x1e0d, 0x61, 0x6d,
-0x61, 0x73, 0x6b, 0x75, 0x73, 0x1e0d, 0x69, 0x6c, 0x69, 0x64, 0x75, 0x62,
-0x61, 0x69, 0x64, 0x75, 0x73, 0x61, 0x6d, 0x62, 0x65, 0x70, 0x61, 0x6d,
-0x61, 0x67, 0x75, 0x73, 0x74, 0x61, 0x67, 0x61, 0x6a, 0x61, 0x68, 0x65,
-0x62, 0x72, 0x6f, 0x6e, 0x68, 0x6f, 0x20, 0x63, 0x69, 0x20, 0x6d, 0x69,
-0x6e, 0x68, 0x20, 0x73, 0x69, 0x74, 0x69, 0x68, 0x6f, 0x6e, 0x67, 0x20,
-0x6b, 0x6f, 0x6e, 0x67, 0x69, 0x72, 0x6b, 0x75, 0x1e6d, 0x73, 0x6b, 0x6a,
-0x61, 0x79, 0x61, 0x70, 0x75, 0x72, 0x61, 0x6a, 0x65, 0x72, 0x75, 0x73,
-0x61, 0x6c, 0x65, 0x6d, 0x6b, 0x61, 0x62, 0x75, 0x6c, 0x6b, 0x61, 0x6d,
-0x63, 0x61, 0x1e6d, 0x6b, 0x61, 0x6b, 0x61, 0x72, 0x61, 0x63, 0x12b, 0x6b,
-0x61, 0x1e6d, 0x6d, 0x61, 0x6e, 0x1e0d, 0x75, 0x6b, 0x61, 0x6e, 0x64, 0x69,
-0x67, 0x61, 0x6b, 0x6f, 0x6c, 0x6b, 0x61, 0x74, 0x61, 0x6b, 0x72, 0x61,
-0x73, 0x6e, 0x65, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x6b, 0x75, 0x61, 0x6c,
-0x61, 0x20, 0x6c, 0x75, 0x6d, 0x70, 0x75, 0x72, 0x6b, 0x75, 0x63, 0x69,
-0x6e, 0x67, 0x6b, 0x75, 0x76, 0x61, 0x69, 0x74, 0x6d, 0x6b, 0x61, 0x6f,
-0x6d, 0x65, 0x67, 0x61, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, 0x6b, 0x61, 0x73,
-0x61, 0x72, 0x6d, 0x61, 0x6e, 0x12b, 0x6c, 0x61, 0x6d, 0x61, 0x73, 0x6b,
-0x61, 0x74, 0x6e, 0x69, 0x6b, 0x6f, 0x73, 0x69, 0x79, 0x61, 0x6e, 0x65,
-0x76, 0x6f, 0x6b, 0x75, 0x6a, 0x6e, 0x65, 0x1e6d, 0x73, 0x6b, 0x6e, 0x6f,
-0x76, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x72, 0x73, 0x6b, 0x70, 0x6e, 0x6f,
-0x6d, 0x20, 0x70, 0x65, 0x6e, 0x68, 0x70, 0x6f, 0x6e, 0x1e6d, 0x69, 0x61,
-0x6e, 0x61, 0x6b, 0x70, 0x79, 0x6f, 0x6e, 0x67, 0x79, 0x61, 0x6e, 0x67,
-0x6b, 0x6f, 0x73, 0x1e6d, 0x61, 0x6e, 0x65, 0x6b, 0x69, 0x6a, 0x75, 0x6f,
-0x72, 0x64, 0x61, 0x72, 0x69, 0x79, 0x61, 0x64, 0x73, 0x61, 0x68, 0x61,
-0x6c, 0x69, 0x6e, 0x73, 0x61, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x6e, 0x64,
-0x73, 0x65, 0x6f, 0x6c, 0x73, 0x65, 0x6e, 0x67, 0x61, 0x69, 0x73, 0x69,
-0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x73, 0x72, 0x65, 0x1e0d, 0x6e, 0x65,
-0x6b, 0x6f, 0x6c, 0x79, 0x6d, 0x73, 0x6b, 0x74, 0x61, 0x69, 0x70, 0x65,
-0x69, 0x74, 0x61, 0x73, 0x6b, 0x65, 0x6e, 0x1e6d, 0x74, 0x62, 0x69, 0x6c,
-0x69, 0x73, 0x69, 0x74, 0x65, 0x68, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x6d,
-0x70, 0x68, 0x75, 0x1e6d, 0x6f, 0x6b, 0x79, 0x6f, 0x1e6d, 0x6f, 0x6d, 0x73,
-0x6b, 0x75, 0x6c, 0x61, 0x6e, 0x62, 0x61, 0x1e6d, 0x61, 0x72, 0x75, 0x72,
-0x75, 0x6d, 0x63, 0x69, 0x79, 0x75, 0x73, 0x74, 0x2d, 0x6e, 0x65, 0x72,
-0x61, 0x76, 0x69, 0x65, 0x6e, 0x1e6d, 0x69, 0x61, 0x61, 0x6e, 0x76, 0x6c,
-0x61, 0x1e0d, 0x69, 0x76, 0x6f, 0x73, 0x1e6d, 0x6f, 0x6b, 0x79, 0x61, 0x6b,
-0x75, 0x1e6d, 0x73, 0x6b, 0x79, 0x61, 0x6e, 0x67, 0x6f, 0x6e, 0x79, 0x69,
-0x6b, 0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x79,
-0x65, 0x72, 0x65, 0x76, 0x61, 0x6e, 0x61, 0x6a, 0x6f, 0x72, 0x65, 0x73,
-0x62, 0x65, 0x72, 0x6d, 0x16b, 0x64, 0x61, 0x6b, 0x65, 0x6e, 0x65, 0x72,
-0x69, 0x6b, 0x65, 0x70, 0x20, 0x76, 0x65, 0x72, 0x1e0d, 0x65, 0x70, 0x65,
-0x72, 0x6f, 0x6d, 0x61, 0x1e0d, 0x69, 0x65, 0x72, 0x61, 0x72, 0x65, 0x79,
-0x6b, 0x79, 0x61, 0x76, 0x69, 0x6b, 0x64, 0x6b, 0x69, 0x1e47, 0x20, 0x6a,
-0x6f, 0x72, 0x6a, 0x69, 0x61, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x65,
-0x6c, 0x65, 0x6e, 0x61, 0x73, 0x1e6d, 0x61, 0x6e, 0x6c, 0x69, 0x61, 0x65,
-0x64, 0x69, 0x6c, 0x65, 0x69, 0x64, 0x62, 0x72, 0x69, 0x73, 0x62, 0x61,
-0x6e, 0x65, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x68, 0x69, 0x6c,
-0x6c, 0x1e0d, 0x61, 0x72, 0x76, 0x69, 0x6e, 0x79, 0x75, 0x6b, 0x6c, 0x61,
-0x68, 0x6f, 0x62, 0x61, 0x72, 0x1e6d, 0x6c, 0x69, 0x6e, 0x1e0d, 0x65, 0x72,
-0x6d, 0x61, 0x6e, 0x6c, 0x6f, 0x72, 0x1e0d, 0x20, 0x68, 0x6f, 0x76, 0x65,
-0x6d, 0x65, 0x6c, 0x62, 0x6f, 0x72, 0x6e, 0x65, 0x70, 0x65, 0x72, 0x74,
-0x73, 0x79, 0x1e0d, 0x6e, 0x12b, 0x61, 0x6d, 0x73, 0x1e6d, 0x65, 0x72, 0x1e0d,
-0x61, 0x6d, 0x61, 0x61, 0x1e47, 0x1e0d, 0x6f, 0x72, 0x61, 0x61, 0x61, 0x73,
-0x1e6d, 0x72, 0x61, 0x68, 0x61, 0x6e, 0x65, 0x74, 0x65, 0x6e, 0x73, 0x62,
-0x65, 0x6c, 0x67, 0x72, 0x61, 0x1e0d, 0x65, 0x62, 0x65, 0x72, 0x6c, 0x69,
-0x6e, 0x62, 0x72, 0x61, 0x1e6d, 0x69, 0x73, 0x6c, 0x61, 0x76, 0x61, 0x62,
-0x72, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x73, 0x62, 0x75, 0x6b, 0x61, 0x72,
-0x65, 0x73, 0x74, 0x62, 0x75, 0x1e0d, 0x61, 0x70, 0x65, 0x73, 0x74, 0x62,
-0x75, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x6b, 0x69, 0x73, 0x69, 0x6e,
-0x61, 0x75, 0x6b, 0x6f, 0x70, 0x65, 0x6e, 0x68, 0x61, 0x67, 0x65, 0x6e,
-0x1e0d, 0x62, 0x6c, 0x69, 0x6e, 0x6a, 0x69, 0x62, 0x72, 0x61, 0x6c, 0x1e6d,
-0x61, 0x72, 0x67, 0x65, 0x72, 0x6e, 0x73, 0x69, 0x68, 0x65, 0x6c, 0x73,
-0x69, 0x6e, 0x6b, 0x69, 0x61, 0x61, 0x69, 0x6c, 0x20, 0x61, 0x70, 0x20,
-0x6d, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x62, 0x75, 0x6c, 0x6a,
-0x65, 0x72, 0x73, 0x69, 0x6b, 0x61, 0x6c, 0x69, 0x6e, 0x69, 0x6e, 0x67,
-0x72, 0x61, 0x1e0d, 0x6b, 0x69, 0x72, 0x6f, 0x76, 0x6b, 0x69, 0x79, 0x76,
-0x6c, 0x69, 0x73, 0x62, 0x6f, 0x6e, 0x6c, 0x79, 0x75, 0x62, 0x6c, 0x79,
-0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x1e0d, 0x6e, 0x6c, 0x6b, 0x73, 0x65, 0x6d,
-0x62, 0x72, 0x67, 0x6d, 0x65, 0x1e0d, 0x72, 0x69, 0x1e0d, 0x6d, 0x61, 0x6c,
-0x1e6d, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61, 0x6d, 0x6d, 0x69,
-0x6e, 0x73, 0x6b, 0x6d, 0x6f, 0x6e, 0x61, 0x6b, 0x6f, 0x6d, 0x6f, 0x73,
-0x6b, 0x6f, 0x6f, 0x73, 0x6c, 0x6f, 0x70, 0x61, 0x72, 0x69, 0x73, 0x70,
-0x1e0d, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x73, 0x61, 0x70, 0x72, 0x61, 0x67,
-0x72, 0x69, 0x67, 0x61, 0x73, 0x61, 0x6d, 0x61, 0x72, 0x61, 0x73, 0x61,
-0x6e, 0x20, 0x6d, 0x61, 0x72, 0x69, 0x6e, 0x6f, 0x73, 0x61, 0x72, 0x61,
-0x6a, 0x65, 0x76, 0x6f, 0x73, 0x61, 0x72, 0x61, 0x1e6d, 0x6f, 0x76, 0x73,
-0x69, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x6f,
-0x70, 0x69, 0x73, 0x6f, 0x70, 0x69, 0x79, 0x61, 0x73, 0x1e6d, 0x6f, 0x6b,
-0x68, 0x6f, 0x6d, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x1e6d, 0x69, 0x72, 0x61,
-0x6e, 0x65, 0x75, 0x6c, 0x79, 0x61, 0x6e, 0x6f, 0x76, 0x73, 0x6b, 0x76,
-0x61, 0x1e0d, 0x75, 0x6a, 0x76, 0x61, 0x1e6d, 0x69, 0x6b, 0x61, 0x6e, 0x76,
-0x69, 0x65, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x6c, 0x6e, 0x69, 0x75, 0x73,
-0x76, 0x6f, 0x6c, 0x67, 0x6f, 0x67, 0x72, 0x61, 0x1e0d, 0x76, 0x61, 0x72,
-0x73, 0x61, 0x74, 0x65, 0x67, 0x75, 0x73, 0x69, 0x67, 0x61, 0x6c, 0x70,
-0x61, 0x6a, 0x75, 0x72, 0x69, 0x63, 0x1e6d, 0x61, 0x6e, 0x61, 0x6e, 0x61,
-0x72, 0x69, 0x76, 0x63, 0x68, 0x61, 0x67, 0x6f, 0x73, 0x6b, 0x72, 0x69,
-0x73, 0x1e6d, 0x6d, 0x61, 0x73, 0x6b, 0x6f, 0x6b, 0x6f, 0x73, 0x6b, 0x6f,
-0x6d, 0x6f, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x67, 0x75, 0x65, 0x6c, 0x65,
-0x6e, 0x6d, 0x61, 0x68, 0x65, 0x6d, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x65,
-0x73, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x73, 0x69, 0x75, 0x73, 0x6d, 0x61,
-0x79, 0x6f, 0x1e6d, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x61, 0x70,
-0x69, 0x61, 0x101, 0x6b, 0x6c, 0x61, 0x6e, 0x1e0d, 0x62, 0x6f, 0x75, 0x67,
-0x61, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x63, 0x65, 0x1e6d, 0x61, 0x6d, 0x63,
-0x16b, 0x6b, 0x12b, 0x73, 0x74, 0x65, 0x72, 0x69, 0x70, 0x65, 0x1e6d, 0x65,
-0x70, 0x61, 0x6b, 0x61, 0x6f, 0x70, 0x6f, 0x70, 0x69, 0x6a, 0x69, 0x70,
-0x75, 0x6e, 0x61, 0x70, 0x75, 0x74, 0x69, 0x67, 0x61, 0x6c, 0x61, 0x70,
-0x61, 0x67, 0x6f, 0x73, 0x67, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x72, 0x67,
-0x75, 0x61, 0x1e0d, 0x61, 0x6c, 0x6b, 0x65, 0x6e, 0x61, 0x6c, 0x6b, 0x61,
-0x6e, 0x1e6d, 0x6f, 0x6e, 0x6b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61,
-0x74, 0x69, 0x6b, 0x69, 0x73, 0x72, 0x61, 0x65, 0x6b, 0x76, 0x61, 0x6a,
-0x61, 0x6c, 0x65, 0x69, 0x6e, 0x6d, 0x61, 0x6a, 0x75, 0x72, 0x6f, 0x6d,
-0x61, 0x72, 0x6b, 0x69, 0x73, 0x61, 0x73, 0x6d, 0x69, 0x1e0d, 0x76, 0x61,
-0x79, 0x6e, 0x61, 0x75, 0x72, 0x75, 0x6e, 0x69, 0x75, 0x65, 0x6e, 0x6f,
-0x72, 0x70, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x69, 0x65, 0x70, 0x61, 0x6e,
-0x67, 0x6f, 0x20, 0x70, 0x61, 0x6e, 0x67, 0x6f, 0x70, 0x61, 0x6c, 0x61,
-0x75, 0x70, 0x69, 0x1e6d, 0x6b, 0x65, 0x72, 0x6e, 0x70, 0x6f, 0x6e, 0x70,
-0x65, 0x69, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x73,
-0x62, 0x69, 0x72, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x67, 0x61, 0x73,
-0x61, 0x69, 0x70, 0x61, 0x6e, 0x1e6d, 0x61, 0x68, 0x69, 0x1e6d, 0x69, 0x74,
-0x61, 0x72, 0x61, 0x76, 0x61, 0x1e6d, 0x6f, 0x6e, 0x67, 0x61, 0x1e6d, 0x61,
-0x70, 0x75, 0x76, 0x65, 0x6b, 0x76, 0x61, 0x6c, 0x6c, 0x69, 0x73, 0x92c,
-0x94d, 0x92f, 0x93e, 0x928, 0x94d, 0x91c, 0x941, 0x932, 0x92a, 0x93c, 0x94d, 0x930,
-0x940, 0x91f, 0x93e, 0x909, 0x928, 0x915, 0x93e, 0x930, 0x94d, 0x924, 0x941, 0x92e,
-0x915, 0x93f, 0x902, 0x938, 0x93e, 0x938, 0x93e, 0x932, 0x941, 0x92c, 0x941, 0x92e,
-0x92c, 0x93e, 0x938, 0x940, 0x92e, 0x94d, 0x2d, 0x92c, 0x93e, 0x92c, 0x93e, 0x928,
-0x947, 0x92e, 0x94b, 0x917, 0x93e, 0x926, 0x93f, 0x938, 0x941, 0x928, 0x93e, 0x907,
-0x930, 0x94b, 0x92c, 0x93f, 0x928, 0x941, 0x906, 0x915, 0x91a, 0x949, 0x91f, 0x938,
-0x94d, 0x92f, 0x93e, 0x928, 0x20, 0x939, 0x94d, 0x935, 0x93e, 0x928, 0x938, 0x94d,
-0x92f, 0x93e, 0x928, 0x20, 0x932, 0x942, 0x924, 0x93f, 0x909, 0x938, 0x941, 0x906,
-0x907, 0x92f, 0x93e, 0x90f, 0x938, 0x928, 0x938, 0x93f, 0x92f, 0x949, 0x928, 0x92c,
-0x94d, 0x932, 0x93e, 0x902, 0x2d, 0x938, 0x947, 0x92c, 0x932, 0x94b, 0x928, 0x915,
-0x947, 0x92e, 0x94d, 0x92c, 0x94d, 0x930, 0x93f, 0x91c, 0x20, 0x92c, 0x947, 0x915,
-0x94d, 0x92f, 0x93e, 0x92e, 0x94d, 0x92a, 0x94b, 0x20, 0x917, 0x94d, 0x930, 0x93e,
-0x902, 0x921, 0x947, 0x915, 0x94d, 0x92f, 0x93e, 0x928, 0x915, 0x941, 0x928, 0x938,
-0x93f, 0x915, 0x93e, 0x917, 0x94b, 0x921, 0x947, 0x928, 0x92e, 0x93e, 0x930, 0x94d,
-0x915, 0x938, 0x949, 0x928, 0x924, 0x93f, 0x930, 0x941, 0x928, 0x947, 0x92a, 0x947,
-0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x928, 0x947, 0x932, 0x94d, 0x938,
-0x928, 0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x93e, 0x932, 0x947, 0x91c, 0x93c,
-0x93e, 0x939, 0x947, 0x932, 0x93f, 0x92a, 0x947, 0x915, 0x94d, 0x938, 0x907, 0x915,
-0x93e, 0x932, 0x941, 0x924, 0x93f, 0x91f, 0x915, 0x94d, 0x930, 0x93e, 0x932, 0x947,
-0x928, 0x94d, 0x921, 0x93f, 0x91c, 0x93f, 0x915, 0x92e, 0x928, 0x94b, 0x938, 0x92e,
-0x947, 0x930, 0x93f, 0x917, 0x94b, 0x91f, 0x92c, 0x94d, 0x92f, 0x942, 0x932, 0x93e,
-0x2c, 0x20, 0x909, 0x924, 0x949, 0x930, 0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f,
-0x93e, 0x92e, 0x93e, 0x926, 0x93f, 0x928, 0x940, 0x20, 0x909, 0x924, 0x949, 0x930,
-0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x928, 0x94d, 0x92f, 0x942, 0x20,
-0x938, 0x93e, 0x932, 0x947, 0x92e, 0x2c, 0x20, 0x909, 0x924, 0x949, 0x930, 0x949,
-0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x913, 0x915, 0x93e, 0x91c, 0x940, 0x928,
-0x93e, 0x917, 0x93e, 0x92a, 0x93c, 0x940, 0x928, 0x93f, 0x915, 0x94d, 0x938, 0x92a,
-0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x911, 0x92a, 0x93c, 0x20, 0x938, 0x94d, 0x92a,
-0x947, 0x928, 0x930, 0x947, 0x938, 0x93e, 0x907, 0x92a, 0x93c, 0x938, 0x947, 0x928,
-0x94d, 0x91f, 0x93e, 0x930, 0x947, 0x92e, 0x938, 0x947, 0x902, 0x924, 0x93f, 0x906,
-0x917, 0x94b, 0x938, 0x947, 0x902, 0x91f, 0x20, 0x92c, 0x93e, 0x930, 0x94d, 0x924,
-0x947, 0x932, 0x947, 0x92e, 0x93f, 0x938, 0x947, 0x902, 0x91f, 0x20, 0x924, 0x949,
-0x92e, 0x938, 0x938, 0x94d, 0x935, 0x93f, 0x92a, 0x93c, 0x94d, 0x91f, 0x20, 0x915,
-0x930, 0x902, 0x91f, 0x935, 0x94d, 0x92f, 0x93e, 0x928, 0x94d, 0x915, 0x942, 0x935,
-0x930, 0x92e, 0x94d, 0x92f, 0x93e, 0x915, 0x92e, 0x941, 0x930, 0x94d, 0x921, 0x94b,
-0x932, 0x949, 0x928, 0x94d, 0x917, 0x92f, 0x930, 0x92c, 0x94d, 0x92f, 0x947, 0x928,
-0x905, 0x938, 0x94d, 0x917, 0x93e, 0x92c, 0x93e, 0x924, 0x92c, 0x94d, 0x92f, 0x93e,
-0x902, 0x917, 0x915, 0x949, 0x915, 0x92c, 0x93f, 0x938, 0x94d, 0x915, 0x947, 0x915,
-0x92c, 0x94d, 0x930, 0x942, 0x928, 0x947, 0x924, 0x93f, 0x924, 0x94d, 0x938, 0x93f,
-0x924, 0x93e, 0x926, 0x941, 0x92c, 0x924, 0x93f, 0x926, 0x941, 0x938, 0x93e, 0x902,
-0x92c, 0x947, 0x92a, 0x93c, 0x93e, 0x92e, 0x93e, 0x917, 0x941, 0x938, 0x94d, 0x924,
-0x93e, 0x92f, 0x947, 0x930, 0x941, 0x938, 0x932, 0x947, 0x92e, 0x915, 0x93e, 0x921,
-0x93f, 0x902, 0x917, 0x93e, 0x92a, 0x928, 0x949, 0x92e, 0x20, 0x92a, 0x947, 0x928,
-0x94d, 0x939, 0x915, 0x93f, 0x91c, 0x93f, 0x932, 0x949, 0x930, 0x94d, 0x921, 0x93e,
-0x938, 0x93e, 0x915, 0x93e, 0x932, 0x93f, 0x928, 0x938, 0x902, 0x918, 0x93e, 0x924,
-0x93f, 0x924, 0x93e, 0x924, 0x93f, 0x92a, 0x947, 0x924, 0x93f, 0x924, 0x93e, 0x938,
-0x915, 0x902, 0x924, 0x91f, 0x94d, 0x2d, 0x92c, 0x93f, 0x932, 0x93f, 0x938, 0x93f,
-0x92f, 0x93e, 0x902, 0x917, 0x949, 0x928, 0x915, 0x94d, 0x92f, 0x93e, 0x928, 0x947,
-0x930, 0x940, 0x92a, 0x94d, 0x92f, 0x93e, 0x930, 0x94b, 0x926, 0x93e, 0x945, 0x915,
-0x93f, 0x923, 0x93e, 0x945, 0x20, 0x91c, 0x93e, 0x945, 0x930, 0x94d, 0x91c, 0x93f,
-0x92f, 0x93e, 0x938, 0x94d, 0x91f, 0x94d, 0x92f, 0x93e, 0x928, 0x932, 0x940, 0x906,
-0x938, 0x94d, 0x91f, 0x94d, 0x930, 0x93e, 0x915, 0x93e, 0x928, 0x90f, 0x924, 0x947,
-0x928, 0x94d, 0x938, 0x906, 0x907, 0x932, 0x20, 0x911, 0x92a, 0x94d, 0x20, 0x92e,
-0x94d, 0x92f, 0x93e, 0x928, 0x938, 0x93f, 0x92e, 0x94d, 0x92a, 0x93c, 0x947, 0x930,
-0x94b, 0x92a, 0x94b, 0x932, 0x938, 0x94d, 0x915, 0x94b, 0x92a, 0x94d, 0x92f, 0x947,
-0x938, 0x94b, 0x92a, 0x93c, 0x93f, 0x92f, 0x93e, 0x91c, 0x93c, 0x94d, 0x92f, 0x942,
-0x930, 0x93f, 0x915, 0x93c, 0x92e, 0x949, 0x930, 0x940, 0x938, 0x938, 0x911, 0x915,
-0x932, 0x947, 0x902, 0x921, 0x91a, 0x94d, 0x92f, 0x93e, 0x925, 0x92e, 0x924, 0x93f,
-0x938, 0x94d, 0x91f, 0x930, 0x90f, 0x92a, 0x93c, 0x947, 0x91f, 0x92a, 0x93c, 0x93e,
-0x915, 0x93e, 0x913, 0x92a, 0x93c, 0x94b, 0x92a, 0x93c, 0x93f, 0x91c, 0x940, 0x92a,
-0x93c, 0x94d, 0x92f, 0x942, 0x928, 0x93e, 0x92a, 0x93c, 0x941, 0x91f, 0x940, 0x917,
-0x94d, 0x92f, 0x93e, 0x92e, 0x92c, 0x93f, 0x92f, 0x930, 0x915, 0x947, 0x902, 0x91f,
-0x928, 0x928, 0x93e, 0x945, 0x909, 0x930, 0x941, 0x928, 0x949, 0x930, 0x92a, 0x93c,
-0x949, 0x915, 0x928, 0x949, 0x92e, 0x93f, 0x92f, 0x93e, 0x92a, 0x94b, 0x928, 0x92a,
-0x947, 0x924, 0x93f, 0xb0f, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb2c, 0xb4d, 0xb30, 0xb3e,
-0xb1c, 0xb3e, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb2c, 0xb41, 0xb1c, 0xb42,
-0xb2e, 0xb4d, 0xb2c, 0xb41, 0xb30, 0xb3e, 0xb15, 0xb28, 0xb3e, 0xb15, 0xb4d, 0xb30,
-0xb3f, 0xb1c, 0xb3f, 0xb2c, 0xb1f, 0xb3f, 0xb2a, 0xb4d, 0xb30, 0xb3f, 0xb1f, 0xb3e,
-0xb09, 0xb28, 0xb4d, 0x200c, 0xb17, 0xb3e, 0xb2c, 0xb30, 0xb4d, 0xb23, 0xb4d, 0xb23,
-0xb1c, 0xb39, 0xb3e, 0xb28, 0xb4d, 0xb38, 0xb2c, 0xb30, 0xb4d, 0xb17, 0xb15, 0xb30,
-0xb1f, 0xb09, 0xb2e, 0xb4d, 0x200c, 0xb32, 0xb3e, 0xb17, 0xb38, 0xb4d, 0x200c, 0xb32,
-0xb3f, 0xb2c, 0xb4d, 0xb30, 0xb47, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb32,
-0xb2e, 0xb4d, 0x200c, 0xb2e, 0xb4d, 0x2d, 0xb2c, 0xb3e, 0xb2c, 0xb3e, 0xb28, 0xb47,
-0xb2e, 0xb4b, 0xb17, 0xb3e, 0xb21, 0xb3f, 0xb38, 0xb41, 0xb2e, 0xb28, 0xb30, 0xb4b,
-0xb2c, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb07, 0xb30, 0xb2c, 0xb3f, 0xb28, 0xb41, 0xb06,
-0xb15, 0xb1a, 0xb1f, 0xb05, 0xb17, 0xb3e, 0xb21, 0xb17, 0xb41, 0xb2a, 0xb30, 0xb4d,
-0xb1f, 0x2d, 0xb28, 0xb71, 0xb38, 0xb3e, 0xb05, 0x20, 0xb1f, 0xb2e, 0xb47, 0xb24,
-0xb4d, 0xb30, 0xb3f, 0xb2a, 0xb32, 0xb3f, 0xb71, 0xb3f, 0xb23, 0xb4d, 0xb21, 0xb39,
-0xb15, 0xb4d, 0xb2c, 0xb41, 0xb0f, 0xb28, 0xb38, 0xb4d, 0x20, 0xb06, 0xb07, 0xb30,
-0xb47, 0xb38, 0xb4d, 0xb15, 0xb3e, 0xb3c, 0xb1f, 0xb3e, 0xb2e, 0xb3e, 0xb15, 0xb3e,
-0xb01, 0xb15, 0xb4b, 0xb21, 0xb4b, 0xb2c, 0xb3e, 0xb1c, 0xb41, 0xb1c, 0xb4b, 0xb0f,
-0xb32, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb4d, 0xb05, 0xb1c, 0xb3e, 0xb2e, 0xb47, 0xb23,
-0xb4d, 0xb21, 0xb1c, 0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb4b, 0x20, 0xb17, 0xb3e, 0xb32,
-0xb47, 0xb17, 0xb4b, 0xb38, 0xb38, 0xb3e, 0xb32, 0xb4d, 0xb1f, 0xb3e, 0xb38, 0xb3e,
-0xb5f, 0xb3e, 0xb28, 0xb4d, 0x20, 0xb71, 0xb3e, 0xb28, 0xb4d, 0xb38, 0xb5f, 0xb3e,
-0xb28, 0x20, 0xb32, 0xb41, 0xb07, 0xb38, 0xb1f, 0xb4b, 0xb15, 0xb41, 0xb2e, 0xb28,
-0xb09, 0xb38, 0xb41, 0xb06, 0xb07, 0xb5f, 0xb3e, 0xb05, 0xb30, 0xb41, 0xb2c, 0xb3e,
-0xb2c, 0xb3e, 0xb30, 0xb2c, 0xb3e, 0xb21, 0xb38, 0xb2c, 0xb4d, 0xb32, 0xb3e, 0xb19,
-0xb4d, 0xb15, 0x2d, 0xb38, 0xb3e, 0xb2c, 0xb32, 0xb28, 0xb4d, 0xb2c, 0xb4b, 0xb06,
-0x20, 0xb71, 0xb3f, 0xb38, 0xb4d, 0xb1f, 0xb3e, 0xb2c, 0xb17, 0xb1f, 0xb3e, 0xb2c,
-0xb07, 0xb38, 0xb47, 0xb15, 0xb3e, 0xb2e, 0xb4d, 0xb2a, 0x20, 0xb17, 0xb4d, 0xb30,
-0xb3e, 0xb23, 0xb4d, 0xb21, 0xb47, 0xb38, 0xb3f, 0xb15, 0xb3e, 0xb17, 0xb15, 0xb37,
-0xb4d, 0xb1f, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb15, 0xb3e, 0xb15, 0xb4d, 0xb30, 0xb47,
-0xb38, 0xb4d, 0x200d, 0xb1f, 0xb28, 0xb21, 0xb47, 0xb28, 0xb71, 0xb3f, 0xb30, 0xb4d,
-0xb21, 0xb47, 0xb1f, 0xb4d, 0xb30, 0xb07, 0xb1f, 0xb4d, 0xb21, 0xb2e, 0xb3f, 0xb28,
-0xb3f, 0xb15, 0xb3e, 0xb0f, 0xb21, 0xb4d, 0x200d, 0xb2e, 0xb28, 0xb1f, 0xb28, 0xb4d,
-0xb0f, 0xb32, 0xb4d, 0x20, 0xb38, 0xb3e, 0xb32, 0xb71, 0xb3e, 0xb21, 0xb4b, 0xb30,
-0xb4d, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0x20, 0xb28, 0xb47, 0xb32, 0xb38, 0xb28, 0xb4d,
-0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb32, 0xb47, 0xb1c, 0xb3e, 0xb17, 0xb41, 0xb06, 0xb21,
-0xb47, 0xb32, 0xb09, 0xb2a, 0xb47, 0xb17, 0xb41, 0xb06, 0xb24, 0xb47, 0xb2e, 0xb3e,
-0xb32, 0xb3e, 0xb39, 0xb3e, 0xb71, 0xb28, 0xb3e, 0xb39, 0xb47, 0xb30, 0xb2e, 0xb38,
-0xb3f, 0xb32, 0xb4b, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb2a,
-0xb32, 0xb3f, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb30, 0xb47, 0xb28, 0xb17, 0x2c, 0x20,
-0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb71, 0xb47, 0xb71, 0xb3e,
-0xb5f, 0x2c, 0x20, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb07,
-0xb28, 0xb41, 0xb71, 0xb3f, 0xb15, 0xb4d, 0xb32, 0xb09, 0xb07, 0xb38, 0xb71, 0xb3f,
-0xb32, 0xb4d, 0xb32, 0xb47, 0xb2e, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb38, 0xb47, 0xb32,
-0x2c, 0x20, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb09, 0xb15, 0xb3f, 0xb15, 0xb47,
-0xb15, 0xb4d, 0xb30, 0xb3e, 0xb32, 0xb47, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb1c, 0xb3f,
-0xb15, 0xb2e, 0xb3e, 0xb38, 0xb3f, 0xb05, 0xb2e, 0xb3e, 0xb30, 0xb3f, 0xb17, 0xb1f,
-0xb4d, 0xb2e, 0xb3e, 0xb1f, 0xb3e, 0xb2e, 0xb30, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb1c,
-0xb3e, 0xb1f, 0xb32, 0xb3e, 0xb28, 0xb4d, 0xb2e, 0xb3f, 0xb15, 0xb4d, 0xb35, 0xb47,
-0xb32, 0xb28, 0xb4d, 0xb2e, 0xb3e, 0xb28, 0xb15, 0xb1f, 0xb28, 0xb4d, 0xb2e, 0xb28,
-0xb1f, 0xb47, 0xb30, 0xb3f, 0xb0f, 0xb2e, 0xb23, 0xb4d, 0xb1f, 0xb47, 0xb2d, 0xb3f,
-0xb21, 0xb3f, 0xb05, 0xb2e, 0xb28, 0xb1f, 0xb38, 0xb47, 0xb30, 0xb30, 0xb3e, 0xb1f,
-0xb4d, 0xb28, 0xb4d, 0xb5f, 0xb41, 0x20, 0xb5f, 0xb30, 0xb4d, 0xb15, 0xb4d, 0xb28,
-0xb30, 0xb39, 0xb4d, 0xb28, 0xb2c, 0xb47, 0xb09, 0xb32, 0xb3e, 0xb39, 0x2c, 0x20,
-0xb09, 0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb15,
-0xb47, 0xb28, 0xb4d, 0xb26, 0xb4d, 0xb30, 0x2c, 0x20, 0xb09, 0xb24, 0xb4d, 0xb24,
-0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb28, 0xb4d, 0xb5f, 0xb41, 0x20,
-0xb38, 0xb3e, 0xb32, 0xb47, 0xb2e, 0xb4d, 0x2c, 0x20, 0xb09, 0xb24, 0xb4d, 0xb24,
-0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb05, 0xb1c, 0xb3f, 0xb28, 0xb3e,
-0xb17, 0xb3e, 0xb2a, 0xb07, 0xb28, 0xb3f, 0xb15, 0xb4d, 0xb38, 0xb2a, 0xb30, 0xb4d,
-0xb1f, 0x2d, 0xb0f, 0xb5f, 0xb41, 0x2d, 0xb2a, 0xb4d, 0xb30, 0xb3f, 0xb28, 0xb4d,
-0x200d, 0xb38, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb05, 0xb2b, 0xb4d, 0x20,
-0xb38, 0xb4d, 0xb2a, 0xb47, 0xb28, 0xb4d, 0xb2a, 0xb41, 0xb0f, 0xb30, 0xb4d, 0xb24,
-0x20, 0xb30, 0xb3f, 0xb15, 0xb30, 0xb47, 0xb38, 0xb3f, 0xb2a, 0xb3f, 0xb30, 0xb3f,
-0xb5f, 0x20, 0xb2c, 0xb4d, 0xb30, 0xb3e, 0xb19, 0xb4d, 0xb15, 0xb38, 0xb3e, 0xb28,
-0xb4d, 0xb24, 0xb30, 0xb47, 0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb23, 0xb4d, 0xb1f, 0x20,
-0xb21, 0xb2e, 0xb3f, 0xb19, 0xb4d, 0xb17, 0xb07, 0xb1f, 0xb4d, 0xb1f, 0xb15, 0xb4d,
-0xb35, 0xb30, 0xb1f, 0xb30, 0xb2e, 0xb3f, 0xb1f, 0xb4d, 0xb38, 0xb47, 0xb23, 0xb4d,
-0xb1f, 0x20, 0xb2c, 0xb3e, 0xb30, 0xb4d, 0xb24, 0xb47, 0xb32, 0xb47, 0xb2e, 0xb3f,
-0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb15, 0xb3f, 0xb1f, 0xb4d, 0x200d,
-0xb38, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, 0x20, 0xb25, 0xb2e, 0xb3e,
-0xb38, 0xb4d, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, 0x20, 0xb71, 0xb3f,
-0xb28, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0xb24, 0xb41, 0xb32, 0xb47, 0xb1f,
-0xb30, 0xb23, 0xb4d, 0xb1f, 0xb1f, 0xb30, 0xb1f, 0xb32, 0xb3e, 0xb71, 0xb3e, 0xb19,
-0xb4d, 0xb15, 0xb41, 0xb71, 0xb30, 0xb4d, 0xb15, 0xb47, 0xb38, 0xb3f, 0xb21, 0xb47,
-0xb71, 0xb3f, 0xb38, 0xb4d, 0xb21, 0xb4d, 0xb5f, 0xb41, 0xb2e, 0xb3e, 0xb23, 0xb4d,
-0xb1f, 0x20, 0xb21, 0xb3f, 0x20, 0xb09, 0xb30, 0xb71, 0xb3f, 0xb32, 0xb47, 0xb2e,
-0xb15, 0xb4d, 0xb71, 0xb3e, 0xb30, 0xb3f, 0xb2e, 0xb3e, 0xb01, 0xb38, 0xb28, 0xb2e,
-0xb4d, 0xb5f, 0xb3e, 0xb15, 0xb2e, 0xb41, 0xb30, 0xb4d, 0xb21, 0xb2a, 0xb3e, 0xb01,
-0xb2e, 0xb30, 0xb30, 0xb4b, 0xb24, 0xb47, 0xb30, 0xb3e, 0xb1f, 0xb4b, 0xb32, 0xb4d,
-0xb71, 0xb4b, 0xb38, 0xb4d, 0xb24, 0xb15, 0xb4b, 0xb33, 0xb19, 0xb4d, 0xb16, 0xb5f,
-0xb3e, 0xb30, 0xb2c, 0xb47, 0xb28, 0xb06, 0xb15, 0xb4d, 0xb1f, 0xb2c, 0xb47, 0xb06,
-0xb38, 0xb4d, 0x200d, 0xb17, 0xb3e, 0xb2c, 0xb1f, 0xb4d, 0xb2c, 0xb39, 0xb3e, 0xb30,
-0xb47, 0xb28, 0xb2c, 0xb3f, 0xb38, 0xb15, 0xb47, 0xb15, 0xb4d, 0x200c, 0xb26, 0xb41,
-0xb38, 0xb3e, 0xb28, 0xb2c, 0xb47, 0xb2a, 0xb3e, 0xb2e, 0xb3e, 0xb17, 0xb41, 0xb38,
-0xb4d, 0xb1f, 0xb3e, 0xb39, 0x20, 0xb1a, 0xb3f, 0x20, 0xb2e, 0xb3f, 0xb28, 0xb4d,
-0x200c, 0x20, 0xb38, 0xb3f, 0xb1f, 0xb3f, 0xb39, 0xb4b, 0xb71, 0xb21, 0xb4d, 0x200c,
-0xb1c, 0xb3e, 0xb15, 0xb30, 0xb4d, 0xb24, 0xb3e, 0xb15, 0xb2c, 0xb41, 0xb32, 0xb4d,
-0xb15, 0xb3e, 0xb1f, 0xb2e, 0xb3e, 0xb23, 0xb4d, 0xb21, 0xb41, 0xb15, 0xb3e, 0xb28,
-0xb21, 0xb4d, 0xb5f, 0xb3e, 0xb17, 0xb3e, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb38, 0xb28,
-0xb5f, 0xb3e, 0xb30, 0xb38, 0xb4d, 0xb15, 0xb28, 0xb3f, 0xb15, 0xb38, 0xb3f, 0xb06,
-0xb28, 0xb71, 0xb15, 0xb41, 0xb1c, 0xb28, 0xb47, 0xb1f, 0xb38, 0xb4d, 0xb15, 0xb28,
-0xb71, 0xb38, 0xb3f, 0xb2c, 0xb3f, 0xb30, 0xb38, 0xb4d, 0xb15, 0xb05, 0xb30, 0xb3e,
-0xb32, 0xb4d, 0x200c, 0xb2a, 0xb28, 0xb2e, 0xb4d, 0x200c, 0x20, 0xb2a, 0xb47, 0xb28,
-0xb39, 0xb2a, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb15, 0xb4d, 0x200c,
-0xb15, 0xb37, 0xb4d, 0xb1f, 0xb28, 0xb47, 0xb15, 0xb40, 0xb1c, 0xb3f, 0xb32, 0xb30,
-0xb4d, 0xb21, 0xb3e, 0xb38, 0xb15, 0xb3e, 0xb32, 0xb3f, 0xb28, 0xb4d, 0xb38, 0xb3f,
-0xb05, 0xb32, 0xb38, 0xb02, 0xb17, 0xb3e, 0xb07, 0xb38, 0xb4d, 0xb30, 0xb47, 0xb21,
-0xb28, 0xb47, 0xb15, 0xb32, 0xb5f, 0xb2e, 0xb38, 0xb4d, 0xb15, 0xb24, 0xb3e, 0xb38,
-0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb24, 0xb3f, 0xb2e, 0xb4d, 0xb2a, 0xb41, 0xb1f,
-0xb15, 0xb3f, 0xb05, 0xb1f, 0xb2e, 0xb38, 0xb4d, 0xb15, 0xb5f, 0xb41, 0xb38, 0xb4d,
-0x200d, 0xb1f, 0x2d, 0xb28, 0xb47, 0xb30, 0xb3e, 0xb71, 0xb3f, 0xb0f, 0xb23, 0xb4d,
-0xb1f, 0xb3f, 0xb0f, 0xb28, 0xb4d, 0x200c, 0xb71, 0xb4d, 0xb32, 0xb3e, 0xb21, 0xb3f,
-0xb71, 0xb37, 0xb4d, 0xb1f, 0xb4b, 0xb15, 0xb4d, 0xb5f, 0xb47, 0xb30, 0xb47, 0xb2c,
-0xb3e, 0xb28, 0xb4d, 0xb06, 0xb1c, 0xb30, 0xb47, 0xb38, 0xb4d, 0xb2c, 0xb30, 0xb2e,
-0xb41, 0xb21, 0xb3e, 0xb15, 0xb47, 0xb2a, 0xb4d, 0x200c, 0x20, 0xb71, 0xb30, 0xb4d,
-0xb26, 0xb47, 0xb2a, 0xb30, 0xb0f, 0xb30, 0xb47, 0xb15, 0xb4d, 0xb5f, 0xb3e, 0xb2c,
-0xb3f, 0xb15, 0xb38, 0xb4d, 0x200d, 0xb1f, 0xb3e, 0xb32, 0xb3f, 0xb28, 0xb0f, 0xb21,
-0xb3f, 0xb32, 0xb47, 0xb21, 0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb3f, 0xb38, 0xb2c, 0xb28,
-0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb4b, 0xb15, 0xb28, 0x20, 0xb39, 0xb3f, 0xb32, 0xb21,
-0xb3e, 0xb30, 0xb4d, 0xb71, 0xb3f, 0xb28, 0xb4d, 0xb32, 0xb3f, 0xb23, 0xb4d, 0xb21,
-0xb47, 0xb2e, 0xb3e, 0xb28, 0xb32, 0xb30, 0xb4d, 0x200d, 0xb21, 0x20, 0xb39, 0xb3e,
-0xb71, 0xb47, 0xb2e, 0xb47, 0xb32, 0xb2c, 0xb4b, 0xb28, 0xb01, 0xb2a, 0xb30, 0xb4d,
-0xb24, 0xb06, 0xb2e, 0xb37, 0xb4d, 0xb1f, 0xb4d, 0xb30, 0xb47, 0xb21, 0xb3e, 0xb2e,
-0xb4d, 0xb06, 0xb23, 0xb4d, 0xb21, 0xb30, 0xb3e, 0xb06, 0xb38, 0xb4d, 0x200d, 0xb1f,
-0xb30, 0xb3e, 0xb15, 0xb3e, 0xb28, 0xb0f, 0xb24, 0xb47, 0xb28, 0xb4d, 0xb38, 0xb2c,
-0xb47, 0xb32, 0xb17, 0xb4d, 0xb30, 0xb47, 0xb21, 0xb47, 0xb2c, 0xb4d, 0xb30, 0xb3e,
-0xb1f, 0xb3f, 0xb38, 0xb32, 0xb3e, 0xb71, 0xb3e, 0xb2c, 0xb4d, 0xb30, 0xb41, 0xb38,
-0xb3f, 0xb32, 0xb4d, 0x200d, 0xb38, 0xb2c, 0xb41, 0xb1a, 0xb3e, 0xb30, 0xb47, 0xb38,
-0xb4d, 0xb1f, 0xb2c, 0xb41, 0xb21, 0xb3e, 0xb2a, 0xb47, 0xb38, 0xb4d, 0xb1f, 0xb1a,
-0xb3f, 0xb38, 0xb3f, 0xb28, 0xb3e, 0xb09, 0xb15, 0xb2a, 0xb47, 0xb28, 0xb39, 0xb3e,
-0xb17, 0xb47, 0xb28, 0xb4d, 0xb06, 0xb07, 0xb32, 0xb4d, 0x20, 0xb05, 0xb2a, 0xb4d,
-0x20, 0xb2e, 0xb4d, 0xb5f, 0xb3e, 0xb28, 0xb4d, 0xb15, 0xb3f, 0xb30, 0xb71, 0xb2e,
-0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb3e, 0xb39, 0xb47, 0xb2e, 0xb2e, 0xb28, 0xb3e, 0xb15,
-0xb05, 0xb38, 0xb32, 0xb4b, 0xb2a, 0xb21, 0xb17, 0xb30, 0xb3f, 0xb15, 0xb3e, 0xb30,
-0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb30, 0xb3e, 0xb1c, 0xb47, 0xb2c, 0xb38, 0xb3e, 0xb30,
-0xb3e, 0xb1f, 0xb71, 0xb4d, 0xb38, 0xb3f, 0xb2e, 0xb2b, 0xb47, 0xb30, 0xb2a, 0xb32,
-0xb4d, 0xb38, 0xb4d, 0xb15, 0xb2a, 0xb5f, 0xb47, 0xb38, 0xb2a, 0xb3f, 0xb5f, 0xb3e,
-0xb38, 0xb4d, 0xb1f, 0xb15, 0xb4d, 0x20, 0xb39, 0xb2e, 0xb4d, 0x200c, 0xb1f, 0xb3e,
-0xb07, 0xb30, 0xb47, 0xb28, 0xb4d, 0xb5f, 0xb41, 0xb32, 0xb5f, 0xb3e, 0xb28, 0xb71,
-0xb38, 0xb4d, 0xb15, 0xb2c, 0xb3e, 0xb21, 0xb41, 0xb1c, 0xb71, 0xb3e, 0xb1f, 0xb3f,
-0xb15, 0xb3e, 0xb28, 0xb4d, 0xb71, 0xb3f, 0xb0f, 0xb28, 0xb3e, 0xb71, 0xb3f, 0xb32,
-0xb28, 0xb3f, 0xb09, 0xb38, 0xb4d, 0xb71, 0xb32, 0xb17, 0xb17, 0xb4d, 0xb30, 0xb3e,
-0xb21, 0xb4d, 0xb16, 0xb4d, 0xb30, 0xb40, 0xb38, 0xb4d, 0x200d, 0xb1f, 0x20, 0xb2e,
-0xb3e, 0xb38, 0xb15, 0xb15, 0xb38, 0xb4d, 0x200c, 0xb15, 0xb2e, 0xb30, 0xb15, 0xb47,
-0xb30, 0xb17, 0xb41, 0xb32, 0xb47, 0xb28, 0xb2e, 0xb30, 0xb3f, 0xb38, 0xb38, 0xb4d,
-0xb2e, 0xb3e, 0xb5f, 0xb1f, 0xb47, 0xb2c, 0xb17, 0xb47, 0xb28, 0xb4d, 0x200c, 0xb71,
-0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb1a, 0xb3e, 0xb24, 0xb3e, 0xb2e, 0xb4d, 0x200c,
-0xb2a, 0xb15, 0xb3e, 0xb05, 0xb2a, 0xb2a, 0xb3f, 0xb1c, 0xb3f, 0xb17, 0xb3e, 0xb32,
-0xb3e, 0xb2a, 0xb3e, 0xb17, 0xb38, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb28, 0xb28,
-0xb30, 0xb2a, 0xb15, 0xb4d, 0x200c, 0xb28, 0xb09, 0xb2e, 0xb3f, 0xb5f, 0xb2a, 0xb39,
-0xb28, 0xb2a, 0xb47, 0xb07, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, 0x200c, 0x20, 0xb2e,
-0xb30, 0xb47, 0xb38, 0xb2c, 0xb3f, 0xb30, 0xb3e, 0xb30, 0xb1f, 0xb19, 0xb4d, 0xb17,
-0xb3e, 0xb1f, 0xb19, 0xb4d, 0xb17, 0xb3e, 0xb1f, 0xb3e, 0xb2a, 0xb41, 0xc0e, 0xc02,
-0xc17, 0xc4d, 0xc35, 0xc3f, 0xc32, 0xc4d, 0xc32, 0xc3e, 0x3c, 0x65, 0x78, 0x65,
-0x6d, 0x70, 0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, 0x3e, 0xc05, 0xc21,
-0xc46, 0xc32, 0xc48, 0xc21, 0xc4d, 0x3c, 0x2f, 0x65, 0x78, 0x65, 0x6d, 0x70,
-0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, 0x3e, 0xc15, 0xc3e, 0xc02, 0xc1f,
-0xc28, 0xc4d, 0x140a, 0x144e, 0x1426, 0x146f, 0x1472, 0x1423, 0x1401, 0x141f, 0x14aa, 0x1423,
-0x1450, 0x1423, 0x1403, 0x14c4, 0x1431, 0x1420, 0x1403, 0x1473, 0x14eb, 0x1405, 0x1403, 0x141f,
-0x14f4, 0x1422, 0x1473, 0x141f, 0x1489, 0x1418, 0x1423, 0x1411, 0x14c2, 0x142f, 0x1420
+0x65, 0x76, 0x61, 0x79, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e,
+0x61, 0x29, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x20,
+0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x29, 0x57, 0x69, 0x6e,
+0x61, 0x6d, 0x61, 0x63, 0x20, 0x28, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e,
+0x61, 0x29, 0x4a, 0x61, 0x6d, 0xe0, 0x65, 0x67, 0x61, 0x4d, 0x6f, 0x6e,
+0x74, 0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x28, 0x4b, 0x65, 0x6e,
+0x74, 0x75, 0x63, 0x6b, 0x79, 0x29, 0x4c, 0x6f, 0x73, 0x20, 0xc0, 0x6e,
+0x67, 0x65, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x69,
+0x67, 0x61, 0x53, 0x69, 0x74, 0xe0, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20,
+0x4d, 0xe8, 0x73, 0x65, 0x67, 0x6f, 0x4d, 0x69, 0x63, 0x68, 0x65, 0x6c,
+0x6f, 0x6e, 0x42, 0x65, 0x75, 0x6c, 0x61, 0x68, 0x20, 0x28, 0x4e, 0x6f,
+0x72, 0x64, 0x20, 0x44, 0x61, 0x6b, 0x6f, 0x74, 0x61, 0x29, 0x43, 0x65,
+0x6e, 0x74, 0x65, 0x72, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44,
+0x61, 0x6b, 0x6f, 0x74, 0x61, 0x29, 0x4e, 0x65, 0x77, 0x20, 0x53, 0x61,
+0x6c, 0x65, 0x6d, 0x20, 0x28, 0x4e, 0x6f, 0x72, 0x64, 0x20, 0x44, 0x61,
+0x6b, 0x6f, 0x74, 0x61, 0x29, 0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x50,
+0x72, 0xec, 0x6e, 0x73, 0x69, 0x70, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x6f,
+0x20, 0x64, 0x65, 0x20, 0x53, 0x70, 0x61, 0x67, 0x6e, 0x61, 0x53, 0x61,
+0x6e, 0x20, 0x50, 0x6f, 0x6c, 0x6f, 0x53, 0x2e, 0x20, 0x42, 0x61, 0x72,
+0x74, 0x6f, 0x6c, 0x6f, 0x6d, 0xe8, 0x6f, 0x53, 0x2e, 0x20, 0x4a, 0x6f,
+0x61, 0x6e, 0x69, 0x53, 0x2e, 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f,
+0x66, 0x65, 0x72, 0x53, 0x2e, 0x20, 0x4c, 0x75, 0x73, 0xec, 0x61, 0x53,
+0x2e, 0x20, 0x56, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x73, 0x6f, 0xcc, 0x7a,
+0x6f, 0x6c, 0x61, 0x20, 0x4d, 0x61, 0x63, 0x71, 0x75, 0x61, 0x72, 0x69,
+0x65, 0x41, 0x6e, 0xe0, 0x64, 0x79, 0x72, 0x41, 0x6b, 0x74, 0xe0, 0x75,
+0x41, 0x7a, 0x67, 0x61, 0x62, 0x61, 0x64, 0x41, 0x74, 0x79, 0x72, 0xe0,
+0x75, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x62, 0x6f, 0x44, 0x75, 0x62, 0xe0,
+0x69, 0x44, 0x75, 0x73, 0x61, 0x6e, 0x62, 0xe9, 0x4b, 0x61, 0x74, 0x6d,
+0x61, 0x6e, 0x64, 0xf9, 0x48, 0xe0, 0x6e, 0x64, 0x69, 0x67, 0x61, 0x4b,
+0x72, 0x61, 0x7a, 0x6e, 0x61, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x4b, 0x75,
+0x61, 0x6c, 0x61, 0x20, 0x4c, 0x75, 0x6e, 0x70, 0x75, 0x72, 0x4d, 0x61,
+0x63, 0xe0, 0x6f, 0x4e, 0x6f, 0x76, 0x6f, 0x6b, 0x75, 0x7a, 0x6e, 0x69,
+0x65, 0x74, 0x73, 0x6b, 0x4b, 0x6f, 0x73, 0x74, 0x61, 0x6e, 0xe0, 0x69,
+0x53, 0x68, 0x61, 0x6e, 0x67, 0x68, 0xe0, 0x69, 0x5a, 0x72, 0xe9, 0x64,
+0x6e, 0x65, 0x6b, 0x6f, 0x6c, 0x69, 0x6d, 0x73, 0x6b, 0x54, 0x69, 0x6e,
+0x70, 0x75, 0x55, 0x6c, 0x61, 0x6e, 0x20, 0x42, 0xe0, 0x74, 0x6f, 0x72,
+0x55, 0x73, 0x74, 0x2d, 0x47, 0x6e, 0x65, 0x72, 0x61, 0x59, 0x65, 0x6b,
+0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4a,
+0xe8, 0x72, 0x65, 0x76, 0x61, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20,
+0x41, 0x7a, 0x6f, 0x72, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43,
+0x61, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x43, 0x61, 0x6f, 0x20, 0x56, 0x65,
+0x72, 0x64, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x46, 0xe0, 0x72,
+0x6f, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4d, 0x61, 0x64, 0xe8,
+0x69, 0x72, 0x61, 0x52, 0x65, 0x6b, 0x69, 0x61, 0x76, 0x69, 0x6b, 0x47,
+0x65, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x20, 0x64, 0x65, 0x2019, 0x6c, 0x20,
+0x73, 0x75, 0x64, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x2e, 0x20,
+0x45, 0x6c, 0x65, 0x6e, 0x61, 0x41, 0x64, 0x65, 0x6c, 0xe0, 0x69, 0x64,
+0x65, 0x42, 0x72, 0x69, 0x7a, 0x62, 0x61, 0x6e, 0x65, 0xcc, 0x7a, 0x6f,
+0x6c, 0x61, 0x20, 0x4c, 0x6f, 0x72, 0x64, 0x20, 0x48, 0x6f, 0x77, 0x65,
+0xc0, 0x6d, 0x73, 0x74, 0x65, 0x72, 0x64, 0x61, 0x6d, 0x42, 0x72, 0x61,
+0x74, 0x69, 0x7a, 0x6c, 0x61, 0x76, 0x61, 0x4a, 0x69, 0x62, 0x69, 0x6c,
+0x74, 0x65, 0x72, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65,
+0x20, 0x4d, 0x61, 0x6e, 0x4c, 0x75, 0x62, 0x6c, 0x69, 0x61, 0x6e, 0x61,
+0x4c, 0x75, 0x73, 0x65, 0x6e, 0x62, 0x75, 0x72, 0x67, 0x6f, 0x4f, 0x7a,
+0x6c, 0x6f, 0x50, 0x61, 0x72, 0x69, 0x6a, 0x69, 0x53, 0x69, 0x6e, 0x66,
+0x65, 0x72, 0xf2, 0x70, 0x6f, 0x6c, 0x69, 0x53, 0x74, 0x6f, 0x63, 0x6f,
+0x6c, 0x6d, 0x61, 0x55, 0x6c, 0x69, 0xe0, 0x6e, 0x6f, 0x73, 0x6b, 0x56,
+0x61, 0x74, 0x65, 0x67, 0x61, 0x6e, 0x43, 0x69, 0x61, 0x67, 0x6f, 0x73,
+0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x4e, 0x61, 0x64,
+0x61, 0x6c, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x63,
+0x6f, 0x73, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x6f,
+0x72, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x6c, 0x64,
+0x69, 0x76, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x75,
+0x72, 0x69, 0x73, 0x69, 0x6f, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d,
+0x61, 0x69, 0x6f, 0x74, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x52,
+0x65, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20,
+0x42, 0x6f, 0x75, 0x67, 0x61, 0x69, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x65,
+0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x69, 0x61, 0x74, 0x65, 0x6d,
+0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x43, 0x68, 0x75, 0x75, 0x6b, 0xcc,
+0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x64, 0x65, 0x20, 0x50, 0x61, 0x73, 0x63,
+0x75, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x45, 0x66, 0x61, 0x74,
+0x65, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x61, 0x6b, 0x61, 0x6f,
+0x66, 0x6f, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x46, 0x75, 0x6e, 0x61,
+0x66, 0x75, 0x74, 0x69, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x47, 0x61,
+0x6d, 0x62, 0x69, 0x65, 0x72, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x47,
+0x75, 0x61, 0x64, 0x61, 0x6c, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x41, 0x74,
+0x6f, 0x6c, 0x6f, 0x20, 0x43, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x41, 0x74,
+0x6f, 0x6c, 0x6f, 0x20, 0x4b, 0x69, 0x72, 0x69, 0x74, 0x69, 0x6d, 0x61,
+0x74, 0x69, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4b, 0x6f, 0x73, 0x72,
+0x61, 0x65, 0x41, 0x74, 0x6f, 0x6c, 0x6f, 0x20, 0x4b, 0x77, 0x61, 0x6a,
+0x61, 0x6c, 0x65, 0x69, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x65, 0x20, 0x4d,
+0x61, 0x72, 0x63, 0x68, 0x65, 0x7a, 0x69, 0x41, 0x74, 0x6f, 0x6c, 0x6f,
+0x20, 0x4d, 0x69, 0x64, 0x77, 0x61, 0x79, 0xcc, 0x7a, 0x6f, 0x6c, 0x61,
+0x20, 0x4e, 0x61, 0x75, 0x72, 0x75, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20,
+0x4e, 0x69, 0x75, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x4e, 0x6f,
+0x72, 0x66, 0x6f, 0x6c, 0x6b, 0x50, 0x61, 0x6c, 0xe0, 0x75, 0xcc, 0x7a,
+0x6f, 0x6c, 0x61, 0x20, 0x50, 0x69, 0x74, 0x63, 0x61, 0x69, 0x72, 0x6e,
+0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x50, 0x6f, 0x6e, 0x70, 0xe8, 0x69,
+0x50, 0x6f, 0x72, 0x74, 0x6f, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x73, 0x62,
+0x79, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x52, 0x61, 0x72, 0x6f, 0x74,
+0x6f, 0x6e, 0x67, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x53, 0x61,
+0x69, 0x70, 0xe0, 0x6e, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x61,
+0x69, 0x74, 0x69, 0x41, 0x74, 0x6f, 0x6c, 0x6c, 0x6f, 0x20, 0x54, 0x61,
+0x72, 0x61, 0x77, 0x61, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x54, 0x6f,
+0x6e, 0x67, 0x61, 0x74, 0x61, 0x70, 0x75, 0x41, 0x74, 0x6f, 0x6c, 0x6f,
+0x20, 0x57, 0x61, 0x6b, 0x65, 0xcc, 0x7a, 0x6f, 0x6c, 0x61, 0x20, 0x57,
+0x61, 0x6c, 0x6c, 0x69, 0x73, 0x61, 0x62, 0x69, 0x64, 0x6a, 0x61, 0x6e,
+0x65, 0x63, 0x72, 0x61, 0x61, 0x1e0d, 0x69, 0x73, 0x20, 0x61, 0x62, 0x61,
+0x62, 0x61, 0x61, 0x6c, 0x6a, 0x12b, 0x79, 0x72, 0x73, 0x61, 0x73, 0x6d,
+0x61, 0x72, 0x61, 0x62, 0x61, 0x6d, 0x61, 0x6b, 0x6f, 0x62, 0x61, 0x6e,
+0x67, 0x75, 0x69, 0x62, 0x61, 0x6e, 0x6a, 0x75, 0x6c, 0x62, 0x69, 0x73,
+0x73, 0x61, 0x75, 0x62, 0x6c, 0x61, 0x6e, 0x1e6d, 0x61, 0x65, 0x72, 0x62,
+0x72, 0x61, 0x6a, 0x61, 0x76, 0x69, 0x6c, 0x6c, 0x62, 0x75, 0x6a, 0x75,
+0x6d, 0x62, 0x75, 0x72, 0x61, 0x6b, 0x61, 0x69, 0x72, 0x6f, 0x6b, 0x61,
+0x73, 0x61, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x61, 0x73, 0x65, 0x75, 0x1e6d,
+0x61, 0x6b, 0x6f, 0x6e, 0x61, 0x6b, 0x72, 0x12b, 0x1e0d, 0x6b, 0x61, 0x72,
+0x64, 0x61, 0x72, 0x20, 0x65, 0x73, 0x20, 0x73, 0x61, 0x6c, 0x61, 0x61,
+0x6d, 0x64, 0x75, 0x61, 0x6c, 0x61, 0x65, 0x6c, 0x20, 0x61, 0x61, 0x69,
+0x79, 0x75, 0x6e, 0x70, 0x72, 0x12b, 0x1e6d, 0x61, 0x75, 0x6e, 0x67, 0x61,
+0x62, 0x6f, 0x72, 0x6f, 0x6e, 0x68, 0x72, 0x61, 0x72, 0x65, 0x6a, 0x6f,
+0x68, 0x61, 0x6e, 0x6e, 0x65, 0x73, 0x62, 0x75, 0x72, 0x67, 0x6a, 0x75,
+0x62, 0x61, 0x6b, 0x6d, 0x70, 0x61, 0x6c, 0x61, 0x6b, 0x61, 0x72, 0x1e6d,
+0x6f, 0x75, 0x6d, 0x6b, 0x69, 0x67, 0x61, 0x6c, 0x69, 0x6b, 0x69, 0x6e,
+0x73, 0x61, 0x73, 0x61, 0x6c, 0x61, 0x67, 0x6f, 0x73, 0x6c, 0x69, 0x62,
+0x72, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x6c, 0x75, 0x61, 0x6e, 0x1e0d, 0x61,
+0x6c, 0x75, 0x62, 0x75, 0x6d, 0x62, 0x61, 0x73, 0x69, 0x6c, 0x75, 0x73,
+0x61, 0x6b, 0x61, 0x6d, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x6d, 0x61, 0x70,
+0x75, 0x1e6d, 0x75, 0x6d, 0x61, 0x73, 0x65, 0x72, 0x75, 0x6d, 0x62, 0x61,
+0x62, 0x61, 0x6e, 0x65, 0x6d, 0x6f, 0x67, 0x61, 0x1e0d, 0x69, 0x73, 0x75,
+0x6d, 0x6f, 0x6e, 0x72, 0x6f, 0x76, 0x69, 0x61, 0x6e, 0x61, 0x69, 0x72,
+0x6f, 0x62, 0x69, 0x6e, 0x6a, 0x61, 0x6d, 0x65, 0x6e, 0x61, 0x6e, 0x69,
+0x79, 0x61, 0x6d, 0x65, 0x6e, 0x75, 0x65, 0x6b, 0x73, 0x61, 0x76, 0x61,
+0x67, 0x64, 0x75, 0x67, 0x75, 0x70, 0x6f, 0x72, 0x1e6d, 0x6f, 0x2d, 0x1e47,
+0x6f, 0x76, 0x6f, 0x73, 0x61, 0x6f, 0x20, 0x1e6d, 0x6f, 0x6d, 0x74, 0x72,
+0x69, 0x70, 0x6f, 0x6c, 0x69, 0x1e6d, 0x75, 0x6e, 0x69, 0x73, 0x76, 0x69,
+0x6e, 0x64, 0x68, 0x75, 0x6b, 0x61, 0x1e0d, 0x61, 0x6b, 0x61, 0x6e, 0x6b,
+0x6f, 0x72, 0x61, 0x6a, 0x65, 0x6e, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x61,
+0x65, 0x6e, 0x1e6d, 0x69, 0x67, 0x75, 0x61, 0x61, 0x72, 0x61, 0x67, 0x76,
+0x61, 0x69, 0x6e, 0x61, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20,
+0x61, 0x69, 0x72, 0x65, 0x73, 0x6b, 0x61, 0x74, 0x61, 0x6d, 0x61, 0x72,
+0x6b, 0x61, 0x6b, 0x6f, 0x72, 0x1e0d, 0x61, 0x62, 0x61, 0x68, 0x75, 0x68,
+0x75, 0x65, 0x6c, 0x61, 0x20, 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x6d, 0x65,
+0x6e, 0x1e0d, 0x6f, 0x6a, 0x61, 0x72, 0x69, 0x79, 0x6f, 0x20, 0x67, 0x61,
+0x6c, 0x6c, 0x65, 0x67, 0x6f, 0x73, 0x73, 0x61, 0x6c, 0x1e6d, 0x61, 0x73,
+0x61, 0x6e, 0x20, 0x68, 0x75, 0x61, 0x6e, 0x73, 0x61, 0x6e, 0x20, 0x6c,
+0x75, 0x69, 0x73, 0x1e6d, 0x75, 0x6b, 0x16b, 0x6d, 0x6e, 0x75, 0x73, 0x76,
+0x61, 0x69, 0x79, 0x61, 0x61, 0x72, 0x75, 0x62, 0x61, 0x65, 0x73, 0x75,
+0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x1e6d, 0x69, 0x6b, 0x6f, 0x6b, 0x65,
+0x6e, 0x62, 0x61, 0x68, 0x69, 0x61, 0x62, 0x61, 0x69, 0x61, 0x20, 0x62,
+0x61, 0x6e, 0x1e0d, 0x65, 0x72, 0x61, 0x73, 0x62, 0x61, 0x72, 0x62, 0x61,
+0x1e0d, 0x6f, 0x73, 0x62, 0x65, 0x6c, 0x65, 0x6d, 0x62, 0x65, 0x6c, 0x69,
+0x6a, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x2d, 0x73, 0x61, 0x62, 0x6c, 0x6f,
+0x6e, 0x62, 0x6f, 0x61, 0x20, 0x76, 0x69, 0x73, 0x74, 0x61, 0x62, 0x6f,
+0x67, 0x6f, 0x1e6d, 0x61, 0x62, 0x6f, 0x69, 0x73, 0x12b, 0x6b, 0x65, 0x6d,
+0x62, 0x72, 0x69, 0x6a, 0x20, 0x62, 0x65, 0x6b, 0x61, 0x6d, 0x70, 0x6f,
+0x20, 0x67, 0x72, 0x61, 0x6e, 0x1e0d, 0x65, 0x6b, 0x61, 0x6e, 0x6b, 0x75,
+0x6e, 0x6b, 0x61, 0x72, 0x61, 0x6b, 0x61, 0x73, 0x6b, 0x65, 0x79, 0x65,
+0x6e, 0x6b, 0x65, 0x69, 0x6d, 0x61, 0x6e, 0x63, 0x69, 0x6b, 0x61, 0x67,
+0x6f, 0x63, 0x68, 0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 0x6b, 0x6f,
+0x73, 0x1e6d, 0x61, 0x20, 0x72, 0x69, 0x6b, 0x61, 0x6b, 0x72, 0x65, 0x73,
+0x1e6d, 0x6f, 0x6e, 0x6b, 0x75, 0x61, 0x61, 0x62, 0x61, 0x6b, 0x79, 0x75,
+0x72, 0x61, 0x73, 0x6f, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x73,
+0x61, 0x76, 0x6e, 0x1e0d, 0x61, 0x6f, 0x73, 0x6e, 0x1e0d, 0x61, 0x6f, 0x73,
+0x6f, 0x6e, 0x20, 0x6b, 0x72, 0x12b, 0x6b, 0x1e0d, 0x65, 0x6e, 0x76, 0x65,
+0x72, 0x1e0d, 0x65, 0x1e6d, 0x72, 0x6f, 0x69, 0x1e6d, 0x1e0d, 0x6f, 0x6d, 0x69,
+0x6e, 0x69, 0x6b, 0x61, 0x65, 0x1e0d, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x6e,
+0x65, 0x69, 0x72, 0x75, 0x6e, 0x65, 0x70, 0x65, 0x65, 0x6c, 0x20, 0x73,
+0x61, 0x6c, 0x76, 0x61, 0x1e0d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x72, 0x74,
+0x20, 0x6e, 0x65, 0x6c, 0x73, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c,
+0x65, 0x6a, 0x61, 0x67, 0x6c, 0x61, 0x73, 0x20, 0x62, 0x61, 0x79, 0x67,
+0x6f, 0x6f, 0x73, 0x20, 0x62, 0x65, 0x67, 0x72, 0x61, 0x6e, 0x1e0d, 0x20,
+0x1e6d, 0x75, 0x72, 0x6b, 0x67, 0x72, 0x65, 0x6e, 0x61, 0x1e0d, 0x61, 0x67,
+0x75, 0x61, 0x1e0d, 0x65, 0x6c, 0x6f, 0x75, 0x70, 0x65, 0x67, 0x75, 0x61,
+0x74, 0x65, 0x6d, 0x61, 0x6c, 0x61, 0x67, 0x75, 0x61, 0x6a, 0x61, 0x6b,
+0x69, 0x6c, 0x67, 0x75, 0x79, 0x61, 0x6e, 0x61, 0x68, 0x65, 0x6c, 0x69,
+0x70, 0x61, 0x6b, 0x73, 0x68, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x69, 0x6e,
+0x1e0d, 0x69, 0x61, 0x6e, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x73, 0x6e, 0x6f,
+0x6b, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61,
+0x6d, 0x61, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d,
+0x69, 0x79, 0x61, 0x6e, 0x61, 0x70, 0x69, 0x1e6d, 0x74, 0x72, 0x73, 0x62,
+0x65, 0x72, 0x67, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e,
+0x61, 0x1e6d, 0x65, 0x6c, 0x6c, 0x20, 0x73, 0x69, 0x74, 0x79, 0x2c, 0x20,
+0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69, 0x76, 0x69,
+0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x76, 0x69,
+0x6e, 0x63, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x1e0d, 0x69, 0x79,
+0x61, 0x6e, 0x61, 0x76, 0x69, 0x6e, 0x61, 0x6d, 0x61, 0x6b, 0x2c, 0x20,
+0x69, 0x6e, 0x1e0d, 0x69, 0x79, 0x61, 0x6e, 0x61, 0x69, 0x6e, 0x16b, 0x76,
+0x69, 0x6b, 0x69, 0x6b, 0x61, 0x6c, 0x75, 0x69, 0x1e6d, 0x6a, 0x61, 0x6d,
+0x61, 0x69, 0x6b, 0x61, 0x6a, 0x75, 0x6e, 0x6f, 0x76, 0x6c, 0x6f, 0x75,
+0x69, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x69, 0x73,
+0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x6b, 0x65, 0x6e, 0x1e6d, 0x75, 0x6b,
+0x12b, 0x6b, 0x72, 0x65, 0x6c, 0x65, 0x6e, 0x1e0d, 0x65, 0x69, 0x6b, 0x6c,
+0x61, 0x20, 0x70, 0x61, 0x6a, 0x6c, 0x6f, 0x73, 0x20, 0x61, 0x6e, 0x6a,
+0x65, 0x6c, 0x65, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x70, 0x72,
+0x69, 0x6e, 0x63, 0x2019, 0x73, 0x20, 0x6b, 0x75, 0x76, 0x61, 0x1e6d, 0x61,
+0x72, 0x6d, 0x61, 0x73, 0x12b, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x75,
+0x61, 0x6d, 0x61, 0x6e, 0x61, 0x75, 0x73, 0x6d, 0x61, 0x72, 0x69, 0x67,
+0x6f, 0x1e6d, 0x6d, 0x61, 0x72, 0x1e6d, 0x69, 0x6e, 0x69, 0x6b, 0x6d, 0x61,
+0x1e6d, 0x61, 0x6d, 0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x61, 0x73, 0x61, 0x1e6d,
+0x6c, 0x61, 0x6e, 0x6d, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x12b, 0x6d,
+0x65, 0x72, 0x69, 0x1e0d, 0x61, 0x6d, 0x65, 0x1e6d, 0x6c, 0x61, 0x6b, 0x61,
+0x1e6d, 0x6c, 0x61, 0x6d, 0x65, 0x6b, 0x73, 0x69, 0x63, 0x6f, 0x20, 0x73,
+0x69, 0x1e6d, 0x79, 0x6d, 0x69, 0x6b, 0x76, 0x69, 0x6c, 0xf5, 0x6d, 0x6f,
+0x6e, 0x6b, 0x1e6d, 0x6f, 0x6e, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x65, 0x72, 0x72,
+0x65, 0x6d, 0x6f, 0x6e, 0x1e6d, 0x65, 0x76, 0x69, 0x64, 0x69, 0x6f, 0x6d,
+0x6f, 0x6e, 0x1e6d, 0x73, 0x65, 0x72, 0x72, 0x65, 0x1e6d, 0x6e, 0x61, 0x73,
+0x61, 0x75, 0x6e, 0x69, 0x79, 0x75, 0x20, 0x79, 0x6f, 0x72, 0x6b, 0x6e,
+0x6f, 0x72, 0x6f, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x79, 0x75, 0x6c, 0x61,
+0x2c, 0x20, 0x75, 0x74, 0x74, 0x61, 0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f,
+0x1e6d, 0x61, 0x6d, 0x61, 0x1e0d, 0x69, 0x6e, 0x12b, 0x20, 0x75, 0x74, 0x74,
+0x61, 0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x65, 0x75,
+0x20, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x2c, 0x20, 0x75, 0x74, 0x74, 0x61,
+0x72, 0x20, 0x1e0d, 0x61, 0x6b, 0x6f, 0x1e6d, 0x61, 0x6e, 0x16b, 0x6b, 0x6f,
+0x6a, 0x69, 0x6e, 0x61, 0x67, 0x61, 0x70, 0x61, 0x6e, 0x61, 0x6d, 0x61,
+0x70, 0x61, 0x72, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x62, 0x6f, 0x70, 0x69,
+0x6e, 0x69, 0x6b, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x61, 0x75, 0x2d,
+0x70, 0x72, 0x69, 0x6e, 0x73, 0x65, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x61,
+0x70, 0x20, 0x73, 0x70, 0x61, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x1e6d, 0x70,
+0x20, 0x76, 0x65, 0x6c, 0x68, 0x6f, 0x70, 0x75, 0x65, 0x72, 0x74, 0x6f,
+0x20, 0x72, 0x69, 0x6b, 0x6f, 0x70, 0x75, 0x1e47, 0x1e6d, 0x61, 0x20, 0x65,
+0x72, 0x65, 0x6e, 0x61, 0x73, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x20,
+0x69, 0x6e, 0x6c, 0x65, 0x64, 0x1e6d, 0x72, 0x65, 0x73, 0x69, 0x70, 0x69,
+0x72, 0x65, 0x6a, 0x69, 0x6e, 0x61, 0x72, 0x65, 0x6a, 0x61, 0x6c, 0x79,
+0x75, 0x1e6d, 0x72, 0x69, 0x6f, 0x20, 0x62, 0x72, 0x61, 0x6e, 0x6b, 0x6f,
+0x73, 0x61, 0x74, 0x61, 0x72, 0x69, 0x73, 0x61, 0x6e, 0x1e6d, 0x69, 0x61,
+0x67, 0x6f, 0x73, 0x65, 0x6e, 0x74, 0x6f, 0x20, 0x1e0d, 0x6f, 0x6d, 0x69,
+0x6e, 0x67, 0x6f, 0x73, 0x61, 0x6f, 0x20, 0x70, 0x61, 0x75, 0x6c, 0x6f,
+0x69, 0x1e6d, 0x6f, 0x6b, 0x6f, 0x1e6d, 0x6f, 0x72, 0x6d, 0x69, 0x1e6d, 0x73,
+0x69, 0x74, 0x6b, 0x61, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x62, 0x61, 0x72,
+0x74, 0x65, 0x6c, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x6e, 0x1e6d, 0x20, 0x6a,
+0x6f, 0x6e, 0x73, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6b, 0x69, 0x1e6d, 0x1e6d,
+0x73, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x75, 0x73, 0x69, 0x61, 0x73,
+0x65, 0x6e, 0x1e6d, 0x20, 0x74, 0x6f, 0x6d, 0x61, 0x73, 0x73, 0x65, 0x6e,
+0x1e6d, 0x20, 0x76, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x1e6d, 0x73, 0x76, 0x69,
+0x70, 0x1e6d, 0x20, 0x6b, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x1e6d, 0x74, 0x65,
+0x67, 0x75, 0x74, 0x75, 0x6c, 0x65, 0x74, 0x69, 0x68, 0x76, 0x61, 0x6e,
+0x61, 0x1e6d, 0x6f, 0x72, 0x6f, 0x6e, 0x1e6d, 0x6f, 0x1e6d, 0x6f, 0x72, 0x1e6d,
+0x6f, 0x6c, 0x61, 0x76, 0x61, 0x6e, 0x6b, 0x16b, 0x76, 0x65, 0x72, 0x76,
+0x68, 0x61, 0x69, 0x1e6d, 0x68, 0x6f, 0x72, 0x73, 0x76, 0x69, 0x6e, 0x6e,
+0x69, 0x70, 0x65, 0x67, 0x79, 0x61, 0x6b, 0x75, 0x1e6d, 0x61, 0x1e6d, 0x6b,
+0x65, 0x73, 0x65, 0x65, 0x1e0d, 0x65, 0x76, 0x69, 0x73, 0x1e0d, 0x79, 0x75,
+0x6d, 0x6f, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x20, 0x75, 0x72, 0x76, 0x69,
+0x6c, 0x6c, 0x6d, 0x65, 0x6b, 0x76, 0x61, 0x72, 0x69, 0x6d, 0x61, 0x76,
+0x73, 0x6f, 0x6e, 0x6d, 0x65, 0x6b, 0x20, 0x6d, 0x75, 0x72, 0x1e0d, 0x6f,
+0x70, 0x61, 0x6c, 0x6d, 0x65, 0x72, 0x72, 0x6f, 0x74, 0x65, 0x72, 0x61,
+0x73, 0x79, 0x6f, 0x76, 0x61, 0x1e6d, 0x72, 0x6f, 0x6c, 0x6c, 0x76, 0x6f,
+0x73, 0x1e6d, 0x6f, 0x6b, 0x6c, 0x6e, 0x67, 0x79, 0x61, 0x72, 0x62, 0x79,
+0x65, 0x6e, 0x65, 0x1e0d, 0x65, 0x6e, 0x61, 0x6c, 0x6d, 0x61, 0x1e6d, 0x79,
+0x61, 0x6d, 0x6d, 0x61, 0x6e, 0x61, 0x6e, 0x61, 0x1e0d, 0x69, 0x72, 0x61,
+0x6b, 0x74, 0x61, 0x75, 0x61, 0x61, 0x6b, 0x74, 0x6f, 0x62, 0x65, 0x61,
+0x73, 0x67, 0x61, 0x62, 0x61, 0x1e6d, 0x61, 0x74, 0x61, 0x72, 0x61, 0x75,
+0x62, 0x61, 0x67, 0x64, 0x61, 0x64, 0x62, 0x61, 0x68, 0x72, 0x61, 0x69,
+0x6e, 0x62, 0x61, 0x6b, 0x75, 0x62, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b,
+0x62, 0x61, 0x72, 0x6e, 0x61, 0x75, 0x6c, 0x62, 0x65, 0x69, 0x72, 0x75,
+0x74, 0x62, 0x69, 0x73, 0x6b, 0x65, 0x6b, 0x62, 0x72, 0x75, 0x6e, 0x65,
+0x69, 0x63, 0x69, 0x74, 0x61, 0x6b, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x6f,
+0x1e0d, 0x61, 0x6d, 0x61, 0x73, 0x6b, 0x75, 0x73, 0x1e0d, 0x69, 0x6c, 0x69,
+0x64, 0x75, 0x62, 0x61, 0x69, 0x64, 0x75, 0x73, 0x61, 0x6d, 0x62, 0x65,
+0x70, 0x61, 0x6d, 0x61, 0x67, 0x75, 0x73, 0x74, 0x61, 0x67, 0x61, 0x6a,
+0x61, 0x68, 0x65, 0x62, 0x72, 0x6f, 0x6e, 0x68, 0x6f, 0x20, 0x63, 0x69,
+0x20, 0x6d, 0x69, 0x6e, 0x68, 0x20, 0x73, 0x69, 0x74, 0x69, 0x68, 0x6f,
+0x6e, 0x67, 0x20, 0x6b, 0x6f, 0x6e, 0x67, 0x69, 0x72, 0x6b, 0x75, 0x1e6d,
+0x73, 0x6b, 0x6a, 0x61, 0x79, 0x61, 0x70, 0x75, 0x72, 0x61, 0x6a, 0x65,
+0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x6b, 0x61, 0x62, 0x75, 0x6c,
+0x6b, 0x61, 0x6d, 0x63, 0x61, 0x1e6d, 0x6b, 0x61, 0x6b, 0x61, 0x72, 0x61,
+0x63, 0x12b, 0x6b, 0x61, 0x1e6d, 0x6d, 0x61, 0x6e, 0x1e0d, 0x75, 0x6b, 0x61,
+0x6e, 0x64, 0x69, 0x67, 0x61, 0x6b, 0x6f, 0x6c, 0x6b, 0x61, 0x74, 0x61,
+0x6b, 0x72, 0x61, 0x73, 0x6e, 0x65, 0x79, 0x61, 0x72, 0x73, 0x6b, 0x6b,
+0x75, 0x61, 0x6c, 0x61, 0x20, 0x6c, 0x75, 0x6d, 0x70, 0x75, 0x72, 0x6b,
+0x75, 0x63, 0x69, 0x6e, 0x67, 0x6b, 0x75, 0x76, 0x61, 0x69, 0x74, 0x6d,
+0x6b, 0x61, 0x6f, 0x6d, 0x65, 0x67, 0x61, 0x1e0d, 0x61, 0x6e, 0x6d, 0x61,
+0x6b, 0x61, 0x73, 0x61, 0x72, 0x6d, 0x61, 0x6e, 0x12b, 0x6c, 0x61, 0x6d,
+0x61, 0x73, 0x6b, 0x61, 0x74, 0x6e, 0x69, 0x6b, 0x6f, 0x73, 0x69, 0x79,
+0x61, 0x6e, 0x65, 0x76, 0x6f, 0x6b, 0x75, 0x6a, 0x6e, 0x65, 0x1e6d, 0x73,
+0x6b, 0x6e, 0x6f, 0x76, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x72, 0x73, 0x6b,
+0x70, 0x6e, 0x6f, 0x6d, 0x20, 0x70, 0x65, 0x6e, 0x68, 0x70, 0x6f, 0x6e,
+0x1e6d, 0x69, 0x61, 0x6e, 0x61, 0x6b, 0x70, 0x79, 0x6f, 0x6e, 0x67, 0x79,
+0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x73, 0x1e6d, 0x61, 0x6e, 0x65, 0x6b, 0x69,
+0x6a, 0x75, 0x6f, 0x72, 0x64, 0x61, 0x72, 0x69, 0x79, 0x61, 0x64, 0x73,
+0x61, 0x68, 0x61, 0x6c, 0x69, 0x6e, 0x73, 0x61, 0x6d, 0x61, 0x72, 0x6b,
+0x61, 0x6e, 0x64, 0x73, 0x65, 0x6f, 0x6c, 0x73, 0x65, 0x6e, 0x67, 0x61,
+0x69, 0x73, 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x73, 0x72, 0x65,
+0x1e0d, 0x6e, 0x65, 0x6b, 0x6f, 0x6c, 0x79, 0x6d, 0x73, 0x6b, 0x74, 0x61,
+0x69, 0x70, 0x65, 0x69, 0x74, 0x61, 0x73, 0x6b, 0x65, 0x6e, 0x1e6d, 0x74,
+0x62, 0x69, 0x6c, 0x69, 0x73, 0x69, 0x74, 0x65, 0x68, 0x72, 0x61, 0x6e,
+0x74, 0x69, 0x6d, 0x70, 0x68, 0x75, 0x1e6d, 0x6f, 0x6b, 0x79, 0x6f, 0x1e6d,
+0x6f, 0x6d, 0x73, 0x6b, 0x75, 0x6c, 0x61, 0x6e, 0x62, 0x61, 0x1e6d, 0x61,
+0x72, 0x75, 0x72, 0x75, 0x6d, 0x63, 0x69, 0x79, 0x75, 0x73, 0x74, 0x2d,
+0x6e, 0x65, 0x72, 0x61, 0x76, 0x69, 0x65, 0x6e, 0x1e6d, 0x69, 0x61, 0x61,
+0x6e, 0x76, 0x6c, 0x61, 0x1e0d, 0x69, 0x76, 0x6f, 0x73, 0x1e6d, 0x6f, 0x6b,
+0x79, 0x61, 0x6b, 0x75, 0x1e6d, 0x73, 0x6b, 0x79, 0x61, 0x6e, 0x67, 0x6f,
+0x6e, 0x79, 0x69, 0x6b, 0x61, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x62, 0x75,
+0x72, 0x67, 0x79, 0x65, 0x72, 0x65, 0x76, 0x61, 0x6e, 0x61, 0x6a, 0x6f,
+0x72, 0x65, 0x73, 0x62, 0x65, 0x72, 0x6d, 0x16b, 0x64, 0x61, 0x6b, 0x65,
+0x6e, 0x65, 0x72, 0x69, 0x6b, 0x65, 0x70, 0x20, 0x76, 0x65, 0x72, 0x1e0d,
+0x65, 0x70, 0x65, 0x72, 0x6f, 0x6d, 0x61, 0x1e0d, 0x69, 0x65, 0x72, 0x61,
+0x72, 0x65, 0x79, 0x6b, 0x79, 0x61, 0x76, 0x69, 0x6b, 0x64, 0x6b, 0x69,
+0x1e47, 0x20, 0x6a, 0x6f, 0x72, 0x6a, 0x69, 0x61, 0x73, 0x65, 0x6e, 0x74,
+0x20, 0x68, 0x65, 0x6c, 0x65, 0x6e, 0x61, 0x73, 0x1e6d, 0x61, 0x6e, 0x6c,
+0x69, 0x61, 0x65, 0x64, 0x69, 0x6c, 0x65, 0x69, 0x64, 0x62, 0x72, 0x69,
+0x73, 0x62, 0x61, 0x6e, 0x65, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20,
+0x68, 0x69, 0x6c, 0x6c, 0x1e0d, 0x61, 0x72, 0x76, 0x69, 0x6e, 0x79, 0x75,
+0x6b, 0x6c, 0x61, 0x68, 0x6f, 0x62, 0x61, 0x72, 0x1e6d, 0x6c, 0x69, 0x6e,
+0x1e0d, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x6c, 0x6f, 0x72, 0x1e0d, 0x20, 0x68,
+0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6c, 0x62, 0x6f, 0x72, 0x6e, 0x65, 0x70,
+0x65, 0x72, 0x74, 0x73, 0x79, 0x1e0d, 0x6e, 0x12b, 0x61, 0x6d, 0x73, 0x1e6d,
+0x65, 0x72, 0x1e0d, 0x61, 0x6d, 0x61, 0x61, 0x1e47, 0x1e0d, 0x6f, 0x72, 0x61,
+0x61, 0x61, 0x73, 0x1e6d, 0x72, 0x61, 0x68, 0x61, 0x6e, 0x65, 0x74, 0x65,
+0x6e, 0x73, 0x62, 0x65, 0x6c, 0x67, 0x72, 0x61, 0x1e0d, 0x65, 0x62, 0x65,
+0x72, 0x6c, 0x69, 0x6e, 0x62, 0x72, 0x61, 0x1e6d, 0x69, 0x73, 0x6c, 0x61,
+0x76, 0x61, 0x62, 0x72, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x73, 0x62, 0x75,
+0x6b, 0x61, 0x72, 0x65, 0x73, 0x74, 0x62, 0x75, 0x1e0d, 0x61, 0x70, 0x65,
+0x73, 0x74, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x6b, 0x69,
+0x73, 0x69, 0x6e, 0x61, 0x75, 0x6b, 0x6f, 0x70, 0x65, 0x6e, 0x68, 0x61,
+0x67, 0x65, 0x6e, 0x1e0d, 0x62, 0x6c, 0x69, 0x6e, 0x6a, 0x69, 0x62, 0x72,
+0x61, 0x6c, 0x1e6d, 0x61, 0x72, 0x67, 0x65, 0x72, 0x6e, 0x73, 0x69, 0x68,
+0x65, 0x6c, 0x73, 0x69, 0x6e, 0x6b, 0x69, 0x61, 0x61, 0x69, 0x6c, 0x20,
+0x61, 0x70, 0x20, 0x6d, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x62,
+0x75, 0x6c, 0x6a, 0x65, 0x72, 0x73, 0x69, 0x6b, 0x61, 0x6c, 0x69, 0x6e,
+0x69, 0x6e, 0x67, 0x72, 0x61, 0x1e0d, 0x6b, 0x69, 0x72, 0x6f, 0x76, 0x6b,
+0x69, 0x79, 0x76, 0x6c, 0x69, 0x73, 0x62, 0x6f, 0x6e, 0x6c, 0x79, 0x75,
+0x62, 0x6c, 0x79, 0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x1e0d, 0x6e, 0x6c, 0x6b,
+0x73, 0x65, 0x6d, 0x62, 0x72, 0x67, 0x6d, 0x65, 0x1e0d, 0x72, 0x69, 0x1e0d,
+0x6d, 0x61, 0x6c, 0x1e6d, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x68, 0x61,
+0x6d, 0x6d, 0x69, 0x6e, 0x73, 0x6b, 0x6d, 0x6f, 0x6e, 0x61, 0x6b, 0x6f,
+0x6d, 0x6f, 0x73, 0x6b, 0x6f, 0x6f, 0x73, 0x6c, 0x6f, 0x70, 0x61, 0x72,
+0x69, 0x73, 0x70, 0x1e0d, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x73, 0x61, 0x70,
+0x72, 0x61, 0x67, 0x72, 0x69, 0x67, 0x61, 0x73, 0x61, 0x6d, 0x61, 0x72,
+0x61, 0x73, 0x61, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x69, 0x6e, 0x6f, 0x73,
+0x61, 0x72, 0x61, 0x6a, 0x65, 0x76, 0x6f, 0x73, 0x61, 0x72, 0x61, 0x1e6d,
+0x6f, 0x76, 0x73, 0x69, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x70, 0x6f, 0x6c,
+0x73, 0x6b, 0x6f, 0x70, 0x69, 0x73, 0x6f, 0x70, 0x69, 0x79, 0x61, 0x73,
+0x1e6d, 0x6f, 0x6b, 0x68, 0x6f, 0x6d, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x1e6d,
+0x69, 0x72, 0x61, 0x6e, 0x65, 0x75, 0x6c, 0x79, 0x61, 0x6e, 0x6f, 0x76,
+0x73, 0x6b, 0x76, 0x61, 0x1e0d, 0x75, 0x6a, 0x76, 0x61, 0x1e6d, 0x69, 0x6b,
+0x61, 0x6e, 0x76, 0x69, 0x65, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x6c, 0x6e,
+0x69, 0x75, 0x73, 0x76, 0x6f, 0x6c, 0x67, 0x6f, 0x67, 0x72, 0x61, 0x1e0d,
+0x76, 0x61, 0x72, 0x73, 0x61, 0x74, 0x65, 0x67, 0x75, 0x73, 0x69, 0x67,
+0x61, 0x6c, 0x70, 0x61, 0x6a, 0x75, 0x72, 0x69, 0x63, 0x1e6d, 0x61, 0x6e,
+0x61, 0x6e, 0x61, 0x72, 0x69, 0x76, 0x63, 0x68, 0x61, 0x67, 0x6f, 0x73,
+0x6b, 0x72, 0x69, 0x73, 0x1e6d, 0x6d, 0x61, 0x73, 0x6b, 0x6f, 0x6b, 0x6f,
+0x73, 0x6b, 0x6f, 0x6d, 0x6f, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x67, 0x75,
+0x65, 0x6c, 0x65, 0x6e, 0x6d, 0x61, 0x68, 0x65, 0x6d, 0x61, 0x6c, 0x64,
+0x69, 0x76, 0x65, 0x73, 0x6d, 0x61, 0x75, 0x72, 0x69, 0x73, 0x69, 0x75,
+0x73, 0x6d, 0x61, 0x79, 0x6f, 0x1e6d, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x6f,
+0x6e, 0x61, 0x70, 0x69, 0x61, 0x101, 0x6b, 0x6c, 0x61, 0x6e, 0x1e0d, 0x62,
+0x6f, 0x75, 0x67, 0x61, 0x6e, 0x76, 0x69, 0x6c, 0x6c, 0x63, 0x65, 0x1e6d,
+0x61, 0x6d, 0x63, 0x16b, 0x6b, 0x12b, 0x73, 0x74, 0x65, 0x72, 0x69, 0x70,
+0x65, 0x1e6d, 0x65, 0x70, 0x61, 0x6b, 0x61, 0x6f, 0x70, 0x6f, 0x70, 0x69,
+0x6a, 0x69, 0x70, 0x75, 0x6e, 0x61, 0x70, 0x75, 0x74, 0x69, 0x67, 0x61,
+0x6c, 0x61, 0x70, 0x61, 0x67, 0x6f, 0x73, 0x67, 0x61, 0x6d, 0x62, 0x69,
+0x65, 0x72, 0x67, 0x75, 0x61, 0x1e0d, 0x61, 0x6c, 0x6b, 0x65, 0x6e, 0x61,
+0x6c, 0x6b, 0x61, 0x6e, 0x1e6d, 0x6f, 0x6e, 0x6b, 0x69, 0x72, 0x69, 0x74,
+0x69, 0x6d, 0x61, 0x74, 0x69, 0x6b, 0x69, 0x73, 0x72, 0x61, 0x65, 0x6b,
+0x76, 0x61, 0x6a, 0x61, 0x6c, 0x65, 0x69, 0x6e, 0x6d, 0x61, 0x6a, 0x75,
+0x72, 0x6f, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x73, 0x61, 0x73, 0x6d, 0x69,
+0x1e0d, 0x76, 0x61, 0x79, 0x6e, 0x61, 0x75, 0x72, 0x75, 0x6e, 0x69, 0x75,
+0x65, 0x6e, 0x6f, 0x72, 0x70, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x69, 0x65,
+0x70, 0x61, 0x6e, 0x67, 0x6f, 0x20, 0x70, 0x61, 0x6e, 0x67, 0x6f, 0x70,
+0x61, 0x6c, 0x61, 0x75, 0x70, 0x69, 0x1e6d, 0x6b, 0x65, 0x72, 0x6e, 0x70,
+0x6f, 0x6e, 0x70, 0x65, 0x69, 0x70, 0x6f, 0x72, 0x1e6d, 0x20, 0x6d, 0x6f,
+0x72, 0x65, 0x73, 0x62, 0x69, 0x72, 0x61, 0x72, 0x6f, 0x74, 0x6f, 0x6e,
+0x67, 0x61, 0x73, 0x61, 0x69, 0x70, 0x61, 0x6e, 0x1e6d, 0x61, 0x68, 0x69,
+0x1e6d, 0x69, 0x74, 0x61, 0x72, 0x61, 0x76, 0x61, 0x1e6d, 0x6f, 0x6e, 0x67,
+0x61, 0x1e6d, 0x61, 0x70, 0x75, 0x76, 0x65, 0x6b, 0x76, 0x61, 0x6c, 0x6c,
+0x69, 0x73, 0x92c, 0x94d, 0x92f, 0x93e, 0x928, 0x94d, 0x91c, 0x941, 0x932, 0x92a,
+0x93c, 0x94d, 0x930, 0x940, 0x91f, 0x93e, 0x909, 0x928, 0x915, 0x93e, 0x930, 0x94d,
+0x924, 0x941, 0x92e, 0x915, 0x93f, 0x902, 0x938, 0x93e, 0x938, 0x93e, 0x932, 0x941,
+0x92c, 0x941, 0x92e, 0x92c, 0x93e, 0x938, 0x940, 0x92e, 0x94d, 0x2d, 0x92c, 0x93e,
+0x92c, 0x93e, 0x928, 0x947, 0x92e, 0x94b, 0x917, 0x93e, 0x926, 0x93f, 0x938, 0x941,
+0x928, 0x93e, 0x907, 0x930, 0x94b, 0x92c, 0x93f, 0x928, 0x941, 0x906, 0x915, 0x91a,
+0x949, 0x91f, 0x938, 0x94d, 0x92f, 0x93e, 0x928, 0x20, 0x939, 0x94d, 0x935, 0x93e,
+0x928, 0x938, 0x94d, 0x92f, 0x93e, 0x928, 0x20, 0x932, 0x942, 0x924, 0x93f, 0x909,
+0x938, 0x941, 0x906, 0x907, 0x92f, 0x93e, 0x90f, 0x938, 0x928, 0x938, 0x93f, 0x92f,
+0x949, 0x928, 0x92c, 0x94d, 0x932, 0x93e, 0x902, 0x2d, 0x938, 0x947, 0x92c, 0x932,
+0x94b, 0x928, 0x915, 0x947, 0x92e, 0x94d, 0x92c, 0x94d, 0x930, 0x93f, 0x91c, 0x20,
+0x92c, 0x947, 0x915, 0x94d, 0x92f, 0x93e, 0x92e, 0x94d, 0x92a, 0x94b, 0x20, 0x917,
+0x94d, 0x930, 0x93e, 0x902, 0x921, 0x947, 0x915, 0x94d, 0x92f, 0x93e, 0x928, 0x915,
+0x941, 0x928, 0x938, 0x93f, 0x915, 0x93e, 0x917, 0x94b, 0x921, 0x947, 0x928, 0x92e,
+0x93e, 0x930, 0x94d, 0x915, 0x938, 0x949, 0x928, 0x924, 0x93f, 0x930, 0x941, 0x928,
+0x947, 0x92a, 0x947, 0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x928, 0x947,
+0x932, 0x94d, 0x938, 0x928, 0x92a, 0x93c, 0x94b, 0x930, 0x94d, 0x91f, 0x93e, 0x932,
+0x947, 0x91c, 0x93c, 0x93e, 0x939, 0x947, 0x932, 0x93f, 0x92a, 0x947, 0x915, 0x94d,
+0x938, 0x907, 0x915, 0x93e, 0x932, 0x941, 0x924, 0x93f, 0x91f, 0x915, 0x94d, 0x930,
+0x93e, 0x932, 0x947, 0x928, 0x94d, 0x921, 0x93f, 0x91c, 0x93f, 0x915, 0x92e, 0x928,
+0x94b, 0x938, 0x92e, 0x947, 0x930, 0x93f, 0x917, 0x94b, 0x91f, 0x92c, 0x94d, 0x92f,
+0x942, 0x932, 0x93e, 0x2c, 0x20, 0x909, 0x924, 0x949, 0x930, 0x949, 0x20, 0x921,
+0x915, 0x94b, 0x91f, 0x93e, 0x92e, 0x93e, 0x926, 0x93f, 0x928, 0x940, 0x20, 0x909,
+0x924, 0x949, 0x930, 0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x928, 0x94d,
+0x92f, 0x942, 0x20, 0x938, 0x93e, 0x932, 0x947, 0x92e, 0x2c, 0x20, 0x909, 0x924,
+0x949, 0x930, 0x949, 0x20, 0x921, 0x915, 0x94b, 0x91f, 0x93e, 0x913, 0x915, 0x93e,
+0x91c, 0x940, 0x928, 0x93e, 0x917, 0x93e, 0x92a, 0x93c, 0x940, 0x928, 0x93f, 0x915,
+0x94d, 0x938, 0x92a, 0x94b, 0x930, 0x94d, 0x91f, 0x20, 0x911, 0x92a, 0x93c, 0x20,
+0x938, 0x94d, 0x92a, 0x947, 0x928, 0x930, 0x947, 0x938, 0x93e, 0x907, 0x92a, 0x93c,
+0x938, 0x947, 0x928, 0x94d, 0x91f, 0x93e, 0x930, 0x947, 0x92e, 0x938, 0x947, 0x902,
+0x924, 0x93f, 0x906, 0x917, 0x94b, 0x938, 0x947, 0x902, 0x91f, 0x20, 0x92c, 0x93e,
+0x930, 0x94d, 0x924, 0x947, 0x932, 0x947, 0x92e, 0x93f, 0x938, 0x947, 0x902, 0x91f,
+0x20, 0x924, 0x949, 0x92e, 0x938, 0x938, 0x94d, 0x935, 0x93f, 0x92a, 0x93c, 0x94d,
+0x91f, 0x20, 0x915, 0x930, 0x902, 0x91f, 0x935, 0x94d, 0x92f, 0x93e, 0x928, 0x94d,
+0x915, 0x942, 0x935, 0x930, 0x92e, 0x94d, 0x92f, 0x93e, 0x915, 0x92e, 0x941, 0x930,
+0x94d, 0x921, 0x94b, 0x932, 0x949, 0x928, 0x94d, 0x917, 0x92f, 0x930, 0x92c, 0x94d,
+0x92f, 0x947, 0x928, 0x905, 0x938, 0x94d, 0x917, 0x93e, 0x92c, 0x93e, 0x924, 0x92c,
+0x94d, 0x92f, 0x93e, 0x902, 0x917, 0x915, 0x949, 0x915, 0x92c, 0x93f, 0x938, 0x94d,
+0x915, 0x947, 0x915, 0x92c, 0x94d, 0x930, 0x942, 0x928, 0x947, 0x924, 0x93f, 0x924,
+0x94d, 0x938, 0x93f, 0x924, 0x93e, 0x926, 0x941, 0x92c, 0x924, 0x93f, 0x926, 0x941,
+0x938, 0x93e, 0x902, 0x92c, 0x947, 0x92a, 0x93c, 0x93e, 0x92e, 0x93e, 0x917, 0x941,
+0x938, 0x94d, 0x924, 0x93e, 0x92f, 0x947, 0x930, 0x941, 0x938, 0x932, 0x947, 0x92e,
+0x915, 0x93e, 0x921, 0x93f, 0x902, 0x917, 0x93e, 0x92a, 0x928, 0x949, 0x92e, 0x20,
+0x92a, 0x947, 0x928, 0x94d, 0x939, 0x915, 0x93f, 0x91c, 0x93f, 0x932, 0x949, 0x930,
+0x94d, 0x921, 0x93e, 0x938, 0x93e, 0x915, 0x93e, 0x932, 0x93f, 0x928, 0x938, 0x902,
+0x918, 0x93e, 0x924, 0x93f, 0x924, 0x93e, 0x924, 0x93f, 0x92a, 0x947, 0x924, 0x93f,
+0x924, 0x93e, 0x938, 0x915, 0x902, 0x924, 0x91f, 0x94d, 0x2d, 0x92c, 0x93f, 0x932,
+0x93f, 0x938, 0x93f, 0x92f, 0x93e, 0x902, 0x917, 0x949, 0x928, 0x915, 0x94d, 0x92f,
+0x93e, 0x928, 0x947, 0x930, 0x940, 0x92a, 0x94d, 0x92f, 0x93e, 0x930, 0x94b, 0x926,
+0x93e, 0x945, 0x915, 0x93f, 0x923, 0x93e, 0x945, 0x20, 0x91c, 0x93e, 0x945, 0x930,
+0x94d, 0x91c, 0x93f, 0x92f, 0x93e, 0x938, 0x94d, 0x91f, 0x94d, 0x92f, 0x93e, 0x928,
+0x932, 0x940, 0x906, 0x938, 0x94d, 0x91f, 0x94d, 0x930, 0x93e, 0x915, 0x93e, 0x928,
+0x90f, 0x924, 0x947, 0x928, 0x94d, 0x938, 0x906, 0x907, 0x932, 0x20, 0x911, 0x92a,
+0x94d, 0x20, 0x92e, 0x94d, 0x92f, 0x93e, 0x928, 0x938, 0x93f, 0x92e, 0x94d, 0x92a,
+0x93c, 0x947, 0x930, 0x94b, 0x92a, 0x94b, 0x932, 0x938, 0x94d, 0x915, 0x94b, 0x92a,
+0x94d, 0x92f, 0x947, 0x938, 0x94b, 0x92a, 0x93c, 0x93f, 0x92f, 0x93e, 0x91c, 0x93c,
+0x94d, 0x92f, 0x942, 0x930, 0x93f, 0x915, 0x93c, 0x92e, 0x949, 0x930, 0x940, 0x938,
+0x938, 0x911, 0x915, 0x932, 0x947, 0x902, 0x921, 0x91a, 0x94d, 0x92f, 0x93e, 0x925,
+0x92e, 0x924, 0x93f, 0x938, 0x94d, 0x91f, 0x930, 0x90f, 0x92a, 0x93c, 0x947, 0x91f,
+0x92a, 0x93c, 0x93e, 0x915, 0x93e, 0x913, 0x92a, 0x93c, 0x94b, 0x92a, 0x93c, 0x93f,
+0x91c, 0x940, 0x92a, 0x93c, 0x94d, 0x92f, 0x942, 0x928, 0x93e, 0x92a, 0x93c, 0x941,
+0x91f, 0x940, 0x917, 0x94d, 0x92f, 0x93e, 0x92e, 0x92c, 0x93f, 0x92f, 0x930, 0x915,
+0x947, 0x902, 0x91f, 0x928, 0x928, 0x93e, 0x945, 0x909, 0x930, 0x941, 0x928, 0x949,
+0x930, 0x92a, 0x93c, 0x949, 0x915, 0x928, 0x949, 0x92e, 0x93f, 0x92f, 0x93e, 0x92a,
+0x94b, 0x928, 0x92a, 0x947, 0x924, 0x93f, 0xb0f, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb2c,
+0xb4d, 0xb30, 0xb3e, 0xb1c, 0xb3e, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb2c,
+0xb41, 0xb1c, 0xb42, 0xb2e, 0xb4d, 0xb2c, 0xb41, 0xb30, 0xb3e, 0xb15, 0xb28, 0xb3e,
+0xb15, 0xb4d, 0xb30, 0xb3f, 0xb1c, 0xb3f, 0xb2c, 0xb1f, 0xb3f, 0xb2a, 0xb4d, 0xb30,
+0xb3f, 0xb1f, 0xb3e, 0xb09, 0xb28, 0xb4d, 0x200c, 0xb17, 0xb3e, 0xb2c, 0xb30, 0xb4d,
+0xb23, 0xb4d, 0xb23, 0xb1c, 0xb39, 0xb3e, 0xb28, 0xb4d, 0xb38, 0xb2c, 0xb30, 0xb4d,
+0xb17, 0xb15, 0xb30, 0xb1f, 0xb09, 0xb2e, 0xb4d, 0x200c, 0xb32, 0xb3e, 0xb17, 0xb38,
+0xb4d, 0x200c, 0xb32, 0xb3f, 0xb2c, 0xb4d, 0xb30, 0xb47, 0xb71, 0xb3f, 0xb32, 0xb4d,
+0xb32, 0xb47, 0xb32, 0xb2e, 0xb4d, 0x200c, 0xb2e, 0xb4d, 0x2d, 0xb2c, 0xb3e, 0xb2c,
+0xb3e, 0xb28, 0xb47, 0xb2e, 0xb4b, 0xb17, 0xb3e, 0xb21, 0xb3f, 0xb38, 0xb41, 0xb2e,
+0xb28, 0xb30, 0xb4b, 0xb2c, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb07, 0xb30, 0xb2c, 0xb3f,
+0xb28, 0xb41, 0xb06, 0xb15, 0xb1a, 0xb1f, 0xb05, 0xb17, 0xb3e, 0xb21, 0xb17, 0xb41,
+0xb2a, 0xb30, 0xb4d, 0xb1f, 0x2d, 0xb28, 0xb71, 0xb38, 0xb3e, 0xb05, 0x20, 0xb1f,
+0xb2e, 0xb47, 0xb24, 0xb4d, 0xb30, 0xb3f, 0xb2a, 0xb32, 0xb3f, 0xb71, 0xb3f, 0xb23,
+0xb4d, 0xb21, 0xb39, 0xb15, 0xb4d, 0xb2c, 0xb41, 0xb0f, 0xb28, 0xb38, 0xb4d, 0x20,
+0xb06, 0xb07, 0xb30, 0xb47, 0xb38, 0xb4d, 0xb15, 0xb3e, 0xb3c, 0xb1f, 0xb3e, 0xb2e,
+0xb3e, 0xb15, 0xb3e, 0xb01, 0xb15, 0xb4b, 0xb21, 0xb4b, 0xb2c, 0xb3e, 0xb1c, 0xb41,
+0xb1c, 0xb4b, 0xb0f, 0xb32, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb4d, 0xb05, 0xb1c, 0xb3e,
+0xb2e, 0xb47, 0xb23, 0xb4d, 0xb21, 0xb1c, 0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb4b, 0x20,
+0xb17, 0xb3e, 0xb32, 0xb47, 0xb17, 0xb4b, 0xb38, 0xb38, 0xb3e, 0xb32, 0xb4d, 0xb1f,
+0xb3e, 0xb38, 0xb3e, 0xb5f, 0xb3e, 0xb28, 0xb4d, 0x20, 0xb71, 0xb3e, 0xb28, 0xb4d,
+0xb38, 0xb5f, 0xb3e, 0xb28, 0x20, 0xb32, 0xb41, 0xb07, 0xb38, 0xb1f, 0xb4b, 0xb15,
+0xb41, 0xb2e, 0xb28, 0xb09, 0xb38, 0xb41, 0xb06, 0xb07, 0xb5f, 0xb3e, 0xb05, 0xb30,
+0xb41, 0xb2c, 0xb3e, 0xb2c, 0xb3e, 0xb30, 0xb2c, 0xb3e, 0xb21, 0xb38, 0xb2c, 0xb4d,
+0xb32, 0xb3e, 0xb19, 0xb4d, 0xb15, 0x2d, 0xb38, 0xb3e, 0xb2c, 0xb32, 0xb28, 0xb4d,
+0xb2c, 0xb4b, 0xb06, 0x20, 0xb71, 0xb3f, 0xb38, 0xb4d, 0xb1f, 0xb3e, 0xb2c, 0xb17,
+0xb1f, 0xb3e, 0xb2c, 0xb07, 0xb38, 0xb47, 0xb15, 0xb3e, 0xb2e, 0xb4d, 0xb2a, 0x20,
+0xb17, 0xb4d, 0xb30, 0xb3e, 0xb23, 0xb4d, 0xb21, 0xb47, 0xb38, 0xb3f, 0xb15, 0xb3e,
+0xb17, 0xb15, 0xb37, 0xb4d, 0xb1f, 0xb3e, 0x20, 0xb30, 0xb3f, 0xb15, 0xb3e, 0xb15,
+0xb4d, 0xb30, 0xb47, 0xb38, 0xb4d, 0x200d, 0xb1f, 0xb28, 0xb21, 0xb47, 0xb28, 0xb71,
+0xb3f, 0xb30, 0xb4d, 0xb21, 0xb47, 0xb1f, 0xb4d, 0xb30, 0xb07, 0xb1f, 0xb4d, 0xb21,
+0xb2e, 0xb3f, 0xb28, 0xb3f, 0xb15, 0xb3e, 0xb0f, 0xb21, 0xb4d, 0x200d, 0xb2e, 0xb28,
+0xb1f, 0xb28, 0xb4d, 0xb0f, 0xb32, 0xb4d, 0x20, 0xb38, 0xb3e, 0xb32, 0xb71, 0xb3e,
+0xb21, 0xb4b, 0xb30, 0xb4d, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0x20, 0xb28, 0xb47, 0xb32,
+0xb38, 0xb28, 0xb4d, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb32, 0xb47, 0xb1c, 0xb3e, 0xb17,
+0xb41, 0xb06, 0xb21, 0xb47, 0xb32, 0xb09, 0xb2a, 0xb47, 0xb17, 0xb41, 0xb06, 0xb24,
+0xb47, 0xb2e, 0xb3e, 0xb32, 0xb3e, 0xb39, 0xb3e, 0xb71, 0xb28, 0xb3e, 0xb39, 0xb47,
+0xb30, 0xb2e, 0xb38, 0xb3f, 0xb32, 0xb4b, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06,
+0xb28, 0xb3e, 0xb2a, 0xb32, 0xb3f, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb30, 0xb47, 0xb28,
+0xb17, 0x2c, 0x20, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06, 0xb28, 0xb3e, 0xb71,
+0xb47, 0xb71, 0xb3e, 0xb5f, 0x2c, 0x20, 0xb07, 0xb23, 0xb4d, 0xb21, 0xb3f, 0xb06,
+0xb28, 0xb3e, 0xb07, 0xb28, 0xb41, 0xb71, 0xb3f, 0xb15, 0xb4d, 0xb32, 0xb09, 0xb07,
+0xb38, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb2e, 0xb23, 0xb4d, 0xb1f, 0xb3f,
+0xb38, 0xb47, 0xb32, 0x2c, 0x20, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb09, 0xb15,
+0xb3f, 0xb15, 0xb47, 0xb15, 0xb4d, 0xb30, 0xb3e, 0xb32, 0xb47, 0xb23, 0xb4d, 0xb21,
+0xb3f, 0xb1c, 0xb3f, 0xb15, 0xb2e, 0xb3e, 0xb38, 0xb3f, 0xb05, 0xb2e, 0xb3e, 0xb30,
+0xb3f, 0xb17, 0xb1f, 0xb4d, 0xb2e, 0xb3e, 0xb1f, 0xb3e, 0xb2e, 0xb30, 0xb38, 0xb4d,
+0xb2e, 0xb3e, 0xb1c, 0xb3e, 0xb1f, 0xb32, 0xb3e, 0xb28, 0xb4d, 0xb2e, 0xb3f, 0xb15,
+0xb4d, 0xb35, 0xb47, 0xb32, 0xb28, 0xb4d, 0xb2e, 0xb3e, 0xb28, 0xb15, 0xb1f, 0xb28,
+0xb4d, 0xb2e, 0xb28, 0xb1f, 0xb47, 0xb30, 0xb3f, 0xb0f, 0xb2e, 0xb23, 0xb4d, 0xb1f,
+0xb47, 0xb2d, 0xb3f, 0xb21, 0xb3f, 0xb05, 0xb2e, 0xb28, 0xb1f, 0xb38, 0xb47, 0xb30,
+0xb30, 0xb3e, 0xb1f, 0xb4d, 0xb28, 0xb4d, 0xb5f, 0xb41, 0x20, 0xb5f, 0xb30, 0xb4d,
+0xb15, 0xb4d, 0xb28, 0xb30, 0xb39, 0xb4d, 0xb28, 0xb2c, 0xb47, 0xb09, 0xb32, 0xb3e,
+0xb39, 0x2c, 0x20, 0xb09, 0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15,
+0xb1f, 0xb3e, 0xb15, 0xb47, 0xb28, 0xb4d, 0xb26, 0xb4d, 0xb30, 0x2c, 0x20, 0xb09,
+0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb28, 0xb4d,
+0xb5f, 0xb41, 0x20, 0xb38, 0xb3e, 0xb32, 0xb47, 0xb2e, 0xb4d, 0x2c, 0x20, 0xb09,
+0xb24, 0xb4d, 0xb24, 0xb30, 0x20, 0xb21, 0xb3e, 0xb15, 0xb1f, 0xb3e, 0xb05, 0xb1c,
+0xb3f, 0xb28, 0xb3e, 0xb17, 0xb3e, 0xb2a, 0xb07, 0xb28, 0xb3f, 0xb15, 0xb4d, 0xb38,
+0xb2a, 0xb30, 0xb4d, 0xb1f, 0x2d, 0xb0f, 0xb5f, 0xb41, 0x2d, 0xb2a, 0xb4d, 0xb30,
+0xb3f, 0xb28, 0xb4d, 0x200d, 0xb38, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb05,
+0xb2b, 0xb4d, 0x20, 0xb38, 0xb4d, 0xb2a, 0xb47, 0xb28, 0xb4d, 0xb2a, 0xb41, 0xb0f,
+0xb30, 0xb4d, 0xb24, 0x20, 0xb30, 0xb3f, 0xb15, 0xb30, 0xb47, 0xb38, 0xb3f, 0xb2a,
+0xb3f, 0xb30, 0xb3f, 0xb5f, 0x20, 0xb2c, 0xb4d, 0xb30, 0xb3e, 0xb19, 0xb4d, 0xb15,
+0xb38, 0xb3e, 0xb28, 0xb4d, 0xb24, 0xb30, 0xb47, 0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb23,
+0xb4d, 0xb1f, 0x20, 0xb21, 0xb2e, 0xb3f, 0xb19, 0xb4d, 0xb17, 0xb07, 0xb1f, 0xb4d,
+0xb1f, 0xb15, 0xb4d, 0xb35, 0xb30, 0xb1f, 0xb30, 0xb2e, 0xb3f, 0xb1f, 0xb4d, 0xb38,
+0xb47, 0xb23, 0xb4d, 0xb1f, 0x20, 0xb2c, 0xb3e, 0xb30, 0xb4d, 0xb24, 0xb47, 0xb32,
+0xb47, 0xb2e, 0xb3f, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x20, 0xb15, 0xb3f,
+0xb1f, 0xb4d, 0x200d, 0xb38, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e, 0x20,
+0xb25, 0xb2e, 0xb3e, 0xb38, 0xb4d, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0x2e,
+0x20, 0xb71, 0xb3f, 0xb28, 0xb38, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb4d, 0xb24, 0xb41,
+0xb32, 0xb47, 0xb1f, 0xb30, 0xb23, 0xb4d, 0xb1f, 0xb1f, 0xb30, 0xb1f, 0xb32, 0xb3e,
+0xb71, 0xb3e, 0xb19, 0xb4d, 0xb15, 0xb41, 0xb71, 0xb30, 0xb4d, 0xb15, 0xb47, 0xb38,
+0xb3f, 0xb21, 0xb47, 0xb71, 0xb3f, 0xb38, 0xb4d, 0xb21, 0xb4d, 0xb5f, 0xb41, 0xb2e,
+0xb3e, 0xb23, 0xb4d, 0xb1f, 0x20, 0xb21, 0xb3f, 0x20, 0xb09, 0xb30, 0xb71, 0xb3f,
+0xb32, 0xb47, 0xb2e, 0xb15, 0xb4d, 0xb71, 0xb3e, 0xb30, 0xb3f, 0xb2e, 0xb3e, 0xb01,
+0xb38, 0xb28, 0xb2e, 0xb4d, 0xb5f, 0xb3e, 0xb15, 0xb2e, 0xb41, 0xb30, 0xb4d, 0xb21,
+0xb2a, 0xb3e, 0xb01, 0xb2e, 0xb30, 0xb30, 0xb4b, 0xb24, 0xb47, 0xb30, 0xb3e, 0xb1f,
+0xb4b, 0xb32, 0xb4d, 0xb71, 0xb4b, 0xb38, 0xb4d, 0xb24, 0xb15, 0xb4b, 0xb33, 0xb19,
+0xb4d, 0xb16, 0xb5f, 0xb3e, 0xb30, 0xb2c, 0xb47, 0xb28, 0xb06, 0xb15, 0xb4d, 0xb1f,
+0xb2c, 0xb47, 0xb06, 0xb38, 0xb4d, 0x200d, 0xb17, 0xb3e, 0xb2c, 0xb1f, 0xb4d, 0xb2c,
+0xb39, 0xb3e, 0xb30, 0xb47, 0xb28, 0xb2c, 0xb3f, 0xb38, 0xb15, 0xb47, 0xb15, 0xb4d,
+0x200c, 0xb26, 0xb41, 0xb38, 0xb3e, 0xb28, 0xb2c, 0xb47, 0xb2a, 0xb3e, 0xb2e, 0xb3e,
+0xb17, 0xb41, 0xb38, 0xb4d, 0xb1f, 0xb3e, 0xb39, 0x20, 0xb1a, 0xb3f, 0x20, 0xb2e,
+0xb3f, 0xb28, 0xb4d, 0x200c, 0x20, 0xb38, 0xb3f, 0xb1f, 0xb3f, 0xb39, 0xb4b, 0xb71,
+0xb21, 0xb4d, 0x200c, 0xb1c, 0xb3e, 0xb15, 0xb30, 0xb4d, 0xb24, 0xb3e, 0xb15, 0xb2c,
+0xb41, 0xb32, 0xb4d, 0xb15, 0xb3e, 0xb1f, 0xb2e, 0xb3e, 0xb23, 0xb4d, 0xb21, 0xb41,
+0xb15, 0xb3e, 0xb28, 0xb21, 0xb4d, 0xb5f, 0xb3e, 0xb17, 0xb3e, 0xb15, 0xb4d, 0xb30,
+0xb3e, 0xb38, 0xb28, 0xb5f, 0xb3e, 0xb30, 0xb38, 0xb4d, 0xb15, 0xb28, 0xb3f, 0xb15,
+0xb38, 0xb3f, 0xb06, 0xb28, 0xb71, 0xb15, 0xb41, 0xb1c, 0xb28, 0xb47, 0xb1f, 0xb38,
+0xb4d, 0xb15, 0xb28, 0xb71, 0xb38, 0xb3f, 0xb2c, 0xb3f, 0xb30, 0xb38, 0xb4d, 0xb15,
+0xb05, 0xb30, 0xb3e, 0xb32, 0xb4d, 0x200c, 0xb2a, 0xb28, 0xb2e, 0xb4d, 0x200c, 0x20,
+0xb2a, 0xb47, 0xb28, 0xb39, 0xb2a, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb06, 0xb28, 0xb3e,
+0xb15, 0xb4d, 0x200c, 0xb15, 0xb37, 0xb4d, 0xb1f, 0xb28, 0xb47, 0xb15, 0xb40, 0xb1c,
+0xb3f, 0xb32, 0xb30, 0xb4d, 0xb21, 0xb3e, 0xb38, 0xb15, 0xb3e, 0xb32, 0xb3f, 0xb28,
+0xb4d, 0xb38, 0xb3f, 0xb05, 0xb32, 0xb38, 0xb02, 0xb17, 0xb3e, 0xb07, 0xb38, 0xb4d,
+0xb30, 0xb47, 0xb21, 0xb28, 0xb47, 0xb15, 0xb32, 0xb5f, 0xb2e, 0xb38, 0xb4d, 0xb15,
+0xb24, 0xb3e, 0xb38, 0xb15, 0xb47, 0xb23, 0xb4d, 0xb1f, 0xb24, 0xb3f, 0xb2e, 0xb4d,
+0xb2a, 0xb41, 0xb1f, 0xb15, 0xb3f, 0xb05, 0xb1f, 0xb2e, 0xb38, 0xb4d, 0xb15, 0xb5f,
+0xb41, 0xb38, 0xb4d, 0x200d, 0xb1f, 0x2d, 0xb28, 0xb47, 0xb30, 0xb3e, 0xb71, 0xb3f,
+0xb0f, 0xb23, 0xb4d, 0xb1f, 0xb3f, 0xb0f, 0xb28, 0xb4d, 0x200c, 0xb71, 0xb4d, 0xb32,
+0xb3e, 0xb21, 0xb3f, 0xb71, 0xb37, 0xb4d, 0xb1f, 0xb4b, 0xb15, 0xb4d, 0xb5f, 0xb47,
+0xb30, 0xb47, 0xb2c, 0xb3e, 0xb28, 0xb4d, 0xb06, 0xb1c, 0xb30, 0xb47, 0xb38, 0xb4d,
+0xb2c, 0xb30, 0xb2e, 0xb41, 0xb21, 0xb3e, 0xb15, 0xb47, 0xb2a, 0xb4d, 0x200c, 0x20,
+0xb71, 0xb30, 0xb4d, 0xb26, 0xb47, 0xb2a, 0xb30, 0xb0f, 0xb30, 0xb47, 0xb15, 0xb4d,
+0xb5f, 0xb3e, 0xb2c, 0xb3f, 0xb15, 0xb38, 0xb4d, 0x200d, 0xb1f, 0xb3e, 0xb32, 0xb3f,
+0xb28, 0xb0f, 0xb21, 0xb3f, 0xb32, 0xb47, 0xb21, 0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb3f,
+0xb38, 0xb2c, 0xb28, 0xb4d, 0xb2c, 0xb4d, 0xb30, 0xb4b, 0xb15, 0xb28, 0x20, 0xb39,
+0xb3f, 0xb32, 0xb21, 0xb3e, 0xb30, 0xb4d, 0xb71, 0xb3f, 0xb28, 0xb4d, 0xb32, 0xb3f,
+0xb23, 0xb4d, 0xb21, 0xb47, 0xb2e, 0xb3e, 0xb28, 0xb32, 0xb30, 0xb4d, 0x200d, 0xb21,
+0x20, 0xb39, 0xb3e, 0xb71, 0xb47, 0xb2e, 0xb47, 0xb32, 0xb2c, 0xb4b, 0xb28, 0xb01,
+0xb2a, 0xb30, 0xb4d, 0xb24, 0xb06, 0xb2e, 0xb37, 0xb4d, 0xb1f, 0xb4d, 0xb30, 0xb47,
+0xb21, 0xb3e, 0xb2e, 0xb4d, 0xb06, 0xb23, 0xb4d, 0xb21, 0xb30, 0xb3e, 0xb06, 0xb38,
+0xb4d, 0x200d, 0xb1f, 0xb30, 0xb3e, 0xb15, 0xb3e, 0xb28, 0xb0f, 0xb24, 0xb47, 0xb28,
+0xb4d, 0xb38, 0xb2c, 0xb47, 0xb32, 0xb17, 0xb4d, 0xb30, 0xb47, 0xb21, 0xb47, 0xb2c,
+0xb4d, 0xb30, 0xb3e, 0xb1f, 0xb3f, 0xb38, 0xb32, 0xb3e, 0xb71, 0xb3e, 0xb2c, 0xb4d,
+0xb30, 0xb41, 0xb38, 0xb3f, 0xb32, 0xb4d, 0x200d, 0xb38, 0xb2c, 0xb41, 0xb1a, 0xb3e,
+0xb30, 0xb47, 0xb38, 0xb4d, 0xb1f, 0xb2c, 0xb41, 0xb21, 0xb3e, 0xb2a, 0xb47, 0xb38,
+0xb4d, 0xb1f, 0xb1a, 0xb3f, 0xb38, 0xb3f, 0xb28, 0xb3e, 0xb09, 0xb15, 0xb2a, 0xb47,
+0xb28, 0xb39, 0xb3e, 0xb17, 0xb47, 0xb28, 0xb4d, 0xb06, 0xb07, 0xb32, 0xb4d, 0x20,
+0xb05, 0xb2a, 0xb4d, 0x20, 0xb2e, 0xb4d, 0xb5f, 0xb3e, 0xb28, 0xb4d, 0xb15, 0xb3f,
+0xb30, 0xb71, 0xb2e, 0xb3e, 0xb30, 0xb3f, 0xb5f, 0xb3e, 0xb39, 0xb47, 0xb2e, 0xb2e,
+0xb28, 0xb3e, 0xb15, 0xb05, 0xb38, 0xb32, 0xb4b, 0xb2a, 0xb21, 0xb17, 0xb30, 0xb3f,
+0xb15, 0xb3e, 0xb30, 0xb2e, 0xb4d, 0xb38, 0xb3e, 0xb30, 0xb3e, 0xb1c, 0xb47, 0xb2c,
+0xb38, 0xb3e, 0xb30, 0xb3e, 0xb1f, 0xb71, 0xb4d, 0xb38, 0xb3f, 0xb2e, 0xb2b, 0xb47,
+0xb30, 0xb2a, 0xb32, 0xb4d, 0xb38, 0xb4d, 0xb15, 0xb2a, 0xb5f, 0xb47, 0xb38, 0xb2a,
+0xb3f, 0xb5f, 0xb3e, 0xb38, 0xb4d, 0xb1f, 0xb15, 0xb4d, 0x20, 0xb39, 0xb2e, 0xb4d,
+0x200c, 0xb1f, 0xb3e, 0xb07, 0xb30, 0xb47, 0xb28, 0xb4d, 0xb5f, 0xb41, 0xb32, 0xb5f,
+0xb3e, 0xb28, 0xb71, 0xb38, 0xb4d, 0xb15, 0xb2c, 0xb3e, 0xb21, 0xb41, 0xb1c, 0xb71,
+0xb3e, 0xb1f, 0xb3f, 0xb15, 0xb3e, 0xb28, 0xb4d, 0xb71, 0xb3f, 0xb0f, 0xb28, 0xb3e,
+0xb71, 0xb3f, 0xb32, 0xb28, 0xb3f, 0xb09, 0xb38, 0xb4d, 0xb71, 0xb32, 0xb17, 0xb17,
+0xb4d, 0xb30, 0xb3e, 0xb21, 0xb4d, 0xb16, 0xb4d, 0xb30, 0xb40, 0xb38, 0xb4d, 0x200d,
+0xb1f, 0x20, 0xb2e, 0xb3e, 0xb38, 0xb15, 0xb15, 0xb38, 0xb4d, 0x200c, 0xb15, 0xb2e,
+0xb30, 0xb15, 0xb47, 0xb30, 0xb17, 0xb41, 0xb32, 0xb47, 0xb28, 0xb2e, 0xb30, 0xb3f,
+0xb38, 0xb38, 0xb4d, 0xb2e, 0xb3e, 0xb5f, 0xb1f, 0xb47, 0xb2c, 0xb17, 0xb47, 0xb28,
+0xb4d, 0x200c, 0xb71, 0xb3f, 0xb32, 0xb4d, 0xb32, 0xb47, 0xb1a, 0xb3e, 0xb24, 0xb3e,
+0xb2e, 0xb4d, 0x200c, 0xb2a, 0xb15, 0xb3e, 0xb05, 0xb2a, 0xb2a, 0xb3f, 0xb1c, 0xb3f,
+0xb17, 0xb3e, 0xb32, 0xb3e, 0xb2a, 0xb3e, 0xb17, 0xb38, 0xb15, 0xb47, 0xb23, 0xb4d,
+0xb1f, 0xb28, 0xb28, 0xb30, 0xb2a, 0xb15, 0xb4d, 0x200c, 0xb28, 0xb09, 0xb2e, 0xb3f,
+0xb5f, 0xb2a, 0xb39, 0xb28, 0xb2a, 0xb47, 0xb07, 0xb2a, 0xb30, 0xb4d, 0xb1f, 0xb4d,
+0x200c, 0x20, 0xb2e, 0xb30, 0xb47, 0xb38, 0xb2c, 0xb3f, 0xb30, 0xb3e, 0xb30, 0xb1f,
+0xb19, 0xb4d, 0xb17, 0xb3e, 0xb1f, 0xb19, 0xb4d, 0xb17, 0xb3e, 0xb1f, 0xb3e, 0xb2a,
+0xb41, 0xc0e, 0xc02, 0xc17, 0xc4d, 0xc35, 0xc3f, 0xc32, 0xc4d, 0xc32, 0xc3e, 0x3c,
+0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79,
+0x3e, 0xc05, 0xc21, 0xc46, 0xc32, 0xc48, 0xc21, 0xc4d, 0x3c, 0x2f, 0x65, 0x78,
+0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x43, 0x69, 0x74, 0x79, 0x3e, 0xc15,
+0xc3e, 0xc02, 0xc1f, 0xc28, 0xc4d, 0x140a, 0x144e, 0x1426, 0x146f, 0x1472, 0x1423, 0x1401,
+0x141f, 0x14aa, 0x1423, 0x1450, 0x1423, 0x1403, 0x14c4, 0x1431, 0x1420, 0x1403, 0x1473, 0x14eb,
+0x1405, 0x1403, 0x141f, 0x14f4, 0x1422, 0x1473, 0x141f, 0x1489, 0x1418, 0x1423, 0x1411, 0x14c2,
+0x142f, 0x1420
};
static inline constexpr char16_t shortZoneNameTable[] = {
diff --git a/src/corelib/tools/qarraydata.cpp b/src/corelib/tools/qarraydata.cpp
index 37d6dea35f9..54bd971cb36 100644
--- a/src/corelib/tools/qarraydata.cpp
+++ b/src/corelib/tools/qarraydata.cpp
@@ -181,13 +181,12 @@ allocateHelper(qsizetype objectSize, qsizetype alignment, qsizetype capacity,
return {};
void *data = nullptr;
- QArrayData *header = static_cast<QArrayData *>(::malloc(size_t(allocSize)));
- if (Q_LIKELY(header)) {
- header->ref_.storeRelaxed(1);
- header->flags = {};
+ void *mem = ::malloc(size_t(allocSize));
+ QArrayData *header = nullptr;
+ if (Q_LIKELY(mem)) {
+ header = new (mem) QArrayData{1, {}, capacity};
// find where offset should point to so that data() is aligned to alignment bytes
data = QTypedArrayData<void>::dataStart(header, alignment);
- header->alloc = capacity;
}
return { data, header };
@@ -245,8 +244,12 @@ QArrayData::reallocateUnaligned(QArrayData *data, void *dataPointer,
Q_ASSERT(offset > 0);
Q_ASSERT(offset <= allocSize); // equals when all free space is at the beginning
- QArrayData *header = static_cast<QArrayData *>(::realloc(data, size_t(allocSize)));
- if (header) {
+ const bool hadData = data;
+ void *mem = ::realloc(data, size_t(allocSize));
+ QArrayData *header = static_cast<QArrayData *>(mem);
+ if (mem) {
+ if (!hadData)
+ header = new (mem) QArrayData{0, {}, {}};
header->alloc = capacity;
dataPointer = reinterpret_cast<char *>(header) + offset;
} else {
diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h
index 38d1091ac1f..71e183e646e 100644
--- a/src/corelib/tools/qarraydata.h
+++ b/src/corelib/tools/qarraydata.h
@@ -39,7 +39,7 @@ struct QArrayData
};
Q_DECLARE_FLAGS(ArrayOptions, ArrayOption)
- QBasicAtomicInt ref_;
+ QBasicAtomicInt m_ref;
ArrayOptions flags;
qsizetype alloc;
@@ -56,19 +56,19 @@ struct QArrayData
/// Returns true if sharing took place
bool ref() noexcept
{
- ref_.ref();
+ m_ref.ref();
return true;
}
/// Returns false if deallocation is necessary
bool deref() noexcept
{
- return ref_.deref();
+ return m_ref.deref();
}
bool isShared() const noexcept
{
- return ref_.loadRelaxed() != 1;
+ return m_ref.loadRelaxed() != 1;
}
// Returns true if a detach is necessary before modifying the data
@@ -76,7 +76,7 @@ struct QArrayData
// detaching is necessary, you should be in a non-const function already
bool needsDetach() noexcept
{
- return ref_.loadRelaxed() > 1;
+ return m_ref.loadRelaxed() > 1;
}
qsizetype detachCapacity(qsizetype newSize) const noexcept
diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h
index c20abd12c23..419585b0260 100644
--- a/src/corelib/tools/qarraydataops.h
+++ b/src/corelib/tools/qarraydataops.h
@@ -82,7 +82,7 @@ public:
void destroyAll() noexcept // Call from destructors, ONLY!
{
Q_ASSERT(this->d);
- Q_ASSERT(this->d->ref_.loadRelaxed() == 0);
+ Q_ASSERT(this->d->m_ref.loadRelaxed() == 0);
// As this is to be called only from destructor, it doesn't need to be
// exception safe; size not updated.
@@ -345,7 +345,7 @@ public:
// As this is to be called only from destructor, it doesn't need to be
// exception safe; size not updated.
- Q_ASSERT(this->d->ref_.loadRelaxed() == 0);
+ Q_ASSERT(this->d->m_ref.loadRelaxed() == 0);
std::destroy(this->begin(), this->end());
}
diff --git a/src/corelib/tools/qfreelist_p.h b/src/corelib/tools/qfreelist_p.h
index 5c12332aa4a..cc12fb9c8d0 100644
--- a/src/corelib/tools/qfreelist_p.h
+++ b/src/corelib/tools/qfreelist_p.h
@@ -232,7 +232,7 @@ inline void QFreeList<T, ConstantsType>::release(int id)
{
int at = id & ConstantsType::IndexMask;
const int block = blockfor(at);
- ElementType *v = _v[block].loadRelaxed();
+ ElementType *v = _v[block].loadAcquire();
int x, newid;
do {
diff --git a/src/gui/accessible/linux/atspiadaptor.cpp b/src/gui/accessible/linux/atspiadaptor.cpp
index 6154af00950..e0cd5aee25c 100644
--- a/src/gui/accessible/linux/atspiadaptor.cpp
+++ b/src/gui/accessible/linux/atspiadaptor.cpp
@@ -1462,9 +1462,12 @@ bool AtSpiAdaptor::handleMessage(const QDBusMessage &message, const QDBusConnect
// handle properties like regular functions
if (interface == "org.freedesktop.DBus.Properties"_L1) {
- interface = message.arguments().at(0).toString();
- // Get/Set + Name
- function = message.member() + message.arguments().at(1).toString();
+ const auto arguments = message.arguments();
+ if (arguments.size() > 0) {
+ interface = arguments.at(0).toString();
+ if (arguments.size() > 1) // e.g. Get/Set + Name
+ function = function + arguments.at(1).toString();
+ }
}
// switch interface to call
diff --git a/src/gui/itemmodels/qfileinfogatherer.cpp b/src/gui/itemmodels/qfileinfogatherer.cpp
index a0192c99828..df43f53050a 100644
--- a/src/gui/itemmodels/qfileinfogatherer.cpp
+++ b/src/gui/itemmodels/qfileinfogatherer.cpp
@@ -149,6 +149,8 @@ void QFileInfoGatherer::fetchExtendedInformation(const QString &path, const QStr
while ((loc = this->path.lastIndexOf(path, loc - 1)) != -1) {
if (this->files.at(loc) == files)
return;
+ if (loc == 0)
+ break;
}
#if QT_CONFIG(thread)
diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp
index 1768cd8aa1a..f965a5a30e9 100644
--- a/src/gui/kernel/qaction.cpp
+++ b/src/gui/kernel/qaction.cpp
@@ -1325,4 +1325,6 @@ Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAction *action)
QT_END_NAMESPACE
+#undef QAPP_CHECK
+
#include "moc_qaction.cpp"
diff --git a/src/gui/kernel/qshortcut.cpp b/src/gui/kernel/qshortcut.cpp
index 3f6822cb031..e730b5f9e8b 100644
--- a/src/gui/kernel/qshortcut.cpp
+++ b/src/gui/kernel/qshortcut.cpp
@@ -577,4 +577,6 @@ bool QShortcut::event(QEvent *e)
QT_END_NAMESPACE
+#undef QAPP_CHECK
+
#include "moc_qshortcut.cpp"
diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp
index edbe507e93d..b91215fdf4a 100644
--- a/src/gui/math3d/qquaternion.cpp
+++ b/src/gui/math3d/qquaternion.cpp
@@ -336,6 +336,9 @@ QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const
Extracts a 3D axis \a axis and a rotating angle \a angle (in degrees)
that corresponds to this quaternion.
+ Both \a axis and \a angle must be valid, non-\nullptr pointers,
+ otherwise the behavior is undefined.
+
\sa fromAxisAndAngle()
*/
@@ -366,6 +369,9 @@ QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D &axis, float angle)
Extracts a 3D axis (\a x, \a y, \a z) and a rotating angle \a angle (in degrees)
that corresponds to this quaternion.
+ All of \a x, \a y, \a z, and \a angle must be valid, non-\nullptr pointers,
+ otherwise the behavior is undefined.
+
\sa fromAxisAndAngle()
*/
void QQuaternion::getAxisAndAngle(float *x, float *y, float *z, float *angle) const
@@ -421,19 +427,20 @@ QQuaternion QQuaternion::fromAxisAndAngle
\since 5.5
Calculates roll, pitch, and yaw Euler angles (in degrees)
- that corresponds to this quaternion.
+ that correspond to this quaternion.
\sa fromEulerAngles()
*/
/*!
- \fn QQuaternion QQuaternion::fromEulerAngles(const QVector3D &eulerAngles)
+ \fn QQuaternion QQuaternion::fromEulerAngles(const QVector3D &angles)
\since 5.5
\overload
- Creates a quaternion that corresponds to a rotation of \a eulerAngles:
- eulerAngles.z() degrees around the z axis, eulerAngles.x() degrees around the x axis,
- and eulerAngles.y() degrees around the y axis (in that order).
+ Creates a quaternion that corresponds to a rotation of \a angles:
+ angles.\l{QVector3D::}{z()} degrees around the z axis,
+ angles.\l{QVector3D::}{x()} degrees around the x axis, and
+ angles.\l{QVector3D::}{y()} degrees around the y axis (in that order).
\sa toEulerAngles()
*/
@@ -446,6 +453,9 @@ QQuaternion QQuaternion::fromAxisAndAngle
Calculates \a roll, \a pitch, and \a yaw Euler angles (in degrees)
that corresponds to this quaternion.
+ All of \a pitch, \a yaw, and \a roll must be valid, non-\nullptr pointers,
+ otherwise the behavior is undefined.
+
\sa fromEulerAngles()
*/
void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const
@@ -585,9 +595,9 @@ QMatrix3x3 QQuaternion::toRotationMatrix() const
/*!
\since 5.5
- Creates a quaternion that corresponds to a rotation matrix \a rot3x3.
+ Creates a quaternion that corresponds to the rotation matrix \a rot3x3.
- \note If a given rotation matrix is not normalized,
+ \note If the given rotation matrix is not normalized,
the resulting quaternion will contain scaling information.
\sa toRotationMatrix(), fromAxes()
@@ -634,6 +644,9 @@ QQuaternion QQuaternion::fromRotationMatrix(const QMatrix3x3 &rot3x3)
Returns the 3 orthonormal axes (\a xAxis, \a yAxis, \a zAxis) defining the quaternion.
+ All of \a xAxis, \a yAxis, and \a zAxis must be valid, non-\nullptr pointers,
+ otherwise the behavior is undefined.
+
\sa fromAxes(), toRotationMatrix()
*/
void QQuaternion::getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const
diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h
index 7fb153063c5..0ea844ae41f 100644
--- a/src/gui/math3d/qquaternion.h
+++ b/src/gui/math3d/qquaternion.h
@@ -109,7 +109,7 @@ QT_WARNING_POP
#ifndef QT_NO_VECTOR3D
inline QVector3D toEulerAngles() const;
- static inline QQuaternion fromEulerAngles(const QVector3D &eulerAngles);
+ static inline QQuaternion fromEulerAngles(const QVector3D &angles);
#endif
QT7_ONLY(Q_GUI_EXPORT) void getEulerAngles(float *pitch, float *yaw, float *roll) const;
QT7_ONLY(Q_GUI_EXPORT) static QQuaternion fromEulerAngles(float pitch, float yaw, float roll);
@@ -311,23 +311,23 @@ inline QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec)
return quaternion.rotatedVector(vec);
}
-inline void QQuaternion::getAxisAndAngle(QVector3D *axis, float *angle) const
+void QQuaternion::getAxisAndAngle(QVector3D *axis, float *angle) const
{
float aX, aY, aZ;
getAxisAndAngle(&aX, &aY, &aZ, angle);
*axis = QVector3D(aX, aY, aZ);
}
-inline QVector3D QQuaternion::toEulerAngles() const
+QVector3D QQuaternion::toEulerAngles() const
{
float pitch, yaw, roll;
getEulerAngles(&pitch, &yaw, &roll);
return QVector3D(pitch, yaw, roll);
}
-inline QQuaternion QQuaternion::fromEulerAngles(const QVector3D &eulerAngles)
+QQuaternion QQuaternion::fromEulerAngles(const QVector3D &angles)
{
- return QQuaternion::fromEulerAngles(eulerAngles.x(), eulerAngles.y(), eulerAngles.z());
+ return QQuaternion::fromEulerAngles(angles.x(), angles.y(), angles.z());
}
#endif // QT_NO_VECTOR3D
diff --git a/src/gui/painting/qdatabuffer_p.h b/src/gui/painting/qdatabuffer_p.h
index c7474dc57a3..4872853514b 100644
--- a/src/gui/painting/qdatabuffer_p.h
+++ b/src/gui/painting/qdatabuffer_p.h
@@ -87,8 +87,9 @@ public:
capacity = 1;
while (capacity < size)
capacity *= 2;
- buffer = (Type*) QtPrivate::fittedRealloc(static_cast<void*>(buffer), 0, &capacity, sizeof(Type));
- Q_CHECK_PTR(buffer);
+ auto ptr = QtPrivate::fittedRealloc(static_cast<void*>(buffer), 0, &capacity, sizeof(Type));
+ Q_CHECK_PTR(ptr);
+ buffer = static_cast<Type*>(ptr);
}
}
@@ -96,8 +97,9 @@ public:
Q_ASSERT(capacity >= size);
if (size) {
capacity = size;
- buffer = (Type*) QtPrivate::fittedRealloc(static_cast<void*>(buffer), 0, &capacity, sizeof(Type));
- Q_CHECK_PTR(buffer);
+ const auto ptr = QtPrivate::fittedRealloc(static_cast<void*>(buffer), 0, &capacity, sizeof(Type));
+ Q_CHECK_PTR(ptr);
+ buffer = static_cast<Type*>(ptr);
siz = std::min(siz, size);
} else {
QtPrivate::sizedFree(buffer, capacity, sizeof(Type));
diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h
index d436afc5c77..1a60afbdd8e 100644
--- a/src/gui/painting/qpaintengine_raster_p.h
+++ b/src/gui/painting/qpaintengine_raster_p.h
@@ -361,7 +361,7 @@ inline void QClipData::appendSpan(int x, int length, int y, int coverage)
if (count == allocated) {
allocated *= 2;
- m_spans = (QT_FT_Span *)realloc(m_spans, allocated*sizeof(QT_FT_Span));
+ m_spans = static_cast<QT_FT_Span*>(q_check_ptr(realloc(m_spans, allocated * sizeof(QT_FT_Span))));
}
m_spans[count].x = x;
m_spans[count].len = length;
@@ -378,7 +378,7 @@ inline void QClipData::appendSpans(const QT_FT_Span *s, int num)
do {
allocated *= 2;
} while (count + num > allocated);
- m_spans = (QT_FT_Span *)realloc(m_spans, allocated*sizeof(QT_FT_Span));
+ m_spans = static_cast<QT_FT_Span*>(q_check_ptr(realloc(m_spans, allocated * sizeof(QT_FT_Span))));
}
memcpy(m_spans+count, s, num*sizeof(QT_FT_Span));
count += num;
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 5d455219359..8380a8b7f68 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -1570,7 +1570,6 @@ bool QFontDatabase::isFixedPitch(const QString &family,
bool QFontDatabase::isBitmapScalable(const QString &family,
const QString &style)
{
- bool bitmapScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1578,7 +1577,8 @@ bool QFontDatabase::isBitmapScalable(const QString &family,
QFontDatabasePrivate *d = QFontDatabasePrivate::ensureFontDatabase();
QtFontFamily *f = d->family(familyName);
- if (!f) return bitmapScalable;
+ if (!f)
+ return false;
QtFontStyle::Key styleKey(style);
for (int j = 0; j < f->count; j++) {
@@ -1589,13 +1589,11 @@ bool QFontDatabase::isBitmapScalable(const QString &family,
foundry->styles[k]->styleName == style ||
foundry->styles[k]->key == styleKey)
&& foundry->styles[k]->bitmapScalable && !foundry->styles[k]->smoothScalable) {
- bitmapScalable = true;
- goto end;
+ return true;
}
}
}
- end:
- return bitmapScalable;
+ return false;
}
@@ -1609,7 +1607,6 @@ bool QFontDatabase::isBitmapScalable(const QString &family,
*/
bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style)
{
- bool smoothScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1626,7 +1623,8 @@ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &sty
}
}
}
- if (!f) return smoothScalable;
+ if (!f)
+ return false;
const QtFontStyle::Key styleKey(style);
for (int j = 0; j < f->count; j++) {
@@ -1634,7 +1632,7 @@ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &sty
if (foundryName.isEmpty() || foundry->name.compare(foundryName, Qt::CaseInsensitive) == 0) {
for (int k = 0; k < foundry->count; k++) {
const QtFontStyle *fontStyle = foundry->styles[k];
- smoothScalable =
+ const bool smoothScalable =
fontStyle->smoothScalable
&& ((style.isEmpty()
|| fontStyle->styleName == style
@@ -1643,12 +1641,11 @@ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &sty
&& style == styleStringHelper(fontStyle->key.weight,
QFont::Style(fontStyle->key.style))));
if (smoothScalable)
- goto end;
+ return true;
}
}
}
- end:
- return smoothScalable;
+ return false;
}
/*!
@@ -1679,7 +1676,6 @@ QList<int> QFontDatabase::pointSizes(const QString &family,
if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable())
return standardSizes();
- bool smoothScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1701,10 +1697,9 @@ QList<int> QFontDatabase::pointSizes(const QString &family,
QtFontStyle *style = foundry->style(styleKey, styleName);
if (!style) continue;
- if (style->smoothScalable) {
- smoothScalable = true;
- goto end;
- }
+ if (style->smoothScalable)
+ return standardSizes();
+
for (int l = 0; l < style->count; l++) {
const QtFontSize *size = style->pixelSizes + l;
@@ -1716,9 +1711,6 @@ QList<int> QFontDatabase::pointSizes(const QString &family,
}
}
}
- end:
- if (smoothScalable)
- return standardSizes();
std::sort(sizes.begin(), sizes.end());
return sizes;
@@ -1781,7 +1773,6 @@ QList<int> QFontDatabase::smoothSizes(const QString &family,
if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable())
return standardSizes();
- bool smoothScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1803,10 +1794,9 @@ QList<int> QFontDatabase::smoothSizes(const QString &family,
QtFontStyle *style = foundry->style(styleKey, styleName);
if (!style) continue;
- if (style->smoothScalable) {
- smoothScalable = true;
- goto end;
- }
+ if (style->smoothScalable)
+ return QFontDatabase::standardSizes();
+
for (int l = 0; l < style->count; l++) {
const QtFontSize *size = style->pixelSizes + l;
@@ -1818,9 +1808,6 @@ QList<int> QFontDatabase::smoothSizes(const QString &family,
}
}
}
- end:
- if (smoothScalable)
- return QFontDatabase::standardSizes();
std::sort(sizes.begin(), sizes.end());
return sizes;
diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp
index 06ae00123f0..379fb70a81a 100644
--- a/src/gui/text/qtextformat.cpp
+++ b/src/gui/text/qtextformat.cpp
@@ -2245,6 +2245,17 @@ void QTextCharFormat::setFont(const QFont &font, FontPropertiesInheritanceBehavi
/*!
Returns the font for this character format.
+
+ This function takes into account the format's font attributes (such as fontWeight()
+ and fontPointSize()) and resolves them on top of the default font, defined as follows.
+ If the format is part of a document, that is the document's default font.
+ Otherwise the properties are resolved on top of a default constructed QFont.
+
+ For example, if this format's font size hasn't been changed from the default font,
+ fontPointSize() returns 0, while \c {font().pointSize()} returns the actual
+ size used for drawing.
+
+ \sa QTextDocument::defaultFont()
*/
QFont QTextCharFormat::font() const
{
diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_p.h b/src/platformsupport/devicediscovery/qdevicediscovery_p.h
index 59ce3cd8896..61b0c705898 100644
--- a/src/platformsupport/devicediscovery/qdevicediscovery_p.h
+++ b/src/platformsupport/devicediscovery/qdevicediscovery_p.h
@@ -58,6 +58,7 @@ public:
signals:
void deviceDetected(const QString &deviceNode);
void deviceRemoved(const QString &deviceNode);
+ void deviceChanged(const QString &deviceNode);
protected:
QDeviceDiscovery(QDeviceTypes types, QObject *parent) : QObject(parent), m_types(types) { }
diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp
index edb3fc58a22..e4d69101f75 100644
--- a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp
+++ b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp
@@ -175,6 +175,9 @@ void QDeviceDiscoveryUDev::handleUDevNotification()
if (qstrcmp(action, "remove") == 0)
emit deviceRemoved(devNode);
+ if (qstrcmp(action, "change") == 0)
+ emit deviceChanged(devNode);
+
cleanup:
udev_device_unref(dev);
}
diff --git a/src/platformsupport/kmsconvenience/qkmsdevice.cpp b/src/platformsupport/kmsconvenience/qkmsdevice.cpp
index cdd2ac2d572..7b2637bfffe 100644
--- a/src/platformsupport/kmsconvenience/qkmsdevice.cpp
+++ b/src/platformsupport/kmsconvenience/qkmsdevice.cpp
@@ -151,17 +151,45 @@ static inline void assignPlane(QKmsOutput *output, QKmsPlane *plane)
output->eglfs_plane = plane;
}
-QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
- drmModeConnectorPtr connector,
- ScreenInfo *vinfo)
+static bool orderedScreenLessThan(const QKmsDevice::OrderedScreen &a,
+ const QKmsDevice::OrderedScreen &b)
+{
+ return a.vinfo.virtualIndex < b.vinfo.virtualIndex;
+}
+
+QKmsDevice::OrderedScreen::OrderedScreen() : screen(nullptr) { }
+
+QKmsDevice::OrderedScreen::OrderedScreen(QPlatformScreen *screen,
+ const QKmsDevice::ScreenInfo &vinfo)
+ : screen(screen), vinfo(vinfo)
+{
+}
+
+QDebug operator<<(QDebug dbg, const QPlatformScreen *screen)
+{
+ QDebugStateSaver saver(dbg);
+ dbg.nospace() << "QPlatformScreen=" << (const void *)screen << " ("
+ << (screen ? screen->name() : QString()) << ")";
+ return dbg;
+}
+
+QDebug operator<<(QDebug dbg, const QKmsDevice::OrderedScreen &s)
+{
+ QDebugStateSaver saver(dbg);
+ dbg.nospace() << "OrderedScreen(" << s.screen << ") : " << s.vinfo.virtualIndex << " / "
+ << s.vinfo.virtualPos << " / primary: " << s.vinfo.isPrimary << ")";
+ return dbg;
+}
+
+bool QKmsDevice::createScreenInfoForConnector(drmModeResPtr resources,
+ drmModeConnectorPtr connector, ScreenInfo &vinfo)
{
- Q_ASSERT(vinfo);
const QByteArray connectorName = nameForConnector(connector);
const int crtc = crtcForConnector(resources, connector);
if (crtc < 0) {
qWarning() << "No usable crtc/encoder pair for connector" << connectorName;
- return nullptr;
+ return false;
}
OutputConfiguration configuration;
@@ -195,45 +223,54 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
configuration = OutputConfigPreferred;
}
- *vinfo = ScreenInfo();
- vinfo->virtualIndex = userConnectorConfig.value(QStringLiteral("virtualIndex"), INT_MAX).toInt();
+ vinfo.virtualIndex = userConnectorConfig.value(QStringLiteral("virtualIndex"), INT_MAX).toInt();
if (userConnectorConfig.contains(QStringLiteral("virtualPos"))) {
const QByteArray vpos = userConnectorConfig.value(QStringLiteral("virtualPos")).toByteArray();
const QByteArrayList vposComp = vpos.split(',');
- if (vposComp.size() == 2)
- vinfo->virtualPos = QPoint(vposComp[0].trimmed().toInt(), vposComp[1].trimmed().toInt());
+ if (vposComp.count() == 2) {
+ vinfo.virtualPos = QPoint(vposComp[0].trimmed().toInt(), vposComp[1].trimmed().toInt());
+ qCDebug(qLcKmsDebug) << "Parsing virtualPos to: " << vinfo.virtualPos;
+ } else {
+ vinfo.virtualPos = QPoint(-1, -1);
+ qCDebug(qLcKmsDebug) << "Could not parse virtualPos,"
+ << "will be calculated based on virtualIndex";
+ }
+ } else {
+ vinfo.virtualPos = QPoint(-1, -1);
}
+
if (userConnectorConfig.value(QStringLiteral("primary")).toBool())
- vinfo->isPrimary = true;
+ vinfo.isPrimary = true;
const uint32_t crtc_id = resources->crtcs[crtc];
if (configuration == OutputConfigOff) {
qCDebug(qLcKmsDebug) << "Turning off output" << connectorName;
drmModeSetCrtc(m_dri_fd, crtc_id, 0, 0, 0, 0, 0, nullptr);
- return nullptr;
+ return false;
}
// Skip disconnected output
if (configuration == OutputConfigPreferred && connector->connection == DRM_MODE_DISCONNECTED) {
qCDebug(qLcKmsDebug) << "Skipping disconnected output" << connectorName;
- return nullptr;
+ return false;
}
if (configuration == OutputConfigSkip) {
qCDebug(qLcKmsDebug) << "Skipping output" << connectorName;
- return nullptr;
+ return false;
}
// Get the current mode on the current crtc
drmModeModeInfo crtc_mode;
memset(&crtc_mode, 0, sizeof crtc_mode);
if (drmModeEncoderPtr encoder = drmModeGetEncoder(m_dri_fd, connector->encoder_id)) {
+
drmModeCrtcPtr crtc = drmModeGetCrtc(m_dri_fd, encoder->crtc_id);
drmModeFreeEncoder(encoder);
if (!crtc)
- return nullptr;
+ return false;
if (crtc->mode_valid)
crtc_mode = crtc->mode;
@@ -303,7 +340,7 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
if (selected_mode < 0) {
qWarning() << "No modes available for output" << connectorName;
- return nullptr;
+ return false;
} else {
int width = modes[selected_mode].hdisplay;
int height = modes[selected_mode].vdisplay;
@@ -504,9 +541,8 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
m_crtc_allocator |= (1 << output.crtc_index);
- vinfo->output = output;
-
- return createScreen(output);
+ vinfo.output = output;
+ return true;
}
drmModePropertyPtr QKmsDevice::connectorProperty(drmModeConnectorPtr connector, const QByteArray &name)
@@ -566,29 +602,233 @@ QKmsDevice::~QKmsDevice()
#endif
}
-struct OrderedScreen
+void QKmsDevice::checkConnectedScreens()
{
- OrderedScreen() : screen(nullptr) { }
- OrderedScreen(QPlatformScreen *screen, const QKmsDevice::ScreenInfo &vinfo)
- : screen(screen), vinfo(vinfo) { }
- QPlatformScreen *screen;
- QKmsDevice::ScreenInfo vinfo;
-};
+ if (m_screenConfig->headless())
+ return;
-QDebug operator<<(QDebug dbg, const OrderedScreen &s)
-{
- QDebugStateSaver saver(dbg);
- dbg.nospace() << "OrderedScreen(QPlatformScreen=" << s.screen << " (" << s.screen->name() << ") : "
- << s.vinfo.virtualIndex
- << " / " << s.vinfo.virtualPos
- << " / primary: " << s.vinfo.isPrimary
- << ")";
- return dbg;
+ drmModeResPtr resources = drmModeGetResources(m_dri_fd);
+ if (!resources) {
+ qErrnoWarning(errno, "drmModeGetResources failed");
+ return;
+ }
+
+ QList<uint32_t> newConnects;
+ QList<uint32_t> newDisconnects;
+ const QMap<QString, QVariantMap> userConfig = m_screenConfig->outputSettings();
+
+ for (int i = 0; i < resources->count_connectors; i++) {
+ drmModeConnectorPtr connector = drmModeGetConnector(m_dri_fd, resources->connectors[i]);
+ if (!connector) {
+ qErrnoWarning(errno, "drmModeGetConnector failed");
+ continue;
+ }
+
+ const uint32_t id = connector->connector_id;
+
+ const QByteArray connectorName = nameForConnector(connector);
+ const QVariantMap userCConfig = userConfig.value(QString::fromUtf8(connectorName));
+ const QByteArray mode = userCConfig.value(QStringLiteral("mode")).toByteArray().toLower();
+ if (mode == "off" || mode == "skip")
+ continue;
+
+ if (connector->connection == DRM_MODE_CONNECTED) {
+ if (!m_registeredScreens.contains(id))
+ newConnects.append(id);
+ else
+ qCDebug(qLcKmsDebug) << "Connected screen already registered: connector id=" << id;
+ }
+
+ if (connector->connection == DRM_MODE_DISCONNECTED) {
+ if (m_registeredScreens.contains(id))
+ newDisconnects.append(id);
+ else
+ qCDebug(qLcKmsDebug) << "Disconnected screen not registered: connector id=" << id;
+ }
+
+ drmModeFreeConnector(connector);
+ }
+
+ if (newConnects.isEmpty() && newDisconnects.isEmpty()) {
+ qCDebug(qLcKmsDebug) << "EGLFS/KMS: KMS-device-change but no new connects or disconnects "
+ << "to process - exiting";
+ return;
+ } else {
+ qCDebug(qLcKmsDebug) << "EGLFS/KMS: KMS-device-change, new connects:" << newConnects
+ << ", and disconnected: " << newDisconnects;
+ }
+
+ const int remainingScreenCount = m_registeredScreens.count() - newDisconnects.count();
+ if (remainingScreenCount == 0 && m_headlessScreen == nullptr) {
+ qCDebug(qLcKmsDebug) << "EGLFS/KMS: creating headless screen before"
+ << "unregistering screens to avoid having no screens";
+ m_headlessScreen = createHeadlessScreen();
+ registerScreen(m_headlessScreen, true, QPoint(),
+ QList<QPlatformScreen *>() << m_headlessScreen);
+ }
+
+ for (uint32_t connectorId : newDisconnects) {
+ OrderedScreen orderedScreen = m_registeredScreens.take(connectorId);
+ QPlatformScreen *screen = orderedScreen.screen;
+
+ // Clear active crtc of the plane associated with the screen output
+ // and, if applicable, disassociate it from the eglfs plane.
+ uint32_t crtcId = (orderedScreen.vinfo.output.eglfs_plane != nullptr) // if we have an assigned plan
+ ? orderedScreen.vinfo.output.eglfs_plane->activeCrtcId // we use the active crtc_id to disable everything
+ : orderedScreen.vinfo.output.crtc_id; // if not, we use the default crtc_id
+
+ if (orderedScreen.vinfo.output.eglfs_plane != nullptr)
+ orderedScreen.vinfo.output.eglfs_plane->activeCrtcId = 0;
+
+ // Clear crtc allocator bit for screen
+ const int crtcIdx = orderedScreen.vinfo.output.crtc_index;
+ m_crtc_allocator &= ~(1 << crtcIdx);
+
+ const int ret = drmModeSetCrtc(m_dri_fd, crtcId, 0, 0, 0, nullptr, 0, nullptr);
+
+ if (ret != 0) {
+ qCWarning(qLcKmsDebug) << "Could not disable CRTC" << crtcId
+ << "on connector" << connectorId << "removal:" << ret;
+ } else {
+ qCDebug(qLcKmsDebug) << "Disabled CRTC" << crtcId
+ << "for connector " << connectorId << "disconnected";
+ }
+
+ // As we've already turned the crtc off, we don't want to restore the saved_crtc
+ if (orderedScreen.vinfo.output.saved_crtc) {
+ drmModeFreeCrtc(orderedScreen.vinfo.output.saved_crtc);
+ orderedScreen.vinfo.output.saved_crtc = nullptr;
+ updateScreenOutput(orderedScreen.screen, orderedScreen.vinfo.output);
+ }
+
+ unregisterScreen(screen);
+ }
+
+ for (uint32_t connectorId : newConnects) {
+ drmModeConnectorPtr connector = drmModeGetConnector(m_dri_fd, connectorId);
+ if (!connector) {
+ qErrnoWarning(errno, "drmModeGetConnector failed");
+ continue;
+ }
+
+ ScreenInfo vinfo;
+ bool succ = createScreenInfoForConnector(resources, connector, vinfo);
+ drmModeFreeConnector(connector);
+ if (!succ)
+ continue;
+
+ QPlatformScreen *screen = createScreen(vinfo.output);
+ if (!screen)
+ continue;
+
+ OrderedScreen orderedScreen(screen, vinfo);
+ m_registeredScreens[connectorId] = orderedScreen;
+ }
+
+ drmModeFreeResources(resources);
+
+ registerScreens(newConnects);
}
-static bool orderedScreenLessThan(const OrderedScreen &a, const OrderedScreen &b)
+void QKmsDevice::updateScreens()
{
- return a.vinfo.virtualIndex < b.vinfo.virtualIndex;
+ if (m_screenConfig->headless())
+ return;
+
+ drmModeResPtr resources = drmModeGetResources(m_dri_fd);
+ if (!resources) {
+ qErrnoWarning(errno, "drmModeGetResources failed");
+ return;
+ }
+
+ QList<uint32_t> newConnects;
+ QList<OrderedScreen> newDisconnects;
+
+ for (int i = 0; i < resources->count_connectors; i++) {
+ drmModeConnectorPtr connector = drmModeGetConnector(m_dri_fd, resources->connectors[i]);
+ if (!connector)
+ continue;
+
+ if (m_registeredScreens.contains(connector->connector_id)) {
+ OrderedScreen &os = m_registeredScreens[connector->connector_id];
+
+ // As we're currently *re*creating the information of an used connector,
+ // we have to "fake" it being not in use at two places:
+ // (note: the only thing we'll restore is, in case of failure, the eglfs_plane
+ // probably not necessary but good practice)
+
+ // 1) crtc_allocator for the crtc
+ const int crtcIdx = os.vinfo.output.crtc_index;
+ m_crtc_allocator &= ~(1 << crtcIdx);
+
+ // 2) the plane itself
+ if (os.vinfo.output.eglfs_plane)
+ os.vinfo.output.eglfs_plane->activeCrtcId = 0;
+
+ // We also save the saved crtc to restore it in case of success
+ // (otherwise QKmsOutput::restoreMode would restore to a second-latest crtc,
+ // rather then the original one)
+ drmModeCrtcPtr saved_saved_crtc = nullptr;
+ if (os.vinfo.output.saved_crtc)
+ saved_saved_crtc = os.vinfo.output.saved_crtc;
+
+ ScreenInfo vinfo;
+ bool succ = createScreenInfoForConnector(resources, connector, vinfo);
+ if (!succ) {
+ // Here we either failed the recreate, or the config turns the screen off.
+ // In either case, we'll treat it as a disconnect
+
+ // Either this connector is disconnected, broken or turned off
+ // In all those cases we don't need or want to restore the previous mode
+ if (os.vinfo.output.saved_crtc) {
+ drmModeFreeCrtc(os.vinfo.output.saved_crtc);
+ os.vinfo.output.saved_crtc = nullptr;
+ updateScreenOutput(os.screen, os.vinfo.output);
+ }
+
+ // move from one container to another - we don't want registerScreens
+ // to deal with this, but need to call registerScreens before the disconnects
+ newDisconnects.append(m_registeredScreens.take(connector->connector_id));
+ drmModeFreeConnector(connector);
+ continue;
+ }
+ drmModeFreeConnector(connector);
+
+ drmModeFreeCrtc(vinfo.output.saved_crtc);
+ vinfo.output.saved_crtc = saved_saved_crtc; // This is vital as config changes should
+ // never override the original saved_crtc
+ os.vinfo = vinfo;
+ updateScreenOutput(os.screen, os.vinfo.output);
+
+ } else {
+ ScreenInfo vinfo;
+ bool succ = createScreenInfoForConnector(resources, connector, vinfo);
+ if (!succ) // If we fail here we do nothing, as there is nothing to restore or cleanup
+ continue;
+
+ QPlatformScreen *screen = createScreen(vinfo.output);
+ OrderedScreen orderedScreen(screen, vinfo);
+ m_registeredScreens[connector->connector_id] = orderedScreen;
+ newConnects.append(connector->connector_id);
+ }
+ }
+
+ // In case we end up with zero screen, we do the fallback first
+ if (m_registeredScreens.count() == 0 && m_headlessScreen == nullptr) {
+ // Create headless screen before unregistering screens to avoid having no screens
+ m_headlessScreen = createHeadlessScreen();
+ registerScreen(m_headlessScreen, true, QPoint(),
+ QList<QPlatformScreen *>() << m_headlessScreen);
+ }
+
+ // Register new and updates existing screens
+ registerScreens(newConnects);
+
+ // Last we unregister the disconncted ones
+ for (const OrderedScreen &os : newDisconnects)
+ unregisterScreen(os.screen);
+
+ drmModeFreeResources(resources);
}
void QKmsDevice::createScreens()
@@ -599,7 +839,8 @@ void QKmsDevice::createScreens()
QPlatformScreen *screen = createHeadlessScreen();
if (screen) {
qCDebug(qLcKmsDebug, "Headless mode enabled");
- registerScreen(screen, true, QPoint(0, 0), QList<QPlatformScreen *>());
+ registerScreen(screen, true, QPoint(0, 0),
+ QList<QPlatformScreen *>() << screen);
return;
} else {
qWarning("QKmsDevice: Requested headless mode without support in the backend. Request is ignored.");
@@ -630,8 +871,7 @@ void QKmsDevice::createScreens()
discoverPlanes();
- QList<OrderedScreen> screens;
-
+ QList<uint32_t> newConnects;
int wantedConnectorIndex = -1;
bool ok;
int idx = qEnvironmentVariableIntValue("QT_QPA_EGLFS_KMS_CONNECTOR_INDEX", &ok);
@@ -647,19 +887,47 @@ void QKmsDevice::createScreens()
continue;
drmModeConnectorPtr connector = drmModeGetConnector(m_dri_fd, resources->connectors[i]);
- if (!connector)
+ if (!connector) {
+ qErrnoWarning(errno, "drmModeGetConnector failed");
continue;
+ }
ScreenInfo vinfo;
- QPlatformScreen *screen = createScreenForConnector(resources, connector, &vinfo);
- if (screen)
- screens.append(OrderedScreen(screen, vinfo));
-
+ bool succ = createScreenInfoForConnector(resources, connector, vinfo);
+ uint32_t connectorId = connector->connector_id;
drmModeFreeConnector(connector);
+ if (!succ)
+ continue;
+
+ QPlatformScreen *screen = createScreen(vinfo.output);
+ if (!screen)
+ continue;
+
+ OrderedScreen orderedScreen(screen, vinfo);
+ m_registeredScreens[connectorId] = orderedScreen;
+ newConnects.append(connectorId);
}
drmModeFreeResources(resources);
+ if (!qEnvironmentVariable("QT_QPA_EGLFS_HOTPLUG_ENABLED").isEmpty()
+ && newConnects.empty() && m_headlessScreen == nullptr) {
+ qCDebug(qLcKmsDebug) << "'QT_QPA_EGLFS_HOTPLUG_ENABLED' was set and no screen was connected/found during start-up."
+ << "In order for Qt to operate properly a qt_headless screen will be created."
+ << "It will be automatically removed as soon as the first screen is connected";
+ // Create headless screen before unregistering screens to avoid having no screens
+ m_headlessScreen = createHeadlessScreen();
+ registerScreen(m_headlessScreen, true, QPoint(),
+ QList<QPlatformScreen *>() << m_headlessScreen);
+ }
+
+ registerScreens(newConnects);
+}
+
+void QKmsDevice::registerScreens(QList<uint32_t> newConnects)
+{
+ QList<OrderedScreen> screens = m_registeredScreens.values();
+
// Use stable sort to preserve the original (DRM connector) order
// for outputs with unspecified indices.
std::stable_sort(screens.begin(), screens.end(), orderedScreenLessThan);
@@ -692,44 +960,129 @@ void QKmsDevice::createScreens()
// Figure out the virtual desktop and register the screens to QPA/QGuiApplication.
QPoint pos(0, 0);
- QList<QPlatformScreen *> siblings;
+ QList<OrderedScreen> siblings;
QList<QPoint> virtualPositions;
int primarySiblingIdx = -1;
+ QRegion deskRegion;
for (const OrderedScreen &orderedScreen : screens) {
QPlatformScreen *s = orderedScreen.screen;
QPoint virtualPos(0, 0);
// set up a horizontal or vertical virtual desktop
- if (orderedScreen.vinfo.virtualPos.isNull()) {
- virtualPos = pos;
- if (m_screenConfig->virtualDesktopLayout() == QKmsScreenConfig::VirtualDesktopLayoutVertical)
- pos.ry() += s->geometry().height();
- else
- pos.rx() += s->geometry().width();
+ if (orderedScreen.vinfo.virtualPos.x() == -1 || orderedScreen.vinfo.virtualPos.y() == -1) {
+ if (orderedScreen.vinfo.output.clone_source.isEmpty()) {
+ virtualPos = pos;
+ if (m_screenConfig->virtualDesktopLayout() == QKmsScreenConfig::VirtualDesktopLayoutVertical)
+ pos.ry() += s->geometry().height();
+ else
+ pos.rx() += s->geometry().width();
+ } else {
+ for (int i = 0; i < screens.count(); i++) {
+ const OrderedScreen &os = screens[i];
+ if (os.vinfo.output.name == orderedScreen.vinfo.output.clone_source) {
+ if (i >= virtualPositions.count()) {
+ qCWarning(qLcKmsDebug)
+ << "WARNING: When using clone on kms config,"
+ << "you have to either order your screens (virtualIndex),"
+ << "so clones come after their source,"
+ << "or specify 'virtualPos' for each clone."
+ << "Otherwise desktop-geomerty might not work properly!";
+ virtualPos = pos;
+ } else {
+ virtualPos = virtualPositions[i];
+ }
+ break;
+ }
+ }
+ }
} else {
virtualPos = orderedScreen.vinfo.virtualPos;
}
- qCDebug(qLcKmsDebug) << "Adding QPlatformScreen" << s << "(" << s->name() << ")"
- << "to QPA with geometry" << s->geometry()
- << "and isPrimary=" << orderedScreen.vinfo.isPrimary;
+
// The order in qguiapp's screens list will match the order set by
// virtualIndex. This is not only handy but also required since for instance
// evdevtouch relies on it when performing touch device - screen mapping.
if (!m_screenConfig->separateScreens()) {
- qCDebug(qLcKmsDebug) << " virtual position is" << virtualPos;
- siblings.append(s);
+ siblings.append(orderedScreen);
virtualPositions.append(virtualPos);
if (orderedScreen.vinfo.isPrimary)
primarySiblingIdx = siblings.size() - 1;
} else {
- registerScreen(s, orderedScreen.vinfo.isPrimary, virtualPos, QList<QPlatformScreen *>() << s);
+ const bool isNewScreen = newConnects.contains(orderedScreen.vinfo.output.connector_id);
+ if (isNewScreen) {
+ qCDebug(qLcKmsDebug) << "Adding QPlatformScreen" << s << "(" << s->name() << ")"
+ << "to QPA with geometry" << s->geometry()
+ << ", virtual position" << virtualPos
+ << "and isPrimary=" << orderedScreen.vinfo.isPrimary;
+ registerScreen(s, orderedScreen.vinfo.isPrimary, virtualPos,
+ QList<QPlatformScreen *>() << s);
+ deskRegion += s->geometry();
+ } else {
+ qCDebug(qLcKmsDebug) << "Updating QPlatformScreen" << s << "(" << s->name() << ")"
+ << "to QPA with geometry" << s->geometry()
+ << ", virtual position" << virtualPos
+ << "and isPrimary=" << orderedScreen.vinfo.isPrimary;
+ updateScreen(s, virtualPos, QList<QPlatformScreen *>() << s);
+ deskRegion += s->geometry();
+ }
}
}
if (!m_screenConfig->separateScreens()) {
+ QList<QPlatformScreen *> platformScreenSiblings;
+ for (int i = 0; i < siblings.count(); ++i) {
+ platformScreenSiblings.append(siblings[i].screen);
+ }
+
// enable the virtual desktop
- for (int i = 0; i < siblings.size(); ++i)
- registerScreen(siblings[i], i == primarySiblingIdx, virtualPositions[i], siblings);
+ for (int i = 0; i < siblings.count(); ++i) {
+ QPlatformScreen *screen = platformScreenSiblings[i];
+ const OrderedScreen &orderedScreen = siblings[i];
+ const bool isNewScreen = newConnects.contains(orderedScreen.vinfo.output.connector_id);
+ if (isNewScreen) {
+ qCDebug(qLcKmsDebug) << "Adding QPlatformScreen" << screen
+ << "(" << screen->name() << ")"
+ << "to QPA with geometry" << screen->geometry()
+ << ", virtual position" << virtualPositions[i]
+ << "and isPrimary=" << orderedScreen.vinfo.isPrimary;
+ registerScreen(screen, i == primarySiblingIdx, virtualPositions[i],
+ platformScreenSiblings);
+ deskRegion += screen->geometry();
+ } else {
+ qCDebug(qLcKmsDebug) << "Updating QPlatformScreen" << screen
+ << "(" << screen->name() << ")"
+ << "to QPA with geometry" << screen->geometry()
+ << ", virtual position" << virtualPositions[i]
+ << "and isPrimary=" << orderedScreen.vinfo.isPrimary;
+ updateScreen(screen, virtualPositions[i], platformScreenSiblings);
+ deskRegion += screen->geometry();
+ }
+ }
+ }
+
+ // Remove headless screen if other screens have become available
+ if (!m_registeredScreens.empty() && m_headlessScreen) {
+ unregisterScreen(m_headlessScreen);
+ m_headlessScreen = nullptr;
+ }
+
+ // Due to layout changes it's possible that we have to reset/bound
+ // the cursor into the available space (otherwise the cursor might vanish)
+ QPoint currCPos = QCursor::pos();
+ if (!deskRegion.contains(currCPos)) {
+
+ // We try boudingRect first
+ QRect deskRect = deskRegion.boundingRect();
+ currCPos.setX(qMin(currCPos.x(), deskRect.width()) - 1);
+ currCPos.setY(qMin(currCPos.y(), deskRect.height()) - 1);
+
+ // If boudingRect isn't good enough, we go to 0
+ if (!deskRegion.contains(currCPos))
+ currCPos = QPoint(0,0);
+
+ qCDebug(qLcKmsDebug) << "Due to desktop layout change, overriding cursor pos."
+ << "Is: " << QCursor::pos() << ", will be: " << currCPos;
+ QCursor::setPos(currCPos);
}
}
@@ -749,6 +1102,25 @@ void QKmsDevice::registerScreenCloning(QPlatformScreen *screen,
Q_UNUSED(screensCloningThisScreen);
}
+void QKmsDevice::unregisterScreen(QPlatformScreen *screen)
+{
+ Q_UNUSED(screen);
+}
+
+void QKmsDevice::updateScreen(QPlatformScreen *screen, const QPoint &virtualPos,
+ const QList<QPlatformScreen *> &virtualSiblings)
+{
+ Q_UNUSED(screen);
+ Q_UNUSED(virtualPos);
+ Q_UNUSED(virtualSiblings);
+}
+
+void QKmsDevice::updateScreenOutput(QPlatformScreen *screen, const QKmsOutput &output)
+{
+ Q_UNUSED(screen);
+ Q_UNUSED(output);
+}
+
// drm_property_type_is is not available in old headers
static inline bool propTypeIs(drmModePropertyPtr prop, uint32_t type)
{
@@ -1002,6 +1374,12 @@ QKmsScreenConfig::QKmsScreenConfig()
{
}
+void QKmsScreenConfig::refreshConfig()
+{
+ m_outputSettings.clear();
+ loadConfig();
+}
+
void QKmsScreenConfig::loadConfig()
{
QByteArray json = qgetenv("QT_QPA_EGLFS_KMS_CONFIG");
@@ -1039,6 +1417,11 @@ void QKmsScreenConfig::loadConfig()
m_headless = false;
}
+ const QString headlessSizeStr = object.value(QLatin1String("headlessSize")).toString();
+ if (sscanf(headlessSizeStr.toUtf8().constData(), "%dx%d", &headlessSize.rwidth(),
+ &headlessSize.rheight()) == 2)
+ m_headlessSize = headlessSize;
+
m_hwCursor = object.value("hwcursor"_L1).toBool(m_hwCursor);
m_pbuffers = object.value("pbuffers"_L1).toBool(m_pbuffers);
m_devicePath = object.value("device"_L1).toString();
diff --git a/src/platformsupport/kmsconvenience/qkmsdevice_p.h b/src/platformsupport/kmsconvenience/qkmsdevice_p.h
index 050d836cb18..3e6ec108175 100644
--- a/src/platformsupport/kmsconvenience/qkmsdevice_p.h
+++ b/src/platformsupport/kmsconvenience/qkmsdevice_p.h
@@ -88,11 +88,12 @@ public:
QMap<QString, QVariantMap> outputSettings() const { return m_outputSettings; }
virtual void loadConfig();
+ void refreshConfig();
protected:
QString m_devicePath;
bool m_headless;
- QSize m_headlessSize;
+ QSize m_headlessSize{ 1024, 768 };
bool m_hwCursor;
bool m_separateScreens;
bool m_pbuffers;
@@ -196,6 +197,14 @@ public:
QKmsOutput output;
};
+ struct OrderedScreen
+ {
+ OrderedScreen();
+ OrderedScreen(QPlatformScreen *screen, const ScreenInfo &vinfo);
+ QPlatformScreen *screen = nullptr;
+ ScreenInfo vinfo;
+ };
+
QKmsDevice(QKmsScreenConfig *screenConfig, const QString &path = QString());
virtual ~QKmsDevice();
@@ -210,6 +219,8 @@ public:
bool threadLocalAtomicCommit(void *user_data);
void threadLocalAtomicReset();
#endif
+ void checkConnectedScreens();
+ void updateScreens();
void createScreens();
int fd() const;
@@ -218,6 +229,7 @@ public:
QKmsScreenConfig *screenConfig() const;
protected:
+ void registerScreens(QList<uint32_t> newConnects = QList<uint32_t>());
virtual QPlatformScreen *createScreen(const QKmsOutput &output) = 0;
virtual QPlatformScreen *createHeadlessScreen();
virtual void registerScreenCloning(QPlatformScreen *screen,
@@ -227,12 +239,15 @@ protected:
bool isPrimary,
const QPoint &virtualPos,
const QList<QPlatformScreen *> &virtualSiblings) = 0;
+ virtual void unregisterScreen(QPlatformScreen *screen);
+ virtual void updateScreen(QPlatformScreen *screen, const QPoint &virtualPos,
+ const QList<QPlatformScreen *> &virtualSiblings);
+ virtual void updateScreenOutput(QPlatformScreen *screen, const QKmsOutput &output);
void setFd(int fd);
int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector);
- QPlatformScreen *createScreenForConnector(drmModeResPtr resources,
- drmModeConnectorPtr connector,
- ScreenInfo *vinfo);
+ bool createScreenInfoForConnector(drmModeResPtr resources, drmModeConnectorPtr connector,
+ ScreenInfo &vinfo);
drmModePropertyPtr connectorProperty(drmModeConnectorPtr connector, const QByteArray &name);
drmModePropertyBlobPtr connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name);
typedef std::function<void(drmModePropertyPtr, quint64)> PropCallback;
@@ -257,6 +272,8 @@ protected:
quint32 m_crtc_allocator;
QList<QKmsPlane> m_planes;
+ QMap<uint32_t, OrderedScreen> m_registeredScreens;
+ QPlatformScreen *m_headlessScreen = nullptr;
private:
Q_DISABLE_COPY(QKmsDevice)
diff --git a/src/plugins/platforms/android/CMakeLists.txt b/src/plugins/platforms/android/CMakeLists.txt
index 0160e12c26c..0d2a048abde 100644
--- a/src/plugins/platforms/android/CMakeLists.txt
+++ b/src/plugins/platforms/android/CMakeLists.txt
@@ -51,7 +51,12 @@ qt_internal_add_plugin(QAndroidIntegrationPlugin
qandroidplatformdialoghelpers.cpp
# Conflicting JNI classes, and types
androidcontentfileengine.cpp
+ qandroidplatformforeignwindow.cpp
qandroidplatformintegration.cpp
+ qandroidplatformscreen.cpp
+ qandroidplatformservices.cpp
+ qandroidplatformwindow.cpp
+ qandroidsystemlocale.cpp
INCLUDE_DIRECTORIES
${CMAKE_CURRENT_SOURCE_DIR}
${QtBase_SOURCE_DIR}/src/3rdparty/android
diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp
index 200c2f7a47b..b3ff0a4f06e 100644
--- a/src/plugins/platforms/android/androidjniaccessibility.cpp
+++ b/src/plugins/platforms/android/androidjniaccessibility.cpp
@@ -28,6 +28,7 @@ using namespace Qt::StringLiterals;
namespace QtAndroidAccessibility
{
+ static jmethodID m_setClassNameMethodID = 0;
static jmethodID m_addActionMethodID = 0;
static jmethodID m_setCheckableMethodID = 0;
static jmethodID m_setCheckedMethodID = 0;
@@ -421,6 +422,130 @@ namespace QtAndroidAccessibility
return jstr;
}
+ static QString classNameForRole(QAccessible::Role role, QAccessible::State state) {
+ switch (role) {
+ case QAccessible::Role::Button:
+ case QAccessible::Role::Link:
+ {
+ if (state.checkable)
+ // There is also a android.widget.Switch for which we have no match.
+ return QStringLiteral("android.widget.ToggleButton");
+ return QStringLiteral("android.widget.Button");
+ }
+ case QAccessible::Role::CheckBox:
+ // As of android/accessibility/utils/Role.java::getRole a CheckBox
+ // is NOT android.widget.CheckBox
+ return QStringLiteral("android.widget.CompoundButton");
+ case QAccessible::Role::Clock:
+ return QStringLiteral("android.widget.TextClock");
+ case QAccessible::Role::ComboBox:
+ return QStringLiteral("android.widget.Spinner");
+ case QAccessible::Role::Graphic:
+ // QQuickImage does not provide this role it inherits Client from QQuickItem
+ return QStringLiteral("android.widget.ImageView");
+ case QAccessible::Role::Grouping:
+ return QStringLiteral("android.view.ViewGroup");
+ case QAccessible::Role::List:
+ // As of android/accessibility/utils/Role.java::getRole a List
+ // is NOT android.widget.ListView
+ return QStringLiteral("android.widget.AbsListView");
+ case QAccessible::Role::MenuItem:
+ return QStringLiteral("android.view.MenuItem");
+ case QAccessible::Role::PopupMenu:
+ return QStringLiteral("android.widget.PopupMenu");
+ case QAccessible::Role::Separator:
+ return QStringLiteral("android.widget.Space");
+ case QAccessible::Role::ToolBar:
+ return QStringLiteral("android.view.Toolbar");
+ case QAccessible::Role::Heading: [[fallthrough]];
+ case QAccessible::Role::StaticText:
+ // Heading vs. regular Text is finally determined by AccessibilityNodeInfo.isHeading()
+ return QStringLiteral("android.widget.TextView");
+ case QAccessible::Role::EditableText:
+ return QStringLiteral("android.widget.EditText");
+ case QAccessible::Role::RadioButton:
+ return QStringLiteral("android.widget.RadioButton");
+ case QAccessible::Role::ProgressBar:
+ return QStringLiteral("android.widget.ProgressBar");
+ // Range information need to be filled to announce percentages
+ case QAccessible::Role::SpinBox:
+ return QStringLiteral("android.widget.NumberPicker");
+ case QAccessible::Role::WebDocument:
+ return QStringLiteral("android.webkit.WebView");
+ case QAccessible::Role::Dialog:
+ return QStringLiteral("android.app.AlertDialog");
+ case QAccessible::Role::PageTab:
+ return QStringLiteral("android.app.ActionBar.Tab");
+ case QAccessible::Role::PageTabList:
+ return QStringLiteral("android.widget.TabWidget");
+ case QAccessible::Role::ScrollBar: [[fallthrough]];
+ case QAccessible::Role::Slider:
+ return QStringLiteral("android.widget.SeekBar");
+ case QAccessible::Role::Table:
+ // #TODO Evaluate the usage of AccessibleNodeInfo.setCollectionItemInfo() to provide
+ // infos about colums, rows und items.
+ return QStringLiteral("android.widget.GridView");
+ case QAccessible::Role::Pane:
+ // #TODO QQuickScrollView, QQuickListView (see QTBUG-137806)
+ return QStringLiteral("android.view.ViewGroup");
+ case QAccessible::Role::AlertMessage:
+ case QAccessible::Role::Animation:
+ case QAccessible::Role::Application:
+ case QAccessible::Role::Assistant:
+ case QAccessible::Role::BlockQuote:
+ case QAccessible::Role::Border:
+ case QAccessible::Role::ButtonDropGrid:
+ case QAccessible::Role::ButtonDropDown:
+ case QAccessible::Role::ButtonMenu:
+ case QAccessible::Role::Canvas:
+ case QAccessible::Role::Caret:
+ case QAccessible::Role::Cell:
+ case QAccessible::Role::Chart:
+ case QAccessible::Role::Client:
+ case QAccessible::Role::ColorChooser:
+ case QAccessible::Role::Column:
+ case QAccessible::Role::ColumnHeader:
+ case QAccessible::Role::ComplementaryContent:
+ case QAccessible::Role::Cursor:
+ case QAccessible::Role::Desktop:
+ case QAccessible::Role::Dial:
+ case QAccessible::Role::Document:
+ case QAccessible::Role::Equation:
+ case QAccessible::Role::Footer:
+ case QAccessible::Role::Form:
+ case QAccessible::Role::Grip:
+ case QAccessible::Role::HelpBalloon:
+ case QAccessible::Role::HotkeyField:
+ case QAccessible::Role::Indicator:
+ case QAccessible::Role::LayeredPane:
+ case QAccessible::Role::ListItem:
+ case QAccessible::Role::MenuBar:
+ case QAccessible::Role::NoRole:
+ case QAccessible::Role::Note:
+ case QAccessible::Role::Notification:
+ case QAccessible::Role::Paragraph:
+ case QAccessible::Role::PropertyPage:
+ case QAccessible::Role::Row:
+ case QAccessible::Role::RowHeader:
+ case QAccessible::Role::Section:
+ case QAccessible::Role::Sound:
+ case QAccessible::Role::Splitter:
+ case QAccessible::Role::StatusBar:
+ case QAccessible::Role::Terminal:
+ case QAccessible::Role::TitleBar:
+ case QAccessible::Role::ToolTip:
+ case QAccessible::Role::Tree:
+ case QAccessible::Role::TreeItem:
+ case QAccessible::Role::UserRole:
+ case QAccessible::Role::Whitespace:
+ case QAccessible::Role::Window:
+ // If unsure, every visible or interactive element in Android
+ // inherits android.view.View and by many extends also TextView.
+ // Android itself does a similar thing e.g. in its Settings-App.
+ return QStringLiteral("android.view.TextView");
+ }
+ }
+
static QString descriptionForInterface(QAccessibleInterface *iface)
{
QString desc;
@@ -513,6 +638,10 @@ namespace QtAndroidAccessibility
return false;
}
+ const QString role = classNameForRole(info.role, info.state);
+ jstring jrole = env->NewString((jchar*)role.constData(), (jsize)role.size());
+ env->CallVoidMethod(node, m_setClassNameMethodID, jrole);
+
const bool hasClickableAction =
info.actions.contains(QAccessibleActionInterface::pressAction()) ||
info.actions.contains(QAccessibleActionInterface::toggleAction());
@@ -590,6 +719,7 @@ namespace QtAndroidAccessibility
}
jclass nodeInfoClass = env->FindClass("android/view/accessibility/AccessibilityNodeInfo");
+ GET_AND_CHECK_STATIC_METHOD(m_setClassNameMethodID, nodeInfoClass, "setClassName", "(Ljava/lang/CharSequence;)V");
GET_AND_CHECK_STATIC_METHOD(m_addActionMethodID, nodeInfoClass, "addAction", "(I)V");
GET_AND_CHECK_STATIC_METHOD(m_setCheckableMethodID, nodeInfoClass, "setCheckable", "(Z)V");
GET_AND_CHECK_STATIC_METHOD(m_setCheckedMethodID, nodeInfoClass, "setChecked", "(Z)V");
diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp
index 9c10c1a998c..0b9db8039f1 100644
--- a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp
@@ -79,8 +79,10 @@ void QEglFSContext::swapBuffers(QPlatformSurface *surface)
// draw the cursor
if (surface->surface()->surfaceClass() == QSurface::Window) {
QPlatformWindow *window = static_cast<QPlatformWindow *>(surface);
- if (QEglFSCursor *cursor = qobject_cast<QEglFSCursor *>(window->screen()->cursor()))
- cursor->paintOnScreen();
+ if (QPlatformScreen *screen = window->screen()) {
+ if (QEglFSCursor *cursor = qobject_cast<QEglFSCursor *>(screen->cursor()))
+ cursor->paintOnScreen();
+ }
}
qt_egl_device_integration()->waitForVSync(surface);
diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
index 4abe948117e..2f278a474e0 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
@@ -154,6 +154,7 @@ QPlatformBackingStore *QEglFSIntegration::createPlatformBackingStore(QWindow *wi
if (!window->handle())
window->create();
static_cast<QEglFSWindow *>(window->handle())->setBackingStore(bs);
+ m_bs = bs;
return bs;
#else
Q_UNUSED(window);
@@ -175,6 +176,9 @@ QPlatformWindow *QEglFSIntegration::createPlatformWindow(QWindow *window) const
if (window->type() != Qt::ToolTip && window->screen() == QGuiApplication::primaryScreen())
w->requestActivateWindow();
+ if (window->isTopLevel())
+ w->setBackingStore(static_cast<QOpenGLCompositorBackingStore *>(m_bs));
+
return w;
}
diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h b/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h
index 2359b7f29f1..3865b7130b7 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h
+++ b/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h
@@ -112,6 +112,7 @@ private:
QScopedPointer<QFbVtHandler> m_vtHandler;
QPointer<QWindow> m_pointerWindow;
bool m_disableInputHandlers;
+ mutable QPlatformBackingStore *m_bs = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor_p.h
index a0f78bb3103..cca9097e2f0 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor_p.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor_p.h
@@ -62,6 +62,8 @@ public:
void reevaluateVisibilityForScreens() { setPos(pos()); }
+ QEglFSKmsGbmScreen *screen() const { return m_screen; }
+
private:
void initCursorAtlas();
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp
index a7592ed55e4..9f19e649f85 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp
@@ -113,13 +113,27 @@ QPlatformScreen *QEglFSKmsGbmDevice::createScreen(const QKmsOutput &output)
{
QEglFSKmsGbmScreen *screen = new QEglFSKmsGbmScreen(this, output, false);
- createGlobalCursor(screen);
+
+ // On some platforms (e.g. rpi4), you'll get a kernel warning/error
+ // if the cursor is created 'at the same time' as the screen is created.
+ // (drmModeMoveCursor is the specific call that causes the issue)
+ // When this issue is triggered, the screen's connector is unusable until reboot
+ //
+ // Below is a work-around (without negative implications for other platforms).
+ //
+ // interval of 0 and QMetaObject::invokeMethod (w/o Qt::QueuedConnection)
+ // do no help / will still trigger issue
+ QTimer::singleShot(1, [screen, this](){
+ createGlobalCursor(screen);
+ });
return screen;
}
QPlatformScreen *QEglFSKmsGbmDevice::createHeadlessScreen()
{
+ destroyGlobalCursor();
+
return new QEglFSKmsGbmScreen(this, QKmsOutput(), true);
}
@@ -127,9 +141,6 @@ void QEglFSKmsGbmDevice::registerScreenCloning(QPlatformScreen *screen,
QPlatformScreen *screenThisScreenClones,
const QList<QPlatformScreen *> &screensCloningThisScreen)
{
- if (!screenThisScreenClones && screensCloningThisScreen.isEmpty())
- return;
-
QEglFSKmsGbmScreen *gbmScreen = static_cast<QEglFSKmsGbmScreen *>(screen);
gbmScreen->initCloning(screenThisScreenClones, screensCloningThisScreen);
}
@@ -144,6 +155,32 @@ void QEglFSKmsGbmDevice::registerScreen(QPlatformScreen *screen,
m_globalCursor->reevaluateVisibilityForScreens();
}
+void QEglFSKmsGbmDevice::unregisterScreen(QPlatformScreen *screen)
+{
+ // The global cursor holds a pointer to a QEglFSKmsGbmScreen.
+ // If that screen is being unregistered,
+ // this will recreate the global cursor with the first sibling screen.
+ if (m_globalCursor && screen == m_globalCursor->screen()) {
+ qCDebug(qLcEglfsKmsDebug) << "Destroying global GBM mouse cursor due to unregistering"
+ << "it's screen - will probably be recreated right away";
+ delete m_globalCursor;
+ m_globalCursor = nullptr;
+
+ QList<QPlatformScreen *> siblings = screen->virtualSiblings();
+ siblings.removeOne(screen);
+ if (siblings.count() > 0) {
+ QEglFSKmsGbmScreen *kmsScreen = static_cast<QEglFSKmsGbmScreen *>(siblings.first());
+ m_globalCursor = new QEglFSKmsGbmCursor(kmsScreen);
+ qCDebug(qLcEglfsKmsDebug) << "Creating new global GBM mouse cursor on sibling screen";
+ } else {
+ qCWarning(qLcEglfsKmsDebug) << "Couldn't find a sibling to recreate"
+ << "the GBM mouse cursor - it might vanish";
+ }
+ }
+
+ QEglFSKmsDevice::unregisterScreen(screen);
+}
+
bool QEglFSKmsGbmDevice::usesEventReader() const
{
static const bool eventReaderThreadDisabled = qEnvironmentVariableIntValue("QT_QPA_EGLFS_KMS_NO_EVENT_READER_THREAD");
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice_p.h
index e00992ed291..0ffed0ec4ef 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice_p.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice_p.h
@@ -51,6 +51,7 @@ public:
bool isPrimary,
const QPoint &virtualPos,
const QList<QPlatformScreen *> &virtualSiblings) override;
+ void unregisterScreen(QPlatformScreen *screen) override;
bool usesEventReader() const;
QEglFSKmsEventReader *eventReader() { return &m_eventReader; }
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
index 05ffb3b212e..eb61de3c534 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
@@ -11,6 +11,7 @@
#include "private/qeglfscursor_p.h"
#include <QtCore/QLoggingCategory>
+#include <QtCore/QFileSystemWatcher>
#include <QtGui/QScreen>
#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
@@ -23,6 +24,10 @@ QEglFSKmsGbmIntegration::QEglFSKmsGbmIntegration()
qCDebug(qLcEglfsKmsDebug, "New DRM/KMS via GBM integration created");
}
+QEglFSKmsGbmIntegration::~QEglFSKmsGbmIntegration()
+{
+}
+
#ifndef EGL_EXT_platform_base
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
#endif
@@ -94,14 +99,16 @@ void QEglFSKmsGbmIntegration::presentBuffer(QPlatformSurface *surface)
QKmsDevice *QEglFSKmsGbmIntegration::createDevice()
{
+
+ m_deviceDiscovery = std::unique_ptr<QDeviceDiscovery>(QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask));
+ m_kmsConfigWatcher = std::unique_ptr<QFileSystemWatcher>(new QFileSystemWatcher());
+
QString path = screenConfig()->devicePath();
if (!path.isEmpty()) {
qCDebug(qLcEglfsKmsDebug) << "GBM: Using DRM device" << path << "specified in config file";
} else {
- QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask);
- const QStringList devices = d->scanConnectedDevices();
+ const QStringList devices = m_deviceDiscovery->scanConnectedDevices();
qCDebug(qLcEglfsKmsDebug) << "Found the following video devices:" << devices;
- d->deleteLater();
if (Q_UNLIKELY(devices.isEmpty()))
qFatal("Could not find DRM device!");
@@ -110,6 +117,35 @@ QKmsDevice *QEglFSKmsGbmIntegration::createDevice()
qCDebug(qLcEglfsKmsDebug) << "Using" << path;
}
+ bool hotreload = !qEnvironmentVariable("QT_QPA_EGLFS_HOTPLUG_ENABLED").isEmpty();
+ if (hotreload) {
+ qCWarning(qLcEglfsKmsDebug) << "EGLFS/KMS: Hot-Reload on KMS-events enabled, be aware that"
+ << "this requires actions in UI code for proper functionallity"
+ << "(e.g. close/open windows on screen's disconnect/connect)";
+ QObject::connect(m_deviceDiscovery.get(), &QDeviceDiscovery::deviceChanged,
+ m_deviceDiscovery.get(), [this](const QString &deviceNode) {
+ qCDebug(qLcEglfsKmsDebug) << "KMS device changed:" << deviceNode;
+ m_device->checkConnectedScreens();
+ });
+ }
+
+ QString json = qEnvironmentVariable("QT_QPA_EGLFS_KMS_CONFIG");
+ if (json.isEmpty())
+ json = qEnvironmentVariable("QT_QPA_KMS_CONFIG");
+
+ if (!json.isEmpty()) {
+ m_kmsConfigWatcher->addPath(json);
+ QObject::connect(m_kmsConfigWatcher.get(), &QFileSystemWatcher::fileChanged,
+ m_kmsConfigWatcher.get(), [this, json]() {
+ qCDebug(qLcEglfsKmsDebug) << "KMS config-file has changed! path:"
+ << json;
+ m_screenConfig->refreshConfig();
+ m_device->updateScreens();
+ m_kmsConfigWatcher->addPath(json); // as per QFileSystemWatcher doc we have to re-add
+ // the path in case it's a new file
+ });
+ }
+
return new QEglFSKmsGbmDevice(screenConfig(), path);
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration_p.h
index fb118438d25..7c2c2a474d7 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration_p.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration_p.h
@@ -24,11 +24,14 @@
QT_BEGIN_NAMESPACE
class QEglFSKmsDevice;
+class QDeviceDiscovery;
+class QFileSystemWatcher;
class Q_EGLFS_EXPORT QEglFSKmsGbmIntegration : public QEglFSKmsIntegration
{
public:
QEglFSKmsGbmIntegration();
+ ~QEglFSKmsGbmIntegration() override;
EGLDisplay createDisplay(EGLNativeDisplayType nativeDisplay) override;
EGLNativeWindowType createNativeOffscreenWindow(const QSurfaceFormat &format) override;
@@ -42,6 +45,8 @@ protected:
QKmsDevice *createDevice() override;
private:
+ std::unique_ptr<QDeviceDiscovery> m_deviceDiscovery;
+ std::unique_ptr<QFileSystemWatcher> m_kmsConfigWatcher;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
index 00fecb87f1f..332030f03f2 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
@@ -20,7 +20,7 @@
QT_BEGIN_NAMESPACE
-QMutex QEglFSKmsGbmScreen::m_nonThreadedFlipMutex;
+QMutex QEglFSKmsGbmScreen::s_nonThreadedFlipMutex;
static inline uint32_t drmFormatToGbmFormat(uint32_t drmFormat)
{
@@ -92,9 +92,26 @@ QEglFSKmsGbmScreen::QEglFSKmsGbmScreen(QEglFSKmsDevice *device, const QKmsOutput
QEglFSKmsGbmScreen::~QEglFSKmsGbmScreen()
{
const int remainingScreenCount = qGuiApp->screens().count();
- qCDebug(qLcEglfsKmsDebug, "Screen dtor. Remaining screens: %d", remainingScreenCount);
+ qCDebug(qLcEglfsKmsDebug, "Screen dtor. %p Remaining screens: %d", this, remainingScreenCount);
if (!remainingScreenCount && !device()->screenConfig()->separateScreens())
static_cast<QEglFSKmsGbmDevice *>(device())->destroyGlobalCursor();
+
+ if (m_cloneSource) {
+ // Remove this screen from the screen that has it as a clone destination
+ QList<CloneDestination> &dests = m_cloneSource->m_cloneDests;
+ auto newEnd = std::remove_if(dests.begin(), dests.end(),
+ [this](CloneDestination &dest) {
+ return dest.screen == this;
+ });
+ dests.erase(newEnd, dests.end());
+ }
+
+ // Other screens can no longer have this screen as a clone source
+ for (CloneDestination &dest : m_cloneDests) {
+ dest.screen->m_cloneSource = nullptr;
+ // Mode must be set again before flipping
+ dest.screen->m_output.mode_set = false;
+ }
}
QPlatformCursor *QEglFSKmsGbmScreen::cursor() const
@@ -206,9 +223,12 @@ void QEglFSKmsGbmScreen::initCloning(QPlatformScreen *screenThisScreenClones,
if (clonesAnother) {
m_cloneSource = static_cast<QEglFSKmsGbmScreen *>(screenThisScreenClones);
qCDebug(qLcEglfsKmsDebug, "Screen %s clones %s", qPrintable(name()), qPrintable(m_cloneSource->name()));
+ } else {
+ m_cloneSource = nullptr;
}
// clone sources need to know their additional destinations
+ m_cloneDests.clear();
for (QPlatformScreen *s : screensCloningThisScreen) {
CloneDestination d;
d.screen = static_cast<QEglFSKmsGbmScreen *>(s);
@@ -271,8 +291,11 @@ void QEglFSKmsGbmScreen::nonThreadedPageFlipHandler(int fd,
// note that with cloning involved this callback is called also for screens that clone another one
Q_UNUSED(fd);
QEglFSKmsGbmScreen *screen = static_cast<QEglFSKmsGbmScreen *>(user_data);
- screen->flipFinished();
- screen->pageFlipped(sequence, tv_sec, tv_usec);
+ // The screen might have been deleted when DRM calls this handler
+ if (QEglFSKmsScreen::isScreenKnown(screen)) {
+ screen->flipFinished();
+ screen->pageFlipped(sequence, tv_sec, tv_usec);
+ }
}
void QEglFSKmsGbmScreen::waitForFlipWithEventReader(QEglFSKmsGbmScreen *screen)
@@ -280,7 +303,21 @@ void QEglFSKmsGbmScreen::waitForFlipWithEventReader(QEglFSKmsGbmScreen *screen)
m_flipMutex.lock();
QEglFSKmsGbmDevice *dev = static_cast<QEglFSKmsGbmDevice *>(device());
dev->eventReader()->startWaitFlip(screen, &m_flipMutex, &m_flipCond);
- m_flipCond.wait(&m_flipMutex);
+
+ // We should only wait forever on this screen, clones should have a timeout
+ // (e.g. I clone might have been created just before the flip,
+ // we might wait for it but it might not know about waking us up)
+ bool succ = false;
+ if (screen == this)
+ succ = m_flipCond.wait(&m_flipMutex);
+ else
+ succ = m_flipCond.wait(&m_flipMutex, 300);
+
+ if (!succ)
+ qCWarning(qLcEglfsKmsDebug) << "timeout on waitForFlipWithEventReader, screen to wait for:"
+ << screen << ", screen waiting (shouldn't be the same screen):"
+ << this;
+
m_flipMutex.unlock();
screen->flipFinished();
}
@@ -306,7 +343,7 @@ void QEglFSKmsGbmScreen::waitForFlip()
waitForFlipWithEventReader(d.screen);
}
} else {
- QMutexLocker lock(&m_nonThreadedFlipMutex);
+ QMutexLocker lock(&s_nonThreadedFlipMutex);
while (m_gbm_bo_next) {
drmEventContext drmEvent;
memset(&drmEvent, 0, sizeof(drmEvent));
@@ -359,15 +396,10 @@ static void addAtomicFlip(drmModeAtomicReq *request, const QKmsOutput &output, u
void QEglFSKmsGbmScreen::flip()
{
- // For headless screen just return silently. It is not necessarily an error
+ // For headless or cloned screen just return silently. It is not necessarily an error
// to end up here, so show no warnings.
- if (m_headless)
- return;
-
- if (m_cloneSource) {
- qWarning("Screen %s clones another screen. swapBuffers() not allowed.", qPrintable(name()));
+ if (m_headless || m_cloneSource)
return;
- }
if (!m_gbm_surface) {
qWarning("Cannot sync before platform init!");
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen_p.h
index aca34fcae21..65625a3c1cd 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen_p.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen_p.h
@@ -67,7 +67,7 @@ protected:
QMutex m_flipMutex;
QWaitCondition m_flipCond;
- static QMutex m_nonThreadedFlipMutex;
+ static QMutex s_nonThreadedFlipMutex;
QScopedPointer<QEglFSKmsGbmCursor> m_cursor;
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
index ece19f46a49..ff4921c2b15 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
@@ -213,9 +213,13 @@ QEglFSWindow *QEglFSKmsEglDeviceIntegration::createWindow(QWindow *window) const
QEglFSKmsEglDeviceWindow *eglWindow = new QEglFSKmsEglDeviceWindow(window, this);
m_funcs->initialize(eglWindow->screen()->display());
- if (Q_UNLIKELY(!(m_funcs->has_egl_output_base && m_funcs->has_egl_output_drm && m_funcs->has_egl_stream &&
- m_funcs->has_egl_stream_producer_eglsurface && m_funcs->has_egl_stream_consumer_egloutput)))
+ if (Q_UNLIKELY(!(m_funcs->has_egl_output_base && m_funcs->has_egl_output_drm
+ && m_funcs->has_egl_stream && m_funcs->has_egl_stream_producer_eglsurface
+ && m_funcs->has_egl_stream_consumer_egloutput))) {
+ qCDebug(qLcEglfsKmsDebug, "EGL_EXTENSIONS %s",
+ eglQueryString(eglWindow->screen()->display(), EGL_EXTENSIONS));
qFatal("Required extensions missing!");
+ }
return eglWindow;
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
index 5af45e63a2f..5775ac3607a 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
@@ -71,7 +71,7 @@ QEglFSKmsEglDeviceScreen::~QEglFSKmsEglDeviceScreen()
}
const int remainingScreenCount = qGuiApp->screens().size();
- qCDebug(qLcEglfsKmsDebug, "Screen dtor. Remaining screens: %d", remainingScreenCount);
+ qCDebug(qLcEglfsKmsDebug, "Screen dtor. %p Remaining screens: %d", this, remainingScreenCount);
if (!remainingScreenCount && !device()->screenConfig()->separateScreens())
static_cast<QEglFSKmsEglDevice *>(device())->destroyGlobalCursor();
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp
index 037b26f023e..59ca53355d6 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp
@@ -25,4 +25,39 @@ void QEglFSKmsDevice::registerScreen(QPlatformScreen *screen,
QWindowSystemInterface::handleScreenAdded(s, isPrimary);
}
+void QEglFSKmsDevice::unregisterScreen(QPlatformScreen *screen)
+{
+ QEglFSKmsScreen *s = static_cast<QEglFSKmsScreen *>(screen);
+ for (QPlatformScreen *sibling : s->virtualSiblings())
+ static_cast<QEglFSKmsScreen *>(sibling)->removeSibling(s);
+
+ QWindowSystemInterface::handleScreenRemoved(screen);
+}
+
+void QEglFSKmsDevice::updateScreen(QPlatformScreen *screen, const QPoint &virtualPos,
+ const QList<QPlatformScreen *> &virtualSiblings)
+{
+ QEglFSKmsScreen *s = static_cast<QEglFSKmsScreen *>(screen);
+ QRect before = s->geometry();
+ s->setVirtualPosition(virtualPos);
+ s->setVirtualSiblings(virtualSiblings);
+ QRect after = s->geometry();
+
+ if (before != after)
+ QWindowSystemInterface::handleScreenGeometryChange(s->screen(), after,
+ s->availableGeometry());
+}
+
+void QEglFSKmsDevice::updateScreenOutput(QPlatformScreen *screen, const QKmsOutput &output)
+{
+ QEglFSKmsScreen *s = static_cast<QEglFSKmsScreen *>(screen);
+ QRect before = s->geometry();
+ s->updateOutput(output);
+ QRect after = s->geometry();
+
+ if (before != after)
+ QWindowSystemInterface::handleScreenGeometryChange(s->screen(), after,
+ s->availableGeometry());
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice_p.h
index 6e11953a699..49b82d8baad 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice_p.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice_p.h
@@ -30,6 +30,13 @@ public:
bool isPrimary,
const QPoint &virtualPos,
const QList<QPlatformScreen *> &virtualSiblings) override;
+
+ void unregisterScreen(QPlatformScreen *screen) override;
+
+ void updateScreen(QPlatformScreen *screen, const QPoint &virtualPos,
+ const QList<QPlatformScreen *> &virtualSiblings) override;
+
+ void updateScreenOutput(QPlatformScreen *screen, const QKmsOutput &output) override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp
index c0c96554962..fa735388bc0 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp
@@ -20,7 +20,10 @@ static void pageFlipHandler(int fd, unsigned int sequence, unsigned int tv_sec,
t->eventHost()->handlePageFlipCompleted(user_data);
QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(user_data);
- screen->pageFlipped(sequence, tv_sec, tv_usec);
+ if (QEglFSKmsScreen::isScreenKnown(screen))
+ screen->pageFlipped(sequence, tv_sec, tv_usec);
+ else
+ qWarning("Deleted screen got it's pageFlipHandler called; Dead pointer: %p", user_data);
}
class RegisterWaitFlipEvent : public QEvent
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
index cc7381fb701..a40287bdfed 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
@@ -16,6 +16,8 @@
QT_BEGIN_NAMESPACE
+QSet<QEglFSKmsScreen *> QEglFSKmsScreen::s_screens;
+
class QEglFSKmsInterruptHandler : public QObject
{
public:
@@ -59,10 +61,14 @@ QEglFSKmsScreen::QEglFSKmsScreen(QEglFSKmsDevice *device, const QKmsOutput &outp
} else {
qCDebug(qLcEglfsKmsDebug) << "No EDID data for output" << name();
}
+
+ s_screens.insert(this);
}
QEglFSKmsScreen::~QEglFSKmsScreen()
{
+ s_screens.remove(this);
+
m_output.cleanup(m_device);
delete m_interruptHandler;
}
@@ -166,6 +172,11 @@ void QEglFSKmsScreen::waitForFlip()
{
}
+void QEglFSKmsScreen::updateOutput(QKmsOutput output)
+{
+ m_output = output;
+}
+
void QEglFSKmsScreen::restoreMode()
{
m_output.restoreMode(m_device);
@@ -180,6 +191,11 @@ qreal QEglFSKmsScreen::refreshRate() const
return refresh > 0 ? refresh : 60;
}
+void QEglFSKmsScreen::removeSibling(QPlatformScreen *screen)
+{
+ m_siblings.removeAll(screen);
+}
+
QList<QPlatformScreen::Mode> QEglFSKmsScreen::modes() const
{
QList<QPlatformScreen::Mode> list;
@@ -227,4 +243,9 @@ void QEglFSKmsScreen::pageFlipped(unsigned int sequence, unsigned int tv_sec, un
Q_UNUSED(tv_usec);
}
+bool QEglFSKmsScreen::isScreenKnown(QEglFSKmsScreen *s)
+{
+ return s_screens.contains(s);
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h
index 6fb1f9a1348..2dc49152a97 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h
@@ -58,6 +58,7 @@ public:
QList<QPlatformScreen *> virtualSiblings() const override { return m_siblings; }
void setVirtualSiblings(QList<QPlatformScreen *> sl) { m_siblings = sl; }
+ void removeSibling(QPlatformScreen *screen);
QList<QPlatformScreen::Mode> modes() const override;
@@ -68,6 +69,7 @@ public:
virtual void waitForFlip();
+ void updateOutput(QKmsOutput output);
QKmsOutput &output() { return m_output; }
void restoreMode();
@@ -80,6 +82,8 @@ public:
void setCursorOutOfRange(bool b) { m_cursorOutOfRange = b; }
virtual void pageFlipped(unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec);
+ static bool isScreenKnown(QEglFSKmsScreen *s);
+
protected:
QEglFSKmsDevice *m_device;
@@ -95,6 +99,8 @@ protected:
QEglFSKmsInterruptHandler *m_interruptHandler;
bool m_headless;
+
+ static QSet<QEglFSKmsScreen *> s_screens;
};
QT_END_NAMESPACE
diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp
index 7179109505b..3f40dea5eb9 100644
--- a/src/plugins/styles/modernwindows/qwindows11style.cpp
+++ b/src/plugins/styles/modernwindows/qwindows11style.cpp
@@ -1662,7 +1662,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
}
case CE_ItemViewItem: {
if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option)) {
- if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget)) {
+ if (qobject_cast<const QAbstractItemView *>(widget)) {
QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget);
QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, widget);
QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget);
@@ -1764,10 +1764,10 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off;
vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state);
- if (!view || !view->isPersistentEditorOpen(vopt->index)) {
- painter->setPen(highlightCurrent && highContrastTheme ? vopt->palette.base().color() : option->palette.text().color());
- d->viewItemDrawText(painter, vopt, textRect);
- }
+ painter->setPen(highlightCurrent && highContrastTheme ? vopt->palette.base().color()
+ : vopt->palette.text().color());
+ d->viewItemDrawText(painter, vopt, textRect);
+
// paint a vertical marker for QListView
if (vopt->state & State_Selected) {
if (const QListView *lv = qobject_cast<const QListView *>(widget);
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index f4aa45be73e..53cc849e23c 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -1176,10 +1176,10 @@ class WatchDog : public QThread
public:
WatchDog()
+ : expecting{ThreadStart}
{
setObjectName("QtTest Watchdog"_L1);
auto locker = qt_unique_lock(mutex);
- expecting.store(ThreadStart, std::memory_order_relaxed);
start();
waitFor(locker, ThreadStart);
}
diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp
index f41242f357d..29cafe9aea4 100644
--- a/src/testlib/qtestlog.cpp
+++ b/src/testlib/qtestlog.cpp
@@ -77,14 +77,14 @@ namespace {
class LoggerRegistry
{
using LoggersContainer = std::vector<std::shared_ptr<QAbstractTestLogger>>;
- using SharedLoggersContainer = std::shared_ptr<LoggersContainer>;
+ using SharedLoggersContainer = std::shared_ptr<const LoggersContainer>;
public:
void addLogger(std::unique_ptr<QAbstractTestLogger> logger)
{
// read/update/clone
const SharedLoggersContainer currentLoggers = load();
- SharedLoggersContainer newLoggers = currentLoggers
+ auto newLoggers = currentLoggers
? std::make_shared<LoggersContainer>(*currentLoggers)
: std::make_shared<LoggersContainer>();
newLoggers->emplace_back(std::move(logger));
@@ -115,20 +115,20 @@ public:
private:
#ifdef __cpp_lib_atomic_shared_ptr
- SharedLoggersContainer load() const { return loggers.load(std::memory_order_relaxed); }
+ SharedLoggersContainer load() const { return loggers.load(std::memory_order_acquire); }
void store(SharedLoggersContainer newLoggers)
{
- loggers.store(std::move(newLoggers), std::memory_order_relaxed);
+ loggers.store(std::move(newLoggers), std::memory_order_release);
}
- std::atomic<SharedLoggersContainer> loggers;
+ std::atomic<SharedLoggersContainer> loggers = nullptr;
#else
SharedLoggersContainer load() const
{
- return std::atomic_load_explicit(&loggers, std::memory_order_relaxed);
+ return std::atomic_load_explicit(&loggers, std::memory_order_acquire);
}
void store(SharedLoggersContainer newLoggers)
{
- std::atomic_store_explicit(&loggers, std::move(newLoggers), std::memory_order_relaxed);
+ std::atomic_store_explicit(&loggers, std::move(newLoggers), std::memory_order_release);
}
SharedLoggersContainer loggers;
#endif
diff --git a/src/widgets/accessible/simplewidgets.cpp b/src/widgets/accessible/simplewidgets.cpp
index 39da1538376..190c7b624f6 100644
--- a/src/widgets/accessible/simplewidgets.cpp
+++ b/src/widgets/accessible/simplewidgets.cpp
@@ -289,19 +289,32 @@ QToolButton *QAccessibleToolButton::toolButton() const
bool QAccessibleToolButton::isSplitButton() const
{
#if QT_CONFIG(menu)
- return toolButton()->menu() && toolButton()->popupMode() == QToolButton::MenuButtonPopup;
+ return menu() && toolButton()->popupMode() == QToolButton::MenuButtonPopup;
#else
return false;
#endif
}
+#if QT_CONFIG(menu)
+QMenu *QAccessibleToolButton::menu() const
+{
+ if (QMenu *menu = toolButton()->menu())
+ return menu;
+
+ if (QAction *defaultAction = toolButton()->defaultAction())
+ return defaultAction->menu();
+
+ return nullptr;
+}
+#endif
+
QAccessible::State QAccessibleToolButton::state() const
{
QAccessible::State st = QAccessibleButton::state();
if (toolButton()->autoRaise())
st.hotTracked = true;
#if QT_CONFIG(menu)
- if (toolButton()->menu())
+ if (menu())
st.hasPopup = true;
#endif
return st;
@@ -315,9 +328,8 @@ int QAccessibleToolButton::childCount() const
QAccessible::Role QAccessibleToolButton::role() const
{
#if QT_CONFIG(menu)
- QAbstractButton *ab = button();
- QToolButton *tb = qobject_cast<QToolButton*>(ab);
- if (!tb->menu())
+ QToolButton *tb = toolButton();
+ if (!menu())
return tb->isCheckable() ? QAccessible::CheckBox : QAccessible::PushButton;
else if (tb->popupMode() == QToolButton::DelayedPopup)
return QAccessible::ButtonDropDown;
@@ -329,10 +341,8 @@ QAccessible::Role QAccessibleToolButton::role() const
QAccessibleInterface *QAccessibleToolButton::child(int index) const
{
#if QT_CONFIG(menu)
- if (index == 0 && toolButton()->menu())
- {
- return QAccessible::queryAccessibleInterface(toolButton()->menu());
- }
+ if (index == 0 && menu())
+ return QAccessible::queryAccessibleInterface(menu());
#else
Q_UNUSED(index);
#endif
diff --git a/src/widgets/accessible/simplewidgets_p.h b/src/widgets/accessible/simplewidgets_p.h
index 02c23f8cba7..356ef9101b2 100644
--- a/src/widgets/accessible/simplewidgets_p.h
+++ b/src/widgets/accessible/simplewidgets_p.h
@@ -27,6 +27,7 @@ class QAbstractButton;
class QLineEdit;
class QToolButton;
class QGroupBox;
+class QMenu;
class QMessageBox;
class QProgressBar;
@@ -71,6 +72,9 @@ protected:
QToolButton *toolButton() const;
bool isSplitButton() const;
+#if QT_CONFIG(menu)
+ QMenu *menu() const;
+#endif
};
#endif // QT_CONFIG(toolbutton)
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index ed6f6f6193b..a1a4cfc2ce0 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -147,7 +147,7 @@ QDebug operator<<(QDebug debug, const QDockAreaLayout &layout)
QDebug operator<<(QDebug debug, const QMainWindowLayout *layout)
{
if (layout)
- return debug << layout->layoutState.dockAreaLayout;
+ return std::move(debug) << layout->layoutState.dockAreaLayout;
return debug << "QMainWindowLayout(0x0)";
}
@@ -2673,8 +2673,10 @@ void QMainWindowLayout::animationFinished(QWidget *widget)
parentWidget()->update(layoutState.dockAreaLayout.separatorRegion());
#if QT_CONFIG(tabbar)
const auto usedTabBarsCopy = usedTabBars; // list potentially modified by animations
- for (QTabBar *tab_bar : usedTabBarsCopy)
- tab_bar->show();
+ for (QTabBar *tab_bar : usedTabBarsCopy) {
+ if (usedTabBars.contains(tab_bar)) // Showing a tab bar can cause another to be deleted.
+ tab_bar->show();
+ }
#endif // QT_CONFIG(tabbar)
#endif // QT_CONFIG(dockwidget)
}
diff --git a/src/widgets/widgets/qscrollbar.cpp b/src/widgets/widgets/qscrollbar.cpp
index 431faf9e24d..af7a2e011b8 100644
--- a/src/widgets/widgets/qscrollbar.cpp
+++ b/src/widgets/widgets/qscrollbar.cpp
@@ -382,7 +382,7 @@ QMenu *QScrollBar::createStandardContextMenu(QPoint position)
{
#if QT_CONFIG(menu)
const bool horiz = HORIZONTAL;
- QMenu *menu = new QMenu();
+ QMenu *menu = new QMenu(this);
menu->setObjectName("qt_scrollbar_menu"_L1);
if (window() && window()->windowHandle()) {
diff --git a/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp b/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp
index 5a49d9cf024..878fd173675 100644
--- a/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp
+++ b/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp
@@ -286,6 +286,7 @@ private slots:
void ranges();
void json();
void ownership();
+ void overrideRoleNames();
void dimensions_data() { createTestData(); }
void dimensions();
@@ -1008,6 +1009,45 @@ void tst_QRangeModel::ownership()
}
}
+void tst_QRangeModel::overrideRoleNames()
+{
+ // verify that an overridden roleNames() gets called consistently
+ class RoleModel : public QRangeModel
+ {
+ public:
+ RoleModel() : QRangeModel(QList<SingleColumn<Object *>>{
+ new Object,
+ new Object,
+ new Object,
+ }) {
+ }
+
+ QHash<int, QByteArray> roleNames() const override
+ {
+ return {
+ {Qt::UserRole, "string"},
+ {Qt::UserRole + 1, "number"}
+ };
+ }
+ };
+
+ RoleModel model;
+ const QList<int> expectedKeys = {Qt::UserRole, Qt::UserRole + 1};
+ QCOMPARE(model.roleNames().size(), expectedKeys.size());
+
+ const QModelIndex index = model.index(0, 0);
+ QVERIFY(model.setData(index, "string value", Qt::UserRole));
+ QVERIFY(model.setData(index, 42, Qt::UserRole + 1));
+ QVERIFY(!model.setData(index, "display"));
+
+ const auto itemData = model.itemData(index);
+ QCOMPARE(itemData.keys(), expectedKeys);
+ QCOMPARE(itemData.value(Qt::UserRole), "string value");
+ QCOMPARE(itemData.value(Qt::UserRole + 1), 42);
+
+ QVERIFY(model.setItemData(model.index(1, 0), itemData));
+}
+
void tst_QRangeModel::dimensions()
{
QFETCH(Factory, factory);
diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
index f8f978585a1..83ce49d93ba 100644
--- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
+++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
@@ -2395,6 +2395,9 @@ void tst_QMetaObject::normalizedType_data()
QTest::addColumn<QString>("type");
QTest::addColumn<QString>("result");
+ QTest::newRow("null") << QString() << QString();
+ QTest::newRow("empty") << "" << "";
+ QTest::newRow("all_whitespaces") << " " << "";
QTest::newRow("simple") << "int" << "int";
QTest::newRow("white") << " int " << "int";
QTest::newRow("const1") << "int const *" << "const int*";
@@ -2465,7 +2468,15 @@ void tst_QMetaObject::normalizedType()
QFETCH(QString, type);
QFETCH(QString, result);
- QCOMPARE(QMetaObject::normalizedType(type.toLatin1()), result.toLatin1());
+ QByteArray latin1Type = type.toLatin1();
+
+ const char *typePtr;
+ if (type.isNull())
+ typePtr = nullptr;
+ else
+ typePtr = latin1Type.constData();
+
+ QCOMPARE(QMetaObject::normalizedType(typePtr), result.toLatin1());
QCOMPARE(QMetaObject::normalizedType(result.toLatin1()), result.toLatin1());
}
diff --git a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
index f66bea72828..d53d0d1713d 100644
--- a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
+++ b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
@@ -16,6 +16,23 @@
using namespace std::chrono_literals;
+class Interface
+{
+public:
+ virtual ~Interface() = default;
+ virtual void meep() const = 0;
+};
+
+class ObjectImplementingInterface : public QObject, public Interface
+{
+ Q_OBJECT
+public:
+ using QObject::QObject;
+
+public Q_SLOTS:
+ void meep() const override {}
+};
+
class tst_QPointer : public QObject
{
Q_OBJECT
@@ -31,6 +48,7 @@ private slots:
void assignment_operators();
void compareCompiles();
void equality_operators();
+ void equality_operators_interface();
void swap();
void isNull();
void dereference_operators();
@@ -218,6 +236,7 @@ void tst_QPointer::compareCompiles()
QTestPrivate::testEqualityOperatorsCompile<QPointer<QObject>, QWidget*>();
QTestPrivate::testEqualityOperatorsCompile<QPointer<QObject>, QPointer<QWidget>>();
QTestPrivate::testEqualityOperatorsCompile<QPointer<QObject>, std::nullptr_t>();
+ QTestPrivate::testEqualityOperatorsCompile<QPointer<ObjectImplementingInterface>, Interface*>();
}
void tst_QPointer::equality_operators()
@@ -259,6 +278,25 @@ void tst_QPointer::equality_operators()
#endif
}
+void tst_QPointer::equality_operators_interface()
+{
+ QObject reaper;
+ QPointer<ObjectImplementingInterface> p(new ObjectImplementingInterface(&reaper));
+ Interface *i = p.get();
+
+ ObjectImplementingInterface otherP;
+ Interface *otherI = &otherP;
+
+ // things that are equal
+ QT_TEST_EQUALITY_OPS(p, p, true);
+ QT_TEST_EQUALITY_OPS(p, i, true);
+
+ // things that are not equal
+ QT_TEST_EQUALITY_OPS(p, nullptr, false);
+ QT_TEST_EQUALITY_OPS(p, &otherP, false);
+ QT_TEST_EQUALITY_OPS(p, otherI, false);
+}
+
void tst_QPointer::swap()
{
QPointer<QObject> c1, c2;
diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
index 35eda3ad709..3756937c94a 100644
--- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
@@ -445,14 +445,16 @@ void tst_QLocale::defaulted_ctor()
TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates);
TEST_CTOR(English, France, QLocale::English, QLocale::France);
TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
+ // Used in tests below to check we pick the likely-best substitute consistently:
+ TEST_CTOR(Arabic, UnitedStates, QLocale::Arabic, QLocale::Egypt);
TEST_CTOR(French, France, QLocale::French, QLocale::France);
TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
TEST_CTOR(Spanish, LatinAmerica, QLocale::Spanish,
QLocale::LatinAmerica);
- QLocale::setDefault(QLocale(QLocale::English, QLocale::France));
- CHECK_DEFAULT(QLocale::English, QLocale::France);
+ QLocale::setDefault(QLocale(QLocale::Arabic, QLocale::UnitedStates));
+ CHECK_DEFAULT(QLocale::Arabic, QLocale::Egypt);
TEST_CTOR(French, France, QLocale::French, QLocale::France);
TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
@@ -460,7 +462,7 @@ void tst_QLocale::defaulted_ctor()
TEST_CTOR(French, France, QLocale::French, QLocale::France);
TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
- TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::France);
+ TEST_CTOR(Aymara, AnyTerritory, QLocale::Arabic, QLocale::Egypt);
QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedKingdom));
CHECK_DEFAULT(QLocale::English, QLocale::UnitedKingdom);
@@ -481,6 +483,7 @@ void tst_QLocale::defaulted_ctor()
TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates);
TEST_CTOR(English, France, QLocale::English, QLocale::France);
TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
+ TEST_CTOR(Arabic, UnitedStates, QLocale::Arabic, QLocale::Egypt);
TEST_CTOR(French, France, QLocale::French, QLocale::France);
TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
@@ -496,6 +499,7 @@ void tst_QLocale::defaulted_ctor()
TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates);
TEST_CTOR(English, France, QLocale::English, QLocale::France);
TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
+ TEST_CTOR(Arabic, UnitedStates, QLocale::Arabic, QLocale::Egypt);
TEST_CTOR(French, France, QLocale::French, QLocale::France);
TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
index 5804aeeb1e5..87d48d56e6b 100644
--- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
+++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
@@ -73,22 +73,22 @@ void tst_QArrayData::referenceCounting()
// Reference counting initialized to 1 (owned)
QArrayData array = { Q_BASIC_ATOMIC_INITIALIZER(1), {}, 0 };
- QCOMPARE(array.ref_.loadRelaxed(), 1);
+ QCOMPARE(array.m_ref.loadRelaxed(), 1);
QVERIFY(array.ref());
- QCOMPARE(array.ref_.loadRelaxed(), 2);
+ QCOMPARE(array.m_ref.loadRelaxed(), 2);
QVERIFY(array.deref());
- QCOMPARE(array.ref_.loadRelaxed(), 1);
+ QCOMPARE(array.m_ref.loadRelaxed(), 1);
QVERIFY(array.ref());
- QCOMPARE(array.ref_.loadRelaxed(), 2);
+ QCOMPARE(array.m_ref.loadRelaxed(), 2);
QVERIFY(array.deref());
- QCOMPARE(array.ref_.loadRelaxed(), 1);
+ QCOMPARE(array.m_ref.loadRelaxed(), 1);
QVERIFY(!array.deref());
- QCOMPARE(array.ref_.loadRelaxed(), 0);
+ QCOMPARE(array.m_ref.loadRelaxed(), 0);
// Now would be a good time to free/release allocated data
}
diff --git a/tests/auto/testlib/selftests/CMakeLists.txt b/tests/auto/testlib/selftests/CMakeLists.txt
index bd2d42ec7cb..9d013e6f757 100644
--- a/tests/auto/testlib/selftests/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/CMakeLists.txt
@@ -51,7 +51,6 @@ qt_internal_apply_testlib_coverage_options(tst_selftests)
set(subprograms
assert
badxml
- benchlibcallgrind
benchlibcounting
benchlibeventcounter
benchliboptions
@@ -112,6 +111,14 @@ set(subprograms
watchdog
)
+if(NOT QT_FEATURE_sanitize_address)
+ list(APPEND subprograms
+ # valgrind and asan are incompatible:
+ # "ASan runtime does not come first in initial library list;"
+ benchlibcallgrind
+ )
+endif()
+
if(FEATURE_cxx20)
list(APPEND subprograms
threewaycompare
diff --git a/util/locale_database/cldr2qlocalexml.py b/util/locale_database/cldr2qlocalexml.py
index d4ba6960517..0aa04b64b05 100755
--- a/util/locale_database/cldr2qlocalexml.py
+++ b/util/locale_database/cldr2qlocalexml.py
@@ -83,7 +83,7 @@ def main(argv: list[str], out: TextIO, err: TextIO) -> int:
parser.error(f'Please use a .xml extension on your output file name, not {xml}')
else:
try:
- emit = open(xml, 'w')
+ emit = open(xml, 'w', encoding="utf-8")
except IOError as e:
parser.error(f'Failed to open "{xml}" to write output to it')
diff --git a/util/locale_database/localetools.py b/util/locale_database/localetools.py
index 10937df5485..818880d6efa 100644
--- a/util/locale_database/localetools.py
+++ b/util/locale_database/localetools.py
@@ -110,7 +110,7 @@ def AtomicRenameTemporaryFile(originalLocation: Path, *, prefix: str, dir: Path)
On success closes the temporary file and moves its content to the original
location. On error, removes temporary file, without disturbing the original.
"""
- tempFile = NamedTemporaryFile('w', prefix=prefix, dir=dir, delete=False)
+ tempFile = NamedTemporaryFile('w', prefix=prefix, dir=dir, delete=False, encoding='utf-8')
try:
yield tempFile
tempFile.close()
@@ -174,7 +174,7 @@ class Transcriber:
self.writer = resources.enter_context(
AtomicRenameTemporaryFile(self.path, prefix=self.path.name, dir=self.tempDir))
# Open the old file
- self.reader = resources.enter_context(open(self.path))
+ self.reader = resources.enter_context(open(self.path, encoding='utf-8'))
self.onEnter()